Sign in
Conversies/Convert API

Convert API

Converteer cryptovaluta rechtstreeks vanuit uw handelssaldo — ontvang een live koers en voer uit tegen de marktprijs.

Met de Convert API kunt u wisselen tussen de valuta's in uw handelssaldo tegen de huidige marktprijs — dezelfde engine die het tabblad Swap in het handelsdashboard aandrijft, nu aan te roepen vanuit uw backend.

Convert-endpoints worden ondertekend met uw reguliere API-sleutel — dezelfde die wordt gebruikt voor Payment API-verzoeken, niet de Payout API-sleutel. Het uitvoeren van een conversie debiteert en crediteert onmiddellijk uw handelssaldo; behandel deze sleutel dus met dezelfde zorg als elke referentie die geld verplaatst.

Conversieprijs opvragen

Geeft een indicatieve koers voor een conversie tegen de huidige marktprijs — de effectieve koers en de resulterende bedragen. Er wordt niets gedebiteerd of gereserveerd; roep dit zo vaak aan als nodig voordat u uitvoert.

POST/v1/convert/price

Verzoekparameters

VeldTypeVerplichtBeschrijvingWaarde
from_currencystringjaBronvaluta
to_currencystringjaDoelvaluta. Moet verschillen van from_currency
amountdecimaljaTe converteren bedrag, groter dan 0
amount_typestringjaOp welke kant amount betrekking heeft

amount_type=from besteedt precies amount aan from_currency. amount_type=to ontvangt precies amount aan to_currency.

🟢 200 OK · application/json

JSON
{
  "state": 0,
  "result": {
    "success": true,
    "from_currency": "BTC",
    "to_currency": "USDT",
    "amount_type": "from",
    "from_amount": "0.01000000",
    "to_amount": "947.86690000",
    "effective_rate": "94786.69000000",
    "from_amount_usd": "947.87",
    "to_amount_usd": "947.87"
  }
}

Responsvelden

VeldTypeBeschrijving
successbooleanOf de koers succesvol is berekend
from_currencystringBronvaluta
to_currencystringDoelvaluta
amount_typestringWeerspiegelt de amount_type van het verzoek
from_amountstringBedrag dat gedebiteerd zou worden in from_currency
to_amountstringBedrag dat gecrediteerd zou worden in to_currency
effective_ratestringKoers toegepast op deze koersaanvraag — 1 eenheid from_currency in to_currency (bevat al de prijsstelling van het platform)
from_amount_usdstring | nullUSD-equivalent van from_amount
to_amount_usdstring | nullUSD-equivalent van to_amount
  • De koers is puur indicatief — de marktprijs kan veranderen tussen de koersaanvraag en de uitvoeringsaanroep.
  • Deze aanroep debiteert of reserveert geen saldo.
Credentials
RequestPOST/v1/convert/price
curl -X POST https://api.2328.io/api/v1/convert/price \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.

Conversie uitvoeren

Voert een conversie uit tegen de huidige marktprijs en werkt uw handelssaldo bij. Er is geen aparte stap om "een koers te bevestigen" — roep dit endpoint direct aan met het bedrag dat u wilt converteren.

POST/v1/convert

Idempotentie. Het herhalen van exact hetzelfde verzoek (dezelfde from_currency, to_currency, amount, amount_type) binnen ongeveer een minuut na de eerste aanroep geeft de bestaande conversie terug in plaats van een tweede aan te maken. Na dat venster wordt een identiek verzoek behandeld als een nieuwe conversie — probeer bij een time-out niet blindelings opnieuw zonder eerst het vorige resultaat te controleren.

Dit endpoint is beperkt tot 10 verzoeken per minuut per aanroeper — strenger dan de algemene API-limiet — omdat elke aanroep echt saldo verplaatst.

Verzoekparameters

VeldTypeVerplichtBeschrijvingWaarde
from_currencystringjaBronvaluta
to_currencystringjaDoelvaluta. Moet verschillen van from_currency
amountdecimaljaTe converteren bedrag, groter dan 0
amount_typestringjaOp welke kant amount betrekking heeft

