> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.latitude.xyz/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.latitude.xyz/_mcp/server.

# Create an Individual

POST https://api.latitude.xyz/v1/individuals
Content-Type: application/json

Creates a new individual with the provided details for Latitude products

Reference: https://docs.latitude.xyz/api-reference/individuals/post-v-1-individuals

## Request

### Body (application/json)

This endpoint expects a postV1Individuals.

- `given_name` (string, required) — The individual's given name (first name)
- `family_name` (string, required) — The individual's family name (last name)
- `country` (enum, required) — Country code (e.g., MX, US)
  - Allowed values: `AR`, `BR`, `CO`, `MX`, `US`, `IN`, `PH`, `SG`, `VN`, `AE`, `GB`, `AT`, `BE`, `BG`, `CY`, `DE`, `EE`, `ES`, `FI`, `FR`, `GR`, `HR`, `IE`, `IT`, `LT`, `LU`, `LV`, `MT`, `NL`, `PT`, `SI`, `SK`, `CZ`, `DK`, `HU`, `PL`, `RO`, `SE`, `CH`, `IS`, `LI`, `NO`
- `address` (PostV1IndividualsAddress, required) — Address information for the individual
- `product_types` (list of enum, required) — Product types to enroll the individual in (e.g., on_ramp, off_ramp)
  - Allowed values: `global_payouts`, `off_ramp`, `on_ramp`
- `financial_accounts` (list of PostV1IndividualsFinancialAccountsItems, required) — Financial accounts for the individual
- `email` (string, optional) — The individual's email address
- `phone` (string, optional) — The individual's phone number
- `document` (PostV1IndividualsDocument, optional) — Document information for identity verification
- `date_of_birth` (string, optional) — Date of birth (YYYY-MM-DD format)
- `idv_consent_recorded_at` (string, optional) — ISO8601 when IDV consent was recorded; required for on_ramp or off_ramp, except in countries verified with a verification token (e.g. AE)

## Response

### 201

Create an Individual

- `id` (string, required) — Unique public identifier for the individual
- `given_name` (string, required) — Individual's given name
- `family_name` (string, required) — Individual's family name
- `email` (string, required) — Individual's email address
- `phone` (string, required) — Individual's phone number
- `date_of_birth` (string, required) — Date of birth (YYYY-MM-DD)
- `idv_consent_recorded_at` (string, required) — ISO8601 timestamp when IDV consent was recorded (on_ramp / off_ramp); null for countries verified with a verification token
- `address` (API_V1_Serializers_Address, required) — Address information for the individual
- `country` (enum, required) — Country code (e.g., MX, US)
  - Allowed values: `AR`, `BR`, `CO`, `MX`, `US`, `IN`, `PH`, `SG`, `VN`, `AE`, `GB`, `AT`, `BE`, `BG`, `CY`, `DE`, `EE`, `ES`, `FI`, `FR`, `GR`, `HR`, `IE`, `IT`, `LT`, `LU`, `LV`, `MT`, `NL`, `PT`, `SI`, `SK`, `CZ`, `DK`, `HU`, `PL`, `RO`, `SE`, `CH`, `IS`, `LI`, `NO`
- `status` (enum, required) — Current IDV status of the individual
  - Allowed values: `active`, `pending`, `under_review`, `rejected`, `action_required`
- `product_types` (list of enum, required) — Product types for the individual
  - Allowed values: `global_payouts`, `off_ramp`, `on_ramp`
- `financial_accounts` (list of API_V1_Serializers_FinancialAccount, required) — Financial accounts for the individual
- `created_at` (string, required) — ISO 8601 timestamp when the individual was created
- `updated_at` (string, required) — ISO 8601 timestamp when the individual was last updated
- `document` (API_V1_Serializers_Document, optional) — Document information for identity verification
- `status_details` (list of API_V1_Serializers_StatusDetail, optional) — Detail codes and messages explaining the current status

## Errors

### 429 Too Many Requests Error

Rate limit exceeded for individual creation. Individual creation via the API is limited to 100 requests per 60 seconds per customer. Retry after the number of seconds in the Retry-After header. Body: \{"error":"Too many requests. Please retry later."}

- `any`

## Types

### PostV1IndividualsAddress

Address information for the individual

