For the complete documentation index, see llms.txt. This page is also available as Markdown.

Create off-ramp request

Delegated Contract Mode will be deprecated soon; new partners should use Managed Custody Mode. Executes a crypto-to-fiat deposit. Always call /v1/deposit/quote first and pass the returned quoteId; UR validates urId, tokens, and amount against the original quote and rejects mismatches. requestId must be globally unique and reused on retries.

post
/v1/deposit
Authorizations
X-Api-SignaturestringRequired

Partner Auth: EIP-191 signature by the partner's registered backend key, with X-Api-Deadline and optional X-Api-PublicKey headers. See the Signature and verify guide.

Header parameters
X-Api-SignaturestringRequired

Partner's EIP-191 signature (0x-prefixed hex).

X-Api-DeadlinestringRequired

Unix seconds when the request signature expires (within 5 minutes).

X-Api-PublicKeystringOptional

Partner's signer Ethereum address.

Body
urIdinteger · int64Required

UR user ID.

inputTokenstringRequired

Input token symbol (USDC only).

outputTokenstringRequired

Output fiat token symbol.

amountstringRequired

Deposit amount in smallest units. Minimum 5 USDC.

requestIdstringRequired

Idempotency key; reuse on retry.

quoteIdstringRequired

Quote ID from /v1/deposit/quote. Strongly recommended: locks in the quoted fees and UR validates the request against the quote. When omitted, the deposit is processed without fee deduction (backward-compatible behavior).

chainIdstringOptional

Source chain ID (CAIP-2). Defaults to Mantle when omitted.

userAddressstringOptional

User's wallet address; required for cross-chain deposits.

Responses
200

Response envelope. For the user API, retCode 0 means success; for the partner API, code 0 means success. Business rejections return HTTP 200 with a non-zero code.

application/json

Standard response envelope for the partner API (openapi.ur.app).

codeinteger · int64Required

0 on success; non-zero indicates a business rejection.

messagestringRequired

Human-readable diagnostic; empty on success.

dataanyOptional

Business payload. Shape depends on the endpoint.

post/v1/deposit
POST /v1/deposit HTTP/1.1
Host: openapi.ur.app
X-Api-Signature: text
X-Api-Deadline: text
Content-Type: application/json
Accept: */*
Content-Length: 148

{
  "urId": 12345,
  "inputToken": "USDC",
  "outputToken": "USD",
  "amount": "5000000",
  "requestId": "deposit-202401010001",
  "quoteId": "deposit_1700000000000_12345"
}
200

Response envelope. For the user API, retCode 0 means success; for the partner API, code 0 means success. Business rejections return HTTP 200 with a non-zero code.

{
  "code": 0,
  "message": "",
  "data": {
    "txHash": "0x1234567890abcdef..."
  }
}

Last updated