🟢 200 OK · application/json

JSON
{
  "state": 0,
  "result": {
    "id": 12345,
    "type": "manual",
    "status": "completed",
    "from_currency": "BTC",
    "to_currency": "USDT",
    "from_amount": "0.01000000",
    "requested_from_amount": "0.01000000",
    "refund_amount": null,
    "to_amount": "947.86690000",
    "exchange_rate": "94786.69000000",
    "fee_amount": "0.00000000",
    "from_amount_usd": "947.87",
    "to_amount_usd": "947.87",
    "processed_at": "2026-01-20T15:30:24Z",
    "created_at": "2026-01-20T15:30:22Z"
  }
}

Responsvelden

VeldTypeBeschrijving
idintDoor het systeem toegewezen conversieorder-ID
typestringAltijd manual voor deze API
statusstringHuidige status (zie «Conversiestatussen» hieronder)
from_currencystringBronvaluta
to_currencystringDoelvaluta
from_amountstringGedebiteerd bedrag in from_currency
requested_from_amountstring | nullUw oorspronkelijk gevraagde bronbedrag wanneer amount_type = from. null wanneer amount_type = to
refund_amountstring | nullDeel van het vooraf gedebiteerde bedrag dat aan u is terugbetaald na een gedeeltelijke uitvoering. null als de order volledig is uitgevoerd
to_amountstringGecrediteerd bedrag in to_currency
exchange_ratestringKoers die daadwerkelijk op deze conversie is toegepast — 1 eenheid from_currency in to_currency (bevat al de prijsstelling van het platform)
fee_amountstringPlatformkosten in rekening gebracht voor deze conversie, uitgedrukt in from_currency of to_currency afhankelijk van de handelsrichting. Al verwerkt in exchange_rate — hier getoond voor transparantie
from_amount_usdstring | nullUSD-equivalent van from_amount
to_amount_usdstring | nullUSD-equivalent van to_amount
processed_atstring (ISO 8601) | nullMoment waarop de conversie klaar was met uitvoeren. null zolang deze nog wordt verwerkt
created_atstring (ISO 8601)Moment waarop de conversieorder is aangemaakt

Conversiestatussen

StatusBeschrijving
pendingAangemaakt, nog niet naar de markt gestuurd
processingSaldo vergrendeld, order op de markt geplaatst
completedVolledig uitgevoerd — to_amount is bijgeschreven op uw saldo
failedKon niet worden uitgevoerd — een eventueel vooraf gedebiteerd bedrag is automatisch terugbetaald
partially_completedAlleen voor valutaparen zonder directe markt (gerouteerd via een tussenliggende valuta): de eerste stap is voltooid maar de tweede is mislukt. U wordt gecrediteerd in de tussenliggende valuta in plaats van to_currency — converteer opnieuw vanaf daar om uw oorspronkelijke doel te bereiken
RequestPOST/v1/convert
curl -X POST https://api.2328.io/api/v1/convert \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.

Fouten

Bij een fout heeft de respons state: 1 en een error_code — gedeeld door /v1/convert/price en /v1/convert:

🔴 422 / 400 · application/json

