NEAR Intents: API Reference
Request quotes and publish intents via JSON-RPC
NEAR Intents exposes an RPC endpoint to request quotes, publish signed intents, and check intent status on the Message Bus.
Endpoint: POST https://solver-relay-v2.chaindefuser.com/rpc
Authentication
This endpoint requires a JWT authentication token. Include the token in the X-API-Key header:
X-API-Key: <your_jwt_token>
To obtain an API key, register through the Partner Portal.
[!WARNING]
Developers searching to integrate swap functionality should use the 1Click Swap API instead.
quote
Request price quotes from connected solvers. The Message Bus forwards the request to all solvers, waits up to 3000ms, and returns all available options.
[!NOTE]
Only one of
exact_amount_inorexact_amount_outshould be provided, not both.
defuse_asset_identifier_in string required
Asset to trade from (e.g., nep141:ft1.near)
defuse_asset_identifier_out string required
Asset to trade to (e.g., nep141:ft2.near)
exact_amount_in string
Amount of input token for exchange
exact_amount_out string
Amount of output token for exchange
min_deadline_ms number (default: 60000)
Minimum validity time for offers (in milliseconds). Shorter times may yield better prices.
Example request
{ "id": 1, "jsonrpc": "2.0", "method": "quote", "params": [ { "defuse_asset_identifier_in": "nep141:ft1.near", "defuse_asset_identifier_out": "nep141:ft2.near", "exact_amount_in": "1000", "min_deadline_ms": 60000 } ] }
Example response
{ "jsonrpc": "2.0", "id": 1, "result": [ { "quote_hash": "00000000000000000000000000000000", "defuse_asset_identifier_in": "nep141:ft1.near", "defuse_asset_identifier_out": "nep141:ft2.near", "amount_in": "1000", "amount_out": "2000", "expiration_time": "2024-10-01T12:10:27Z" } ] }Response fields:
quote_hash- Quote response hashdefuse_asset_identifier_in- Asset to trade fromdefuse_asset_identifier_out- Asset to trade toamount_in- Input amount (exact if specified, proposed otherwise)amount_out- Output amount (exact if specified, proposed otherwise)expiration_time- Expiration timestamp of the offer
publish_intent
Submit a signed user intent for execution. Supported signature standards: nep413, erc191, raw_ed25519.
[!NOTE]
public_keyandsignaturecome from signing the intent message with the NEAR key you registered on the Verifier contract (add_public_key, see the Quickstart's "Deposit liquidity" step), not from a value you construct by hand. The Example Solver walks through the real signing code (near-api-js'ssignMessage, then bs58-encoding the result with aned25519:prefix). For the full field-by-field spec of every supported standard (includingerc191andraw_ed25519below), see Signing Intents.
NEP-413
quote_hashes string[] required
Quote response hashes from solvers
signed_data object required
standard-"nep413"payload.message- Stringified intent payloadpayload.nonce- Unique noncepayload.recipient-"intents.near"payload.callbackUrl- Optional, for some walletssignature- Signature of the payloadpublic_key- Signer's public key
Example request
{ "id": 1, "jsonrpc": "2.0", "method": "publish_intent", "params": [ { "quote_hashes": ["00000000000000000000000000000000"], "signed_data": { "standard": "nep413", "payload": { "recipient": "intents.near", "nonce": "Vij2xgAlKBKzAEiS6N1S/hfrNi8/We0ieTmcMBti1YE=", "message": "{\"deadline\":\"2024-10-14T12:53:40.000Z\",\"intents\":[{\"intent\":\"token_diff\",\"diff\":{\"nep141:ft1.near\":\"300\",\"nep141:ft2.near\":\"-500\"}}],\"signer_id\":\"user.near\"}" }, "public_key": "ed25519:C3jXhkGhEx88Gj7XKtUziJKXEBMRaJ67bWFkxJikVxZ2", "signature": "ed25519:5tk3UyFcAgnd6D4ZAuzEdZqMrneRSiTqe48ptjbjYHwiCy2vTw38uDB3KusW2cEsF3TGcqZXoQmRaeNs2erhPpqu" } } ] }
ERC-191
quote_hashes string[] required
Quote response hashes from solvers
signed_data object required
standard-"erc191"payload- Stringified intent payloadsignature- Signature of the payload
Example request
{ "id": 1, "jsonrpc": "2.0", "method": "publish_intent", "params": [ { "quote_hashes": ["00000000000000000000000000000000"], "signed_data": { "standard": "erc191", "payload": "{\"deadline\":\"2024-10-14T12:53:40.000Z\",\"intents\":[{\"intent\":\"token_diff\",\"diff\":{\"nep141:ft1.near\":\"300\",\"nep141:ft2.near\":\"-500\"}}],\"signer_id\":\"0x1dda60d784483fbb54304c68830d42a706327c6d\"}", "signature": "0x8a1b7e...c1b" } } ] }
Raw Ed25519
quote_hashes string[] required
Quote response hashes from solvers
signed_data object required
standard-"raw_ed25519"payload- Stringified intent payloadsignature- Signature of the payloadpublic_key- Signer's public key
Example request
{ "id": 1, "jsonrpc": "2.0", "method": "publish_intent", "params": [ { "quote_hashes": ["00000000000000000000000000000000"], "signed_data": { "standard": "raw_ed25519", "payload": "{\"deadline\":\"2024-10-14T12:53:40.000Z\",\"intents\":[{\"intent\":\"token_diff\",\"diff\":{\"nep141:ft1.near\":\"300\",\"nep141:ft2.near\":\"-500\"}}],\"signer_id\":\"user.near\"}", "public_key": "ed25519:C3jXhkGhEx88Gj7XKtUziJKXEBMRaJ67bWFkxJikVxZ2", "signature": "ed25519:5tk3UyFcAgnd6D4ZAuzEdZqMrneRSiTqe48ptjbjYHwiCy2vTw38uDB3KusW2cEsF3TGcqZXoQmRaeNs2erhPpqu" } } ] }
Example response
{ "jsonrpc": "2.0", "id": 1, "result": { "status": "OK", "intent_hash": "00000000000000000000000000000000" } }Response fields:
status-"OK"or"FAILED"reason- Error reason (if failed)intent_hash- Intent identifier
publish_intents
Submit multiple signed intents in one call. If any fail, the relay automatically requotes and retries the failed ones rather than failing the whole batch.
quote_hashes string[] required
Quote response hashes from solvers, one set per intent being published
signed_datas object[] required
Array of signed intents, same shape as signed_data in publish_intent
requote boolean (default: false)
When true, automatically requests a fresh quote and retries any intent that fails to publish, instead of just reporting the failure
Example request
{ "id": 1, "jsonrpc": "2.0", "method": "publish_intents", "params": [ { "quote_hashes": ["00000000000000000000000000000000"], "signed_datas": [ { "standard": "nep413", "payload": { "recipient": "intents.near", "nonce": "Vij2xgAlKBKzAEiS6N1S/hfrNi8/We0ieTmcMBti1YE=", "message": "{\"deadline\":\"2024-10-14T12:53:40.000Z\",\"intents\":[{\"intent\":\"token_diff\",\"diff\":{\"nep141:ft1.near\":\"300\",\"nep141:ft2.near\":\"-500\"}}],\"signer_id\":\"user.near\"}" }, "public_key": "ed25519:C3jXhkGhEx88Gj7XKtUziJKXEBMRaJ67bWFkxJikVxZ2", "signature": "ed25519:5tk3UyFcAgnd6D4ZAuzEdZqMrneRSiTqe48ptjbjYHwiCy2vTw38uDB3KusW2cEsF3TGcqZXoQmRaeNs2erhPpqu" } ], "requote": true } ] }
Example response
{ "jsonrpc": "2.0", "id": 1, "result": { "status": "OK", "intent_hash": "00000000000000000000000000000000" } }Response fields are the same as publish_intent.
get_status
Check the status of an intent's execution.
intent_hash string required
Intent identifier
Example request
{ "id": 1, "jsonrpc": "2.0", "method": "get_status", "params": [ { "intent_hash": "00000000000000000000000000000000" } ] }
Example response
{ "jsonrpc": "2.0", "id": 1, "result": { "intent_hash": "00000000000000000000000000000000", "status": "SETTLED", "status_details": "Settled in block 123456789", "data": { "hash": "8yFNEk7GmRcM3NMJihwCKXt8ZANLpL2koVFWWH1MEEj" }, "filled_amounts": ["300"] } }Response fields:
intent_hash- Intent identifierstatus- Execution status (see status values below)status_details- Human-readable detail on the current status (e.g. failure reason forNOT_FOUND_OR_NOT_VALID)data.hash- NEAR transaction hash (if available)filled_amounts- Amounts actually filled per leg, in the order the intent's diffs were specified (useful when atoken_diffonly partially fills)
Status Description PENDINGIntent received, awaiting execution TX_BROADCASTEDTransaction sent to the Verifier contract SETTLEDSuccessfully settled on-chain NOT_FOUND_OR_NOT_VALIDIntent not received, expired, or execution error