PUT
/api/v1/issuers/{issuerId}/capabilitiesIssuers
Declare issuer capabilities
Create or update the capability profile that controls how Nuvanté orders your transactions.
Sandbox API
https://sandbox-api.nuvante.ioCreates or replaces the issuer's capability profile. Nuvanté uses commitPoint, custodyModel and feedbackChannel to work out the settlement mode (1, 2 or 3). Here, custodyModel describes your issuer wallet structure, and is a different field from the participant's self-custody, MPC or CaaS setting.
A profile update applies to transactions started after the write. Transactions already in flight carry on with the profile version they captured. Needs manageIssuedAssets (issuer tenant admin JWT, own participant only).
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| Authorization | string · header | Yes | Bearer sandbox API key with `manageIssuedAssets` (issuer tenant admins only). |
| issuerId | string (UUID) · path | Yes | The issuer's participant ID. It must match your own participant. |
| commitPoint | "ON_OBSERVATION" | "ON_INSTRUCTION" · body | Yes | When Nuvanté treats the issuer as committed. `ON_OBSERVATION` gives Mode 1 (delegated signing). `ON_INSTRUCTION` gives Mode 2 (two-phase), or Mode 3 (single-phase with a pre-burn transfer) when `preBurnTransferRequired` is true. |
| custodyModel | "PER_MEMBER_ISSUER_WALLET" | "POOLED_ISSUER_WALLET" · body | Yes | How your issuer wallets are structured (one per member, or pooled). This is separate from how keys are held and from the participant-level `custodyModel` (`self-custody`, `mpc` or `caas`). The engine still calls it `custodyModel`, and the proposed rename to `issuerWalletModel` (DECISIONS.md D-1) hasn't been confirmed. |
| feedbackChannel | ("SIGNED_WEBHOOK" | "POLLABLE_RESOURCE")[] · body | Yes | How you report instruction status back to Nuvanté. |
| fiatLeg | "NUVANTE_SETTLES_RTGS" | "ISSUER_SETTLES_RTGS" · body | Yes | Who sends the RTGS settlement instruction. |
| ledger | "stellar" | "evm" | "solana" · body | Yes | The ledger the issued asset lives on. |
| apiBaseUrl | string (URL) · body | No | The base URL Nuvanté calls for burn and mint instructions. Required for Mode 2 and 3. |
Responses
200Capability profile saved. `profileVersion` goes up by one.
Request
curl --request PUT \
--url 'https://sandbox-api.nuvante.io/api/v1/issuers/323e4567-e89b-42d3-a456-426614174002/capabilities' \
--header 'Authorization: Bearer nvt_sandbox_your_key' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
"commitPoint": "ON_INSTRUCTION",
"preBurnTransferRequired": true,
"custodyModel": "PER_MEMBER_ISSUER_WALLET",
"mintDeliveryTarget": "REGISTERED_HANDLE",
"feedbackChannel": [
"SIGNED_WEBHOOK",
"POLLABLE_RESOURCE"
],
"fiatLeg": "NUVANTE_SETTLES_RTGS",
"ledger": "stellar",
"finalityClass": "DETERMINISTIC",
"amountPrecision": 2,
"approvalSlaSeconds": 45,
"apiBaseUrl": "https://issuer-api.partner-bank.test",
"webhookUrl": "https://issuer-api.partner-bank.test/nuvante/webhooks"
}'Response
{
"data": {
"issuerId": "323e4567-e89b-42d3-a456-426614174002",
"profileVersion": 3,
"commitPoint": "ON_INSTRUCTION",
"custodyModel": "PER_MEMBER_ISSUER_WALLET",
"feedbackChannel": [
"SIGNED_WEBHOOK",
"POLLABLE_RESOURCE"
],
"fiatLeg": "NUVANTE_SETTLES_RTGS",
"ledger": "stellar",
"effectiveFrom": "2026-09-01T10:00:00.000Z"
},
"meta": {
"commandId": "f23e4567-e89b-42d3-a456-426614174044"
}
}