> 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 a Conversion Account

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

Creates a new conversion account for on-ramp conversion

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

## Request

### Body (application/json)

This endpoint expects a postV1ConversionAccounts.

- `individual_id` (string, required) — The public ID of the individual
- `payout_account` (PostV1ConversionAccountsPayoutAccount, required) — Destination account for converted funds. Send either the id of an existing crypto_wallet financial account, or type and details to add a wallet inline
- `source_currency` (enum, required) — Source currency code (e.g., mxn)
  - Allowed values: `MXN`, `PHP`, `GBP`, `EUR`, `AED`
- `destination_currency` (enum, required) — Destination currency code (e.g., usdc)
  - Allowed values: `USDC`
- `client_reference_id` (string, optional) — Your unique identifier for this conversion account. Use this to correlate with your records in your own system. Maximum 255 characters.

## Response

### 201

Conversion account created with deposit instructions

- `id` (string, required) — Unique public identifier for the conversion account
- `individual_id` (string, required) — Unique public identifier for the associated individual
- `payout_account` (API_V1_Serializers_FinancialAccount, required) — Destination account for converted funds
- `source_currency` (enum, required) — Source currency code (e.g., mxn)
  - Allowed values: `MXN`, `PHP`, `GBP`, `EUR`, `AED`
- `destination_currency` (enum, required) — Destination currency code (e.g., usdc)
  - Allowed values: `USDC`
- `status` (enum, required) — Status of the conversion account
  - Allowed values: `pending`, `under_review`, `active`, `disabled`
- `created_at` (string, required) — ISO 8601 timestamp when the conversion account was created
- `updated_at` (string, required) — ISO 8601 timestamp when the conversion account was last updated
- `deposit_instructions` (API_V1_Serializers_DepositInstructions, optional) — Instructions for end-users to deposit funds into the conversion account (e.g. virtual account or QR code details)

### 202

Conversion account accepted, deposit instructions pending

- `id` (string, required) — Unique public identifier for the conversion account
- `individual_id` (string, required) — Unique public identifier for the associated individual
- `payout_account` (API_V1_Serializers_FinancialAccount, required) — Destination account for converted funds
- `source_currency` (enum, required) — Source currency code (e.g., mxn)
  - Allowed values: `MXN`, `PHP`, `GBP`, `EUR`, `AED`
- `destination_currency` (enum, required) — Destination currency code (e.g., usdc)
  - Allowed values: `USDC`
- `status` (enum, required) — Status of the conversion account
  - Allowed values: `pending`, `under_review`, `active`, `disabled`
- `created_at` (string, required) — ISO 8601 timestamp when the conversion account was created
- `updated_at` (string, required) — ISO 8601 timestamp when the conversion account was last updated
- `deposit_instructions` (API_V1_Serializers_DepositInstructions, optional) — Instructions for end-users to deposit funds into the conversion account (e.g. virtual account or QR code details)

## Errors

### 429 Too Many Requests Error

Rate limit exceeded for conversion account creation. Conversion account 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

### PostV1ConversionAccountsPayoutAccount

Destination account for converted funds. Send either the id of an existing crypto_wallet financial account, or type and details to add a wallet inline

- `id` (string, optional) — The public ID of an existing crypto_wallet financial account on the individual
- `type` (enum, optional) — Type of the inline payout account
  - Allowed values: `crypto_wallet`
- `details` (PostV1ConversionAccountsPayoutAccountDetails, optional) — Inline crypto wallet. If the individual already has a crypto_wallet with the same network and address, it is reused

### 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`, `bre_b`
- `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_DepositInstructions

- `type` (enum, required) — Discriminator identifying the kind of deposit instructions
  - Allowed values: `ae_bank_account`, `crypto_wallet`, `eu_bank_account`, `gb_bank_account`, `mx_virtual_account`, `ph_qr_code`, `us_bank_account`
- `currency` (string, required) — Lowercase ISO 4217 currency code of the expected deposit
- `payment_methods` (list of any, required) — Payment rails the end user can use to deposit into these instructions
- `details` (ApiV1SerializersDepositInstructionsDetails, required) — Variant-specific details (e.g. CLABE, QR payload, blockchain address)
- `deadline` (string, optional) — ISO 8601 deadline by which funds must be received (time-bound variants only)

### PostV1ConversionAccountsPayoutAccountDetails

Inline crypto wallet. If the individual already has a crypto_wallet with the same network and address, it is reused

- `network` (string, required) — Blockchain network of the wallet (e.g., base)
- `address` (string, required) — Wallet address

### ApiV1SerializersFinancialAccountDetails

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

### ApiV1SerializersDepositInstructionsDetails

Variant-specific details (e.g. CLABE, QR payload, blockchain address)

## Examples

### Example 1

**Request**

```json
{
  "individual_id": "string",
  "source_currency": "MXN",
  "destination_currency": "USDC"
}
```

**Response**

```json
{
  "id": "string",
  "individual_id": "string",
  "payout_account": {
    "id": "string",
    "type": "pix",
    "details": {},
    "created_at": "2024-01-15T09:30:00Z",
    "updated_at": "2024-01-15T09:30:00Z"
  },
  "source_currency": "MXN",
  "destination_currency": "USDC",
  "status": "pending",
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z",
  "deposit_instructions": {
    "type": "ae_bank_account",
    "currency": "string",
    "payment_methods": [
      null
    ],
    "details": {},
    "deadline": "2024-01-15T09:30:00Z"
  }
}
```

**SDK Code**

```python
import requests

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