- `line_1` (string, required) — Address line 1
- `city` (string, required) — City
- `state` (string, required) — State
- `postal_code` (string, required) — Postal code
- `line_2` (string, optional) — Address line 2

### PostV1IndividualsFinancialAccountsItems

- `details` (PostV1IndividualsFinancialAccountsItemsDetails, required) — Account-specific details required for the given type. See [Country-specific details](https://docs.latitude.xyz/integration-guides/country-specific-details)
- `type` (enum, optional) — Type of financial account (e.g., bank_account, crypto_wallet)
  - Allowed values: `pix`, `bank_account`, `digital_wallet`, `upi`, `crypto_wallet`, `ph_qr_code`

### PostV1IndividualsDocument

Document information for identity verification

- `type` (enum, optional) — Document type
  - Allowed values: `cuit`, `cuil`, `cpf`, `cnpj`, `cc`, `ce`, `nit`, `pep`, `curp`, `tin`, `eu_residence_permit`, `emirates_id`, `driver_licence`, `national_id`, `passport`
- `number` (string, optional) — Document ID number

### API_V1_Serializers_Address

- `country` (enum, required) — Country code
  - Allowed values: `AR`, `BR`, `CO`, `MX`, `US`, `IN`, `PH`, `SG`, `VN`, `AE`, `GB`, `AT`, `BE`, `BG`, `CY`, `DE`, `EE`, `ES`, `FI`, `FR`, `GR`, `HR`, `IE`, `IT`, `LT`, `LU`, `LV`, `MT`, `NL`, `PT`, `SI`, `SK`, `CZ`, `DK`, `HU`, `PL`, `RO`, `SE`, `CH`, `IS`, `LI`, `NO`
- `line_1` (string, optional) — Address line 1
- `line_2` (string, optional) — Address line 2
- `city` (string, optional) — City
- `state` (string, optional) — State
- `postal_code` (string, optional) — Postal code

### API_V1_Serializers_FinancialAccount

API_V1_Serializers_FinancialAccount model

- `id` (string, required) — Unique public identifier for the financial account
- `type` (enum, required) — Type of financial account
  - Allowed values: `pix`, `bank_account`, `digital_wallet`, `upi`, `crypto_wallet`, `ph_qr_code`
- `details` (ApiV1SerializersFinancialAccountDetails, required) — Account-specific details. See [Country-specific details](https://docs.latitude.xyz/integration-guides/country-specific-details)
- `created_at` (string, required) — ISO 8601 timestamp when the account was created
- `updated_at` (string, required) — ISO 8601 timestamp when the account was last updated

### API_V1_Serializers_Document

- `type` (enum, required) — Document type
  - Allowed values: `cuit`, `cuil`, `cpf`, `cnpj`, `cc`, `ce`, `nit`, `pep`, `curp`, `tin`, `eu_residence_permit`, `emirates_id`, `driver_licence`, `national_id`, `passport`
- `number` (string, optional) — Document number (when available)

### API_V1_Serializers_StatusDetail

- `code` (enum, required) — Status detail code
  - Allowed values: `verification_front_image_needed`, `verification_back_image_needed`, `verification_selfie_needed`, `verification_token_needed`, `verification_image_blurry`, `verification_image_glare`, `verification_portrait_unclear`, `verification_portrait_missing`, `verification_document_not_detected`, `verification_image_unprocessable`, `verification_document_damaged`, `verification_document_expired`, `verification_unsupported_document_type`, `verification_country_not_determined`, `verification_electronic_replica`, `verification_attribute_mismatch`, `verification_disallowed_country`, `verification_age_mismatch`, `verification_identity_unverified`, `verification_unknown_error`
- `message` (string, required) — Human-readable message for the detail code

### PostV1IndividualsFinancialAccountsItemsDetails

Account-specific details required for the given type. See [Country-specific details](https://docs.latitude.xyz/integration-guides/country-specific-details)

### ApiV1SerializersFinancialAccountDetails

Account-specific details. See [Country-specific details](https://docs.latitude.xyz/integration-guides/country-specific-details)

## Examples

**Request**

```json
{
  "given_name": "string",
  "family_name": "string",
  "country": "AR",
  "address": {
    "line_1": "string",
    "city": "string",
    "state": "string",
    "postal_code": "string"
  },
  "product_types": [
    "global_payouts"
  ],
  "financial_accounts": [
    {
      "details": {}
    }
  ]
}
```

**Response**

```json
{
  "id": "string",
  "given_name": "string",
  "family_name": "string",
  "email": "string",
  "phone": "string",
  "date_of_birth": "string",
  "idv_consent_recorded_at": "string",
  "address": {
    "country": "AR",
    "line_1": "string",
    "line_2": "string",
    "city": "string",
    "state": "string",
    "postal_code": "string"
  },
  "country": "AR",
  "status": "active",
  "product_types": [
    "global_payouts"
  ],
  "financial_accounts": [
    {
      "id": "string",
      "type": "pix",
      "details": {},
      "created_at": "2024-01-15T09:30:00Z",
      "updated_at": "2024-01-15T09:30:00Z"
    }
  ],
  "created_at": "string",
  "updated_at": "string",
  "document": {
    "type": "cuit",
    "number": "string"
  },
  "status_details": [
    {
      "code": "verification_front_image_needed",
      "message": "string"
    }
  ]
}
```

**SDK Code**

```python
import requests

url = "https://api.latitude.xyz/v1/individuals"

payload = {
    "given_name": "string",
    "family_name": "string",
    "country": "AR",
    "address": {
        "line_1": "string",
        "city": "string",
        "state": "string",
        "postal_code": "string"
    },
    "product_types": ["global_payouts"],
    "financial_accounts": [{ "details": {} }]
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.latitude.xyz/v1/individuals';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"given_name":"string","family_name":"string","country":"AR","address":{"line_1":"string","city":"string","state":"string","postal_code":"string"},"product_types":["global_payouts"],"financial_accounts":[{"details":{}}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.latitude.xyz/v1/individuals"

	payload := strings.NewReader("{\n  \"given_name\": \"string\",\n  \"family_name\": \"string\",\n  \"country\": \"AR\",\n  \"address\": {\n    \"line_1\": \"string\",\n    \"city\": \"string\",\n    \"state\": \"string\",\n    \"postal_code\": \"string\"\n  },\n  \"product_types\": [\n    \"global_payouts\"\n  ],\n  \"financial_accounts\": [\n    {\n      \"details\": {}\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.latitude.xyz/v1/individuals")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"given_name\": \"string\",\n  \"family_name\": \"string\",\n  \"country\": \"AR\",\n  \"address\": {\n    \"line_1\": \"string\",\n    \"city\": \"string\",\n    \"state\": \"string\",\n    \"postal_code\": \"string\"\n  },\n  \"product_types\": [\n    \"global_payouts\"\n  ],\n  \"financial_accounts\": [\n    {\n      \"details\": {}\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.latitude.xyz/v1/individuals")
  .header("Content-Type", "application/json")
  .body("{\n  \"given_name\": \"string\",\n  \"family_name\": \"string\",\n  \"country\": \"AR\",\n  \"address\": {\n    \"line_1\": \"string\",\n    \"city\": \"string\",\n    \"state\": \"string\",\n    \"postal_code\": \"string\"\n  },\n  \"product_types\": [\n    \"global_payouts\"\n  ],\n  \"financial_accounts\": [\n    {\n      \"details\": {}\n    }\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.latitude.xyz/v1/individuals', [
  'body' => '{
  "given_name": "string",
  "family_name": "string",
  "country": "AR",
  "address": {
    "line_1": "string",
    "city": "string",
    "state": "string",
    "postal_code": "string"
  },
  "product_types": [
    "global_payouts"
  ],
  "financial_accounts": [
    {
      "details": {}
    }
  ]
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.latitude.xyz/v1/individuals");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"given_name\": \"string\",\n  \"family_name\": \"string\",\n  \"country\": \"AR\",\n  \"address\": {\n    \"line_1\": \"string\",\n    \"city\": \"string\",\n    \"state\": \"string\",\n    \"postal_code\": \"string\"\n  },\n  \"product_types\": [\n    \"global_payouts\"\n  ],\n  \"financial_accounts\": [\n    {\n      \"details\": {}\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "given_name": "string",
  "family_name": "string",
  "country": "AR",
  "address": [
    "line_1": "string",
    "city": "string",
    "state": "string",
    "postal_code": "string"
  ],
  "product_types": ["global_payouts"],
  "financial_accounts": [["details": []]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.latitude.xyz/v1/individuals")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```