# Get transaction history Source: https://docs.near-intents.org/api-reference/account/get-transaction-history https://1click.chaindefuser.com/docs/v0/openapi.yaml get /v0/account/history Returns paginated public and confidential transaction history. History is invite-only for now. For the initial request, omit both nextCursor and prevCursor to retrieve the latest history. For subsequent requests, pass either nextCursor or prevCursor from the previous response. # Get user token balances Source: https://docs.near-intents.org/api-reference/account/get-user-token-balances https://1click.chaindefuser.com/docs/v0/openapi.yaml get /v0/account/balances Returns token balances for the authenticated user from private balance sources # Get transactions Source: https://docs.near-intents.org/api-reference/get-transactions https://explorer.near-intents.org/api/v0/openapi.yaml get /api/v0/transactions # Check swap execution status Source: https://docs.near-intents.org/api-reference/oneclick/check-swap-execution-status https://1click.chaindefuser.com/docs/v0/openapi.yaml get /v0/status Retrieves the current status of a swap using the unique deposit address from the quote, if quote response included deposit memo, it is required as well. The response includes the state of the swap (e.g., pending, processing, success, refunded) and any associated swap and transaction details. # Generate an intent for signing Source: https://docs.near-intents.org/api-reference/oneclick/generate-an-intent-for-signing https://1click.chaindefuser.com/docs/v0/openapi.yaml post /v0/generate-intent Generates an unsigned intent payload that needs to be signed by the user. This endpoint takes a quote or limit-order deposit address, validates the target state and caller ownership when required, and returns an intent payload formatted according to the specified signing standard (e.g., NEP413, ERC191). The generated intent must be signed by the user's wallet and then submitted via the `/submit-intent` endpoint to complete the action (e.g. swap). **Request Type Variants:** - `swap_transfer`: Generate an intent for a swap operation (requires depositAddress, signerId, standard) # Get ANY_INPUT withdrawals Source: https://docs.near-intents.org/api-reference/oneclick/get-any_input-withdrawals https://1click.chaindefuser.com/docs/v0/openapi.yaml get /v0/any-input/withdrawals Retrieves all withdrawals by ANY_INPUT quote with filtering, pagination and sorting # Get supported tokens Source: https://docs.near-intents.org/api-reference/oneclick/get-supported-tokens https://1click.chaindefuser.com/docs/v0/openapi.yaml get /v0/tokens Retrieves a list of tokens currently supported by the 1Click API for asset swaps. Each token entry includes its blockchain, contract address (if available), price in USD, and other metadata such as symbol and decimals. # Request a swap quote Source: https://docs.near-intents.org/api-reference/oneclick/request-a-swap-quote https://1click.chaindefuser.com/docs/v0/openapi.yaml post /v0/quote Generates a swap quote based on input parameters such as the assets, amount, slippage tolerance, and recipient/refund information. Returns pricing details, estimated time, and a unique **deposit address** to which tokens must be transferred to initiate the swap. You can set the `dry` parameter to `true` to simulate the quote request **without generating a deposit address** or initiating the swap process. This is useful for previewing swap parameters or validating input data without committing to an actual swap. This endpoint is the first required step in the swap process. # Submit a signed intent Source: https://docs.near-intents.org/api-reference/oneclick/submit-a-signed-intent https://1click.chaindefuser.com/docs/v0/openapi.yaml post /v0/submit-intent Submits a signed intent to execute. After generating an intent for a quote or limit order via `/generate-intent` and having the user sign it with their wallet, submit the signed intent through this endpoint. The system validates the signature, processes the intent, and returns the intent hash upon successful submission. **Request Type Variants:** - `swap_transfer`: Submit a signed swap intent (requires signedData object) # Submit deposit transaction hash Source: https://docs.near-intents.org/api-reference/oneclick/submit-deposit-transaction-hash https://1click.chaindefuser.com/docs/v0/openapi.yaml post /v0/deposit/submit Optionally notifies the 1Click service that a deposit has been sent to the specified address, using the blockchain transaction hash. This step can speed up swap processing by allowing the system to preemptively verify the deposit. # Cancel an order Source: https://docs.near-intents.org/api-reference/order/cancel-an-order https://1click.chaindefuser.com/docs/v0/openapi.yaml post /v0/orders/{orderId}/cancel Requests asynchronous cancellation. Unspent input is refunded and successfully filled output is withdrawn. **Errors.** Branch on `code`, never on `title` or `detail`. New codes arrive without a major version, so treat an unrecognized code as the HTTP status alone. | Status | Codes | | --- | --- | | 400 | `order-rejected` | | 401 | `authentication-required` | | 404 | `order-not-found` | | 429 | `rate-limit-exceeded` | | 500 | `internal-error` | | 503 | `service-unavailable` | # Create an order Source: https://docs.near-intents.org/api-reference/order/create-an-order https://1click.chaindefuser.com/docs/v0/openapi.yaml post /v0/orders Creates a confidential order. **Errors.** Branch on `code`, never on `title` or `detail`. New codes arrive without a major version, so treat an unrecognized code as the HTTP status alone. | Status | Codes | | --- | --- | | 400 | `malformed-request`, `validation-failed`, `request-rejected`, `order-rejected` | | 401 | `authentication-required` | | 403 | `client-generated-id` | | 409 | `resource-type-mismatch` | | 429 | `rate-limit-exceeded` | | 500 | `internal-error` | | 503 | `service-unavailable` | # Get an order Source: https://docs.near-intents.org/api-reference/order/get-an-order https://1click.chaindefuser.com/docs/v0/openapi.yaml get /v0/orders/{orderId} Retrieves an order. **Errors.** Branch on `code`, never on `title` or `detail`. New codes arrive without a major version, so treat an unrecognized code as the HTTP status alone. | Status | Codes | | --- | --- | | 401 | `authentication-required` | | 404 | `order-not-found` | | 429 | `rate-limit-exceeded` | | 500 | `internal-error` | | 503 | `service-unavailable` | # List orders Source: https://docs.near-intents.org/api-reference/order/list-orders https://1click.chaindefuser.com/docs/v0/openapi.yaml get /v0/orders Retrieves visible orders, newest first. **Errors.** Branch on `code`, never on `title` or `detail`. New codes arrive without a major version, so treat an unrecognized code as the HTTP status alone. | Status | Codes | | --- | --- | | 400 | `validation-failed` | | 401 | `authentication-required` | | 429 | `rate-limit-exceeded` | | 500 | `internal-error` | | 503 | `service-unavailable` | # Authenticate User with Signed Data Source: https://docs.near-intents.org/api-reference/user-auth/authenticate-user-with-signed-data post /v0/auth/authenticate Exchange a signed message for a User-Session access token Send this endpoint a signed message from your user, and you'll get back a **User-Session** token. That token is what lets the user's confidential balances and transaction history (`GET /v0/account/balances`, `GET /v0/account/history`) be revealed. It's separate from your Partner JWT, which authenticates your integration, not an individual user. This is part of **Confidential Intents**. See [Authenticating end users](/integration/distribution-channels/1click-api/authentication#authenticating-end-users-confidential-intents) for the full guide. ## Getting a signature to send Your user's NEAR wallet produces `public_key` and `signature`. The steps: 1. Build a NEP-413 payload: `recipient` set to `"intents.near"`, a fresh random `nonce`, and `message` set to a stringified JSON object with an empty `intents` array plus a `deadline` and the user's `signer_id`. The empty `intents` array is what makes this a proof of ownership instead of a real swap. 2. Have the user's wallet sign that payload. The wallet returns the `publicKey` that signed it and the resulting `signature`, both prefixed `ed25519:`. 3. Send `payload`, `public_key`, and `signature` together as `signedData` on this endpoint. If you're on `@defuse-protocol/intents-sdk`, `createIntentSignerNEP413` and `buildAndSign()` do steps 1 and 2 for you, that's what the TypeScript SDK example below uses. ## Example request ```bash cURL theme={null} curl -X POST https://1click.chaindefuser.com/v0/auth/authenticate \ -H "Content-Type: application/json" \ -d '{ "signedData": { "standard": "nep413", "payload": { "recipient": "intents.near", "nonce": "Vij2xgAlKBKzAEiS6N1S/hfrNi8/We0ieTmcMBti1YE=", "message": "{\"deadline\":\"2026-07-16T12:00:00.000Z\",\"intents\":[],\"signer_id\":\"your-account.near\"}" }, "public_key": "ed25519:YOUR_PUBLIC_KEY", "signature": "ed25519:YOUR_SIGNATURE" } }' ``` ```javascript JavaScript theme={null} const response = await fetch('https://1click.chaindefuser.com/v0/auth/authenticate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ signedData: { standard: 'nep413', payload: { recipient: 'intents.near', nonce: 'Vij2xgAlKBKzAEiS6N1S/hfrNi8/We0ieTmcMBti1YE=', message: JSON.stringify({ deadline: '2026-07-16T12:00:00.000Z', intents: [], signer_id: 'your-account.near' }) }, public_key: 'ed25519:YOUR_PUBLIC_KEY', signature: 'ed25519:YOUR_SIGNATURE' } }) }); const auth = await response.json(); ``` ```typescript TypeScript SDK theme={null} import { createIntentSignerNEP413, IntentsSDK } from '@defuse-protocol/intents-sdk'; import { UserAuthService } from '@defuse-protocol/one-click-sdk-typescript'; // Step 1 + 2: wire up a signer backed by the user's wallet const signer = createIntentSignerNEP413({ accountId: userAccountId, signMessage: async (_payload, hash) => { const { publicKey, signature } = await userWallet.signMessage(hash); return { publicKey: publicKey.toString(), signature: Buffer.from(signature).toString('base64') }; }, }); // Build a payload with an empty intents array (just a signature, not a real swap) and sign it const sdk = new IntentsSDK({ referral: 'your-integration', env: 'production' }); const { signed } = await sdk .intentBuilder() .setDeadline(new Date(Date.now() + 5 * 60_000)) .buildAndSign(signer); // Step 3: exchange the signed payload for a User-Session token const auth = await UserAuthService.authenticate({ signedData: signed }); // auth.accessToken, auth.refreshToken, auth.expiresIn, auth.refreshExpiresIn ``` ## Example response ```json theme={null} { "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "expiresIn": 3600, "refreshExpiresIn": 2592000 } ``` `signedData` is the same `MultiPayload` signed-message format used for [Signing Intents](/integration/verifier-contract/signing-intents), signed here with an empty `intents` array. It's used purely as proof of account ownership, not a real swap. Store `refreshToken` securely. Anyone holding it can mint new `accessToken`s for this account until it expires. # Refresh Access Token Source: https://docs.near-intents.org/api-reference/user-auth/refresh-access-token post /v0/auth/refresh Exchange a refresh token for a new access token Once the `accessToken` from [Authenticate User with Signed Data](/api-reference/user-auth/authenticate-user-with-signed-data) expires, exchange `refreshToken` for a new `accessToken` without re-signing. ## Example request ```bash cURL theme={null} curl -X POST https://1click.chaindefuser.com/v0/auth/refresh \ -H "Content-Type: application/json" \ -d '{ "refreshToken": "YOUR_REFRESH_TOKEN" }' ``` ```javascript JavaScript theme={null} const response = await fetch('https://1click.chaindefuser.com/v0/auth/refresh', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ refreshToken: 'YOUR_REFRESH_TOKEN' }) }); const auth = await response.json(); ``` ## Example response ```json theme={null} { "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "expiresIn": 3600 } ``` The response only contains a new `accessToken`, `refreshToken` itself does not rotate. Keep using the same `refreshToken` until it expires (`refreshExpiresIn` from the original authenticate call). # Changelog Source: https://docs.near-intents.org/changelog/overview What's new in NEAR Intents. ## August 2026 ### 1Click API: Limit Orders Wallets and apps can rest a confidential swap at a price the user sets, through the 1Click Swap API. This is not Perpetuals on near.com. Offer a swap at the user's price through the 1Click Swap API. ## July 2026 ### Confidential Intents B2B launch Confidential Intents is live for B2B partners. Confidential swaps execute on a private chain with shielded balances and settle back to public NEAR through the Private PoA Bridge. Two-chain architecture, shield and unshield flows, versioned nonces, and the solver response format. ### Changelog on the docs website This changelog is now part of the docs site. New features, API changes, and launches land here as dated entries. Bookmark this page to track what's new in NEAR Intents. ### WebSocket-only whitelisted solvers on Confidential Intents Solver access on the confidential relay is now gated by an allowlist. Whitelisted solvers connect over WebSocket only, subscribing to relay streams and responding with signed quotes; solvers not on the list are denied entirely. Whitelisted solvers receive quote requests and respond via `quote_response` over `/ws`. Contact the Defuse team to get whitelisted. ### FE (near.com): Limit Orders on Perpetuals Perpetuals on near.com now support limit orders. Set your price and the order fills when the market reaches it. Place limit orders on the Perpetuals interface at near.com. ### Shield Incident API A partner-facing API to pull active Shield incidents and submit new ones. Use `GET`/`POST https://shield.chaindefuser.com/incident` with a `SHIELD` API key. Endpoints, request and response shapes, scope fields, and how to get a token. ### Confidentiality parameter Quote requests now accept a `confidentiality` field that makes a normal quote a confidential swap. What changed, the two integration paths, and an example request. ## June 2026 ### Verify Quote Signatures 1Click signs quote payloads so partners can verify the payload origin and detect tampering before using fields like `depositAddress` in 1click quote response payloads. What is signed, how to verify, and code examples. # What are Intents? Source: https://docs.near-intents.org/getting-started/what-are-intents Define desired outcomes instead of managing execution steps An intent expresses **what you want** to achieve, **not how to get it**. Instead of writing code to bridge assets, find quotes, and execute swaps, you submit an intent such as *"I have 1 ETH on Ethereum, I want USDC on Arbitrum"*.