Manage settlement instructions
Create, list, update and delete the bank accounts and wallets your FX proceeds go to, with the Stellar memo rule.
This page shows how to create, list, update and delete settlement instructions. A settlement instruction is one of your own bank accounts or crypto wallets that FX proceeds settle to. Once you save one, use its id as the destination of an OTC order.
A money example. You receive USDC on Stellar and naira at your bank. You add a Stellar USDC wallet (with its memo) and make it the USDC default. When your old naira account closes, you delete its instruction, so Gravv refuses an order that still points at it instead of paying a closed account.
If you use a scoped API key, it needs payee:create to create and update instructions, and payee:delete to delete them. Reading needs no permission.
Create a settlement instruction
Use Create settlement instruction. Send a new Idempotency-Key for each instruction.
Bank account
curl --request POST \
--url https://api.gravv.xyz/v1/settlement-instructions \
--header 'Api-Key: <API_KEY>' \
--header 'Idempotency-Key: 0abe4221-51cd-4247-b96c-9992317dd50a' \
--header 'Content-Type: application/json' \
--data '
{
"instruction_type": "bank_account",
"account_name": "Harbor Digital Ltd",
"currency": "NGN",
"is_default": true,
"account_number": "0123456789",
"bank_name": "Example Bank",
"bank_code": "011",
"country": "NG"
}
'
Crypto wallet
A Stellar wallet needs memo:
curl --request POST \
--url https://api.gravv.xyz/v1/settlement-instructions \
--header 'Api-Key: <API_KEY>' \
--header 'Idempotency-Key: 2eee315c-23dd-4414-b10d-2312e25427e5' \
--header 'Content-Type: application/json' \
--data '
{
"instruction_type": "crypto_wallet",
"account_name": "Harbor Treasury Stellar",
"currency": "USDC",
"wallet_address": "GC3ONVVSIG2XZHHZCLJPDIR7ZAHR4IJ2AH34DFVDQVEFSPPX46DYJMJ2",
"network": "stellar",
"memo": "208117"
}
'
{
"data": {
"id": "132c8884-fe71-46b0-8c73-2fdb614f7bb8",
"type": "crypto_wallet",
"instruction_type": "crypto_wallet",
"account_name": "Harbor Treasury Stellar",
"currency": "USDC",
"is_default": false,
"status": "active",
"wallet_address": "GC3ONVVSIG2XZHHZCLJPDIR7ZAHR4IJ2AH34DFVDQVEFSPPX46DYJMJ2",
"network": "stellar",
"memo": "208117",
"created_at": "2026-10-13T22:33:13.609822Z",
"updated_at": "2026-10-13T22:33:13.609822Z",
"date_created": "2026-10-13T22:33:13.609822Z",
"date_updated": "2026-10-13T22:33:13.609822Z"
},
"error": null
}
The answer leaves out empty fields.
Retrieve settlement instructions
List them with List settlement instructions. Filter with currency and instruction_type. Gravv matches both exactly. The list returns the default first, then the newest. The page size is 10 unless you send items_per_page:
curl --request GET \
--url 'https://api.gravv.xyz/v1/settlement-instructions?currency=USDC&page=1&items_per_page=50' \
--header 'Api-Key: <API_KEY>'
Read one by its id:
curl --request GET \
--url https://api.gravv.xyz/v1/settlement-instructions/132c8884-fe71-46b0-8c73-2fdb614f7bb8 \
--header 'Api-Key: <API_KEY>'
Update a settlement instruction
Use Update settlement instruction (no Idempotency-Key). Send only what changes:
curl --request PATCH \
--url https://api.gravv.xyz/v1/settlement-instructions/132c8884-fe71-46b0-8c73-2fdb614f7bb8 \
--header 'Api-Key: <API_KEY>' \
--header 'Content-Type: application/json' \
--data '
{
"is_default": true
}
'
- The previous default for the same
currencystops being the default. - You cannot change
instruction_typeorcurrency. To change them, delete the instruction and create a new one. - An empty string keeps the current value, so you cannot clear a field.
- Gravv does not check values again on update. If you change
networktostellar, sendmemoin the same call.
Delete a settlement instruction
Use Delete settlement instruction. There is no undo:
curl --request DELETE \
--url https://api.gravv.xyz/v1/settlement-instructions/132c8884-fe71-46b0-8c73-2fdb614f7bb8 \
--header 'Api-Key: <API_KEY>'
{
"data": {
"status": "deleted"
},
"error": null
}
The instruction disappears from every read. Gravv refuses an order sent to it with bad destination: [400] invalid order destination. Orders already completed keep its id as their destination. If you deleted the default, make another one the default.
What can go wrong
| Response | Why | Fix |
|---|---|---|
400 memo is required for the stellar network: invalid input |
The Stellar wallet has no memo | Add memo |
400 wallet address is required for crypto wallets: invalid input |
wallet_address is missing |
Add it |
400 network is required for crypto wallets: invalid input |
network is missing |
Add it |
400 settlement instruction <id>: resource not found |
The id is unknown, belongs to another business, or was already deleted | List your instructions to get current ids |
400 invalid id |
The path id is not a UUID | Use the id from the list |
| Two defaults for the same currency | You saved one as usdc and one as USDC |
Always send upper case |