Skip to main content

POST /transfer/create

Initiates a USDT settlement from your reserve to a recipient gateway. Vonos debits your balance, credits theirs, and returns a signed proof you can use to complete the payment on the recipient’s side.

Prerequisites

  • Both you and the recipient must have active Vonos accounts.
  • The recipient must be in your recipients list (Settings in the Vonos dashboard).
  • Vonos’ OCID must be in the recipient gateway’s accepts list.

Request

{
  "from": {
    "ocid": 200,
    "reference": "internal_ref_001"
  },
  "to": {
    "ocid": 500,
    "reference": "gateway_txid_from_payment_create"
  },
  "amount": "10.00",
  "currency": "USDT"
}
FieldTypeDescription
from.ocidnumberYour OCID
from.referencestringYour internal reference for this transfer
to.ocidnumberRecipient gateway’s OCID
to.referencestringThe txid you received from the recipient’s /payment/create
amountstringSettlement amount
currencystringMust be USDT

Response

{
  "status": "completed",
  "txid": "vonos_tx_abc123",
  "proof": {
    "txid": "vonos_tx_abc123",
    "issuer": 100,
    "from": { "ocid": 200, "reference": "internal_ref_001" },
    "to": { "ocid": 500, "reference": "gateway_txid_from_payment_create" },
    "amount": "10.00",
    "currency": "USDT",
    "timestamp": 1706500500
  },
  "signature": "a1b2c3d4..."
}
FieldDescription
statuscompleted on success
txidVonos transaction ID — use with /verify if you need to confirm later
proofThe signed transfer proof — pass this to the recipient’s /payment/settle
signatureVonos’ signature over the proof. The recipient uses this to verify

Example

const response = await fetch('https://api.vonos.io/transfer/create', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    ...createAuthHeaders(YOUR_OCID, YOUR_PRIVATE_KEY)
  },
  body: JSON.stringify({
    from: { ocid: YOUR_OCID, reference: `order_${orderId}` },
    to:   { ocid: recipientOcid, reference: recipientTxid },
    amount: order.amount,
    currency: 'USDT'
  })
});

const { proof, signature, txid } = await response.json();

// Complete the payment on the recipient's side
await fetch(`${recipientEndpoint}/payment/settle`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    ...createAuthHeaders(YOUR_OCID, YOUR_PRIVATE_KEY)
  },
  body: JSON.stringify({ txid: recipientTxid, proof, signature })
});
Vonos also notifies the recipient gateway on their /transfer/webhook with the same proof automatically. Calling /payment/settle yourself is still recommended — it gives you an explicit confirmation that the recipient received and accepted the settlement.