nora

Parties setup

Create a party and bind its Solana wallet so your intents can target it.

A party represents the end-user on whose behalf you create intents. You create the party once, bind a Solana wallet address to it, and thereafter every onramp or offramp intent targets that wallet — Nora resolves the party from the wallet on file.

Flow

Loading diagram…

Steps

  1. Create the party. POST /v2/parties with cpf and displayName. Optional: partyType (default "person"), countryCode (default "BR"), externalRef, email, phone. Persist the returned id as your canonical reference.

  2. Bind a Solana wallet. PATCH /v2/parties/:id/wallet with { solanaWallet }. The response echoes the full party object with the address now visible at profile.solanaWallet.

  3. Create intents targeting that wallet. Intents do not take a partyId in their request body. On onramp, pass the same address as destinationWallet; Nora looks up the party from that wallet. See Onramp intent.

Request shapes

Step 1 — Create party

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"
  }'

Response:

{
  "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"
}

Step 2 — Bind the wallet

curl -X PATCH "https://staging.api.nora.finance/v2/parties/$PARTY_ID/wallet" \
  -H "X-API-Key: $NORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "solanaWallet": "So11111111111111111111111111111111111111112" }'

Response: the same party shape as step 1, now with profile.solanaWallet set to the address you bound.

Step 3 — Create an intent

Intents don't take a partyId in their body. Nora looks up the party from destinationWallet (onramp) or the wallet binding on file (offramp). You thread the wallet address through:

curl -X POST https://staging.api.nora.finance/v2/intents/onramp \
  -H "X-API-Key: $NORA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "idempotency-key: $(uuidgen)" \
  -d '{
    "amountCents": 10000,
    "destinationWallet": "So11111111111111111111111111111111111111112",
    "chainId": "solana",
    "clientReference": "ord_123"
  }'

Gotchas

  • Tax ID validation. CPF is 11 digits for partyType: "person"; CNPJ is 14 digits for partyType: "business". The server validates format at create time.
  • Only solanaWallet is settable today. Multi-chain wallet binding is not in the public API yet. PATCH /v2/parties/:id/wallet takes one field — { solanaWallet } — and does not accept a chainId.
  • Wallet replaces in place. A second PATCH swaps the binding. The party holds one Solana wallet at a time.

See also

On this page