payload = {
    "individual_id": "string",
    "source_currency": "MXN",
    "destination_currency": "USDC"
}
headers = {"Content-Type": "application/json"}

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

print(response.json())
```

```javascript
const url = 'https://api.latitude.xyz/v1/conversion_accounts';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"individual_id":"string","source_currency":"MXN","destination_currency":"USDC"}'
};

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/conversion_accounts"

	payload := strings.NewReader("{\n  \"individual_id\": \"string\",\n  \"source_currency\": \"MXN\",\n  \"destination_currency\": \"USDC\"\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/conversion_accounts")

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  \"individual_id\": \"string\",\n  \"source_currency\": \"MXN\",\n  \"destination_currency\": \"USDC\"\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/conversion_accounts")
  .header("Content-Type", "application/json")
  .body("{\n  \"individual_id\": \"string\",\n  \"source_currency\": \"MXN\",\n  \"destination_currency\": \"USDC\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.latitude.xyz/v1/conversion_accounts', [
  'body' => '{
  "individual_id": "string",
  "source_currency": "MXN",
  "destination_currency": "USDC"
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.latitude.xyz/v1/conversion_accounts");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"individual_id\": \"string\",\n  \"source_currency\": \"MXN\",\n  \"destination_currency\": \"USDC\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "individual_id": "string",
  "source_currency": "MXN",
  "destination_currency": "USDC"
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.latitude.xyz/v1/conversion_accounts")! 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()
```

### Example 2

**Request**

```json
{
  "individual_id": "string",
  "source_currency": "MXN",
  "destination_currency": "USDC"
}
```

**Response**

```json
{
  "id": "string",
  "individual_id": "string",
  "payout_account": {
    "id": "string",
    "type": "pix",
    "details": {},
    "created_at": "2024-01-15T09:30:00Z",
    "updated_at": "2024-01-15T09:30:00Z"
  },
  "source_currency": "MXN",
  "destination_currency": "USDC",
  "status": "pending",
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z",
  "deposit_instructions": {
    "type": "ae_bank_account",
    "currency": "string",
    "payment_methods": [
      null
    ],
    "details": {},
    "deadline": "2024-01-15T09:30:00Z"
  }
}
```

**SDK Code**

```python
import requests

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

payload = {
    "individual_id": "string",
    "source_currency": "MXN",
    "destination_currency": "USDC"
}
headers = {"Content-Type": "application/json"}

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

print(response.json())
```

```javascript
const url = 'https://api.latitude.xyz/v1/conversion_accounts';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"individual_id":"string","source_currency":"MXN","destination_currency":"USDC"}'
};

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/conversion_accounts"

	payload := strings.NewReader("{\n  \"individual_id\": \"string\",\n  \"source_currency\": \"MXN\",\n  \"destination_currency\": \"USDC\"\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/conversion_accounts")

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  \"individual_id\": \"string\",\n  \"source_currency\": \"MXN\",\n  \"destination_currency\": \"USDC\"\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/conversion_accounts")
  .header("Content-Type", "application/json")
  .body("{\n  \"individual_id\": \"string\",\n  \"source_currency\": \"MXN\",\n  \"destination_currency\": \"USDC\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.latitude.xyz/v1/conversion_accounts', [
  'body' => '{
  "individual_id": "string",
  "source_currency": "MXN",
  "destination_currency": "USDC"
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.latitude.xyz/v1/conversion_accounts");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"individual_id\": \"string\",\n  \"source_currency\": \"MXN\",\n  \"destination_currency\": \"USDC\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = [
  "individual_id": "string",
  "source_currency": "MXN",
  "destination_currency": "USDC"
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.latitude.xyz/v1/conversion_accounts")! 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()
```