JSON
{
  "state": 1,
  "error_code": "amount_too_small",
  "errors": {
    "amount": "Amount is too small for this conversion. Please increase the amount and try again."
  }
}
error_codeHTTP-statusBeschrijving
validation_failed422Ongeldige of ontbrekende parameters, of afwijzing door een bedrijfsregel (bijv. onvoldoende saldo) — zie het veld errors voor details
amount_too_small422amount ligt onder de minimaal verhandelbare grootte voor dit valutapaar
convert_unavailable400De conversie kon nu niet worden uitgevoerd (marktgegevens niet beschikbaar of geen route tussen de twee valuta's) — probeer het straks opnieuw
internal_error400Onverwachte interne serverfout tijdens het verwerken van het verzoek

Automatische conversie van inkomende betalingen

Automatisch converteren is een projectinstelling voor inkomende facturen en statische portemonnee-credits. Het wordt geconfigureerd in het merchant dashboard, niet door velden toe te voegen aan /v1/payment. Elke regel selecteert één of meer bronvaluta's en een doelvaluta.

Wanneer de conversie is voltooid, kunnen betalingsinformatie en merchant webhooks het volgende bevatten:

JSON
{
  "payment_amount": "0.14800000",
  "merchant_amount": "0.146520000000000000",
  "payer_currency": "XMR",
  "convert": {
    "to_currency": "USDT",
    "commission": "0.09000000",
    "rate": "323.21000000",
    "amount": "47.262015740000000000"
  }
}

De bedrag-domeinen zijn opzettelijk gescheiden:

  • payment_amount — wat op de blockchain is gedetecteerd in de bronbetalingsvaluta;
  • merchant_amount — het netto-bronbedrag dat aan de merchant kan worden toegeschreven vóór conversie;
  • convert.amount — het bedrag dat is bijgeschreven in convert.to_currency;
  • convert.rate en convert.commission — het uitgevoerde conversieresultaat, niet een prijs die u lokaal zou moeten herberekenen.

Het ontbreken van convert is betekenisvol: conversie is mogelijk niet voltooid, mogelijk niet geconfigureerd voor die bron, of kan zijn teruggevallen op bronvalutakrediet. Bedenk nooit een doelbedrag op basis van /exchange-rates of een openbare marktprijs.

Automatische conversiefout en terugval

Conversie vindt plaats na het ontvangen van de blockchain-betaling. Marktbeschikbaarheid, minimale ordergroottes, precisielimieten, time-outs bij beurzen en onvoldoende uitvoerbare liquiditeit kunnen conversie vertragen of verhinderen.

  • Stortingen onder de globale/projectminimum worden omzeild in de conversiepijplijn en worden in de bronvaluta bijgeschreven.
  • Tijdelijke fouten kunnen asynchroon opnieuw worden geprobeerd.
  • Grote of niet verhandelbare stortingen kunnen terugvallen op een bronvalutakrediet nadat het herproefbeleid is uitgeput.
  • Een betaling kan daarom geldig zijn, zelfs wanneer de gewenste conversie naar de doelvaluta niet heeft plaatsgevonden.

Uw integratie moet eerst de geverifieerde betaling opslaan en vervolgens de daadwerkelijk bijgeschreven valuta reconciliëren aan de hand van betalingsinformatie, het optionele convert-blok en de saldi van de handelaar. Blokkeer de bevestiging van de betalingswebhook niet terwijl u wacht op uw eigen analyse- of notificatiesystemen.

Automatische conversie acceptatietests

Test ten minste: succesvolle directe conversie, brug/multi-hop conversie, stof onder minimum, tijdelijke retry, terugval naar bronvaluta, onderbetaling, overbetaling, dubbele webhook, ontbrekende convert, en reconciliatie na een ambigu timeout.

Handmatige conversie edge cases

  • /v1/convert/price is een indicatieve preview; marktbeweging kan het uitvoeringsresultaat veranderen.
  • amount_type: from corrigeert het verzoek aan de bronzijde, terwijl amount_type: to een bedrag aan de doelzijde aanvraagt. Verwissel de betekenis niet bij het tonen van de bevestigings-UI.
  • Een paar zonder directe markt kan via een tussenliggende valuta worden geleid. Als slechts één been voltooid is, rapporteert partially_completed de tussenliggende credit.
  • Als een execute-aanroep time-out, reconcileer dan voordat u het opnieuw probeert. Een marktorder kan worden uitgevoerd, zelfs wanneer de HTTP-respons ervan verloren gaat.
  • Behandel failed als een toestand om te reconciliëren, niet als toestemming om een lokale compenserende balansboeking toe te passen; het platform is eigenaar van debet/vergoedingsboekhouding.