Create a Pay-in
curl --request POST \
--url https://sandbox.api.fin.com/v2/transactions/pay-ins \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Idempotency-Key: <x-idempotency-key>' \
--data '
{
"customer_id": "34c62166-3e7a-436b-a2e3-338c4148a859",
"amount": 100101,
"currency": "MXN",
"destination": {
"address": "0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E",
"rail": "POLYGON",
"currency": "USDC"
},
"developer_fee": {
"fixed": 0,
"percentage": 0
}
}
'const url = 'https://sandbox.api.fin.com/v2/transactions/pay-ins';
const options = {
method: 'POST',
headers: {
'X-Idempotency-Key': '<x-idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
customer_id: '34c62166-3e7a-436b-a2e3-338c4148a859',
amount: 100101,
currency: 'MXN',
destination: {
address: '0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E',
rail: 'POLYGON',
currency: 'USDC'
},
developer_fee: {fixed: 0, percentage: 0}
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://sandbox.api.fin.com/v2/transactions/pay-ins")
.header("X-Idempotency-Key", "<x-idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"customer_id\": \"34c62166-3e7a-436b-a2e3-338c4148a859\",\n \"amount\": 100101,\n \"currency\": \"MXN\",\n \"destination\": {\n \"address\": \"0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E\",\n \"rail\": \"POLYGON\",\n \"currency\": \"USDC\"\n },\n \"developer_fee\": {\n \"fixed\": 0,\n \"percentage\": 0\n }\n}")
.asString();import requests
url = "https://sandbox.api.fin.com/v2/transactions/pay-ins"
payload = {
"customer_id": "34c62166-3e7a-436b-a2e3-338c4148a859",
"amount": 100101,
"currency": "MXN",
"destination": {
"address": "0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E",
"rail": "POLYGON",
"currency": "USDC"
},
"developer_fee": {
"fixed": 0,
"percentage": 0
}
}
headers = {
"X-Idempotency-Key": "<x-idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.api.fin.com/v2/transactions/pay-ins"
payload := strings.NewReader("{\n \"customer_id\": \"34c62166-3e7a-436b-a2e3-338c4148a859\",\n \"amount\": 100101,\n \"currency\": \"MXN\",\n \"destination\": {\n \"address\": \"0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E\",\n \"rail\": \"POLYGON\",\n \"currency\": \"USDC\"\n },\n \"developer_fee\": {\n \"fixed\": 0,\n \"percentage\": 0\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Idempotency-Key", "<x-idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"data": {
"id": "728c95d3-8b1e-4497-b3da-f36bcc066d7d",
"customer_id": "34c62166-3e7a-436b-a2e3-338c4148a859",
"status": "PENDING",
"transaction_id": null,
"created_at": "2026-06-09T18:27:35.468309Z",
"expire_at": "2026-06-10T18:27:35.437874Z",
"source_amount": 100101,
"source_amount_in_major": 1001.01,
"currency": "MXN",
"destination": {
"address": "0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E",
"rail": "POLYGON",
"currency": "USDC"
},
"fees": {
"developer_fee": {
"fixed": 0,
"percentage": 0
},
"total_developer_fee": 0,
"network_fee": 0,
"conversion_fee": 0,
"total_fee": 0
},
"destination_amount_in_major": 57.324182,
"exchange_rate": 17.462264,
"deposit_instruction": {
"type": "BANK_DEPOSIT",
"bank_details": {
"bank_name": "FINCO PAY",
"bank_address": null,
"bank_address_details": null,
"bank_routing_number": null,
"bank_account_number": "734180000129991804",
"payment_rails": [
"SPEI"
],
"bank_country": "MEX",
"account_type": "centralizing",
"bank_code": {
"code": "734180000129991804",
"type": "CLABE"
},
"reference": "88ff4abb99e39499db661e1c97f0770fb1fb05c3",
"account_holder_name": "FIN BU1"
},
"checkout_details": null
}
}
}{
"message": "Authentication failed"
}{
"message": "<string>",
"errors": [
{}
]
}Payment Instructions
Create a Pay-in
Create a pay-in instruction for a customer. Make payment before expiry with mandatory reference code and receive crypto in the destination wallet address.
POST
/
v2
/
transactions
/
pay-ins
Create a Pay-in
curl --request POST \
--url https://sandbox.api.fin.com/v2/transactions/pay-ins \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Idempotency-Key: <x-idempotency-key>' \
--data '
{
"customer_id": "34c62166-3e7a-436b-a2e3-338c4148a859",
"amount": 100101,
"currency": "MXN",
"destination": {
"address": "0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E",
"rail": "POLYGON",
"currency": "USDC"
},
"developer_fee": {
"fixed": 0,
"percentage": 0
}
}
'const url = 'https://sandbox.api.fin.com/v2/transactions/pay-ins';
const options = {
method: 'POST',
headers: {
'X-Idempotency-Key': '<x-idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
customer_id: '34c62166-3e7a-436b-a2e3-338c4148a859',
amount: 100101,
currency: 'MXN',
destination: {
address: '0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E',
rail: 'POLYGON',
currency: 'USDC'
},
developer_fee: {fixed: 0, percentage: 0}
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://sandbox.api.fin.com/v2/transactions/pay-ins")
.header("X-Idempotency-Key", "<x-idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"customer_id\": \"34c62166-3e7a-436b-a2e3-338c4148a859\",\n \"amount\": 100101,\n \"currency\": \"MXN\",\n \"destination\": {\n \"address\": \"0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E\",\n \"rail\": \"POLYGON\",\n \"currency\": \"USDC\"\n },\n \"developer_fee\": {\n \"fixed\": 0,\n \"percentage\": 0\n }\n}")
.asString();import requests
url = "https://sandbox.api.fin.com/v2/transactions/pay-ins"
payload = {
"customer_id": "34c62166-3e7a-436b-a2e3-338c4148a859",
"amount": 100101,
"currency": "MXN",
"destination": {
"address": "0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E",
"rail": "POLYGON",
"currency": "USDC"
},
"developer_fee": {
"fixed": 0,
"percentage": 0
}
}
headers = {
"X-Idempotency-Key": "<x-idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.api.fin.com/v2/transactions/pay-ins"
payload := strings.NewReader("{\n \"customer_id\": \"34c62166-3e7a-436b-a2e3-338c4148a859\",\n \"amount\": 100101,\n \"currency\": \"MXN\",\n \"destination\": {\n \"address\": \"0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E\",\n \"rail\": \"POLYGON\",\n \"currency\": \"USDC\"\n },\n \"developer_fee\": {\n \"fixed\": 0,\n \"percentage\": 0\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Idempotency-Key", "<x-idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"data": {
"id": "728c95d3-8b1e-4497-b3da-f36bcc066d7d",
"customer_id": "34c62166-3e7a-436b-a2e3-338c4148a859",
"status": "PENDING",
"transaction_id": null,
"created_at": "2026-06-09T18:27:35.468309Z",
"expire_at": "2026-06-10T18:27:35.437874Z",
"source_amount": 100101,
"source_amount_in_major": 1001.01,
"currency": "MXN",
"destination": {
"address": "0xD2Ba7d0DaBd36498df5906fC7B054Fa9EfA9843E",
"rail": "POLYGON",
"currency": "USDC"
},
"fees": {
"developer_fee": {
"fixed": 0,
"percentage": 0
},
"total_developer_fee": 0,
"network_fee": 0,
"conversion_fee": 0,
"total_fee": 0
},
"destination_amount_in_major": 57.324182,
"exchange_rate": 17.462264,
"deposit_instruction": {
"type": "BANK_DEPOSIT",
"bank_details": {
"bank_name": "FINCO PAY",
"bank_address": null,
"bank_address_details": null,
"bank_routing_number": null,
"bank_account_number": "734180000129991804",
"payment_rails": [
"SPEI"
],
"bank_country": "MEX",
"account_type": "centralizing",
"bank_code": {
"code": "734180000129991804",
"type": "CLABE"
},
"reference": "88ff4abb99e39499db661e1c97f0770fb1fb05c3",
"account_holder_name": "FIN BU1"
},
"checkout_details": null
}
}
}{
"message": "Authentication failed"
}{
"message": "<string>",
"errors": [
{}
]
}Pay-in instructions require separate configuration. Contact support to enable this feature for your account.
Authorizations
Bearer token authentication. Obtain token from Issue a Token endpoint
Headers
Unique key to safely retry the request without creating duplicate pay-ins.
Body
application/json
ID of the customer the pay-in is created for.
Example:
"34c62166-3e7a-436b-a2e3-338c4148a859"
Amount to collect in minor units (cents) of the source currency.
Example:
100101
Source currency. Only MXN is supported.
Available options:
MXN Example:
"MXN"
Show child attributes
Show child attributes
Optional developer fee applied to the pay-in.
Show child attributes
Show child attributes
Response
Pay-in instruction created successfully
Show child attributes
Show child attributes
⌘I
