Skip to main content
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

Authorization
string
header
required

Bearer token authentication. Obtain token from Issue a Token endpoint

Headers

X-Idempotency-Key
string
required

Unique key to safely retry the request without creating duplicate pay-ins.

Body

application/json
customer_id
string<uuid>
required

ID of the customer the pay-in is created for.

Example:

"34c62166-3e7a-436b-a2e3-338c4148a859"

amount
integer
required

Amount to collect in minor units (cents) of the source currency.

Example:

100101

currency
enum<string>
required

Source currency. Only MXN is supported.

Available options:
MXN
Example:

"MXN"

destination
object
required
developer_fee
object

Optional developer fee applied to the pay-in.

Response

Pay-in instruction created successfully

data
object