nora

Parties

Create and manage end-user entities. Intents resolve the party from the wallet on file.

A party represents one of your end-users to Nora. It carries identity data and a single connected Solana wallet via profile.solanaWallet.

Error envelope

All parties endpoints return errors in the parties-family shape:

{ "error": "human-readable message", "code": "optional_machine_code" }

error is always present; code may be present for specific failures. See Error handling for the full taxonomy.

POST /v2/parties

Create a new party.

Headers

HeaderRequiredNotes
X-API-KeyYes
Content-TypeYesapplication/json

Request body

FieldTypeRequiredDescription
cpfstringYes11-digit CPF (person) or 14-digit CNPJ (business), digits only.
displayNamestringYes2–100 characters.
partyType"person" | "business"NoDefault "person".
countryCodestringNoISO 3166-1 alpha-2. Default "BR".
externalRefstringNoYour own correlation reference.
emailstringNoValid email address.
phonestringNo

Response 201

FieldTypeRequiredDescription
idstring (uuid)YesNora-assigned party id.
instanceIdstring (uuid)YesThe instance this party belongs to.
partyType"person" | "business"Yes
countryCodestringYes
externalRefstring | nullYesEchoed if you supplied one; null otherwise.
status"pending" | "active" | "suspended" | "blocked"Yes
profileobjectYesSee below.
createdAtstringYesISO 8601 timestamp.
updatedAtstringYes

profile sub-object:

FieldTypeRequiredDescription
displayNamestringYes
documentTypestringYese.g. "cpf" or "cnpj".
documentMaskedstringYesMasked rendering, e.g. "***.***.***-01".
solanaWalletstring | nullYesThe bound Solana wallet, null until bound.

Example

curl -X POST https://staging.api.nora.finance/v2/parties \
  -H "X-API-Key: $NORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "cpf": "12345678901",
    "displayName": "João da Silva",
    "partyType": "person",
    "countryCode": "BR",
    "email": "joao@example.com",
    "externalRef": "user_123"
  }'
{
  "id": "2f1b4a2e-4c9e-4a5b-8c8b-...",
  "instanceId": "4e0b9c7a-11d9-4f3c-9a6a-...",
  "partyType": "person",
  "countryCode": "BR",
  "externalRef": "user_123",
  "status": "pending",
  "profile": {
    "displayName": "João da Silva",
    "documentType": "cpf",
    "documentMasked": "***.***.***-01",
    "solanaWallet": null
  },
  "createdAt": "2026-04-22T12:00:00Z",
  "updatedAt": "2026-04-22T12:00:00Z"
}

Errors

  • 400 { error, code? } — validation failure (missing required field, bad document format, etc.).
  • 409 { error, code? } — conflict (e.g. party already exists for this document).

GET /v2/parties/:id

Fetch one party by id.

Path parameters

ParamTypeRequired
idstring (uuid)Yes

Headers

HeaderRequired
X-API-KeyYes

Response 200

Same shape as the POST /v2/parties 201 response.

Errors

  • 404 { error, code? } — no party with that id in this org/instance.

PATCH /v2/parties/:id/wallet

Bind the party's Solana wallet, or replace an existing binding. Only one Solana wallet per party.

Path parameters

ParamTypeRequired
idstring (uuid)Yes

Headers

HeaderRequiredNotes
X-API-KeyYes
Content-TypeYesapplication/json

Request body

FieldTypeRequiredDescription
solanaWalletstringYesSolana wallet address to bind. Replaces any previous binding.

This is the only field. No chainId, no envelope.

Response 200

Returns the full party object — same shape as GET /v2/parties/:id — with profile.solanaWallet set to the address you just bound.

Errors

  • 400 { error, code? } — body validation (e.g. missing solanaWallet).
  • 404 { error, code? } — no party with that id.

On this page