A counterparty represents a payout recipient — a person or business you send funds to. Counterparties hold identity information. Payment routing details (bank account numbers, wallet addresses) are stored separately as payment details attached to the counterparty.
The Counterparty object
Unique counterparty identifier.
The entity this counterparty belongs to.
Display label. Defaults to full name for individuals and legal name for businesses.
active or inactive. Inactive counterparties cannot receive transfers.
Identity details. Shape depends on type. Show Individual profile fields
First name of the individual.
Last name of the individual.
Relationship to the sending entity. Allowed values: vendor, supplier, customer, employee.
Email address of the individual.
Physical address. Street address line 1. Required.
Street address line 2. Optional.
State or province. Optional.
Postal or ZIP code. Optional.
ISO alpha-2 country code. Required.
Government-issued identification documents. Show Identification fields
Document type. P = passport, D = driving licence, N = national ID.
ISO alpha-2 country code of the issuing authority.
Phone contact details. Phone number in E.164 format.
mobile, work, home, or other.
ISO alpha-2 country code.
Show Business profile fields
Registered legal name of the business.
Trading or DBA name, if different from the legal name. Optional.
Relationship to the sending entity. Allowed values: vendor, supplier, customer, employee.
Registered business address. Same shape as individual address.
Business registration documents. Show Identification fields
L = business registration number.
ISO alpha-2 country code of the registering authority.
Phone contact details. Same shape as individual phone.
Arbitrary key-value metadata.
Unix timestamp (milliseconds) when the counterparty was created.
Unix timestamp (milliseconds) when the counterparty was last updated.
Example counterparty object
{
"id" : "01KM37EZ0AYCVDXJ3WDHXPPSZ9" ,
"entity_id" : "01KBCFY3VB1XT0MC8VMZXME6RS" ,
"type" : "individual" ,
"nickname" : "Jane Smith" ,
"status" : "active" ,
"profile" : {
"first_name" : "Jane" ,
"last_name" : "Smith" ,
"relationship" : "vendor" ,
"email" : "jane.smith@example.com" ,
"address" : {
"line1" : "123 Main St" ,
"city" : "Austin" ,
"state_or_province" : "TX" ,
"postal_code" : "78701" ,
"country" : "US"
}
},
"meta" : {},
"created" : 1735725600000 ,
"updated" : 1735725600000
}
Create a counterparty
POST /counterparties
Creates a counterparty of type individual or business. Attach payment details separately after creation.
Request parameters
The entity this counterparty belongs to.
Display label. Defaults to first name + last name for individuals or legal name for businesses.
Identity details. Required fields differ by type. Relationship to the sending entity. One of: vendor, supplier, customer, employee.
Physical address. ISO alpha-2 country code (e.g. US, GB).
Government-issued identification documents. Show Identification fields
Document type. P = passport, D = driving licence, N = national ID.
ISO alpha-2 country code of the issuing authority.
Phone contact details. Phone number in E.164 format.
mobile, work, home, or other.
ISO alpha-2 country code.
Registered legal name of the business.
Trading or DBA name, if different from the legal name.
Relationship to the sending entity. One of: vendor, supplier, customer, employee.
Registered business address. Same shape as individual address.
Business registration documents. Show Identification fields
L = business registration number.
ISO alpha-2 country code of the registering authority.
Phone contact details. Same shape as individual phone.
Arbitrary key-value metadata. Keys and values must be strings.
Request
curl -X POST https://api.nuvion.dev/counterparties \
-H "Authorization: Bearer $NUVION_API_KEY " \
-H "Content-Type: application/json" \
-d '{
"type": "individual",
"entity_id": "01KBCFY3VB1XT0MC8VMZXME6RS",
"profile": {
"first_name": "Jane",
"last_name": "Smith",
"relationship": "vendor",
"email": "jane.smith@example.com",
"address": {
"line1": "123 Main St",
"city": "Austin",
"state_or_province": "TX",
"postal_code": "78701",
"country": "US"
}
}
}'
Response
Returns the created Counterparty object .
Errors
Code Description 422Validation error — a required field is missing or a field value is invalid. 422A counterparty with these details already exists for this entity. 409The specified entity_id was not found.
List counterparties
GET /counterparties
Returns a paginated list of counterparties.
Query parameters
Filter by entity. Required when authenticating with an API key.
Filter by counterparty type. individual or business.
Filter by status. active or inactive.
Number of results to return. Between 1 and 100. Defaults to 20.
Pagination cursor returned in the previous response’s meta.pagination.next_cursor.
Request
curl "https://api.nuvion.dev/counterparties?entity_id=01KBCFY3VB1XT0MC8VMZXME6RS&status=active" \
-H "Authorization: Bearer $NUVION_API_KEY "
Response
{
"data" : [
{
"id" : "01KM37EZ0AYCVDXJ3WDHXPPSZ9" ,
"entity_id" : "01KBCFY3VB1XT0MC8VMZXME6RS" ,
"type" : "individual" ,
"nickname" : "Jane Smith" ,
"status" : "active" ,
"profile" : {
"first_name" : "Jane" ,
"last_name" : "Smith" ,
"relationship" : "vendor" ,
"email" : "jane.smith@example.com" ,
"address" : {
"line1" : "123 Main St" ,
"city" : "Austin" ,
"state_or_province" : "TX" ,
"postal_code" : "78701" ,
"country" : "US"
}
},
"meta" : {},
"created" : 1735725600000 ,
"updated" : 1735725600000
}
],
"meta" : {
"pagination" : {
"has_more" : false ,
"next_cursor" : null
}
}
}
Get a counterparty
GET /counterparties/{counterparty_id}
Retrieves a single counterparty by ID.
Path parameters
The counterparty ID. 26-character ULID.
Query parameters
Required when authenticating with an API key.
Request
curl "https://api.nuvion.dev/counterparties/01KM37EZ0AYCVDXJ3WDHXPPSZ9" \
-H "Authorization: Bearer $NUVION_API_KEY "
Response
Returns the Counterparty object .
Update a counterparty
PATCH /counterparties/{counterparty_id}
Partially updates a counterparty. Only the fields you provide are changed — omitted fields remain unchanged.
Path parameters
The counterparty ID. 26-character ULID.
Request parameters
Required when authenticating with an API key.
Any subset of profile fields for the counterparty’s type. Only provided fields are updated.
Request
curl -X PATCH https://api.nuvion.dev/counterparties/01KM37EZ0AYCVDXJ3WDHXPPSZ9 \
-H "Authorization: Bearer $NUVION_API_KEY " \
-H "Content-Type: application/json" \
-d '{
"entity_id": "01KBCFY3VB1XT0MC8VMZXME6RS",
"profile": {
"email": "jane.updated@example.com"
}
}'
Response
Returns the updated Counterparty object .
Deactivate a counterparty
POST /counterparties/{counterparty_id}/deactivate
Sets the counterparty’s status to inactive. Deactivated counterparties cannot receive new transfers.
Deactivation cannot be reversed via the API.
Path parameters
The counterparty ID. 26-character ULID.
Request parameters
Required when authenticating with an API key.
Request
curl -X POST "https://api.nuvion.dev/counterparties/01KM37EZ0AYCVDXJ3WDHXPPSZ9/deactivate" \
-H "Authorization: Bearer $NUVION_API_KEY " \
-H "Content-Type: application/json" \
-d '{ "entity_id": "01KBCFY3VB1XT0MC8VMZXME6RS" }'
Response
Returns the updated Counterparty object with status: "inactive".
Errors
Code Description 409The counterparty is already inactive.
Add payment details
POST /counterparties/{counterparty_id}/payment-details
Attach bank account, mobile money, stablecoin, or book transfer routing information to a counterparty. The returned payment detail ID is used when initiating transfers.
Path parameters
The counterparty ID. 26-character ULID.
Request parameters
The payment rail. One of: bank-transfer, momo-transfer, stablecoin-transfer, book-transfer.
ISO 4217 currency code (e.g. USD, GBP, KES). Use USC for USDC and UST for USDT.
Full name of the payment recipient, as it appears on the receiving account.
The entity initiating the payout.
ISO alpha-2 destination country code. Required for bank transfers.
Payment scheme. Required when the currency supports multiple rails. For USD, specify ach or wire. For GBP, fps or chaps.
Request
FPS / GBP
ACH / USD
Mobile Money
curl -X POST https://api.nuvion.dev/counterparties/01KM37EZ0AYCVDXJ3WDHXPPSZ9/payment-details \
-H "Authorization: Bearer $NUVION_API_KEY " \
-H "Content-Type: application/json" \
-d '{
"payment_method": "bank-transfer",
"currency": "GBP",
"country": "GB",
"account_holder_name": "Jane Smith",
"entity_id": "01KBCFY3VB1XT0MC8VMZXME6RS",
"sort_code": "040004",
"account_number": "12345678"
}'
Response
{
"id" : "pd_01KM37FAABC123DEF456GHI789" ,
"payment_method" : "bank-transfer" ,
"currency" : "GBP" ,
"country" : "GB" ,
"scheme" : "fps" ,
"account_holder_name" : "Jane Smith" ,
"sort_code" : "040004" ,
"account_number" : "12345678" ,
"counterparty_id" : "01KM37EZ0AYCVDXJ3WDHXPPSZ9" ,
"entity_id" : "01KBCFY3VB1XT0MC8VMZXME6RS"
}
See Send a Payout for the complete list of rail-specific required fields across all 24 corridors.