# Authentication Source: https://docs.rampnow.io/api-reference/authentication Access to APIs and Authentication To start working with the Rampnow API, all clients must authenticate with valid keys provided in the Rampnow partner dashboard. An app token is a secure method of communication with our API. You can create an app token in the Partner Dashboard. ### Environments | Environment | API base URL | Widget host | | ----------- | -------------------------------- | -------------------------------- | | Production | `https://api.rampnow.io` | `https://app.rampnow.io` | | Sandbox | `https://api.sandbox.rampnow.io` | `https://app.sandbox.rampnow.io` | Keys are environment-scoped: a sandbox key must be used against the sandbox hosts (`*.sandbox.rampnow.io`) — for both the API and the widget — and a production key against the production hosts. A sandbox key will not work on production hosts, or vice versa. ### Make requests Authentication to Rampnow's API is performed via the custom HTTP header | Property | Description | | ------------------- | ------------------------------------------------------------------------- | | X-RAMPNOW-API-KEY | an API Key that you generate in the Dashboard | | X-RAMPNOW-SIGN | a request signature in the HEX format. The signature is case insensitive. | | X-RAMPNOW-TIMESTAMP | number of seconds since Unix Epoch in UTC. | All API queries must be sent over HTTPS; plain HTTP will be refused. You must include your auth headers in all requests. ### Sign requests The value of the X-RAMPNOW-SIGN header is generated with the sha256 HMAC algorithm using a secret key (Secret key is generated in the merchant Dashboard as part of API key creation) on the bytes obtained by concatenating the following information: All API requests must be signed using HMAC-SHA256 with your secret key. The signature ensures request authenticity and prevents tampering. ### How Request Signing Works Every API request requires two headers: * `X-RAMPNOW-TIMESTAMP`: Current Unix timestamp * `X-RAMPNOW-SIGN`: HMAC-SHA256 signature of your request The signature is generated using your secret key (obtained from the merchant Dashboard during API key creation) on a message constructed from your request details. ### Signing Your Requests Create a Unix timestamp value for the `X-RAMPNOW-TIMESTAMP` header. Concatenate the following in order: 1. Timestamp (as a string) 2. HTTP method in uppercase (e.g., `GET`, `POST`) 3. URI path with query parameters (e.g., `/api/partner/v1/ext/ramp_order/quote?srcCurrency=USD&dstCurrency=BTC`) 4. Request body (if present, exactly as it will be sent) Create an HMAC-SHA256 hash of the message using your secret key and set it as the `X-RAMPNOW-SIGN` header value. Your timestamp must be within 1 minute of the API server time. Ensure your server time is correctly synchronized. ### Examples of how you can sign your requests: ```python Python theme={null} message = timestamp + 'POST' + url_path + body hmac_message = hmac.digest(SECRET_KEY.encode(), message.encode(), hashlib.sha256) ``` ### Code Examples ```python Python theme={null} import time import base64 import hashlib import hmac import json import requests SECRET_KEY = 'api-secret-key' API_KEY = 'api-key' base_url = 'https://api.rampnow.io' path = '/api/partner/v1/ext/ramp_order/quote' # Prepare request data payload_data = { "orderType": "buy", "srcAmount": "100.0", "srcCurrency": "EUR", "srcChain": "fiat", "dstChain": "ethereum", "dstCurrency": "ETH", "paymentMode": "card", "apiKey": API_KEY, "walletAddress": "0x6782f3309EAE59BbffbE87d9f3d4117298861468", "walletAddressTag": "", "externalOrderId": "ajsdiauhdiqw7e78322wrnbjsahd", } # Prepare request body payload = json.dumps(payload_data) # Generate timestamp timestamp = str(int(time.time())) # Construct message message = timestamp + 'POST' + path + payload # Generate HMAC signature signature = base64.b16encode(hmac.digest(SECRET_KEY.encode(), message.encode(), hashlib.sha256)).decode().lower() # Set headers headers = { 'X-RAMPNOW-TIMESTAMP': timestamp, 'X-RAMPNOW-SIGN': signature, 'X-RAMPNOW-API-KEY': API_KEY, 'Content-Type': 'application/json' } # Make request url = base_url + path response = requests.post(url, headers=headers, data=payload) print(response.status_code, response.text) # Expected output for verification: # Timestamp: 1772080882 # X-RAMPNOW-SIGN: 64-char hex HMAC of the EXACT bytes shown above. Different JSON # formatting (key order/whitespace) yields a different, still-valid signature — # always sign the body you actually send, byte for byte. ``` ```javascript Node.js theme={null} const crypto = require('crypto'); const https = require('https'); const SECRET_KEY = 'api-secret-key'; const API_KEY = 'api-key'; const baseUrl = 'https://api.rampnow.io'; const path = '/api/partner/v1/ext/ramp_order/quote'; // Prepare request data const payloadData = { orderType: "buy", srcAmount: "100.0", srcCurrency: "EUR", srcChain: "fiat", dstChain: "ethereum", dstCurrency: "ETH", paymentMode: "card", apiKey: API_KEY, walletAddress: "0x6782f3309EAE59BbffbE87d9f3d4117298861468", walletAddressTag: "", externalOrderId: "ajsdiauhdiqw7e78322wrnbjsahd", }; // Prepare request body const payload = JSON.stringify(payloadData); // Generate timestamp const timestamp = String(Math.floor(Date.now() / 1000)); // Construct message const message = timestamp + 'POST' + path + payload; // Generate HMAC signature const signature = crypto .createHmac('sha256', SECRET_KEY) .update(message) .digest('hex'); // Set headers const headers = { 'X-RAMPNOW-TIMESTAMP': timestamp, 'X-RAMPNOW-SIGN': signature, 'X-RAMPNOW-API-KEY': API_KEY, 'Content-Type': 'application/json' }; // Make request const url = new URL(baseUrl + path); const options = { hostname: url.hostname, port: 443, path: url.pathname, method: 'POST', headers: headers }; const req = https.request(options, (res) => { let data = ''; res.on('data', (chunk) => { data += chunk; }); res.on('end', () => { console.log(res.statusCode, data); }); }); req.on('error', (error) => { console.error(error); }); req.write(payload); req.end(); // Expected output for verification: // Timestamp: 1772080882 // X-RAMPNOW-SIGN: 64-char hex HMAC of the EXACT bytes shown above. Different JSON // formatting (key order/whitespace) yields a different, still-valid signature — // always sign the body you actually send, byte for byte. ``` ```go Go theme={null} package main import ( "bytes" "crypto/hmac" "crypto/sha256" "encoding/hex" "encoding/json" "fmt" "io" "net/http" "time" ) func main() { secretKey := "api-secret-key" apiKey := "api-key" baseURL := "https://api.rampnow.io" path := "/api/partner/v1/ext/ramp_order/quote" // Prepare request data payloadData := map[string]any{ "orderType": "buy", "srcAmount": "100.0", "srcCurrency": "EUR", "srcChain": "fiat", "dstChain": "ethereum", "dstCurrency": "ETH", "paymentMode": "card", "apiKey": apiKey, "walletAddress": "0x6782f3309EAE59BbffbE87d9f3d4117298861468", "walletAddressTag": "", "externalOrderId": "ajsdiauhdiqw7e78322wrnbjsahd", } // Prepare request body payload, _ := json.Marshal(payloadData) // Generate timestamp timestamp := fmt.Sprintf("%d", time.Now().Unix()) // Construct message message := timestamp + "POST" + path + string(payload) // Generate HMAC signature h := hmac.New(sha256.New, []byte(secretKey)) h.Write([]byte(message)) signature := hex.EncodeToString(h.Sum(nil)) // Set headers req, _ := http.NewRequest("POST", baseURL+path, bytes.NewBuffer(payload)) req.Header.Set("X-RAMPNOW-TIMESTAMP", timestamp) req.Header.Set("X-RAMPNOW-SIGN", signature) req.Header.Set("X-RAMPNOW-API-KEY", apiKey) req.Header.Set("Content-Type", "application/json") // Make request client := &http.Client{} resp, _ := client.Do(req) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(resp.StatusCode, string(body)) } // Expected output for verification: // Timestamp: 1772080882 // X-RAMPNOW-SIGN: 64-char hex HMAC of the EXACT bytes shown above. Different JSON // formatting (key order/whitespace) yields a different, still-valid signature — // always sign the body you actually send, byte for byte. ``` ```java Java theme={null} import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.HexFormat; import com.google.gson.Gson; import java.util.HashMap; import java.util.Map; public class RampnowAPI { public static void main(String[] args) throws Exception { String secretKey = "api-secret-key"; String apiKey = "api-key"; String baseUrl = "https://api.rampnow.io"; String path = "/api/partner/v1/ext/ramp_order/quote"; // Prepare request data Map payloadData = new HashMap<>(); payloadData.put("orderType", "buy"); payloadData.put("srcAmount", "100.0"); payloadData.put("srcCurrency", "EUR"); payloadData.put("srcChain", "fiat"); payloadData.put("dstChain", "ethereum"); payloadData.put("dstCurrency", "ETH"); payloadData.put("paymentMode", "card"); payloadData.put("apiKey", apiKey); payloadData.put("walletAddress", "0x6782f3309EAE59BbffbE87d9f3d4117298861468"); payloadData.put("walletAddressTag", ""); payloadData.put("externalOrderId", "ajsdiauhdiqw7e78322wrnbjsahd"); // Prepare request body Gson gson = new Gson(); String payload = gson.toJson(payloadData); // Generate timestamp String timestamp = String.valueOf(Instant.now().getEpochSecond()); // Construct message String message = timestamp + "POST" + path + payload; // Generate HMAC signature Mac hmacSha256 = Mac.getInstance("HmacSHA256"); SecretKeySpec secretKeySpec = new SecretKeySpec( secretKey.getBytes(StandardCharsets.UTF_8), 0, secretKey.getBytes(StandardCharsets.UTF_8).length, "HmacSHA256" ); hmacSha256.init(secretKeySpec); byte[] hmacBytes = hmacSha256.doFinal(message.getBytes(StandardCharsets.UTF_8)); String signature = HexFormat.of().formatHex(hmacBytes); // Create HTTP request HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(baseUrl + path)) .POST(HttpRequest.BodyPublishers.ofString(payload)) .header("X-RAMPNOW-TIMESTAMP", timestamp) .header("X-RAMPNOW-SIGN", signature) .header("X-RAMPNOW-API-KEY", apiKey) .header("Content-Type", "application/json") .build(); // Make request HttpClient client = HttpClient.newHttpClient(); HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body()); } } // Expected output for verification: // Timestamp: 1772080882 // X-RAMPNOW-SIGN: 64-char hex HMAC of the EXACT bytes shown above. Different JSON // formatting (key order/whitespace) yields a different, still-valid signature — // always sign the body you actually send, byte for byte. ``` ## Quick Reference | Component | Description | | ------------ | ------------------------------------------------------- | | Secret Key | Generated in merchant Dashboard during API key creation | | Timestamp | Unix timestamp, must be within 1 minute of server time | | HTTP Method | Uppercase method name (GET, POST, etc.) | | URI Path | Full path with query parameters, starting with / | | Request Body | Exact body as sent (omit for GET requests) | # GetAssetConfig Source: https://docs.rampnow.io/api-reference/configuration/getassetconfig /api-reference/partner_external.yaml get /api/partner/v1/ext/ramp_order/asset_config # GetBlockedCurrencies Source: https://docs.rampnow.io/api-reference/configuration/getblockedcurrencies /api-reference/partner_external.yaml get /api/partner/v1/ext/ramp_order/blocked_currencies # GetChainConfig Source: https://docs.rampnow.io/api-reference/configuration/getchainconfig /api-reference/partner_external.yaml get /api/partner/v1/ext/ramp_order/chain_config # GetPaymentModeConfig Source: https://docs.rampnow.io/api-reference/configuration/getpaymentmodeconfig /api-reference/partner_external.yaml get /api/partner/v1/ext/ramp_order/payment_mode_config # GetRampOrderConfig Source: https://docs.rampnow.io/api-reference/configuration/getramporderconfig /api-reference/partner_external.yaml get /api/partner/v1/ext/ramp_order/config # GetTokenConfig Source: https://docs.rampnow.io/api-reference/configuration/gettokenconfig /api-reference/partner_external.yaml get /api/partner/v1/ext/ramp_order/token_config # Error Codes Source: https://docs.rampnow.io/api-reference/error-codes Exhaustive list of possible error codes ## Overview The Rampnow API returns standard HTTP status codes to indicate the success or failure of API requests. These codes are returned by the server and provide immediate feedback about your request. HTTP status codes are different from application error codes. Status codes indicate the HTTP-level result, while error codes provide specific application-level details. ## Error Response Body Every failed request returns the standard envelope with an application `code` and two message fields: ```json theme={null} { "code": 100004, "message": "invalid_args_err", "displayError": "Amount is below the minimum for this route.", "traceId": "b1f2c3d4-..." } ``` | Field | Description | | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `code` | Application error code — **branch your logic on this**, not on message text. See the tables below. | | `message` | A stable, generic label for the `code`. It is safe to log but **never** contains internal or upstream-provider error detail. | | `displayError` | Optional human-readable message safe to show your end user (e.g. "Amount is below the minimum for this route."). Present only when a user-facing message applies; when absent, fall back to your own copy keyed on `code`. | | `traceId` | Identifier for the request in Rampnow logs — include it when contacting support. | Do not parse `message` for meaning or display it to end users — it is a generic code label and its exact text may change. Use `code` programmatically and `displayError` (or your own copy) for user-facing text. ## API Status Code Categories ### 2xx - Success **Success** The request was successful and the server returned the requested data. ```json theme={null} { "code": 0, "data": { ... } } ``` **Resource Created** The request was successful and a new resource was created. **Success with No Content** The request was successful but there is no content to return. ### 4xx - Client Errors **Invalid Request** The request is malformed or contains invalid parameters. Check your request payload and parameters. **Common causes:** * Missing required fields * Invalid JSON format * Incorrect data types **Authentication Failed** Authentication credentials are missing or invalid. **Common causes:** * Missing `X-RAMPNOW-API-KEY` header * Invalid API key * Missing or incorrect signature * Expired timestamp **Access Denied** You don't have permission to access this resource. **Common causes:** * Insufficient account permissions * API key doesn't have required scope * IP address not whitelisted **Resource Not Found** The requested resource doesn't exist. **Common causes:** * Incorrect endpoint URL * Invalid resource ID * Resource has been deleted **Validation Error** The request is well-formed but contains semantic errors. **Common causes:** * Business logic validation failed * Invalid currency pair * Amount outside allowed range **Rate Limit Exceeded** You have exceeded the API rate limit. **Solution:** Wait before making additional requests. Check the `Retry-After` header for guidance. ### 5xx - Server Errors **Server Error** An unexpected error occurred on the server. **Action:** Retry the request. If the issue persists, contact support with your request details. **Bad Gateway** The server received an invalid response from an upstream server. **Action:** This is usually temporary. Retry the request after a short delay. **Service Unavailable** The service is temporarily unavailable, usually due to maintenance or overload. **Action:** Retry the request after some time. Check the `Retry-After` header if provided. **Gateway Timeout** The server didn't receive a timely response from an upstream server. **Action:** Retry the request. Consider reducing payload size if applicable. ## Status Code Reference Table | Status Code | Status Text | Category | Description | | ----------- | --------------------- | ------------ | ------------------------------------ | | 200 | OK | Success | Request successful | | 201 | Created | Success | Resource created successfully | | 204 | No Content | Success | Success with no response body | | 400 | Bad Request | Client Error | Invalid request format or parameters | | 401 | Unauthorized | Client Error | Authentication required or failed | | 403 | Forbidden | Client Error | Access denied | | 404 | Not Found | Client Error | Resource not found | | 422 | Unprocessable Entity | Client Error | Validation error | | 429 | Too Many Requests | Client Error | Rate limit exceeded | | 500 | Internal Server Error | Server Error | Unexpected server error | | 502 | Bad Gateway | Server Error | Invalid upstream response | | 503 | Service Unavailable | Server Error | Service temporarily unavailable | | 504 | Gateway Timeout | Server Error | Upstream server timeout | ## API Error Code categories The Rampnow API uses standardized error codes to indicate the success or failure of requests. All error responses include a numeric code to help you identify and handle specific error conditions. ### Success Response **Code:** `0` Request completed successfully. ### Client Errors (100000-100019) The requested resource could not be found. Verify the endpoint URL and resource ID. Authentication credentials are missing or invalid. Check your API key and signature. You don't have permission to access this resource. Verify your account permissions. One or more request parameters are invalid. Review the request payload and parameter requirements. The request conflicts with the current state of the resource. Check for duplicate operations. The request or resource has expired. Generate a new request with updated timestamp. The request contains invalid data. Validate your input against the API specification. Multi-factor authentication is required for this operation. The request is malformed or contains errors. Review the request structure. Your account or IP has been blocked. Contact support for assistance. The resource or entity is blacklisted and cannot be processed. ### Operational Errors (100020-100023) Maximum retry attempts exceeded. Wait before retrying the operation. The requested operation or feature is not supported. Multi-factor authentication setup is required before proceeding. The quote provided is invalid or has expired. Request a new quote. ### Server Errors (100024-100032) An internal server error occurred. Retry the request or contact support if the issue persists. The request timed out. Retry with a shorter payload or check your connection. Request payload exceeds the maximum allowed size. Reduce the payload size. Rate limit exceeded. Wait before making additional requests. Bad gateway error. The server received an invalid response from an upstream server. Service is temporarily unavailable. Retry after some time. Gateway timeout. The server did not receive a timely response from an upstream server. HTTP method not allowed for this endpoint. Check the API documentation for allowed methods. The request is well-formed but contains semantic errors. Validate your business logic. ### System Errors (100003, 100006-100013) An unknown error occurred. Contact support with your request details. Database error occurred. Retry the request or contact support. Error serializing or deserializing data. Check your request format. Internal system error. Contact support if the issue persists. HTTP communication error. Check your network connection and retry. System setup or configuration error. Contact support. Feature not yet implemented. Check the API documentation for available features. External API error. A third-party service encountered an issue. Operation timed out. Retry the request. ## Quick Reference Table | Code | Error Name | Category | Description | | ------ | ---------------------- | ----------- | ---------------------------------------------- | | 0 | Success | Success | Request completed successfully | | 100000 | NotFoundErr | Client | Resource not found | | 100001 | NotAuthenticatedErr | Client | Authentication failed | | 100002 | NotAuthorizedErr | Client | Authorization failed | | 100003 | UnknownErr | System | Unknown error | | 100004 | InvalidArgsErr | Client | Invalid arguments | | 100005 | ConflictErr | Client | Resource conflict | | 100006 | DbErr | System | Database error | | 100007 | MarshalErr | System | Serialization error | | 100008 | InternalErr | System | Internal error | | 100009 | HttpErr | System | HTTP error | | 100010 | SetupErr | System | Setup error | | 100011 | NotImplementedErr | System | Not implemented | | 100012 | ExtApiErr | System | External API error | | 100013 | TimeoutErr | System | Timeout error | | 100014 | ExpiredErr | Client | Resource expired | | 100015 | InvalidErr | Client | Invalid data | | 100016 | MfaRequiredErr | Client | MFA required | | 100017 | RequestErr | Client | Request error | | 100018 | BlockedErr | Client | Account blocked | | 100019 | BlacklistedErr | Client | Resource blacklisted | | 100020 | RetryExceededErr | Operational | Retry limit exceeded | | 100021 | NotSupportedErr | Operational | Not supported | | 100022 | MfaSetupRequiredErr | Operational | MFA setup required | | 100023 | InvalidQuoteErr | Operational | Invalid quote | | 100024 | ServerErr | Server | Server error | | 100025 | RequestTimeoutErr | Server | Request timeout | | 100026 | PayloadSizeErr | Server | Payload too large | | 100027 | RateLimitErr | Server | Rate limit exceeded | | 100028 | BadGatewayErr | Server | Bad gateway | | 100029 | ServiceUnavailableErr | Server | Service unavailable | | 100030 | GatewayTimeoutErr | Server | Gateway timeout | | 100031 | InvalidMethodErr | Server | Invalid HTTP method | | 100032 | UnprocessableEntityErr | Server | Unprocessable entity | | 100033 | LowLiquidityErr | Operational | Insufficient liquidity for the requested quote | Always implement proper error handling in your application. Log error codes and messages for debugging purposes. # Hosted Mode Integration Source: https://docs.rampnow.io/api-reference/hosted-mode Complete control over user experience with minimal Rampnow branding Hosted mode gives you full control over the user experience. Users stay on your platform throughout the entire flow. ## Overview Hosted mode allows you to integrate Rampnow's on-ramp and off-ramp services while maintaining complete control over the user interface. Unlike widget integration, users never leave your platform — you control the entire experience, with Rampnow handling only the payment steps when needed.
Keep users on your platform throughout the entire flow Minimal Rampnow branding, maximum control Build your own interface using Rampnow's REST APIs
*** ## Implementation Steps This step is **optional**. Create Order (next step) accepts the same `user` object and onboards the customer automatically. Call Create Customer User up front only if you want to pre-register a customer or fetch their KYC status via the returned `uid` before creating an order. Use the [Create Customer User](/api-reference/users/createcustomeruser) endpoint. It returns a customer `uid` you can use with [Get Customer KYC](/api-reference/users/getcustomeruserkyc). ```bash cURL theme={null} curl --request POST \ --url https://api.rampnow.io/api/partner/v1/ext/customer_user \ --header 'Content-Type: application/json' \ --header 'X-RAMPNOW-API-KEY: YOUR_API_KEY' \ --header 'X-RAMPNOW-TIMESTAMP: UNIX_SECONDS' \ --header 'X-RAMPNOW-SIGN: HMAC_SHA256_SIGNATURE' \ --data '{ "userDetail": { "firstName": "John", "lastName": "Doe", "email": "john@example.com", "phone": "+491234567890", "dateOfBirth": "1990-01-15", "gender": "male", "country": "DE", "address": { "line1": "123 Main St", "city": "Berlin", "postalCode": "10115", "country": "DE" } } }' ``` ### Key fields | Field | Required | Description | | ----------------------------------- | -------- | ------------------------------------------------- | | `userDetail.firstName` / `lastName` | Required | User's name | | `userDetail.email` | Required | User's email address | | `userDetail.phone` | Required | Phone number with country code | | `userDetail.dateOfBirth` | Required | Date of birth in `YYYY-MM-DD` format | | `userDetail.gender` | Required | `male`, `female` or `unknown` | | `userDetail.country` | Required | ISO 3166-1 alpha-2 country code (e.g. `DE`, `US`) | | `userDetail.address` | Optional | User's residential address | Create an order using the [Create Hosted Order](/api-reference/onoff-ramp-orders/createcheckoutorder) endpoint. The response includes a `redirectUrl` — send the user there to complete payment (and any KYC) on Rampnow's hosted screens. ```bash cURL theme={null} curl --request POST \ --url https://api.rampnow.io/api/partner/v1/ext/ramp_order/checkout \ --header 'Content-Type: application/json' \ --header 'X-RAMPNOW-API-KEY: YOUR_API_KEY' \ --header 'X-RAMPNOW-TIMESTAMP: UNIX_SECONDS' \ --header 'X-RAMPNOW-SIGN: HMAC_SHA256_SIGNATURE' \ --data '{ "orderType": "buy", "externalOrderUid": "your-unique-order-id", "srcCurrency": "EUR", "srcChain": "fiat", "srcAmount": "250", "dstCurrency": "ETH", "dstChain": "ethereum", "user": { "firstName": "John", "lastName": "Doe", "email": "john@example.com", "phone": "+491234567890", "dateOfBirth": "1990-01-15", "gender": "male", "country": "DE" }, "wallet": { "address": "0xUserDestinationWalletAddress", "custodyType": "unhosted" } }' ``` ### Key fields | Field | Required | Description | | -------------------------- | -------- | ------------------------------------------------------------------------------------------------ | | `orderType` | Required | `buy` (onramp) or `sell` (offramp) | | `externalOrderUid` | Required | Your unique order id — used later to look the order up | | `srcCurrency` / `srcChain` | Required | What the user pays with. For an onramp: fiat currency (e.g. `EUR`) on chain `fiat` | | `srcAmount` | Required | Amount in `srcCurrency` | | `dstCurrency` / `dstChain` | Optional | Crypto asset + network to deliver (e.g. `ETH` on `ethereum`) | | `user` | Required | Customer details — `firstName`, `lastName`, `email`, `phone`, `dateOfBirth`, `gender`, `country` | | `wallet` | Optional | Destination wallet `{ address, custodyType }` (`custodyType`: `unhosted` or `hosted`) | The response returns `orderUid`, `userUid` and a `redirectUrl`. Redirect the user to `redirectUrl`; track the outcome via webhooks (below) or by polling the order (see [Track order status](#track-order-status)). Track transaction status in real-time by configuring webhooks in your **Rampnow Partner Dashboard**. Webhook setup documentation is available in our [Webhook Guide](/api-reference/webhook). *** ## Integration Flow ```mermaid theme={null} sequenceDiagram participant User participant Partner as Your Platform participant Rampnow as Rampnow API User->>Partner: Initiates buy/sell Partner->>Rampnow: Create Customer User Rampnow-->>Partner: User onboarded Partner->>Rampnow: Create Hosted Order Rampnow-->>Partner: Order + payment details Partner->>User: Display payment instructions User->>Partner: Completes payment Rampnow-->>Partner: Webhook notification (order status) Partner->>User: Confirm transaction ``` *** ## Support & Config Endpoints Instead of probing `asset_config` pair-by-pair, use these bulk endpoints to discover what is live: | Endpoint | Returns | | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | `GET /api/partner/v1/ext/ramp_order/config` | Full support matrix in one call: every configured asset, payment mode and order type, split by direction (`buy` = onramp, `sell` = offramp). | | `GET /api/partner/v1/ext/ramp_order/blocked_currencies` | Supported countries with the crypto currencies blocked in each. Pass `?country=` to filter to one country. | Both are HMAC-authenticated like the rest of the external API. *** ## Partner Fee (Markup) To take a margin on an order, pass your fee on the quote and order-creation requests. Both fields are optional and **override** the fee configured on your account for that request: | Field | Type | Description | | ----------------- | ------ | ------------------------------------------------------------------- | | `partnerPctFee` | number | Partner fee as a percentage of the order amount (e.g. `1.5` = 1.5%) | | `partnerFixedFee` | number | Fixed partner fee in the order's base currency | They apply to the quote (`/ext/ramp_order/quote`) and the checkout order (`/ext/ramp_order/checkout`). When omitted, the account-configured partner fee applies. The resolved partner amount is returned as a separate `partner` entry in `feeDetails` on the **order** responses — `GET /ext/ramp_order/{uid}` and the webhook — so you can reconcile it (see below). It is **not** broken out in the quote, where it stays folded into the `platform` line. Add either field to the Create Order body from the previous step, e.g.: ```json theme={null} { "orderType": "buy", "externalOrderUid": "your-unique-order-id", "srcCurrency": "EUR", "srcChain": "fiat", "srcAmount": "250", "dstCurrency": "ETH", "dstChain": "ethereum", "user": { "firstName": "John", "lastName": "Doe", "email": "john@example.com", "phone": "+491234567890", "dateOfBirth": "1990-01-15", "gender": "male", "country": "DE" }, "wallet": { "address": "0xUserDestinationWalletAddress", "custodyType": "unhosted" }, "partnerPctFee": 1.5 } ``` *** ## Fee Breakdown (`feeDetails`) Quote and order responses return a `feeDetails` array. Each entry has a `type`, `fee`, `currency`, and `isInclusive`. The returned `type` values are: | `type` | Description | Where | | ---------- | --------------------------------------------------------------------------------------------- | -------------------------------------------------- | | `platform` | Aggregated platform fee (Rampnow service + processing, and — in the quote — your partner fee) | quote + order | | `network` | Blockchain network (gas) fee | quote + order | | `partner` | Your partner fee / markup, broken out as its own line | order only (`GET /ext/ramp_order/{uid}` + webhook) | **Reconciliation.** In the quote, the partner fee is folded into `platform`, so `total = platform + network`. On the order responses it is broken out: `platform` **excludes** the partner amount and a `partner` line is added, so `total = platform + network + partner` — the total is identical either way. *** ## Track order status You receive a webhook on every order status change (recommended — see [Webhooks](/api-reference/webhook)). To poll instead, use [Get Order](/api-reference/onoff-ramp-orders/getramporderbyexternaluid): ```bash cURL theme={null} curl --request GET \ --url https://api.rampnow.io/api/partner/v1/ext/ramp_order/your-unique-order-id \ --header 'X-RAMPNOW-API-KEY: YOUR_API_KEY' \ --header 'X-RAMPNOW-TIMESTAMP: UNIX_SECONDS' \ --header 'X-RAMPNOW-SIGN: HMAC_SHA256_SIGNATURE' ``` * The path parameter is **your** `externalOrderUid` (the id you sent on Create Order), not Rampnow's `orderUid`. * The response is an **array** — `orderList` — of orders matching that external id (normally one). Read `status` (and `paymentStatus`) from the entry; the full list of statuses and their meaning is in the [webhook status table](/api-reference/webhook). ## When to Use Hosted Mode * Platforms requiring a fully custom user experience * Teams wanting minimal Rampnow branding * Applications needing full UI control over every step * Requires custom UI development on your end * Integration takes longer than widget mode or the SDK * You manage the user flow and error handling *** ## Next Steps
Onboard users with the Create Customer User endpoint Create hosted orders via the API Set up real-time transaction status notifications Prefer a quicker integration? Try the SDK with built-in event handling
# CreateCheckoutOrder Source: https://docs.rampnow.io/api-reference/onoff-ramp-orders/createcheckoutorder /api-reference/partner_external.yaml post /api/partner/v1/ext/ramp_order/checkout # GetRampOrderByExternalUid Source: https://docs.rampnow.io/api-reference/onoff-ramp-orders/getramporderbyexternaluid /api-reference/partner_external.yaml get /api/partner/v1/ext/ramp_order/{uid} # GetRampOrderQuote Source: https://docs.rampnow.io/api-reference/onoff-ramp-orders/getramporderquote /api-reference/partner_external.yaml post /api/partner/v1/ext/ramp_order/quote # Overview Source: https://docs.rampnow.io/api-reference/overview Basics of Rampnow API ## Getting Started Begin your integration using the Sandbox environment at `api.sandbox.rampnow.io`. This allows you to test without affecting real data. Verify all API endpoints, error handling and edge cases work as expected in Sandbox. Once testing is complete and your integration is stable, request Production access. Switch your base URL to `api.rampnow.io` and go live with confidence. ## Open API documentation Our OpenAPI documentation: [OpenAPI](https://rampnow-io.github.io/core/partner_external.yaml). For the starter kit, we are using the following OpenAPI specification. View the OpenAPI specification file ## API Environments Rampnow provides two separate environments to support your development and production workflows:
`https://api.rampnow.io` Live environment for production applications with real transactions. `https://api.sandbox.rampnow.io` Testing environment for development and integration testing.
### Environment Comparison | Feature | Sandbox | Production | | ------------ | ----------------------- | ----------------- | | Base URL | api.sandbox.rampnow\.io | api.rampnow\.io | | Purpose | Testing & Development | Live Transactions | | Data | Test data only | Real data | | Access | Immediate | Requires approval | | Transactions | Simulated | Real | Both environments use the same API structure and authentication methods. Simply change the base URL when moving from Sandbox to Production. You must thoroughly test your integration in Sandbox mode before requesting access to Production. Production access is granted only after successful integration testing. ## API Versioning The Rampnow API follows a stable versioning policy to ensure your integrations remain functional. ### Our Versioning Promise **Breaking Changes** * All incompatible or breaking changes are versioned * Existing endpoints will continue to work without modification * You control when to migrate to new API versions **Non-Breaking Changes** * New fields may be added to JSON responses at any time * New optional parameters may be introduced * New endpoints may be added **Important:** We may add additional fields to JSON responses without notice or version changes. Ensure your code can handle unknown properties gracefully. ## Response Format All API responses return JSON payloads with a consistent structure: ### Success Response Every response is wrapped in `{ code, message, traceId, data }` (`data` holds the endpoint's payload; `code` `0` = success). ```JSON JSON theme={null} { "code": 0, "message": "success", "traceId": "b1f2c3d4-...", "data": { "orderUid": "5de57551-3272-4af5-86a4-5eeae6ccc37f", "status": "completed" } } ``` ### Error Response ```JSON JSON theme={null} { "code": 100004, "message": "invalid_args_err", "displayError": "Amount is below the minimum for this route.", "traceId": "b1f2c3d4-..." } ``` Rely on **`code`** to branch your logic, not on the message text. * **`message`** is a stable, generic label for the error `code` (e.g. `invalid_args_err`). It never contains internal or upstream-provider error detail. * **`displayError`** is an optional, human-readable message safe to show to your end user (e.g. "Amount is below the minimum for this route."). It is present only when a user-facing message applies; fall back to your own copy keyed on `code` when it is absent. * **`traceId`** identifies the request in our logs — include it when contacting support. ## Key Features Built on REST principles with predictable resource-oriented URLs and standard HTTP methods. All responses are returned in JSON format for easy parsing and integration. All API requests must be made over HTTPS. Plain HTTP requests are rejected for security. Secure request signing using HMAC-SHA256 ensures request authenticity and integrity. Detailed error codes and messages help you quickly identify and resolve issues. ## Next Steps Ready to start building? Here's what to do next:
Learn how to authenticate your API requests Understand error codes and how to handle them Explore available API endpoints
# Postman Collection Source: https://docs.rampnow.io/api-reference/postman-collection Explore and test Rampnow API with Postman ## Overview Postman is an application designed to help with API integration and exploration. Intuitive for different tech skill levels, it's the tool of choice for both experienced developers and those new to APIs to get familiar with available endpoints, requests, and responses. Using our Rampnow Postman Collection, you can start testing our API before you write a single line of code. Explore endpoints, understand request/response structures, and validate your integration setup in an interactive environment. The Postman collection includes pre-configured requests for all major Rampnow API endpoints with built-in authentication headers and sample payloads. ## Getting Started with Postman ### Prerequisites Before importing the Rampnow collection, ensure you have: * A Rampnow Partner Dashboard account * Your API Key and Secret Key generated from the Dashboard * Either the Postman desktop app or Postman web version ### Install Postman 1. **Download and install** the [Postman app](https://www.postman.com/downloads/) or use [Postman online](https://www.postman.com/product/rest-client/) 2. **Create or sign into** your Postman account ### Import the Rampnow Collection Copy the Rampnow Postman collection link from [here](https://rampnow-io.github.io/core/partner_external-postman.json). Click the "Run in Postman" button or manually import by: * Opening Postman * Going to **File** → **Import** * Pasting the collection link or uploading the JSON file Create or import the Rampnow environment and configure: * `api_key`: Your API Key from the Partner Dashboard * `api_secret`: Your Secret Key from the Partner Dashboard * `base_url`: The API base URL (sandbox or production) Browse the collection folders to explore different API endpoints and test requests ## What's Included The Rampnow Postman collection includes:
Pre-configured request signing with HMAC-SHA256 authentication headers Complete set of onramp API requests for currency conversions and payments Offramp API requests for converting crypto back to fiat currencies Real-time pricing and quote endpoints for both onramp and offramp flows Endpoints for creating, updating, and tracking orders Pre-filled request bodies demonstrating proper payload formatting
## Using the Collection ### Making Your First Request 1. Select an endpoint from the collection 2. Review the request details (method, URL, headers) 3. Modify the path or query parameters as needed 4. Click **Send** to execute the request 5. View the response in the response panel ### Testing Different Environments The collection supports both Sandbox and Production environments: * Switch between environments using the environment selector dropdown * Sandbox requests go to `https://api.sandbox.rampnow.io` * Production requests go to `https://api.rampnow.io` Always test your integration thoroughly in the Sandbox environment before switching to Production. ## Collection Structure The collection is organized into folders by functionality: | Folder | Purpose | | -------------------------- | ----------------------------------------- | | **Authentication** | Authentication setup and signing examples | | **Sandbox Environment** | Sandbox-specific requests and test data | | **Production Environment** | Production API requests | | **Quotes** | Quote and pricing endpoints | | **Orders** | Order creation and management endpoints | | **Settlement** | Settlement and transaction endpoints | ## Postman Collection Import the Rampnow Postman collection to try the partner API with your keys. ## Next Steps * Review the [Authentication](./authentication.mdx) guide to understand request signing * Explore the [API Reference](./overview.mdx) for detailed endpoint documentation * Test with sample payloads in the Sandbox environment * Review [Error Codes](./error-codes.mdx) for handling API responses ## Tips & Best Practices * **Use variables** for frequently changed values (API keys, amounts, addresses) * **Create custom scripts** in the Pre-request tab to automate timestamp and signature generation * **Save responses** to keep track of successful requests * **Use collections** to organize requests by workflow * **Export results** for documentation and troubleshooting Need help? Check out the [Postman documentation](https://learning.postman.com/) or contact our support team for assistance with integration. # Quick Start Source: https://docs.rampnow.io/api-reference/quickstart Get started with Rampnow integration in minutes Welcome to the Rampnow Quick Start Guide! This guide will walk you through integrating Rampnow's on-ramp and off-ramp services into your platform. ## Choose Your Integration Method Rampnow offers three powerful integration options to seamlessly add cryptocurrency on/off-ramp services to your platform:
Take full control of the user journey. The entire on/off ramp experience is managed by you, giving you complete customization and branding control. Embed Rampnow's on/off ramp directly into your application for a seamless, plug-and-play user experience with minimal setup. Install the `@rampnow/sdk` npm package for a developer-friendly integration with TypeScript support, event handling, and a React hook.
These integration methods ensure your users can buy and sell cryptocurrencies effortlessly, with access to multiple payment options and supported assets. ## Hosted Mode Integration In hosted mode, you control the entire user journey through the on/off ramp process. This gives you maximum flexibility for customization and branding. ### What is Hosted Mode? Hosted mode allows you to integrate Rampnow's services while maintaining complete control over the user interface and experience. Your users interact with your platform throughout the entire transaction flow. ### Key Features Design and customize every aspect of the user interface to match your brand identity and user experience standards. Manage the entire transaction flow, from initiation to completion, within your own application environment. Integrate Rampnow's API endpoints directly into your backend systems for maximum flexibility. ### Getting Started with Hosted Mode Contact our sales team or log into the Partner Dashboard to generate your API keys and secret. Implement the authentication flow using your API credentials. See our [Authentication Guide](/api-reference/authentication) for details. Use our API endpoints to create quotes, initiate orders and track transaction status. Design and implement your custom user interface that calls our API endpoints. Thoroughly test your integration in our Sandbox environment before going live. Explore detailed documentation for Hosted Mode integration *** ## Widget Mode Integration Widget mode provides a pre-built, embeddable solution that you can add to your application with minimal code. Perfect for quick integration. ### What is Widget Mode? Widget mode offers a ready-to-use interface that you can embed directly into your application. Rampnow handles the UI and transaction flow while you maintain control over when and where the widget appears. ### Key Features Get up and running in minutes with just a few lines of code. No complex backend integration required. Use our professionally designed, mobile-responsive interface that's ready to go out of the box. Benefit from automatic updates and improvements to the widget without any code changes on your end. Customize colors, themes and branding to match your application's look and feel. ### Getting Started with Widget Mode Obtain your unique App key from the Partner Dashboard. Define a container element in your HTML where the widget will be embedded. ```html theme={null}
```
Here’s an example of a full URL with all the parameters. ```html theme={null} https://app.rampnow.io/order/quote?apiKey=YOUR_API_KEY&srcCurrency=EUR&srcAmount=250&dstCurrency=BTC&dstChain=bitcoin&walletAddress=0xYourWalletAddress ``` Initialize widget by passing the constructed Rampnow widget URL as below. ```html theme={null} ```
Explore detailed documentation for Widget Mode integration *** ## Rampnow SDK The Rampnow SDK is the recommended way to integrate the widget with full programmatic control, event handling, and TypeScript support. ### What is the Rampnow SDK? The [`@rampnow/sdk`](https://www.npmjs.com/package/@rampnow/sdk) package wraps the widget integration into a developer-friendly JavaScript/TypeScript SDK. It supports overlay, embedded, and redirect modes, and ships with a React hook for seamless use in React applications. ### Quick Example ```javascript theme={null} import { RampnowSdk, RampnowEventType } from '@rampnow/sdk' const sdk = new RampnowSdk({ apiKey: 'pk_live_YOUR_API_KEY', srcCurrency: 'EUR', dstCurrency: 'ETH', walletAddress: '0xYourWalletAddress', }) sdk .on(RampnowEventType.ORDER_COMPLETED, (e) => { console.log('Order completed:', e.payload.orderUid) }) .init() ``` ### Key Features Choose between **Overlay** (full-screen modal), **Embedded** (inline in your layout), or **Redirect** (URL for native apps and email links). Subscribe to 13+ lifecycle events — order creation, payment status, errors, and more. Use `useRampnowSdk` for idiomatic React integration with minimal boilerplate. Full type definitions included out of the box for type-safe configuration and event handling. Try the SDK live at [demo.rampnow.io](https://demo.rampnow.io/). Explore the full SDK reference — installation, configuration, events, and React integration *** ## What's Next?
Explore our complete API documentation with endpoints, parameters and examples Learn how to securely authenticate your API requests View the complete list of supported cryptocurrencies and fiat currencies Have questions? Our team is here to help you get started
Need help? Contact our support team at [support@rampnow.io](mailto:support@rampnow.io) or visit our [Help Center](https://support.rampnow.io/portal/en/home). # Rampnow SDK Source: https://docs.rampnow.io/api-reference/sdk JavaScript/TypeScript SDK for embedding the Rampnow onramp and offramp widget into any website or web app The Rampnow SDK provides a developer-friendly wrapper around the widget integration, with full TypeScript support, event handling, and a React hook. ## Overview The `@rampnow/sdk` package lets you embed Rampnow's onramp/offramp widget into your application with just a few lines of code. It supports three integration modes and ships with TypeScript definitions out of the box.
Full-screen modal overlay — quickest setup, no container needed Mount the widget inside any DOM element in your layout Generate a URL to open in a new tab — ideal for native apps or email links First-class React support via `useRampnowSdk`
Try the SDK live at [demo.rampnow.io](https://demo.rampnow.io/). *** ## Installation ```bash npm theme={null} npm install @rampnow/sdk ``` ```bash yarn theme={null} yarn add @rampnow/sdk ``` ```bash pnpm theme={null} pnpm add @rampnow/sdk ``` **CDN (no bundler):** ```html theme={null} ``` When loaded via CDN, the SDK is available as `window.RampnowSdk`. *** ## Quick Start Obtain your public API key from the [Rampnow Partner Dashboard](https://partner.rampnow.io) under **API Hub**. Keys are prefixed with `pk_live_...`. ```javascript theme={null} import { RampnowSdk, RampnowEventType } from '@rampnow/sdk' const sdk = new RampnowSdk({ apiKey: 'pk_live_YOUR_API_KEY', orderType: 'buy', srcCurrency: 'EUR', dstCurrency: 'ETH', dstChain: 'ethereum', }) ``` ```javascript theme={null} sdk.init() ``` ```javascript theme={null} sdk.on(RampnowEventType.ORDER_COMPLETED, (e) => { console.log('Order completed:', e.payload.orderUid) }) ``` *** ## Configuration Pass a config object when creating a new `RampnowSdk` instance: | Option | Type | Default | Description | | ------------------ | ------------------ | ------------------------ | -------------------------------------------------- | | `apiKey` | `string` | **required** | Partner public API key | | `widgetUrl` | `string` | `https://app.rampnow.io` | Override the widget base URL | | `containerId` | `string` | — | DOM element ID for embedded mode; omit for overlay | | `width` | `string \| number` | `450` | Iframe width (px) | | `height` | `string \| number` | `700` | Iframe height (px) | | `orderType` | `'buy' \| 'sell'` | — | Pre-select order direction | | `srcCurrency` | `string` | — | Source currency, e.g. `'EUR'`, `'USD'` | | `srcChain` | `string` | — | Source chain | | `dstCurrency` | `string` | — | Destination currency, e.g. `'ETH'`, `'BTC'` | | `dstChain` | `string` | — | Destination chain, e.g. `'ethereum'`, `'bitcoin'` | | `paymentMode` | `string` | — | Payment method, e.g. `'sepa'`, `'ach'` | | `srcAmount` | `string` | — | Pre-fill source amount | | `walletAddress` | `string` | — | Pre-fill recipient wallet address | | `walletAddressTag` | `string` | — | Wallet memo/tag (for XRP, XLM, etc.) | | `externalOrderId` | `string` | — | Your own order ID for cross-referencing | | `utm_source` | `string` | — | UTM tracking | | `utm_medium` | `string` | — | UTM tracking | | `utm_campaign` | `string` | — | UTM tracking | *** ## Integration Modes ### Overlay Mode (Default) Opens the widget as a full-screen modal overlay. No container element needed. ```javascript theme={null} import { RampnowSdk } from '@rampnow/sdk' const sdk = new RampnowSdk({ apiKey: 'pk_live_YOUR_API_KEY', orderType: 'buy', srcCurrency: 'EUR', dstCurrency: 'ETH', dstChain: 'ethereum', }) sdk.init() // Opens the overlay ``` ### Embedded Mode Mount the widget inside a specific DOM element by providing a `containerId`. ```html theme={null}
``` ```javascript theme={null} import { RampnowSdk } from '@rampnow/sdk' const sdk = new RampnowSdk({ apiKey: 'pk_live_YOUR_API_KEY', containerId: 'rampnow-widget', width: 450, height: 700, orderType: 'buy', dstCurrency: 'ETH', dstChain: 'ethereum', }) sdk.init() ``` ### Redirect Mode Generate a widget URL without opening an iframe — useful for native apps, email links, or server-side flows. ```javascript theme={null} import { RampnowSdk } from '@rampnow/sdk' const url = RampnowSdk.createRedirectUrl({ apiKey: 'pk_live_YOUR_API_KEY', orderType: 'buy', srcCurrency: 'EUR', srcAmount: '250', dstCurrency: 'BTC', dstChain: 'bitcoin', walletAddress: '0xYourWalletAddress', }) window.open(url, '_blank') ``` *** ## React Integration The SDK ships with a React hook for seamless integration in React applications. React (`>=18`) and ReactDOM (`>=18`) are optional peer dependencies — only required when using the hook. ```tsx theme={null} import { useRampnowSdk } from '@rampnow/sdk/react' import { RampnowCommandType, RampnowEventType } from '@rampnow/sdk' import { useEffect } from 'react' function BuyCryptoButton() { const { init, close, send, on, isOpen } = useRampnowSdk({ apiKey: 'pk_live_YOUR_API_KEY', srcCurrency: 'EUR', dstCurrency: 'ETH', }) useEffect(() => { on(RampnowEventType.ORDER_COMPLETED, (e) => { console.log('Completed:', e.payload.orderUid) close() }) }, [on, close]) return } ``` *** ## API Reference ### `new RampnowSdk(config)` Creates an SDK instance. Validates the `apiKey` and merges defaults. Does **not** open the widget — call `.init()` to display it. ### `sdk.init(): RampnowSdk` Opens the widget. If `containerId` is set, mounts the iframe in that element; otherwise creates a full-screen overlay. Returns `this` for chaining. ### `sdk.close(): void` Closes and removes the widget from the DOM. ### `sdk.on(eventType, callback): RampnowSdk` Subscribe to widget events. Returns `this` for chaining. ```javascript theme={null} // Single event sdk.on(RampnowEventType.ORDER_CREATED, callback) // Multiple events sdk.on([RampnowEventType.ORDER_CREATED, RampnowEventType.ORDER_COMPLETED], callback) // All events sdk.on('*', callback) ``` ### `sdk.off(eventType, callback): RampnowSdk` Unsubscribe from events. Same forms as `.on()`. ### `sdk.send(commandType, payload): RampnowSdk` Send a command to the widget iframe. Returns `this` for chaining. See [Commands](#commands) for available command types. ```javascript theme={null} import { RampnowCommandType } from '@rampnow/sdk' sdk.send(RampnowCommandType.UPDATE_PAYMENT_DETAIL, { transactionHash: '0xabc123...', }) ``` ### `sdk.isOpen: boolean` Read-only property indicating whether the widget is currently displayed. ### `RampnowSdk.createRedirectUrl(config): string` (static) Builds a full widget URL from config without opening any iframe. Returns a URL string. *** ## Events Subscribe to events using `sdk.on()` with the `RampnowEventType` enum: | Event | Payload | Description | | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | | `WIDGET_READY` | — | Widget iframe loaded and ready | | `WIDGET_CLOSED` | — | Widget was closed | | `USER_AUTHENTICATED` | — | User signed in | | `ORDER_CREATED` | `orderUid`, `orderType`, `srcCurrency`, `srcChain`, `srcAmount`, `dstCurrency`, `dstChain`, `paymentMode`, `cryptoTxnInfo?`, `bankTxnInfo?` | Order successfully created | | `ORDER_PAYMENT_PROCESSING` | `orderUid`, `status`, `paymentStatus` | Payment is being processed | | `ORDER_PAYMENT_COMPLETED` | `orderUid`, `status`, `paymentStatus` | Payment received by Rampnow | | `ORDER_PAYMENT_FAILED` | `orderUid`, `status`, `paymentStatus` | Payment failed | | `ORDER_COMPLETED` | `orderUid`, `status`, `srcCurrency`, `srcChain`, `srcAmount`, `dstCurrency`, `dstChain`, `dstAmount`, `walletAddress`, `transactionHash`, `cryptoTxnInfo?` | Order fully completed, crypto sent | | `ORDER_FAILED` | `orderUid`, `status` | Order failed or cancelled | | `ERROR` | `message`, `code?` | Error occurred in the widget | ### `CryptoTxnInfo` Available in `ORDER_CREATED` and `ORDER_COMPLETED` event payloads: | Field | Type | Description | | ----------------- | -------- | --------------------------------------------------------------- | | `currency` | `string` | Crypto currency code, e.g. `"USDC"` | | `chain` | `string` | Chain code, e.g. `"ethereum"` | | `amount` | `string` | Amount credited to the receiver | | `receiverAddress` | `string` | Address that received the crypto | | `fillAmount` | `string` | Filled/settled amount (may differ from amount on partial fills) | | `senderAddress` | `string` | Address that sent the crypto | | `transactionHash` | `string` | On-chain transaction hash | | `status` | `string` | Status of the transaction | ### Example: Full Event Handling ```javascript theme={null} import { RampnowSdk, RampnowEventType } from '@rampnow/sdk' const sdk = new RampnowSdk({ apiKey: 'pk_live_YOUR_API_KEY', orderType: 'buy', dstCurrency: 'ETH', dstChain: 'ethereum', }) sdk .on(RampnowEventType.WIDGET_READY, () => { console.log('Widget is ready') }) .on(RampnowEventType.ORDER_CREATED, ({ payload }) => { console.log('Order created:', payload.orderUid) }) .on(RampnowEventType.ORDER_COMPLETED, ({ payload }) => { console.log('Order completed:', payload.orderUid) console.log('Tx hash:', payload.transactionHash) }) .on(RampnowEventType.ERROR, ({ payload }) => { console.error('Widget error:', payload.message) }) .init() ``` *** ## Commands Commands are messages sent **from the SDK to the widget** using `sdk.send()`. This is the reverse direction of events. **Domain whitelisting required:** For security, the widget only accepts commands from whitelisted origins. To whitelist your domain, please [contact Rampnow](https://rampnow.io/contact-us). Commands sent from non-whitelisted origins will be silently ignored. | Command | Payload | Description | | ----------------------- | --------------------- | ---------------------------------------------------- | | `UPDATE_PAYMENT_DETAIL` | `{ transactionHash }` | Update payment detail with a crypto transaction hash | ### Example: Submit a transaction hash from your wallet ```javascript theme={null} import { RampnowSdk, RampnowEventType, RampnowCommandType } from '@rampnow/sdk' const sdk = new RampnowSdk({ apiKey: 'pk_live_YOUR_API_KEY' }) // After your wallet completes a crypto transfer, send the hash to the widget sdk.send(RampnowCommandType.UPDATE_PAYMENT_DETAIL, { transactionHash: '0xabc123...', }) // Listen for confirmation that the payment is being processed sdk.on(RampnowEventType.ORDER_PAYMENT_PROCESSING, ({ payload }) => { console.log('Payment updated:', payload.paymentStatus) }) ``` *** ## When to Use the SDK The SDK wraps the widget mode integration with a programmatic API. Use the SDK when you need: * Event-driven callbacks (order status updates) * Programmatic control (open/close the widget) * React integration via hooks * Type-safe configuration with TypeScript Use [Widget Mode](/api-reference/widget-mode) directly when you only need a simple iframe or redirect. Use the SDK for a drop-in widget experience. Use [Hosted Mode](/api-reference/hosted-mode) when you need full control over the UI and want to build a custom flow using the REST APIs directly. *** ## Next Steps * [View the live demo](https://demo.rampnow.io/) * [Configure Webhooks](/api-reference/webhook) for server-side notifications * [Explore Supported Assets](/quickstart/resources/supported-assets) * [View API Documentation](/api-reference/overview) # CreateCustomerUser Source: https://docs.rampnow.io/api-reference/users/createcustomeruser /api-reference/partner_external.yaml post /api/partner/v1/ext/customer_user # GetCustomerUserKyc Source: https://docs.rampnow.io/api-reference/users/getcustomeruserkyc /api-reference/partner_external.yaml post /api/partner/v1/ext/customer_user/{uid}/kyc # Webhook Configuration Source: https://docs.rampnow.io/api-reference/webhook Receive real-time notifications for transaction status updates Webhooks are optional but recommended for tracking transaction status in real-time. ## Overview Webhooks allow you to receive automatic notifications when order events occur. Configure them in your Rampnow Partner Dashboard to stay updated on transaction statuses without polling. ## Configuration Steps Navigate to the **API Hub** in your [Rampnow Partner Dashboard](https://partner.rampnow.io/api/auth/signin?callbackUrl=%2F). Enter your server endpoint URL that will receive webhook notifications. Ensure you have a dedicated API endpoint set up on your server to handle incoming webhook events. Choose which events to receive: * **All events** - Get notified of every status change * **Specific events** - Select only the events you need *** ## Order Events Each event carries an `eventType` and the current `orderStatus` in its payload. Ramp-order events use the `ramp_order.status_change` type. The concrete status is always in the `orderStatus` field of the payload — not in the event name. ### Order status semantics The concrete status is in `payload.orderStatus`. The **Webhook** column shows which statuses are pushed to your endpoint — the rest are observable only by polling `GET /ext/ramp_order/{uid}`. | Status | Meaning | Terminal? | Webhook | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ------- | | `created` | Order created, awaiting payment / start of processing. | No | Yes | | `processing` | Payment received; crypto being settled on-chain to the user. | No | Yes | | `completed` | Crypto delivered to the destination wallet. Success — **immutable** once reached. | Yes | Yes | | `failed` | A settlement attempt failed. **Not terminal** — Rampnow re-settles the order, so it can still move to `processing` → `completed`. Treat as "in-flight, needs retry," not a final failure. | No | Yes | | `payment_failed` | The user's fiat/card payment failed or was declined. **Terminal** — the user must create a new order to retry; the same order does not move back to `processing`. | Yes | Yes | | `expired` | Order not paid within its validity window. | Yes | Yes | | `canceled` | Order canceled. | Yes | Yes | | `blocked` | Transaction blocked by KYT (on-chain risk screening); also the state for a refunded order (you will see `paymentStatus: refunded`). | Yes | Yes | | `payment_processing` | Async fiat payment authorizing/clearing. Internal transition — **no webhook**; poll if you need it. | No | No | **`failed` is not final.** Do not close or refund on your side when you receive `failed` — Rampnow retries and re-settles. Wait for `completed`, or poll the order. Every terminal state now emits a webhook — including `expired`, `canceled` and `blocked` — so you no longer need to poll to observe a terminal failure. `completed` is immutable once reached. *** ## Implementation Example Here's a simple Flask server that receives webhook notifications: ```python Python (Flask) theme={null} from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/order/external', methods=['POST']) def orderwebhook(): data = request.json # partner logic based on event return jsonify({"status": "success"}), 200 if __name__ == '__main__': app.run(port=3000) ``` Acknowledge receipt by returning **any `2xx` status** (`200`–`299`). The response body is ignored — an empty body is fine, and it does not need to be JSON. Any non-2xx response, or a connection/timeout error, is treated as a failed delivery and retried (see [Delivery & retries](#delivery-and-retries)). ## Delivery and retries * **Success** is determined solely by the HTTP status code: any `2xx` marks the event delivered. The response body, content type, and length are ignored. * **Failure** is any non-2xx status or a transport error (connection refused, DNS, TLS, timeout). * **Retries:** a failed event is retried up to **10 times** with exponential backoff, spanning roughly **24 hours** in total. Delivery is idempotent per event — the same `eventUid` is reused across retries, so de-duplicate on `eventUid`. * **No auto-disable:** repeated failures never disable your endpoint. After the retry budget is exhausted the event stays in a failed state and can be re-sent manually from the Partner Dashboard. * Because a completed order's webhook carries the final `dstFillAmount`, `transactionHash`, and `walletAddress`, a short outage on your side will not lose those values — they arrive on the next successful retry. ## Signature Verification Every webhook is signed so you can verify it originated from Rampnow. Reject any request whose signature does not match. | Header | Description | | --------------------- | --------------------------------------------------- | | `X-RAMPNOW-SIGN` | Hex-encoded HMAC-SHA256 signature of the request | | `X-RAMPNOW-TIMESTAMP` | Unix timestamp (seconds) used in the signed message | **Algorithm:** HMAC-SHA256, hex-encoded. **Signing secret:** your API secret — the same secret you use to sign outbound API calls (from the API Hub in the Partner Dashboard). There is no separate webhook secret. **Signed message** — the concatenation, in this exact order: ``` message = timestamp + "POST" + path + rawBody ``` * `timestamp` — the value of the `X-RAMPNOW-TIMESTAMP` header. * `path` — the path (and query string, if any) of the webhook URL you registered, e.g. `/rampnow/webhook`. * `rawBody` — the exact raw request body bytes, verified **before** any JSON re-serialization. ```javascript Node.js theme={null} const crypto = require("crypto"); // webhookPath is the path (+ query) of the URL you registered with Rampnow function verifyRampnowWebhook(req, apiSecret, webhookPath) { const timestamp = req.header("X-RAMPNOW-TIMESTAMP"); const signature = req.header("X-RAMPNOW-SIGN"); const rawBody = req.rawBody; // raw bytes, not JSON.stringify(req.body) const message = timestamp + "POST" + webhookPath + rawBody; const expected = crypto .createHmac("sha256", apiSecret) .update(message) .digest("hex"); return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected)); } ``` ```python Python theme={null} import hmac, hashlib # webhook_path is the path (+ query) of the URL you registered with Rampnow def verify_rampnow_webhook(headers, raw_body: bytes, api_secret: str, webhook_path: str) -> bool: timestamp = headers["X-RAMPNOW-TIMESTAMP"] signature = headers["X-RAMPNOW-SIGN"] message = timestamp + "POST" + webhook_path + raw_body.decode("utf-8") expected = hmac.new(api_secret.encode(), message.encode(), hashlib.sha256).hexdigest() return hmac.compare_digest(signature, expected) ``` Capture the **raw** request body for verification. Frameworks that parse and re-serialize JSON can reorder keys or change whitespace, which changes the bytes and breaks the signature. ## Webhook Payload Schema The webhook payload for On/Off Ramp Orders is shown below. ```json On/Off Ramp Orders theme={null} { "createdAt": "2024-10-01T12:00:00Z", "eventUid": "853d470c-db91-4c6e-9724-acfccd138306", "eventType": "ramp_order.status_change", "payload": { "orderUid": "5de57551-3272-4af5-86a4-5eeae6ccc37f", "externalOrderUid": "1eda87a5-dcfb-4a14-89d9-d0384bcb4ead", "createTime": "2024-10-01T11:59:45", "updateTime": "2024-10-01T12:00:00Z", "partnerGeneratedUid": "707966cf-afc0-4577-bd42-cd79a5b6f629", "orderType": "buy", "orderStatus": "processing", "paymentStatus": "received", "paymentMode": "card", "srcCurrency": "USD", "srcChain": "fiat", "srcAmount": 100, "dstCurrency": "ETH", "dstChain": "ethereum", "dstAmount": 0.3, "dstFillAmount": 0.2997, "walletAddress": "0x535ebf73d0E20db0A72509207599C816510e11C9", "transactionHash": [ "Ox235ebf73d0E20db0A72509207599C816510e11C9535ebf73d0E20db0A72509207599C816510e11C9" ], "feeDetails": [ { "type": "platform", "fee": 1.0, "currency": "USD", "isInclusive": false }, { "type": "network", "fee": 0.8, "currency": "USD", "isInclusive": false }, { "type": "partner", "fee": 1.5, "currency": "USD", "isInclusive": false } ], "partnerFee": 1.5, "partnerCurrency": "USDC" } } ``` ## Field Descriptions | Field | Type | Description | | --------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `createdAt` | string | Webhook event creation timestamp (ISO 8601) | | `eventUid` | string | Unique webhook event identifier | | `eventType` | string | Event type: `ramp_order.status_change`. The concrete status is in `payload.orderStatus`. | | `orderUid` | string | Unique Rampnow order identifier | | `externalOrderUid` | string | External order reference | | `createTime` | string | Order creation timestamp (ISO 8601) | | `updateTime` | string | Last update timestamp (ISO 8601) | | `partnerGeneratedUid` | string | Your internal order ID | | `orderType` | string | Transaction type: `buy` or `sell` | | `orderStatus` | string | Current order status. See the [status table](#order-status-semantics) above for all values, their meaning, and which ones are pushed as webhooks. | | `paymentStatus` | string | Payment settlement status | | `paymentMode` | string | Payment method used (e.g., `card`, `google_pay`) | | `srcCurrency` | string | Source currency code | | `srcChain` | string | Source blockchain or `fiat` | | `srcAmount` | number | Amount in source currency | | `dstCurrency` | string | Destination currency code | | `dstChain` | string | Destination blockchain or `fiat` | | `dstAmount` | number | **Quoted** amount in destination currency, fixed at order creation. | | `dstFillAmount` | number | **Actual amount delivered** on-chain to the recipient. Set once the order reaches `completed`; `0` before then. Use this (not `dstAmount`) for reconciliation — the difference from `dstAmount` on an onramp is the on-chain network/gas fee. | | `walletAddress` | string | Recipient wallet address (the final recipient the crypto was sent to) | | `walletAddressTag` | string | Optional wallet tag/memo | | `transactionHash` | array | Blockchain transaction hash(es), set when the order completes | | `feeDetails` | array | Fee breakdown; each entry has `type`, `fee`, `currency` (in `srcCurrency`). See [feeDetails types](/api-reference/hosted-mode#fee-breakdown-feedetails). | | `partnerFee` | number | Your partner fee / markup for the order | | `partnerCurrency` | string | Currency of `partnerFee` — always `USDC` (the USDC-equivalent partner fee) | ## Best Practices * Use HTTPS endpoints only * Always verify the `X-RAMPNOW-SIGN` signature (see [Signature Verification](#signature-verification)) and reject requests that fail * Implement rate limiting on your endpoint * Log all incoming webhooks for debugging * Return `200 OK` quickly (process async if needed) * Implement idempotency using `orderUid` * Handle duplicate webhook deliveries gracefully * Set up monitoring and alerts for failures * Always respond with status codes * Implement retry logic on your side if needed * Store failed webhooks for manual review * Contact support if webhooks stop arriving ## Testing Your Webhook Run your webhook server locally on the specified port. Use tools like [ngrok](https://ngrok.com) to expose your local server: ```bash theme={null} ngrok http 3000 ``` Copy the ngrok URL and add it to your Rampnow dashboard. Create a test order and verify your endpoint receives the webhook. ## Need Help? If you encounter issues with webhook delivery or have questions about the payload structure, contact us at [support@rampnow.io](mailto:support@rampnow.io). # Webhooks for ramp order status changes Source: https://docs.rampnow.io/api-reference/webhooks/webhooks-for-ramp-order-status-changes /api-reference/partner_external.yaml webhook ramp_order_status_change_webhook Webhooks for ramp order status changes # Widget Mode Integration Source: https://docs.rampnow.io/api-reference/widget-mode Embed Rampnow directly into your application for a seamless user experience Widget Mode keeps users on your platform throughout the entire transaction flow via iframe or redirect. ## Overview Widget Mode allows you to embed Rampnow's on-ramp and off-ramp services directly into your application. Users complete transactions within an overlay or iframe without ever leaving your platform.
Choose between **iFrame** (embedded) or **Redirect** mode Get started in minutes with URL parameters Support for all available Rampnow payment modes Pre-fill amounts, currencies and wallet addresses
Want programmatic control with event handling and TypeScript support? Use the [Rampnow SDK](/api-reference/sdk) instead — it wraps Widget Mode with a developer-friendly API and a React hook. *** ## URL Parameters Configure the widget by passing parameters in the URL: | Parameter | Required | Default | Description | | ------------------ | ------------ | ------------------------------------- | ------------------------------------------------------------------------------- | | `apiKey` | **Required** | — | Your unique API key from the [Partner Dashboard](https://partner.rampnow.io) | | `orderType` | Optional | `buy` | Transaction type: `buy` or `sell` | | `srcChain` | **Required** | `buy`: `fiat`
`sell`: `ethereum` | Source chain for the asset user is spending | | `srcCurrency` | Optional | `buy`: `EUR`
`sell`: `ETH` | Currency user is spending (fiat for buy, crypto for sell) | | `srcAmount` | Optional | `100` | Amount in source currency | | `dstCurrency` | Optional | `buy`: `ETH`
`sell`: `EUR` | Currency user receives (crypto for buy, fiat for sell) | | `dstChain` | **Required** | `buy`: `ethereum`
`sell`: `fiat` | Destination chain for received currency | | `paymentMode` | Optional | Lowest fee | Payment method: `card`, `google_pay`, `apple_pay`, `open_banking`, `sepa`, etc. | | `walletAddress` | Optional | — | User's crypto wallet address | | `walletAddressTag` | Optional | — | Wallet tag/memo for supported chains (XRP, XLM, etc.) | | `externalOrderId` | Optional | — | Your internal order ID for tracking | *** ## iFrame Mode Embed the widget directly on your page for a seamless experience. Add a container element in your HTML: ```html theme={null}
```
Build your URL with the required parameters: ``` https://app.rampnow.io/order/quote?apiKey=YOUR_API_KEY&srcCurrency=EUR&srcAmount=250&dstCurrency=BTC&dstChain=bitcoin&walletAddress=0xYourWalletAddress ``` Embed the widget using an iframe: ```html theme={null} ```
The widget will be embedded inside your container, providing an in-page experience for users. *** ## Redirect Mode Redirect users to Rampnow's hosted page for a simpler integration. Build your URL with the required parameters: ``` https://app.rampnow.io/order/quote?apiKey=YOUR_API_KEY&srcCurrency=EUR&srcAmount=250&dstCurrency=BTC&dstChain=bitcoin&walletAddress=0xYourWalletAddress ``` Redirect the user to the constructed URL: ```javascript theme={null} window.location.href = "https://app.rampnow.io/order/quote?apiKey=YOUR_API_KEY&srcCurrency=EUR&srcAmount=250&dstCurrency=BTC&dstChain=bitcoin&walletAddress=0xYourWalletAddress"; ``` In this example, the user buys **250 EUR** worth of **BTC** on the Bitcoin chain, with crypto sent to `0xYourWalletAddress`. *** ## Webhook Integration Track transaction status in real-time by configuring webhooks in your Rampnow Partner Dashboard. [Set up webhooks](/api-reference/webhook) to receive notifications when users start or complete transactions. *** ## When to Use Widget Mode * Platforms wanting a deeply integrated user experience * Partners looking for quick integration with minimal code * Applications needing all available payment modes * Teams wanting consistent, pre-built UI * Fastest integration method — no custom UI needed * All payment methods supported out of the box * Pre-fill user data for convenience * Automatic updates without code changes *** ## Next Steps
Upgrade to the SDK for event handling, TypeScript support, and a React hook Set up server-side transaction notifications View supported cryptocurrencies and fiat currencies Explore the complete API documentation
# Build with Rampnow. Source: https://docs.rampnow.io/index
bitcoin bnb
# Build with Rampnow.

A unified API for global fiat↔blockchain flows. Rampnow provides onramp, offramp and payout services through a single infrastructure layer. For cross-chain swaps and bridging, Hypermid provides dedicated infrastructure through a unified API. Fast settlement, multi-chain support and production-ready endpoints built for wallets, exchanges, dApps and fintechs.

Start Here →
USD Coin ethereum SOL USDC

Quickstart

Enable users to buy crypto with fiat currency using cards, bank transfers and local payment methods. Allow users to sell crypto and receive fiat directly to their bank accounts or cards. Create and manage custodial wallets for your users with built-in security features. Enable instant crypto-to-crypto swaps and move assets seamlessly across different blockchain networks.

Need Help?

Contact our support. Contact our sales. # Platform overview Source: https://docs.rampnow.io/quickstart/learn/overview Modular building blocks for global fiat ↔ blockchain money movement With a single integration, accept fiat payments, convert to digital assets, and access supported blockchains and pay users out in local currencies. ## Core Products
Accept fiat deposits and deliver assets to wallets with fast settlement Convert digital assets to EUR and send funds to bank accounts via SEPA Route swaps and cross-chain transfers across supported networks with optimized pricing A non-custodial smart wallet for retail users with built-in AA, multi-chain support, secure signing and direct onramp integration
## Integration models Rampnow offers three ways to integrate — pick based on how much of the UI you want to own: | Model | You build | Rampnow handles | Best for | | --------------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | -------------------------------------------------------------- | | **Hosted mode** | Your own screens; you call the REST API server-to-server and redirect the user to a Rampnow-hosted page for payment + KYC | Payment capture, KYC, settlement | Full control of the surrounding UX with minimal PCI/KYC burden | | **Widget** | An embed/iframe or redirect to Rampnow's prebuilt widget | The entire buy/sell UI, payment and KYC | Fastest launch, least code | | **SDK** | A thin client using our SDK to call the API | Same as hosted, with typed helpers | Teams wanting a typed client over the REST API | See [Hosted mode](/api-reference/hosted-mode), [Widget mode](/api-reference/widget-mode) and the [SDK](/api-reference/sdk) for details. ## Onramp: Accept fiat and deliver digital assets See the [Payment Methods & Limits](/quickstart/resources/payment-methods) page for the current list of cards, bank transfers and local payment methods by region. * ** blockchains** supported * ** tokens** available * **Multi-chain coverage** across all major networks View complete Onramp documentation → ## Offramp: Cash out to bank accounts * EUR (expanding continuously) * SEPA transfers * Card payouts (Coming Soon) * Wallet withdrawals * Exchange cash-outs * Earnings payouts * Asset exits
Offramp flow Supported fiat Settlement options
*** ## Swap & Bridge For cross-chain swaps and bridging, explore [Hypermid](https://docs.hypermid.io), our dedicated cross-chain infrastructure product. Hypermid provides infrastructure for swapping assets and bridging between supported blockchain networks through a unified API. [Learn more about Hypermid →](https://docs.hypermid.io) *** ## Customers Customer objects for end-users and businesses with full lifecycle management *** ## Next Steps
New to Rampnow? Start here View supported payment rails See all supported chains Need support?
Rampnow is designed to be the **invisible infrastructure** behind your product—so you can focus on UX, while we handle payments and routing. # Why Rampnow Source: https://docs.rampnow.io/quickstart/learn/why-rampnow Unified infrastructure for global fiat ↔ blockchain money movement ## The onboarding challenge Today's fiat-to-blockchain landscape is fragmented, slow, and heavily regional. Developers often struggle to integrate multiple payment providers, each burdened by different local banking rules, limited network support, and restrictive regional coverage. For platforms requiring global scalability, these fragmented rails result in high payment failure rates and friction-filled user onboarding. **The result:** Businesses struggle to offer a smooth, global money movement experience, losing users at the checkout and facing massive integration overhead. ## Rampnow's solution Rampnow eliminates this complexity by providing complete onramp and offramp infrastructure with advanced liquidity routing through a **single, globally accessible API**. We handle payments and settlements end-to-end. Our unified infrastructure supports ** blockchains**, ** tokens** and multi-currency fiat settlements. This drastically reduces vendor fragmentation, increases conversion, and simplifies global deployment. With Rampnow, businesses can launch modern money-movement products faster, with significantly lower risk and minimal operational overhead. ## What you can build ### Onramp Enable your users to purchase digital assets instantly using: * **Cards:** Visa, Mastercard, Apple Pay, Google Pay * **Bank transfers:** SEPA, ACH, PIX, UPI * **Local payment methods:** Country-specific options across EU, APAC, LATAM, Africa * **Multi-chain support:** blockchains and tokens ### Offramp Let users convert digital assets back to fiat and receive funds directly: * **Supported currencies:** EUR (expanding continuously) * **Settlement methods:** SEPA (expanding continuously) * **Automated liquidity routing:** Best rate execution per asset and chain Useful for wallets, dApps, exchanges and marketplaces where users need to withdraw funds securely. ### Swap & Bridge For cross-chain swaps and bridging, explore [Hypermid](https://docs.hypermid.io), our dedicated cross-chain infrastructure product. Hypermid enables seamless asset movement across tokens and blockchains through a unified API, with multi-source liquidity aggregation, route selection, cross-chain bridging and real-time execution visibility. ## Get started [Make your first API request in minutes](/api-reference/quickstart) [Implement fiat-to-blockchain flows with sample code](/api-reference/hosted-mode) [Integrate crypto-to-fiat flows with webhooks](/api-reference/webhook) [Visit our API reference.](/api-reference/overview) ## Why choose Rampnow? One API for onramp and offramp, with Hypermid for cross-chain swaps and bridging Large network coverage: blockchains, tokens Fast fiat settlement across supported currencies Supports cards, SEPA, UPI and local rails Optimized payment routing Reliable uptime and monitoring Simple integration with clear documentation ## Getting help Questions? We're here to help you go live quickly. **Technical Support:** [support@rampnow.io](mailto:support@rampnow.io) **Sales:** [partnership@rampnow.io](mailto:partnership@rampnow.io) # Chains and tokens Source: https://docs.rampnow.io/quickstart/offramp/chains-and-tokens Browse supported tokens and blockchains available for selling digital assets to fiat using Rampnow’s offramp. Offramp asset availability is based on liquidity and network stability. Only assets with `assetConfigs[].orderTypeConfigs.sell.status = "active"` are enabled for user withdrawals. ## Network Coverage
Blockchains} icon="layer-group"> Offramp coverage across major L1s, L2s and sidechains Tokens} icon="coins"> Liquid assets available for conversion into fiat Support for EVM chains, Bitcoin and other non-EVM networks Routes managed in real time based on liquidity
## Supported Network Types Jump directly to the interactive asset list to search and filter supported offramp assets. **Major L1 blockchains (offramp-enabled):** * Ethereum * Bitcoin * Solana * Avalanche * BNB Smart Chain * Other supported mainnets **Ethereum L2 networks:** * Arbitrum One * Base * Optimism * Polygon zkEVM **Popular alt networks:** * Polygon * Other EVM-compatible chains **Non-EVM or specialized networks:** * Bitcoin * Solana * Selected additional non-EVM chains (where supported) ## Popular Offramp Networks **Offramp-enabled networks:** * Ethereum * Arbitrum One * Base * Optimism * Polygon * Other supported EVM L2s ERC-20 tokens with sufficient liquidity and active sell routes are eligible for fiat payouts. **Supported non-EVM cores:** * Bitcoin (BTC) * Solana (SOL) * Other non-EVM networks where liquidity allows Native BTC and selected non-EVM assets can be cashed out directly to supported fiat rails. **New & expanding chains (where supported):** * Additional EVM L1s and L2s * Selected DeFi ecosystems * New rollups and appchains Availability may vary by region and volume. ## Offramp Asset Management Only assets with active sell routes and sufficient liquidity are made available for offramp. Availability is corridor-specific (token → fiat → payout rail) and may vary per country or partner. Assets may be temporarily or permanently disabled if liquidity, risk, or regulatory profiles change. Use the interactive explorer below to search and filter supported offramp assets by token, symbol, or blockchain. Data is pulled directly from Rampnow's live configuration API (`assetConfigs[].orderTypeConfigs.sell.status = "active"`). ## Real-time explorer Use the explorer below to browse supported tokens and chains pulled directly from our API. # Supported Assets # Offramp Overview Source: https://docs.rampnow.io/quickstart/offramp/offramp Convert digital assets to fiat using Rampnow's global offramp and payout infrastructure. Rampnow's offramp lets your users convert digital assets into fiat and withdraw funds directly to their bank accounts or supported payout methods. Built for wallets, exchanges, dApps and fintechs that need reliable blockchain → fiat flows with predictable settlement. The offramp runs on the same unified infrastructure as the onramp, with transparent pricing and regional payout coverage. ## Why use Rampnow for offramps?
* Payouts to bank accounts via SEPA * EUR support today, with more currencies expanding continuously * Same integration surface as onramp * Consistent order lifecycle, webhooks and status events * Automatic routing to best liquidity and payout rail * Deterministic quotes with clear fees and FX * Configurable limits per user, method and corridor * Reconciliation support for finance teams
## Core capabilities Before a sell order is created, Rampnow validates the requested asset and chain, checks corridor availability and returns: * Fiat amount * Fees and FX * Estimated delivery time * Applicable limits This helps you show users **exactly what they will receive** before initiating the transfer. Rampnow supports two main models: **User-initiated transfer**: User sends assets from their wallet to a Rampnow-provided address. **Platform-initiated transfer**: Partner sends assets from custody/omnibus wallet after user confirmation. Each order is tied to a unique reference for deterministic matching and reconciliation. Once assets are received and confirmed on-chain, Rampnow: * Converts assets into EUR using connected liquidity * Routes funds via SEPA * Applies risk-based checks and velocity limits Users receive fiat via: * **Bank transfer** (SEPA) Each order emits clear status updates: `processing`, `completed`, `failed` (retried/re-settled), and `blocked` (funds refunded). Rampnow provides: * Order-level records (asset, chain, user, fiat, fees) * Payout references and bank trace IDs * Exportable data for accounting and tax reporting * Webhooks for real-time status updates ## Typical use cases Let users cash out to their bank with minimal friction. ## Developer experience The offramp is exposed through: * The same **order/quote APIs** as onramp * **Webhooks** for order and payout status * Clear **error codes** and lifecycle states Fastest to implement with pre-built UI components. Full control over UX and orchestration. ## What's next?
Full end-to-end sell & payout journey Currencies, rails and limits Widget vs. API vs. combined flows
# Offramp Flow Source: https://docs.rampnow.io/quickstart/offramp/offramp-flow Step-by-step overview of the complete digital-asset-to-fiat withdrawal journey This guide walks through the full offramp journey — from quote creation and asset transfer to fiat payout execution. Rampnow manages blockchain monitoring, liquidity routing and payout execution in every step. Offramp flow diagram ## Complete Withdrawal Journey The client requests a **sell quote** specifying the digital asset being sold and the target fiat currency. Sell quote page **Request parameters:** * Token & blockchain * Crypto amount * Desired payout currency * User region (auto-detected or provided) **Rampnow returns:** * Estimated fiat amount * FX and payout fees * Network fee * Estimated payout arrival time * Available payout methods Quotes are deterministic and guarantee the payout amount after asset confirmation. The user initiates a blockchain transfer to the **specified deposit address** generated for the order. User sending crypto **Rampnow monitors:** * Incoming transaction * Confirmations on the blockchain * Token matching & amount validation * Expiration handling if no funds are received **Status transitions:** * `created` → order created, awaiting the user's crypto deposit * `processing` → funds received and confirmed; conversion + payout in progress Each order has to be updated with transaction hash for accurate reconciliation. Rampnow sends fiat to the user's bank or local payout method. Payout screen **Supported payout rails:** * SEPA (EU) * Visa Direct * Mobile wallets * Regional payout partners Payout timing depends on the selected rail (instant → 1–2 business days). Once fiat is delivered, the offramp flow is completed and final confirmations are issued. **Final outputs:** * Transaction hash (crypto side) * Banking reference / trace ID (fiat side) * Final webhook: `ramp_order.status_change` with `payload.orderStatus = completed` Users can track blockchain delivery and payout references for transparency. ## Flow Characteristics Clear fees, FX and payout timelines communicated upfront Deterministic routing and predictable payout execution EUR settlement coverage with reliable payout execution ## Integration Options
Drop-in offramp widget with complete flow Full control over order creation, UI and payouts
## Next Steps Understand how to create sell quotes and orders via API Receive status updates for payout tracking and reconciliation Check available fiat currencies, payout rails and regional limits Start with the API documentation # Settlement Methods Source: https://docs.rampnow.io/quickstart/offramp/settlement-methods Overview of fiat payout rails and settlement behavior for Offramp transactions. Rampnow currently only supports EUR via SEPA for its off-ramp infrastructure, allowing users to receive fiat after selling digital assets within standard SEPA processing times. This page explains how settlement works, what payout rails are available and what partners need to consider when integrating the Offramp. Settlement consists of two parts: 1. **Asset settlement** — receiving and confirming the user's crypto transfer 2. **Fiat settlement** — sending fiat to the user's chosen payout method\ Both parts are fully orchestrated by Rampnow’s infrastructure. # How Settlement Works When a user sends digital assets: * Rampnow detects the on-chain transfer * Confirms the required number of network confirmations * Locks the quote (payout is now guaranteed) * Updates the order status to `processing` (payment status becomes `received`) Confirmations depend on network conditions and chain security parameters. Once assets are received, Rampnow converts the tokens into the payout fiat currency using connected liquidity. **What happens here:** * Token → Fiat conversion * FX rate applied * Payout fee calculated * Optimal payout rail selected This conversion process is nearly instant for supported chains and tokens. Rampnow initiates a payout via SEPA.\ The payout reference or order ID is generated at this stage if supported by the rail. **Status transitions:** * `processing` → conversion + payout in progress * `completed` → fiat delivered, order complete A settlement that cannot be completed ends in `failed` (retried/re-settled by Rampnow) or `blocked` (funds refunded). # Supported Payout Methods ## 📌 Bank Transfers Rampnow currently supports EUR payouts via SEPA only. Additional currencies and rails are on the roadmap. | Rail | Region | Currencies | Speed | Notes | | ------------------------ | ------ | ---------- | --------------- | ------------------------- | | **SEPA Credit Transfer** | EU | EUR | Same day or T+1 | Widely used across Europe | ## 💳 Card Payouts *(Roadmap)* | Method | Currency | Speed | Status | | ------------------- | -------------- | -------------- | ----------- | | **Visa Direct** | Multi-currency | Instant–30 min | Coming soon | | **Mastercard Send** | Multi-currency | Instant | Coming soon | Rampnow is adding global card payout support for instant, card-to-bank withdrawals. # Settlement Times Overview
SEPA Credit Transfer SEPA Credit Transfer (bank cut-off dependent)
Settlement timing may vary based on banking cut-off times, weekends, holidays and user region. # Webhook Events for Settlement Rampnow sends webhook updates for every stage of offramp settlement: ```json theme={null} { "createdAt": "2024-10-01T12:00:00Z", "eventUid": "853d470c-db91-4c6e-9724-acfccd138306", "eventType": "ramp_order.status_change", "payload": { "orderUid": "asdasnd-askdjnasjkdn-aksdnaksdn", "externalOrderUid": "vsdasnd-askdjnasjkdn-aksdnaksdn", "createTime": "2024-10-01T11:59:45", "updateTime": "2024-10-01T12:00:00Z", "orderType": "sell", "orderStatus": "completed", "paymentStatus": "received", "paymentMode": "sepa", "srcCurrency": "ETH", "srcChain": "ethereum", "srcAmount": 0.3, "dstCurrency": "EUR", "dstChain": "fiat", "dstAmount": 100, "dstFillAmount": 99.5, "walletAddress": "0xINF98983WKJENRIKjjDEER989", "transactionHash": ["OxtransactionHash"] } } ``` # Supported Chains & Tokens Source: https://docs.rampnow.io/quickstart/onramp/chains-and-tokens Browse tokens across multiple blockchains available for onramp purchases. Asset availability is based on liquidity and network stability. Only assets with `assetConfigs[].orderTypeConfigs.buy.status = "active"` are displayed to users. ## Network Coverage
Blockchains} icon="layer-group"> Comprehensive coverage across all major networks Tokens} icon="coins"> Verified assets from partner liquidity sources Support for L1, L2, sidechains and rollups Real-time updates per payment method & region
## Supported Network Types Jump directly to the interactive token list to search and filter supported assets. **Major L1 blockchains:** * Ethereum * Bitcoin * Solana * Avalanche * Cardano * Tezos * Flow * And more... **Ethereum L2 solutions:** * Arbitrum * Optimism * Base * Polygon zkEVM * zkSync * Scroll * Linea * Blast * Mode **Popular sidechains and ecosystem networks:** * Polygon * BNB Chain * Gnosis * Ronin * Moonbeam * Moonriver * Sui * TON * Tron * Fantom * Cronos * Kaia **New and emerging networks:** * Aptos (coming soon) * Berachain * Monad * Unichain * Abstract * Sonic * Soneium * World Chain * Ink ## Popular Networks **Mainnet + L2s:** * Ethereum * Arbitrum One * Optimism * Base * zkSync Era * Polygon zkEVM * Scroll * Linea * Blast * Taiko * Mantle Full ERC-20 token support with automatic contract verification **Fast & scalable networks:** * Solana * Sui * Avalanche C-Chain * BNB Smart Chain * Polygon * Fantom Optimized for gaming, DeFi and high-frequency applications **Bitcoin networks:** * Bitcoin (BTC) * Bitcoin Cash (BCH) * Litecoin (LTC) * Dogecoin (DOGE) * Rootstock (RSK) Native BTC purchases with direct wallet delivery **New & growing chains:** * Berachain * Monad * Unichain * Abstract * Sonic * Soneium * World Chain * Ink Availability may vary by region and liquidity ## Asset Management All tokens are verified from partner liquidity sources before being made available Continuous monitoring for high-risk assets with automatic removal when necessary Only tokens with sufficient liquidity and active buy routes are shown ## Real-Time Asset Explorer Use the interactive explorer below to search and filter supported assets. Data is pulled directly from our live API. ### Supported Assets Hundreds of tokens across dozens of chains — see the live explorer below for current coverage. Real-time asset explorer interface The asset list updates automatically based on: * Current liquidity availability * Payment method compatibility * Network status ## Popular Token Categories
USDC, USDE, FDUSD, PYUSD and 50+ more ETH, BTC, SOL, AVAX, BNB, MATIC and all major L1 tokens AAVE, UNI, LINK, CRV, LDO and 100+ DeFi protocols AXS, SAND, MANA, IMX, GALA and gaming tokens DOGE, SHIB, PEPE, WIF, BONK and trending memes stETH, rETH, ezETH, weETH and liquid staking derivatives
Availability may vary by region and liquidity ## Network Expansion Rampnow continuously expands blockchain coverage based on: * Partner and customer demand * Network stability and maturity * Liquidity provider support **Request a new chain or token:** Contact our team to discuss adding support for specific assets or networks.
Reach out via our Contact & Support page Send details to `admin@rampnow.io`
## Real-time explorer Use the explorer below to browse supported tokens and chains pulled directly from our API. # Supported Assets # Onramp Overview Source: https://docs.rampnow.io/quickstart/onramp/onramp Convert fiat to digital assets across a wide range of blockchains with a single, unified API Rampnow delivers a high-conversion fiat-to-digital-asset onramp used by top Web3 applications across multiple regions. Users can buy assets without leaving your app, while Rampnow manages payment routing and token delivery behind the scenes. Rampnow's onramp infrastructure enables seamless fiat-to-crypto conversion with enterprise-grade reliability and global payment coverage. ## Why choose Rampnow?
** blockchains** and ** assets** with EVM and non-EVM support Cards, bank transfers, Apple Pay, Google Pay and **local APMs** across all regions High-availability routing with **predictable fees** and real-time status updates
## Core Capabilities ### Instant Quotes Get accurate, deterministic pricing with: * Real-time FX rates * Network and payment method fees * Slippage controls * Guaranteed execution rates ### Global Payment Acceptance Support for multiple payment methods: * **Cards**: Visa, Mastercard * **Digital wallets**: Apple Pay, Google Pay * **Bank transfers**: SEPA, ACH, PIX, UPI * **Local APMs**: Auto-adjusted by region and currency ### Blockchain Delivery Optimized asset delivery with: * Liquidity provider routing * On-chain execution preparation * Direct wallet delivery * Full transaction metadata confirmation ### Security Multi-layer protection including: * Device fingerprinting * Behavioral risk scoring * Payment fraud checks * Beneficiary wallet screening ## Use Cases
Enable direct asset purchases from within mobile or browser wallets for seamless user experience. Support instant fiat deposits into digital asset accounts with automated settlement. Provide smooth purchase flows for first-time Web3 users without crypto friction. Allow players to acquire in-game assets or tokens with fiat for better onboarding. Add digital asset investment features to banking and neobank applications. Use onramps as entry points for cross-border transfers and settlement solutions.
## Developer Experience Choose your integration method: * **Widget**: Embed in minutes with minimal code * **API**: Full customization with REST endpoints * **SDK**: Native integration for your platform * Use sandbox keys for testing * Access integration examples * Monitor with webhooks for all events * Instant onboarding process * Real-time monitoring dashboard * Dedicated support team Read our [**API Specification**](/api-reference/overview) *** ## Next Steps
Understand the step-by-step purchase journey View all supported blockchains and tokens Start building with widget, API, or SDK
# Onramp Flow Source: https://docs.rampnow.io/quickstart/onramp/onramp-flow Step-by-step overview of the complete fiat-to-digital-asset purchase journey This guide walks through the complete user journey from quote generation to token delivery. Each step is managed by Rampnow's infrastructure to ensure security and conversion optimization. Quote generation interface ## Complete Purchase Journey The client requests a quote with purchase parameters. Quote generation interface **Request includes:** * Fiat currency * Payment method * Token & blockchain * Purchase amount **Rampnow returns:** * Total cost breakdown * Network fees * Payment processing fees * Token amount to receive Quotes are deterministic and guaranteed upon checkout User provides the destination wallet address. Quote generation interface **Address validation checks:** * ✓ Correct blockchain network * ✓ Account Abstraction * ✓ Valid checksum format * ✓ Contract restrictions * ✓ Valid address format Users can manually enter an address or connect their wallet directly Security verification to prevent fraud and ensure account validity. Email and OTP verification **Verification process:** 1. User enters email address 2. OTP code sent to email 3. User submits OTP 4. Session validated and secured User completes payment using their preferred method. Payment method selection **Supported payment methods:** * Visa * Mastercard Instant processing * SEPA (EU) * ACH (US) * PIX (Brazil) * UPI (India) * SPEI (Mexico) * Khipu (Chile) * Apple Pay * Google Pay * Cash App (US) * Local APMs See the [Payment Methods & Limits](/quickstart/onramp/payment-methods) page for the full, live list of active payment rails by country. **Status updates via:** * Real-time webhooks * API polling Funds are settled and crypto is prepared for delivery. Payment method selection **Settlement process:** 1. Payment confirmation received 2. Funds settle to banking partners 3. Routing engine triggers liquidity movement 4. Crypto assets prepared for blockchain delivery Settlement times vary by payment method (instant to 1-3 business days) Tokens are delivered to the user's wallet address. Token delivery to wallet **Delivery process:** 1. Transaction broadcast to blockchain 2. Network confirmation 3. Transaction hash generated 4. Final delivery confirmation Transaction complete! Users can track their tokens on the blockchain explorer. *** ## Order statuses You track an onramp order through these statuses (delivered on every change via [webhooks](/api-reference/webhook), or by polling the order): * `created` → order created, awaiting payment * `processing` → payment received; crypto being settled on-chain to the user * `completed` → crypto delivered to the destination wallet (success) * `failed` → a settlement attempt failed — **not terminal**; Rampnow re-settles, so it can still reach `completed` * `payment_failed` → the user's payment failed/declined (terminal — a retry needs a new order) * `expired` / `canceled` → order not paid in time / canceled (terminal) * `blocked` → blocked by KYT screening or refunded (terminal) See the full [status table](/api-reference/webhook) for meanings and which are terminal. ## Flow Characteristics
Same experience across all regions and payment methods High conversion rates with minimal friction
*** ## Integration Options
Embed the complete flow with minimal code Build custom flows with full control
*** ## Next Steps Learn how to implement each step programmatically Use test credentials to simulate the complete flow Set up event listeners for real-time status updates Start with our Integration guide # Payment Methods & Limits Source: https://docs.rampnow.io/quickstart/onramp/payment-methods Overview of cards, bank transfers and local payment methods supported by Rampnow **Configurable limits** — Transaction limits vary by region, payment method and user verification level. Contact support for custom limit configurations. Jump directly to the interactive payment methods table to search and filter by region and flow type. Rampnow supports global card processing, local APMs and regional bank transfers for **onramp** (buy). Limits and availability vary by region and method. This page covers **onramp** methods. For the full onramp + offramp matrix see [Payment Methods & Limits](/quickstart/resources/payment-methods). The interactive explorer below is the source of truth — the static lists are illustrative.
Visa, Mastercard, Apple Pay and Google Pay in **120+ countries** with multi-currency support and risk-adjusted limits. PIX, UPI, SEPA, ACH, QR-based wallets and local bank rails across Europe, Americas, APAC and LATAM. Per-transaction, and per day limits tuned by method, currency and risk profile.
## Payment Method Categories ### Global Card Coverage (Onramp) Rampnow processes card payments globally through Visa, Mastercard, Apple Pay and Google Pay with support for **120+ countries**. **Supported currencies:** EUR, USD, GBP, AUD, CHF, JPY, PLN, TRY, SGD, HKD, VND, DKK, SEK, NOK, NZD, ZAR, SAR, RON, AED, KRW. Per-transaction minimum and maximum limits are configured per currency and payment method and are returned live by the config API (`paymentModeConfigs` in `GET /ext/ramp_order/config`). Daily velocity limits depend on the user's verification level; contact support for your account's configuration. Exact availability depends on card issuer, 3DS/SCA requirements and regional regulations. ### Local Payment Methods (Onramp) Region-specific payment methods optimized for local user preferences and banking infrastructure. **Europe:** * EU: SEPA bank transfer, SEPA open banking **Asia/Pacific:** * India: UPI, IMPS, NEFT * Philippines: QR Ph * Indonesia: Bank transfer * UAE: Bank transfer **LATAM:** * Brazil: PIX * Mexico: Bank transfer * Chile: Bank transfer * Colombia: Bank transfer * Argentina: Bank transfer **Africa:** * Nigeria: Bank transfer **North America:** * USA: ACH, Wire, Cash App This list reflects payment rails currently active in production. See the [Interactive Payment Explorer](#payment-explorer) below for the live, always-current view. Payment method availability changes by region and over time, so the lists above are illustrative. Always check the **current** supported status programmatically via the config API — [`GET /ext/ramp_order/config`](/api-reference/configuration/getramporderconfig) (`paymentModeConfigs`) — which is the source of truth for what is enabled for your account. ## Understanding Limits Higher KYC verification unlocks higher per-transaction and cumulative (velocity) limits. These are the current caps by verification level, pulled live from the config API: Minimum and maximum amounts per single transaction, enforced at the payment processor level. Rolling day limit calculated from the current transaction backwards. Resets continuously as older transactions age out. Enterprise partners can request custom limit configurations based on their use case. Limits may be adjusted based on user verification level and transaction history. ## Need Custom Limits or New Payment Methods? For custom limit configurations or to request support for additional payment methods, reach out to our team at **[admin@rampnow.io](mailto:admin@rampnow.io)** Include details about your use case, expected transaction volumes and target regions. ## Interactive Payment Explorer
# Supported Blockchains Source: https://docs.rampnow.io/quickstart/resources/blockchain-list Browse all blockchains supported by Rampnow, grouped by product **Real-time data** — This list is generated directly from the live Rampnow configuration API and updates automatically as new blockchains are added or removed. Rampnow supports a wide range of blockchain networks for onramp and offramp flows. Each blockchain listed here has at least one active product route—either **Onramp** (buy) or **Offramp** (sell)—based on real-time configuration from our production routing engine. ## What's Included This list includes all blockchains where Rampnow has active, production-ready routes. Leading layer-1 blockchains including Ethereum, Bitcoin, Solana, Avalanche, Tron, BNB Chain and more. Scaling solutions like Arbitrum, Optimism, Base, zkSync, Polygon PoS, Linea and other layer-2 networks. Specialized networks including Kava, Fantom, Aurora, Cronos, Harmony and ecosystem-specific chains. New and emerging blockchains integrated through Rampnow's routing layer based on partner demand or institutional requirements. Chains without active buy/sell routes do not appear until they are fully enabled in production. ## Data Sources & Updates This page uses live data from Rampnow's routing configuration API, ensuring accuracy and real-time updates.
Newly supported chains appear automatically once activated in production. Chains temporarily disabled due to liquidity or infrastructure issues are hidden immediately. Token counts update instantly when assets are added or removed from any blockchain. No manual updates required—partners always see real-time network coverage.
Partners always see the real-time network coverage powering both Rampnow's widget and API. ## Need Support for a New Chain? Want Rampnow to add a blockchain that's not currently listed? We're always evaluating new networks based on demand and feasibility. ### What to Include in Your Request
* Chain name * Chain ID * RPC endpoints * Native token details * Token contract addresses (if applicable)
Our routing and liquidity teams will review feasibility and provide integration timelines.
Reach out via our Contact & Support page Send details to `admin@rampnow.io`
Integration timelines vary based on technical complexity, liquidity availability and regulatory requirements for each blockchain. ## Supported Blockchains
# Payment Methods & Limits Source: https://docs.rampnow.io/quickstart/resources/payment-methods Overview of cards, bank transfers and local payment methods supported by Rampnow **Configurable limits** — Transaction limits vary by region, payment method and user verification level. Contact support for custom limit configurations. Jump directly to the interactive payment methods table to search and filter by region and flow type. Rampnow supports global card processing, local APMs, and regional bank transfers for **onramp** (buy) flows, while **offramp** (sell) flows are currently limited to EUR via SEPA bank transfers. Limits and availability vary by region and method.
Visa, Mastercard, Apple Pay and Google Pay in **120+ countries** with multi-currency support and risk-adjusted limits. PIX, UPI, QR Ph, Cash App, and local bank rails across North America, Europe, APAC, LATAM, and Africa. Per-transaction and daily limits tuned by method, currency and risk profile.
## Payment Method Categories ### Global Card Coverage (Onramp) Rampnow processes card payments globally through Visa, Mastercard, Apple Pay and Google Pay with support for **120+ countries**. **Supported currencies:** EUR, USD, GBP, AUD, CHF, JPY, PLN, TRY, SGD, HKD, VND, DKK, SEK, NOK, NZD, ZAR, SAR, RON, AED, KRW. Per-transaction minimum and maximum limits are configured per currency and payment method and are returned live by the config API — see the interactive explorer below, or `paymentModeConfigs` in `GET /ext/ramp_order/config`. Daily velocity limits depend on the user's verification level; contact support for your account's configuration. Exact availability depends on card issuer, 3DS/SCA requirements and regional regulations. ### Local Payment Methods (Onramp) Region-specific payment methods optimized for local user preferences and banking infrastructure. **Europe:** * EU: SEPA bank transfer, SEPA open banking **Asia/Pacific:** * India: UPI, IMPS, NEFT * Philippines: QR Ph * Indonesia: Bank transfer * UAE: Bank transfer **LATAM:** * Brazil: PIX * Mexico: Bank transfer * Chile: Bank transfer * Colombia: Bank transfer * Argentina: Bank transfer **Africa:** * Nigeria: Bank transfer **North America:** * USA: ACH, Wire, Cash App ### Bank Payout Methods (Offramp) Sell crypto and receive fiat directly to your bank account. | Region | Method | Currency | Status | | --------------------------------------------------------------- | ------------------ | ------------------------- | -------- | | EU (27 states) | SEPA bank transfer | EUR | **Live** | | United Kingdom, India, Philippines, Indonesia, Vietnam and more | Local bank rails | GBP, INR, PHP, IDR, VND … | Roadmap | Offramp is currently **live for EUR via SEPA**. Other corridors are on the roadmap — the live [payment explorer](#interactive-payment-explorer) always reflects what is actually enabled for your account. ## Understanding Limits Higher KYC verification unlocks higher per-transaction and cumulative (velocity) limits. These are the current caps by verification level, pulled live from the config API: Minimum and maximum amounts per single transaction, enforced at the payment processor level. Rolling day limit calculated from the current transaction backwards. Resets continuously as older transactions age out. Enterprise partners can request custom limit configurations based on their use case. Limits may be adjusted based on user verification level and transaction history. ## Need Custom Limits or New Payment Methods? For custom limit configurations or to request support for additional payment methods, reach out to our team at **[admin@rampnow.io](mailto:admin@rampnow.io)** Include details about your use case, expected transaction volumes and target regions. ## Interactive Payment Explorer
# Supported Assets Source: https://docs.rampnow.io/quickstart/resources/supported-assets Browse all supported tokens and blockchains in Rampnow **Real-time data** — This list is generated directly from the live Rampnow configuration API and updates automatically as new assets are added or removed. ## What's Included Assets that can be purchased with fiat via Rampnow using cards, bank transfers and local payment methods (availability varies by region). Assets that can be sold for fiat and paid out to supported payout methods in your region. If a token is available on multiple blockchains, you'll see a separate entry per chain. For example, `USDT` appears separately for Ethereum, Arbitrum, Polygon and other supported networks. Only tokens with at least one active product configuration (Onramp or Offramp) are shown. Internal test assets, disabled assets, or temporarily paused routes are not listed. ## Live Updates & Coverage The asset list automatically reflects production changes: * ✅ **New tokens and blockchains** appear automatically once activated * ❌ **Paused or removed tokens** disappear from the list immediately * 📊 **Token and blockchain counts** at the top always show current coverage Token availability may vary by region due to regulatory requirements and liquidity constraints. ## Missing a Token or Chain? Need support for a specific asset that's not listed?
Reach out via our Contact & Support page Send details to `admin@rampnow.io`
**What to include in your request:** * Token symbol and name * Contract address * Target blockchain * Use case or integration timeline Our team reviews all requests based on demand and liquidity availability. We'll respond with integration timelines and next steps. # Supported Assets # Supported Countries Source: https://docs.rampnow.io/quickstart/resources/supported-countries List of all supported, restricted and prohibited countries for using Rampnow services **Global coverage** — Rampnow provides services across 120+ countries. Availability depends on card networks and local banking rails. Rampnow provides global coverage for **onramp** and **offramp** flows. The list below outlines all countries where Rampnow services are available, followed by restricted and prohibited jurisdictions. If a country is not listed under *Prohibited* or *Restricted*, it is considered **supported** for Rampnow services. ## How Country Classification Works
Fully eligible for all Rampnow services, subject to payment method availability. Limited availability. Additional review may be required for onboarding and operations. No services available. Rampnow does not onboard customers or process payments from these jurisdictions.
Payment method availability may vary by region. See our [Payment Methods & Limits](/quickstart/resources/payment-methods) page for detailed coverage.
## Country Status ### Fully Supported Countries These countries are fully eligible for Rampnow services, subject to payment method availability. Andorra, Austria, Belgium, Bosnia and Herzegovina, Croatia, Cyprus, Czech Republic, Denmark, Estonia, Faroe Islands, Finland, France, Germany, Gibraltar, Greece, Greenland, Guernsey, Hungary, Iceland, Ireland, Isle of Man, Italy, Jersey, Latvia, Liechtenstein, Lithuania, Luxembourg, Malta, Montenegro, Netherlands, Norway, Poland, Portugal, Romania, San Marino, Slovakia, Slovenia, Spain, Sweden, Switzerland, United Kingdom Armenia, Australia, Azerbaijan, Bahrain, Bhutan, Brunei, Fiji, Georgia, Hong Kong, India, Indonesia, Israel, Japan, Jordan, Kazakhstan, Kuwait, Kyrgyzstan, Macau, Malaysia, Micronesia, Mongolia, New Zealand, Oman, Papua New Guinea, Philippines, Qatar, Saudi Arabia, Singapore, South Korea, Sri Lanka, Taiwan, Thailand, Turkey, United Arab Emirates, Uzbekistan, Vietnam Argentina, Aruba, Bahamas, Barbados, Belize, Bermuda, Brazil, Chile, Colombia, Costa Rica, Curaçao, Dominican Republic, Ecuador, El Salvador, Guyana, Mexico, Panama, Paraguay, Peru, United States, Uruguay Kenya, Mauritius, Rwanda, South Africa, Zambia Payment methods and limits vary by region. Check the [Payment Methods & Limits](/quickstart/resources/payment-methods) page for specific availability in your country. ### Restricted Jurisdictions Rampnow maintains **limited availability** for customers or partners based in these jurisdictions. Any onboarding, operational activity, or integration may require additional review and approval. Algeria, Angola, Benin, Burkina Faso, Cameroon, Chad, Congo (Republic of), Côte d'Ivoire, Djibouti, Egypt, Equatorial Guinea, Eritrea, Eswatini, Gabon, Gambia, Ghana, Guinea, Guinea-Bissau, Liberia, Madagascar, Mauritania, Morocco, Mozambique, Namibia, Niger, Nigeria, Senegal, Sierra Leone, Sudan, Tanzania, Togo, Tunisia, Uganda Bangladesh, Cambodia, China, Iraq, Kosovo, Nepal, Pakistan, Timor-Leste, Tokelau, Tonga, Tuvalu, Vanuatu Bolivia, Canada, French Guiana, Guatemala, Haiti, Honduras, Nicaragua, Trinidad and Tobago Bonaire Sint Eustatius and Saba, Bulgaria, Moldova, North Macedonia, Serbia, Ukraine If you're operating from a restricted country and need to integrate Rampnow, contact our team at **[admin@rampnow.io](mailto:admin@rampnow.io)** for approval. ### Prohibited Jurisdictions Rampnow **does not** onboard customers, process payments, or establish any business relationships with users or entities from the following jurisdictions, regardless of currency or payment method. This restriction applies to **all services** . These restrictions apply globally and without exception. **Complete list of prohibited countries:** * Afghanistan * American Samoa * Belarus * Burundi * Central African Republic * Congo (Democratic Republic) * Cuba * Crimea region of Ukraine * Donetsk People's Republic * Guam * Iran * North Korea * Lebanon * Libya * Luhansk People's Republic * Mali * Myanmar * Northern Mariana Islands * Puerto Rico * Russian Federation * Somalia * South Sudan * Syria * United States Minor Outlying Islands * U.S. Virgin Islands * Venezuela * Yemen * Zimbabwe This list is subject to change. ## Regional Payment Method Availability Different payment methods are available depending on your country and region.
**Available in:** 120+ countries globally Visa, Mastercard, Apple Pay and Google Pay with multi-currency support. **Available in:** EU, UK, APAC, LATAM, Africa **Supported:** Apple Pay, Google Pay, SEPA, PIX, UPI, ACH, and other local banking rails.
For detailed payment method coverage by country, visit the [Payment Methods & Limits](/quickstart/resources/payment-methods) page. ## Need Support or Expansion? Have questions about country availability or need to request expansion to a new jurisdiction?
Contact us to verify service availability for a specific region. Submit a request for expansion to a new jurisdiction. We'll review feasibility.
**We can provide:** * Local payment method coverage details * FX and settlement restrictions by region * Integration timelines for new markets **Email:** [admin@rampnow.io](mailto:admin@rampnow.io) Include your country and use case in your inquiry. Country classifications and restrictions are subject to change. This page is updated regularly to reflect current availability.