curl --request POST \
--url https://api.sand.etherfuse.com/organization/{organizationId}/order \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"quoteId": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
"memo": "Invoice 1042"
}
'const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({quoteId: '5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b', memo: 'Invoice 1042'})
};
fetch('https://api.sand.etherfuse.com/organization/{organizationId}/order', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sand.etherfuse.com/organization/{organizationId}/order"
payload = {
"quoteId": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
"memo": "Invoice 1042"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
"organizationId": "7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d",
"status": "created",
"memo": "Invoice 1042",
"source": {
"paymentAccountId": "3f9a2c1e-5b7d-4e8f-9a01-2b3c4d5e6f70",
"amount": "1000",
"asset": "MXN",
"rail": "spei",
"accountLabel": "Operating account"
},
"destination": {
"paymentAccountId": "8c1d2e3f-4a5b-4c6d-8e7f-901a2b3c4d5e",
"amount": "54.120000",
"asset": "USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
"rail": "stellar",
"accountLabel": "Treasury wallet"
},
"fees": [
{
"type": "transactionFee",
"amount": "2.50",
"asset": "MXN",
"bps": 25
}
],
"fundingInstructions": {
"rail": "spei",
"reference": "1000042",
"destination": {
"expiresAt": null,
"clabe": "646180000000000009",
"bankName": "Ejemplo Banco",
"recipientName": "Ejemplo Receptor"
},
"fundingDeadline": "2026-09-29T17:05:02Z"
},
"claimInstructions": null,
"createdAt": "2026-09-28T17:05:02.114Z",
"updatedAt": "2026-09-28T17:05:02.114Z",
"completedAt": null
}{
"id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
"organizationId": "7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d",
"status": "created",
"memo": "Invoice 1042",
"source": {
"paymentAccountId": "3f9a2c1e-5b7d-4e8f-9a01-2b3c4d5e6f70",
"amount": "1000",
"asset": "MXN",
"rail": "spei",
"accountLabel": "Operating account"
},
"destination": {
"paymentAccountId": "8c1d2e3f-4a5b-4c6d-8e7f-901a2b3c4d5e",
"amount": "54.120000",
"asset": "USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
"rail": "stellar",
"accountLabel": "Treasury wallet"
},
"fees": [
{
"type": "transactionFee",
"amount": "2.50",
"asset": "MXN",
"bps": 25
}
],
"fundingInstructions": {
"rail": "spei",
"reference": "1000042",
"destination": {
"expiresAt": null,
"clabe": "646180000000000009",
"bankName": "Ejemplo Banco",
"recipientName": "Ejemplo Receptor"
},
"fundingDeadline": "2026-09-29T17:05:02Z"
},
"claimInstructions": null,
"createdAt": "2026-09-28T17:05:02.114Z",
"updatedAt": "2026-09-28T17:05:02.114Z",
"completedAt": null
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}Create order
Creates an order from a quote and returns the full order. Use the organizationId the quote was created with. The order’s id is the quoteId.
One quote makes one order. Sending the same quoteId again returns the existing order with 200, even after the quote has expired, so a retry never creates a second order. If two requests with the same quoteId arrive at the same time, one gets 201 and the other gets 409 conflict; read the order to get it.
fundingInstructions.reference is set when the order is created. fundingInstructions.destination is absent until the funding details are available. Subscribe to orderUpdated to receive the order when they arrive, or read the order again.
curl --request POST \
--url https://api.sand.etherfuse.com/organization/{organizationId}/order \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"quoteId": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
"memo": "Invoice 1042"
}
'const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({quoteId: '5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b', memo: 'Invoice 1042'})
};
fetch('https://api.sand.etherfuse.com/organization/{organizationId}/order', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sand.etherfuse.com/organization/{organizationId}/order"
payload = {
"quoteId": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
"memo": "Invoice 1042"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
"organizationId": "7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d",
"status": "created",
"memo": "Invoice 1042",
"source": {
"paymentAccountId": "3f9a2c1e-5b7d-4e8f-9a01-2b3c4d5e6f70",
"amount": "1000",
"asset": "MXN",
"rail": "spei",
"accountLabel": "Operating account"
},
"destination": {
"paymentAccountId": "8c1d2e3f-4a5b-4c6d-8e7f-901a2b3c4d5e",
"amount": "54.120000",
"asset": "USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
"rail": "stellar",
"accountLabel": "Treasury wallet"
},
"fees": [
{
"type": "transactionFee",
"amount": "2.50",
"asset": "MXN",
"bps": 25
}
],
"fundingInstructions": {
"rail": "spei",
"reference": "1000042",
"destination": {
"expiresAt": null,
"clabe": "646180000000000009",
"bankName": "Ejemplo Banco",
"recipientName": "Ejemplo Receptor"
},
"fundingDeadline": "2026-09-29T17:05:02Z"
},
"claimInstructions": null,
"createdAt": "2026-09-28T17:05:02.114Z",
"updatedAt": "2026-09-28T17:05:02.114Z",
"completedAt": null
}{
"id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
"organizationId": "7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d",
"status": "created",
"memo": "Invoice 1042",
"source": {
"paymentAccountId": "3f9a2c1e-5b7d-4e8f-9a01-2b3c4d5e6f70",
"amount": "1000",
"asset": "MXN",
"rail": "spei",
"accountLabel": "Operating account"
},
"destination": {
"paymentAccountId": "8c1d2e3f-4a5b-4c6d-8e7f-901a2b3c4d5e",
"amount": "54.120000",
"asset": "USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
"rail": "stellar",
"accountLabel": "Treasury wallet"
},
"fees": [
{
"type": "transactionFee",
"amount": "2.50",
"asset": "MXN",
"bps": 25
}
],
"fundingInstructions": {
"rail": "spei",
"reference": "1000042",
"destination": {
"expiresAt": null,
"clabe": "646180000000000009",
"bankName": "Ejemplo Banco",
"recipientName": "Ejemplo Receptor"
},
"fundingDeadline": "2026-09-29T17:05:02Z"
},
"claimInstructions": null,
"createdAt": "2026-09-28T17:05:02.114Z",
"updatedAt": "2026-09-28T17:05:02.114Z",
"completedAt": null
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}Authorizations
API key sent in the Authorization header, with no Bearer prefix.
Path Parameters
The organization this call acts for: your API key's organization or one of its customer organizations. Any other id returns 404 not-found.
Body
Response
An order already exists for this quote. Returns that order.
The order id. Equal to the quoteId it was created from.
The organization the order belongs to.
created: waiting for the source funds. funded: source funds received. claimable: delivered, waiting for the customer to claim; see claimInstructions. completed: delivered. failed: could not be completed; see failure. canceled: canceled before completion. refunded: the source funds were returned.
created, funded, claimable, completed, failed, canceled, refunded Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
How the source funds the order.
Show child attributes
Show child attributes
Set while the order is claimable. Otherwise null.
Show child attributes
Show child attributes
Present only when status is failed.
Show child attributes
Show child attributes
Set while the order waits for the account holder to approve a transfer we built. Otherwise null. Approve it with POST /organization/{organizationId}/order/{id}/authorization.
Show child attributes
Show child attributes
{ "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d", "reason": "funding", "method": { "kind": "signature", "algorithm": "es256", "message": "eyJvcmRlcklkIjoiNWU2ZjdhOGIifQ" }, "expiresAt": "2026-09-28T17:20:00Z" }