Skip to main content
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

id
string
Unique counterparty identifier.
entity_id
string
The entity this counterparty belongs to.
type
string
individual or business.
nickname
string
Display label. Defaults to full name for individuals and legal name for businesses.
status
string
active or inactive. Inactive counterparties cannot receive transfers.
profile
object
Identity details. Shape depends on type.
meta
object
Arbitrary key-value metadata.
created
number
Unix timestamp (milliseconds) when the counterparty was created.
updated
number
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

type
string
required
individual or business.
entity_id
string
required
The entity this counterparty belongs to.
nickname
string
Display label. Defaults to first name + last name for individuals or legal name for businesses.
profile
object
required
Identity details. Required fields differ by type.
meta
object
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

CodeDescription
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

entity_id
string
Filter by entity. Required when authenticating with an API key.
type
string
Filter by counterparty type. individual or business.
status
string
Filter by status. active or inactive.
limit
integer
Number of results to return. Between 1 and 100. Defaults to 20.
cursor
string
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

counterparty_id
string
required
The counterparty ID. 26-character ULID.

Query parameters

entity_id
string
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

counterparty_id
string
required
The counterparty ID. 26-character ULID.

Request parameters

entity_id
string
Required when authenticating with an API key.
nickname
string
Updated display label.
profile
object
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

counterparty_id
string
required
The counterparty ID. 26-character ULID.

Request parameters

entity_id
string
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

CodeDescription
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

counterparty_id
string
required
The counterparty ID. 26-character ULID.

Request parameters

payment_method
string
required
The payment rail. One of: bank-transfer, momo-transfer, stablecoin-transfer, book-transfer.
currency
string
required
ISO 4217 currency code (e.g. USD, GBP, KES). Use USC for USDC and UST for USDT.
account_holder_name
string
required
Full name of the payment recipient, as it appears on the receiving account.
entity_id
string
required
The entity initiating the payout.
country
string
ISO alpha-2 destination country code. Required for bank transfers.
scheme
string
Payment scheme. Required when the currency supports multiple rails. For USD, specify ach or wire. For GBP, fps or chaps.

Request

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.