Authentication & Security
Nomad Pay uses an asymmetric Ed25519 key pair model for all API communication to ensure maximum security and non-repudiation.API Requests (You -> Nomad Pay)
- Signing: You sign the request using your Secret Key (Private Key).
- Verification: We verify using your Public Key (sent in the
x-api-keyheader).
Webhooks (Nomad Pay -> You)
- Signing: We sign the webhook payload using the Secret Key associated with your account’s latest active API Key.
- Identification: We include the corresponding Public Key in the
x-api-keyheader of the webhook request. - Verification: You use the Public Key provided in the header to verify the signature.
Anti-Replay
nonce: Every request must include a unique, strictly increasing integer (typically a Unix timestamp in milliseconds) to prevent replay attacks.
HTTPS
- All communication must be over HTTPS. Unencrypted HTTP requests will be rejected.
Non-Custodial Settlement
Nomad Pay operates on a non-custodial model. This affects how funds move and how you should track them.- Direct Transfer: When a customer pays, the funds (minus the platform fee) are routed directly from the customer’s wallet to your configured
Receiving Address. - No Platform Balance: We do not hold your funds. You will not see a “Withdraw” button in the dashboard because the money is already in your wallet.
- Automatic Conversion: If you configured a
Default Token(e.g., USDC), incoming payments in other tokens (e.g., ETH) are automatically swapped before reaching your wallet.
Payment Lifecycle
Understanding the status of a payment is crucial for your order fulfillment logic.Pending:- The payment intent has been created. The customer has not yet paid, or the transaction is broadcasting on the blockchain.
Success:- The transaction has been confirmed on the blockchain and funds have successfully settled to your wallet. You should ship goods/services only upon receiving this status via Webhook.
Failed:- The payment failed (e.g., insufficient funds, transaction reverted, or timeout).
Expired:- The payment link/session has expired (default 1 hour) without a completed payment.
Standard Responses
All API responses use a unified JSON structure. Success Response (200 OK):1001: Parameter validation failed1002: Authentication failed1003: Invalid signature1004: Nonce replay rejected2001: Internal server error
Pagination
List endpoints (likeGET /v1/transactions) support pagination via query parameters.
-
Request Parameters:
page: The page number (default: 1).limit: Number of items per page (default: 20, max: 100).
-
Response Structure:
Rate Limiting
To ensure platform stability, API requests are rate-limited.- Standard Limit: 100 requests per minute per IP address.
- Headers: Response headers
X-RateLimit-LimitandX-RateLimit-Remainingindicate your current usage. - 429 Too Many Requests: If you exceed the limit, you will receive this HTTP status. Please implement a retry logic with exponential backoff.