### Create Party Response Source: https://www.nora.finance/docs/integrate/flows/parties-setup Example response after successfully creating a party. Note that the solanaWallet is initially null. ```json { "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" } ``` -------------------------------- ### Create Offramp Intent - cURL Example Source: https://www.nora.finance/docs/integrate/flows/offramp-intent Use this cURL command to create an offramp intent. Ensure you replace placeholders like $NORA_API_KEY with your actual credentials and values. The request body specifies the payout amount, destination address, and chain. ```bash curl -X POST https://staging.api.nora.finance/v2/intents/offramp \ -H "X-API-Key: $NORA_API_KEY" \ -H "Content-Type: application/json" \ -H "idempotency-key: $(uuidgen)" \ -d '{ "amountCents": 10000, "destinationAddress": "user@example.com", "chainId": "solana", "clientReference": "payout_xyz_42" }' ``` -------------------------------- ### Rate Limit Response Example Source: https://www.nora.finance/docs/integrate/getting-started/rate-limits This is an example of the HTTP response received when an API rate limit is exceeded. The `Retry-After` header specifies the number of seconds to wait before making another request. ```http HTTP/1.1 429 Too Many Requests Retry-After: 30 Content-Type: application/json { "error": { "code": "rate_limited", "message": "Too many requests. Retry after 30 seconds." } } ``` -------------------------------- ### Offramp Intent Creation Response Source: https://www.nora.finance/docs/integrate/flows/offramp-intent This is an example of a successful response when creating an offramp intent. It includes the intent ID, status, and details about the party involved. Note that `depositInstructions` is always null for offramp intents. ```json { "id": "8f2a...", "instanceId": "4e0b...", "partyId": "2f1b...", "intentType": "offramp", "flowVersion": 1, "adapter": null, "status": "awaiting_burn_approval", "statusReason": null, "clientReference": "payout_xyz_42", "metadata": null, "expiresAt": null, "createdAt": "2026-04-22T12:00:00Z", "updatedAt": "2026-04-22T12:00:00Z", "pixInfo": null, "depositInstructions": null, "party": { "displayName": "João da Silva", "documentMasked": "***.***.***-01", "solanaWallet": "So11111111111111111111111111111111111111112" }, "chainId": "solana" } ``` -------------------------------- ### Onramp Intent Response Source: https://www.nora.finance/docs/integrate/flows/onramp-intent This is an example response when creating an onramp intent. Key fields include the intent ID, status, and PIX payment details. The `expiresAt` field indicates the deadline for the PIX payment. ```json { "id": "8f2a...", "instanceId": "4e0b...", "partyId": "2f1b...", "intentType": "onramp", "flowVersion": 1, "adapter": null, "status": "awaiting_fiat_payment", "statusReason": null, "clientReference": "ord_123", "metadata": null, "expiresAt": "2026-04-22T12:30:00Z", "createdAt": "2026-04-22T12:00:00Z", "updatedAt": "2026-04-22T12:00:00Z", "pixInfo": { "keyType": "cnpj", "keyValue": "00000000000000", "recipientName": "Nora Financeira", "bank": "Banco XYZ", "description": "Nora onramp ord_123", "amountCents": 10000 }, "depositInstructions": null, "party": { "displayName": "João da Silva", "documentMasked": "***.***.***-01", "solanaWallet": "So11111111111111111111111111111111111111112" }, "chainId": "solana" } ``` -------------------------------- ### Minimal JSON Error Response Example Source: https://www.nora.finance/docs/integrate/getting-started/errors This is a minimal example of a JSON error response body returned by Nora for non-2xx HTTP status codes. ```json HTTP/1.1 422 Unprocessable Entity Content-Type: application/json { "error": { "code": "destination_wallet_not_authorized", "message": "Destination wallet So1... is not whitelisted for this org." } } ``` -------------------------------- ### Make a request to the hello endpoint Source: https://www.nora.finance/docs/integrate/getting-started/quickstart Use this cURL command to confirm your API key works by hitting the hello endpoint. Ensure the X-API-Key header is correctly set. A 401 response indicates an issue with the key or header. ```bash curl https://staging.api.nora.finance/v2/hello \ -H "X-API-Key: $NORA_API_KEY" ``` ```json { "hello": "world" } ``` -------------------------------- ### Fetch workspace info Source: https://www.nora.finance/docs/integrate/getting-started/quickstart Retrieve your organization, instance, and available capabilities using this cURL command. This request also requires the X-API-Key header. ```bash curl https://staging.api.nora.finance/v2/info \ -H "X-API-Key: $NORA_API_KEY" ``` -------------------------------- ### Create a New Party Source: https://www.nora.finance/docs/integrate/api-reference/parties Use this endpoint to create a new party. Ensure you include the required CPF/CNPJ and display name. The response includes the Nora-assigned party ID and its initial status. ```bash 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" }' ``` ```json { "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" } ``` -------------------------------- ### Create Offramp Intent Source: https://www.nora.finance/docs/integrate/api-reference/intents Use this endpoint to create a new offramp intent. After creation, the user must sign an SPL Approve and submit the transaction signature via `approve-burn`. `pixInfo` will be null in the response. ```bash curl -X POST https://staging.api.nora.finance/v2/intents/offramp \ -H "X-API-Key: $NORA_API_KEY" \ -H "Content-Type: application/json" \ -H "idempotency-key: $(uuidgen)" \ -d '{ "amountCents": 10000, "destinationAddress": "11111111111111111111111111111111111111111", "chainId": "solana", "clientReference": "off_123" }' ``` -------------------------------- ### Create Onramp Intent Source: https://www.nora.finance/docs/integrate/flows/parties-setup Create an onramp intent. The `destinationWallet` should be the party's Solana wallet address. Nora will look up the party associated with this wallet. ```curl 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" }' ``` -------------------------------- ### Create Onramp Intent Source: https://www.nora.finance/docs/integrate/flows/parties-setup Create an onramp intent. Nora will look up the party associated with the provided destination wallet. ```APIDOC ## POST /v2/intents/onramp ### Description Creates an onramp intent. The party is resolved via the `destinationWallet`. ### Method POST ### Endpoint /v2/intents/onramp ### Parameters #### Request Body - **amountCents** (integer) - Required - The amount for the onramp in cents. - **destinationWallet** (string) - Required - The Solana wallet address where the funds will be sent. - **chainId** (string) - Required - The chain ID, e.g., "solana". - **clientReference** (string) - Required - A client-defined reference for the intent. ### Request Example ```json { "amountCents": 10000, "destinationWallet": "So11111111111111111111111111111111111111112", "chainId": "solana", "clientReference": "ord_123" } ``` ``` -------------------------------- ### Create Party Source: https://www.nora.finance/docs/integrate/core-concepts/parties Creates a new party. The minimum required fields are `cpf` and `displayName`. Default values are used for `partyType` and `countryCode` if not provided. ```APIDOC ## POST /v2/parties ### Description Creates a new party. The minimum body is `{ cpf, displayName }`; `partyType` defaults to `"person"` and `countryCode` to `"BR"`. Response includes `id` (persist this) and the full profile echo. ### Method POST ### Endpoint /v2/parties ### Parameters #### Request Body - **cpf** (string) - Required - The Brazilian individual taxpayer registry number. - **displayName** (string) - Required - The display name of the party. - **partyType** (string) - Optional - Defaults to `"person"`. Can be `"person"` or `"business"`. - **countryCode** (string) - Optional - Defaults to `"BR"`. ISO 3166-1 alpha-2 country code. - **externalRef** (string) - Optional - An external reference identifier. ### Request Example ```json { "cpf": "11111111111", "displayName": "John Doe", "partyType": "person", "countryCode": "BR", "externalRef": "user-123" } ``` ### Response #### Success Response (200) - **id** (string) - The unique identifier for the party. - **partyType** (string) - The type of the party (`"person"` or `"business"`). - **countryCode** (string) - The country code of the party. - **externalRef** (string | null) - The external reference identifier. - **status** (string) - The status of the party (`"pending"`, `"active"`, `"suspended"`, `"blocked"`). - **profile** (object) - Contains profile details. - **displayName** (string) - The display name of the party. - **documentMasked** (string) - The masked document number. - **solanaWallet** (string | null) - The bound Solana wallet address, or null if not bound. - **instanceId** (string) - The instance identifier. - **createdAt** (string) - The timestamp when the party was created. - **updatedAt** (string) - The timestamp when the party was last updated. #### Response Example ```json { "id": "party-123", "partyType": "person", "countryCode": "BR", "externalRef": "user-123", "status": "pending", "profile": { "displayName": "John Doe", "documentMasked": "***.111.111-**", "solanaWallet": null }, "instanceId": "instance-abc", "createdAt": "2023-10-27T10:00:00Z", "updatedAt": "2023-10-27T10:00:00Z" } ``` ``` -------------------------------- ### Create Party - POST /v2/parties Source: https://www.nora.finance/docs/integrate/flows/parties-setup Use this endpoint to create a new party. Provide CPF and displayName. Optional fields include partyType, countryCode, externalRef, email, and phone. The returned ID should be stored for future reference. ```curl 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" }' ``` -------------------------------- ### X-API-Key Authentication Header Source: https://www.nora.finance/docs/integrate/core-concepts/authentication Use this header for all requests to Nora's /v2 API. The key itself contains all necessary scoping information. ```http X-API-Key: sk_live_... ``` -------------------------------- ### POST /v2/intents/offramp Source: https://www.nora.finance/docs/integrate/api-reference Initiates an offramp transaction. Supports idempotency via the `idempotency-key` header. ```APIDOC ## POST /v2/intents/offramp ### Description Initiates an offramp transaction. This endpoint is used to start the process of moving assets off the platform. ### Method POST ### Endpoint `/v2/intents/offramp` ### Parameters #### Request Body - **idempotency-key** (UUID) - Required - A unique key to ensure the request is processed only once. ### Request Example ```json { "idempotency-key": "a-uuid-string" } ``` ### Response #### Success Response (200) - The resource shape directly (no `data` wrapper). #### Response Example ```json { "id": "some-intent-id", "status": "pending" } ``` #### Failure Response - Returns `{ error: string, code?: string }` #### Response Example ```json { "error": "An error occurred" } ``` ``` -------------------------------- ### Create Offramp Intent Source: https://www.nora.finance/docs/integrate/api-reference/intents Creates an offramp intent for converting crypto to fiat. Requires a subsequent SPL Approve signature submission. ```APIDOC ## POST /v2/intents/offramp ### Description Create an offramp intent. Once created, the user must sign an SPL Approve and submit the `txSignature` via `approve-burn`. See Burn signing. ### Method POST ### Endpoint /v2/intents/offramp ### Headers - **X-API-Key** (string) - Required - **Content-Type** (string) - Required - `application/json` - **idempotency-key** (string) - Recommended - UUID (format-validated). ### Request Body - **amountCents** (integer) - Required - BRL payout amount in cents. Must be > 0. - **destinationAddress** (string) - Required - Fiat rail destination (PIX key, 1–255 chars). - **chainId** (string) - Required - `"solana"` or `"polygon"`. - **clientReference** (string) - Optional - Up to 255 chars. > No `partyId` in the body. Nora resolves the party from the wallet binding on file. ### Response 200 / 201 The intent response shape above. `pixInfo` is `null` on offramps and `depositInstructions` is always `null`. ``` -------------------------------- ### Client-side Burn Signing Outline Source: https://www.nora.finance/docs/integrate/flows/burn-signing A library-agnostic outline for the client-side burn signing process. It includes obtaining parameters, building and signing the SPL Approve instruction, broadcasting the transaction, and submitting the signature to Nora. ```javascript // 1. Obtain mint, delegate, and amount out-of-band for now; see Gaps above. // 2. Build an SPL Approve instruction on the user's ATA for the BRS mint. // 3. Sign with the user's wallet (adapter-specific). // 4. Broadcast with your Solana RPC client and capture txSignature. // 5. POST the signature + the ATA address to Nora. ``` -------------------------------- ### Create Onramp Intent Source: https://www.nora.finance/docs/integrate/api-reference/intents Creates an onramp intent for converting fiat to crypto. The response includes PIX payment information. ```APIDOC ## POST /v2/intents/onramp ### Description Create an onramp intent. The response includes `pixInfo` to surface to your user. ### Method POST ### Endpoint /v2/intents/onramp ### Headers - **X-API-Key** (string) - Required - **Content-Type** (string) - Required - `application/json` - **idempotency-key** (string) - Recommended - UUID (format-validated). One key per user intent; reuse across retries. ### Request Body - **amountCents** (integer) - Required - BRL amount in cents. Must be > 0. - **destinationWallet** (string) - Required - Solana address (1–255 chars). Must match a party's bound wallet. - **chainId** (string) - Required - `"solana"` or `"polygon"` accepted on request. - **clientReference** (string) - Optional - Up to 255 chars. Echoed on the intent. > No `partyId` in the body. Nora resolves the party from `destinationWallet`. ### Response 200 / 201 The intent response shape above. `pixInfo` is present. ### Request Example ```bash 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" }' ``` ### Errors - `400` — body validation (negative amount, missing field, address format). - `409` — idempotency-key collision with a different body. ``` -------------------------------- ### POST /v2/intents/onramp Source: https://www.nora.finance/docs/integrate/api-reference Initiates an onramp transaction. Supports idempotency via the `idempotency-key` header. ```APIDOC ## POST /v2/intents/onramp ### Description Initiates an onramp transaction. This endpoint is used to start the process of moving assets onto the platform. ### Method POST ### Endpoint `/v2/intents/onramp` ### Parameters #### Request Body - **idempotency-key** (UUID) - Required - A unique key to ensure the request is processed only once. ### Request Example ```json { "idempotency-key": "a-uuid-string" } ``` ### Response #### Success Response (200) - The resource shape directly (no `data` wrapper). #### Response Example ```json { "id": "some-intent-id", "status": "pending" } ``` #### Failure Response - Returns `{ error: string, code?: string }` #### Response Example ```json { "error": "An error occurred" } ``` ``` -------------------------------- ### Create Onramp Intent Source: https://www.nora.finance/docs/integrate/flows/onramp-intent Initiates an onramp intent to convert BRL to BRS tokens. Your backend provides the amount, destination wallet, and chain ID. Nora returns PIX deposit information for the user to complete the payment. ```APIDOC ## POST /v2/intents/onramp ### Description Creates a new onramp intent for converting BRL to BRS tokens. ### Method POST ### Endpoint /v2/intents/onramp ### Headers - **X-API-Key** (string) - Required - Your API key. - **idempotency-key** (string) - Recommended - A UUID to ensure idempotency. ### Request Body - **amountCents** (integer) - Required - The BRL amount in cents (e.g., 10000 for 100.00 BRL). Must be greater than 0. - **destinationWallet** (string) - Required - The Solana address that will receive the minted BRS tokens. Must match a previously created party's `profile.solanaWallet`. Max 255 characters. - **chainId** (string) - Required - Specifies the target blockchain. Accepted values are "solana" or "polygon". Note: Polygon is not yet live on the response side. - **clientReference** (string) - Optional - Your own correlation ID for tracking. Max 255 characters. ### Request Example ```json { "amountCents": 10000, "destinationWallet": "So11111111111111111111111111111111111111112", "chainId": "solana", "clientReference": "ord_123" } ``` ### Response #### Success Response (200 OK) - **id** (string) - Unique identifier for the intent. - **instanceId** (string) - Identifier for the intent instance. - **partyId** (string) - The resolved party ID based on `destinationWallet`. - **intentType** (string) - Type of intent, will be "onramp". - **flowVersion** (integer) - The version of the flow used. - **adapter** (string or null) - Routing information, e.g., "squads", "cuiaba", or null. - **status** (string) - Current status of the intent (e.g., "awaiting_fiat_payment"). - **statusReason** (string or null) - Reason for the current status, if any. - **clientReference** (string) - Echoed from the request. - **metadata** (object or null) - Additional metadata. - **expiresAt** (string) - The timestamp when the intent expires. - **createdAt** (string) - The timestamp when the intent was created. - **updatedAt** (string) - The timestamp when the intent was last updated. - **pixInfo** (object) - Information required for PIX payment. - **keyType** (string) - Type of PIX key (e.g., "cnpj"). - **keyValue** (string) - The PIX key value. - **recipientName** (string) - Name of the PIX recipient. - **bank** (string) - Name of the bank. - **description** (string) - Description for the PIX payment. - **amountCents** (integer) - The amount in cents for the PIX payment. - **depositInstructions** (object or null) - Additional deposit instructions. - **party** (object) - Details of the resolved party. - **displayName** (string) - Display name of the party. - **documentMasked** (string) - Masked document number of the party. - **solanaWallet** (string) - The Solana wallet address of the party. - **chainId** (string) - The chain ID of the intent. ### Response Example ```json { "id": "8f2a...", "instanceId": "4e0b...", "partyId": "2f1b...", "intentType": "onramp", "flowVersion": 1, "adapter": null, "status": "awaiting_fiat_payment", "statusReason": null, "clientReference": "ord_123", "metadata": null, "expiresAt": "2026-04-22T12:30:00Z", "createdAt": "2026-04-22T12:00:00Z", "updatedAt": "2026-04-22T12:00:00Z", "pixInfo": { "keyType": "cnpj", "keyValue": "00000000000000", "recipientName": "Nora Financeira", "bank": "Banco XYZ", "description": "Nora onramp ord_123", "amountCents": 10000 }, "depositInstructions": null, "party": { "displayName": "João da Silva", "documentMasked": "***.***.***-01", "solanaWallet": "So11111111111111111111111111111111111111112" }, "chainId": "solana" } ``` ``` -------------------------------- ### Bind Solana Wallet to Party Source: https://www.nora.finance/docs/integrate/api-reference/parties This endpoint binds a Solana wallet address to an existing party. It replaces any previously bound wallet. The request body should only contain the `solanaWallet` field. ```bash curl -X PATCH https://staging.api.nora.finance/v2/parties/:id/wallet \ -H "X-API-Key: $NORA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "solanaWallet": "" }' ``` -------------------------------- ### List Intents Source: https://www.nora.finance/docs/integrate/api-reference/intents Retrieves a list of intents, supporting filtering by type and status, and pagination using limit and offset. Requires an API key. ```APIDOC ## GET /v2/intents ### Description List intents — filterable and paginated with `limit` / `offset`. ### Method GET ### Endpoint /v2/intents ### Headers - **X-API-Key** (string) - Required ### Query Parameters - **intentType** (string) - Optional - Defaults to `"all"`. Can be `"onramp"`, `"offramp"`, or `"all"`. - **status** (string) - Optional - Defaults to `"all"`. Any intent status or `"all"`. - **limit** (number) - Optional - Defaults to `50`. Range: 1–100. - **offset** (number) - Optional - Defaults to `0`. Zero-based index for pagination. ### Response #### Success Response (200) An object containing a list of intents, total count, and pagination details. #### Response Example ```json { "intents": [ { "id": "…", "status": "…", "…": "…" } ], "total": 42, "limit": 50, "offset": 0 } ``` **Note:** Pagination is offset-based. The key for the list is `intents` (plural). ``` -------------------------------- ### Create Party Source: https://www.nora.finance/docs/integrate/api-reference/parties Creates a new party entity for an end-user. This includes identity data and can optionally include contact and reference information. ```APIDOC ## POST /v2/parties ### Description Create a new party. ### Method POST ### Endpoint /v2/parties ### Headers - `X-API-Key` (Yes) - `Content-Type` (Yes) - `application/json` ### Request Body - `cpf` (string) - Required - 11-digit CPF (person) or 14-digit CNPJ (business), digits only. - `displayName` (string) - Required - 2–100 characters. - `partyType` (string) - Optional - Default `"person"`. Can be `"person"` or `"business"`. - `countryCode` (string) - Optional - ISO 3166-1 alpha-2. Default `"BR"`. - `externalRef` (string) - Optional - Your own correlation reference. - `email` (string) - Optional - Valid email address. - `phone` (string) - Optional ### Request Example ```json { "cpf": "12345678901", "displayName": "João da Silva", "partyType": "person", "countryCode": "BR", "email": "joao@example.com", "externalRef": "user_123" } ``` ### Response 201 - `id` (string (uuid)) - Required - Nora-assigned party id. - `instanceId` (string (uuid)) - Required - The instance this party belongs to. - `partyType` (string) - Required - Can be `"person"` or `"business"`. - `countryCode` (string) - Required - `externalRef` (string | null) - Required - Echoed if you supplied one; `null` otherwise. - `status` (string) - Required - Can be `"pending"`, `"active"`, `"suspended"`, or `"blocked"`. - `profile` (object) - Required - See sub-object below. - `createdAt` (string) - Required - ISO 8601 timestamp. - `updatedAt` (string) - Required `profile` sub-object: - `displayName` (string) - Required - `documentType` (string) - Required - e.g. `"cpf"` or `"cnpj"`. - `documentMasked` (string) - Required - Masked rendering, e.g. `"***.***.***-01"`. - `solanaWallet` (string | null) - Required - The bound Solana wallet, `null` until bound. ### Response Example ```json { "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). ``` -------------------------------- ### Create Offramp Intent Source: https://www.nora.finance/docs/integrate/api-reference/intents Initiates an offramp transaction by providing the amount, destination, and chain information. Requires an API key and idempotency key for safe retries. ```APIDOC ## POST /v2/intents/offramp ### Description Initiates an offramp transaction. ### Method POST ### Endpoint /v2/intents/offramp ### Headers - **X-API-Key** (string) - Required - **Content-Type** (string) - Required, must be `application/json` - **idempotency-key** (string) - Required, unique key for idempotency ### Request Body - **amountCents** (integer) - Required - The amount in cents to offramp. - **destinationAddress** (string) - Required - The destination address or email. - **chainId** (string) - Required - The blockchain chain ID (e.g., "solana"). - **clientReference** (string) - Required - A client-defined reference for the transaction. ### Request Example ```json { "amountCents": 10000, "destinationAddress": "user@example.com", "chainId": "solana", "clientReference": "payout_xyz_42" } ``` ### Response #### Success Response (200) Details of the created intent (structure not fully specified, but includes `id`, `status`, etc.). #### Response Example ```json { "id": "some-uuid", "status": "pending", "amountCents": 10000, "destinationAddress": "user@example.com", "chainId": "solana", "clientReference": "payout_xyz_42" } ``` ### Errors - `400` - Body validation error. - `409` - Idempotency key collision. ``` -------------------------------- ### Bind/Replace Solana Wallet Source: https://www.nora.finance/docs/integrate/core-concepts/parties Binds or replaces the Solana wallet associated with a party. ```APIDOC ## PATCH /v2/parties/:id/wallet ### Description Binds or replaces the Solana wallet for a party. The request body contains only the Solana wallet address. ### Method PATCH ### Endpoint /v2/parties/:id/wallet ### Parameters #### Path Parameters - **id** (string) - Required - The unique identifier of the party whose wallet is to be updated. #### Request Body - **solanaWallet** (string) - Required - The Solana wallet address to bind or replace. ### Request Example ```json { "solanaWallet": "newSolanaAddress" } ``` ### Response #### Success Response (200) - **id** (string) - The unique identifier for the party. - **partyType** (string) - The type of the party (`"person"` or `"business"`). - **countryCode** (string) - The country code of the party. - **externalRef** (string | null) - The external reference identifier. - **status** (string) - The status of the party (`"pending"`, `"active"`, `"suspended"`, `"blocked"`). - **profile** (object) - Contains profile details. - **displayName** (string) - The display name of the party. - **documentMasked** (string) - The masked document number. - **solanaWallet** (string | null) - The newly bound Solana wallet address. - **instanceId** (string) - The instance identifier. - **createdAt** (string) - The timestamp when the party was created. - **updatedAt** (string) - The timestamp when the party was last updated. #### Response Example ```json { "id": "party-123", "partyType": "person", "countryCode": "BR", "externalRef": "user-123", "status": "active", "profile": { "displayName": "John Doe", "documentMasked": "***.111.111-**", "solanaWallet": "newSolanaAddress" }, "instanceId": "instance-abc", "createdAt": "2023-10-27T10:00:00Z", "updatedAt": "2023-10-27T10:10:00Z" } ``` ``` -------------------------------- ### Create Offramp Intent Source: https://www.nora.finance/docs/integrate/flows/offramp-intent Creates a new offramp intent to redeem BRS tokens for a BRL payout. This is the first step in the offramp flow. The party is resolved from the wallet binding on file, so `partyId` is not required in the request body. ```APIDOC ## POST /v2/intents/offramp ### Description Creates a new offramp intent for redeeming BRS tokens for a BRL payout via PIX. This endpoint requires an on-chain signature from the token-holder's wallet after the intent is created. ### Method POST ### Endpoint /v2/intents/offramp ### Headers - **X-API-Key** (string) - Required - Your API key. - **idempotency-key** (string) - Recommended - UUID format-validated. See Idempotency. ### Request Body - **amountCents** (integer) - Required - BRL payout amount in cents. Must be > 0. - **destinationAddress** (string) - Required - PIX key or payout reference. 1–255 chars. - **chainId** (string) - Required - Accepted values: "solana" or "polygon". Responses emit "solana" only. - **clientReference** (string) - Optional - Your correlation ID. Up to 255 chars. ### Request Example ```json { "amountCents": 10000, "destinationAddress": "user@example.com", "chainId": "solana", "clientReference": "payout_xyz_42" } ``` ### Response #### Success Response (200) - **id** (string) - The unique identifier for the intent. - **instanceId** (string) - The instance ID of the intent. - **partyId** (string) - The ID of the party initiating the intent. - **intentType** (string) - The type of intent, "offramp" in this case. - **flowVersion** (integer) - The version of the offramp flow. - **adapter** (string) - The adapter used for the payout (can be null). - **status** (string) - The current status of the intent (e.g., "awaiting_burn_approval"). - **statusReason** (string) - Reason for the current status (can be null). - **clientReference** (string) - Your correlation ID. - **metadata** (object) - Additional metadata (can be null). - **expiresAt** (string) - The expiration time of the intent (can be null). - **createdAt** (string) - The creation timestamp of the intent. - **updatedAt** (string) - The last updated timestamp of the intent. - **pixInfo** (object) - PIX-specific information (can be null). - **depositInstructions** (object) - Deposit instructions (always null for offramp). - **party** (object) - Information about the party. - **displayName** (string) - The display name of the party. - **documentMasked** (string) - The masked document number of the party. - **solanaWallet** (string) - The Solana wallet address of the party. - **chainId** (string) - The chain ID associated with the intent. #### Response Example ```json { "id": "8f2a...", "instanceId": "4e0b...", "partyId": "2f1b...", "intentType": "offramp", "flowVersion": 1, "adapter": null, "status": "awaiting_burn_approval", "statusReason": null, "clientReference": "payout_xyz_42", "metadata": null, "expiresAt": null, "createdAt": "2026-04-22T12:00:00Z", "updatedAt": "2026-04-22T12:00:00Z", "pixInfo": null, "depositInstructions": null, "party": { "displayName": "João da Silva", "documentMasked": "***.***.***-01", "solanaWallet": "So11111111111111111111111111111111111111112" }, "chainId": "solana" } ``` ``` -------------------------------- ### Fetch Party Source: https://www.nora.finance/docs/integrate/core-concepts/parties Retrieves a party's details using its unique identifier. ```APIDOC ## GET /v2/parties/:id ### Description Fetches a party by its ID. Returns the same shape as the `POST /v2/parties` response, including the `profile.solanaWallet`. ### Method GET ### Endpoint /v2/parties/:id ### Parameters #### Path Parameters - **id** (string) - Required - The unique identifier of the party to fetch. ### Response #### Success Response (200) - **id** (string) - The unique identifier for the party. - **partyType** (string) - The type of the party (`"person"` or `"business"`). - **countryCode** (string) - The country code of the party. - **externalRef** (string | null) - The external reference identifier. - **status** (string) - The status of the party (`"pending"`, `"active"`, `"suspended"`, `"blocked"`). - **profile** (object) - Contains profile details. - **displayName** (string) - The display name of the party. - **documentMasked** (string) - The masked document number. - **solanaWallet** (string | null) - The bound Solana wallet address, or null if not bound. - **instanceId** (string) - The instance identifier. - **createdAt** (string) - The timestamp when the party was created. - **updatedAt** (string) - The timestamp when the party was last updated. #### Response Example ```json { "id": "party-123", "partyType": "person", "countryCode": "BR", "externalRef": "user-123", "status": "active", "profile": { "displayName": "John Doe", "documentMasked": "***.111.111-**", "solanaWallet": "someSolanaAddress" }, "instanceId": "instance-abc", "createdAt": "2023-10-27T10:00:00Z", "updatedAt": "2023-10-27T10:05:00Z" } ``` ``` -------------------------------- ### Fetch Party Source: https://www.nora.finance/docs/integrate/api-reference/parties Retrieves a specific party's details using its unique identifier. ```APIDOC ## GET /v2/parties/:id ### Description Fetch one party by id. ### Method GET ### Endpoint /v2/parties/:id ### Path Parameters - `id` (string (uuid)) - Required ### Headers - `X-API-Key` (Yes) ### Response 200 Same shape as the `POST /v2/parties` 201 response. ### Errors - `404 { error, code? }` - no party with that id in this org/instance. ``` -------------------------------- ### API Authentication Header Source: https://www.nora.finance/docs/integrate/api-reference Every request to the Nora API requires a single X-API-Key header for authentication. Ensure your key is correctly formatted. ```http X-API-Key: sk_test_... ``` -------------------------------- ### Bind Solana Wallet to Party Source: https://www.nora.finance/docs/integrate/api-reference/parties Binds a Solana wallet address to a party or replaces an existing binding. Each party can only have one Solana wallet associated with it. ```APIDOC ## PATCH /v2/parties/:id/wallet ### Description Bind the party's Solana wallet, or replace an existing binding. Only one Solana wallet per party. ### Method PATCH ### Endpoint /v2/parties/:id/wallet ### Path Parameters - `id` (string (uuid)) - Required ### Headers - `X-API-Key` (Yes) - `Content-Type` (Yes) - `application/json` ### Request Body - `solanaWallet` (string) - Required - Solana wallet address to bind. Replaces any previous binding. ### 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. ``` -------------------------------- ### Bind Solana Wallet - PATCH /v2/parties/:id/wallet Source: https://www.nora.finance/docs/integrate/flows/parties-setup Bind a Solana wallet address to an existing party. This operation replaces any previously bound wallet. Only Solana wallets are supported at this time. ```curl 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" }' ``` -------------------------------- ### List Intents Source: https://www.nora.finance/docs/integrate/api-reference/intents Retrieve a paginated list of intents. You can filter intents by type and status, and control the number of results with limit and offset parameters. ```json { "intents": [ { "id": "…", "status": "…", "…": "…" } ], "total": 42, "limit": 50, "offset": 0 } ```