Skip to main content

Getting Started

NowRamp is a multi-tenant crypto on/off ramp orchestration platform that enables partners to integrate fiat-to-crypto and crypto-to-fiat services into their applications. We handle the complexity of payment processing, KYC verification, wallet screening, and cryptocurrency delivery so you can focus on building your product.
These form our multi-tenancy hierarchy. A Partner is your company (the top-level tenant). Projects are sub-tenants under your partner account, typically representing different apps or environments (staging, production). Customers are your end users who buy and sell crypto. See our Core Concepts guide for more details.
The fastest way is to embed our widget using an iframe or the JavaScript SDK. Contact the NowRamp team to get your partner account, project ID, and API key. Then follow our Quickstart guide to have your first integration running in minutes.
We provide two environments: Sandbox (api.sandbox.nowramp.com) for testing with test API keys (ramp_test_*) and mock providers, and Production (api.nowramp.com) for live transactions with real API keys (ramp_live_*). Always test thoroughly in sandbox before going live.
Not necessarily. Our embeddable widget provides a complete, customizable purchase flow out of the box. If you need deeper integration or a fully custom UI, you can use our REST API directly. Most partners start with the widget and customize from there.

Orders & Quotes

A quote is a price estimate showing the exchange rate and fees for a potential transaction. An order is created when a customer accepts a quote and commits to the purchase. Quotes are temporary and non-binding; orders trigger the actual workflow (KYC, payment, crypto delivery).
Quotes are typically valid for 60 seconds due to cryptocurrency price volatility. Check the expiresAt timestamp and expiresInSeconds field in the quote response to track validity. See our Quotes API documentation for expiry handling examples.
If you try to create an order from an expired quote, you’ll receive a QUOTE_EXPIRED error. Simply request a new quote with the same parameters. Our widget handles this automatically by prompting users to refresh when quotes expire.
Yes, orders can be cancelled while in created, pending_kyc, or pending_payment status. Once payment has been processed, cancellation is no longer possible, but refunds may be issued if there are issues during processing.
Most orders complete within 5-15 minutes, depending on KYC status and blockchain network congestion. Orders for customers with approved KYC and clear wallets process faster. Blockchain confirmation times vary by network (Bitcoin takes longer than Polygon, for example).
The key statuses to handle are: pending_kyc (waiting for verification), pending_payment (awaiting payment), completed (crypto delivered), failed (something went wrong), and refunded (payment returned). See our Orders API for the complete status flow diagram.

KYC & Compliance

KYC is required before a customer can complete their first crypto purchase. Once approved, customers can transact freely within their tier limits. The widget handles KYC flows automatically, or you can integrate directly using our KYC API.
KYC tiers determine transaction limits based on verification depth. Basic (ID + selfie) allows up to 1,000/day.Standard(addsproofofaddress)allowsupto1,000/day. **Standard** (adds proof of address) allows up to 10,000/day. Enhanced (adds source of funds) allows up to $100,000/day. Customers can upgrade tiers by providing additional documentation.
Most verifications complete within 2-5 minutes using automated checks. Some cases may require manual review, which typically takes 1-2 business days. You’ll receive a webhook notification when verification completes.
If verification is rejected, the customer receives a reason and can attempt again. Common issues include blurry documents, mismatched information, or unsupported document types. The kyc.rejected webhook includes a rejectionReason field with specific details.
No. NowRamp handles all document collection, storage, and verification through our KYC providers. Customer PII is encrypted and stored securely in our vault. You only need to track the customer’s KYC status and tier in your system.
Our KYC providers support 190+ countries. However, certain jurisdictions may be restricted based on your project’s compliance configuration and local regulations. Contact your account manager for your specific coverage list.

Wallets & Screening

Wallet screening is an AML (Anti-Money Laundering) compliance requirement. We use Chainalysis to check wallet addresses against known risk indicators like sanctions lists, ransomware, and illicit activity. This protects both you and your customers from compliance violations.
A flagged wallet has some risk indicators that may require review but isn’t necessarily blocked. A blocked wallet has high-risk indicators (like sanctions exposure) and cannot be used for transactions. Clear wallets are marked as clear and can be used immediately.
Yes, customers can add multiple wallets for different cryptocurrencies or networks. Each wallet is screened independently. Customers select which wallet to use when creating an order. See our Wallets API for management endpoints.
Screening typically completes within 2-10 seconds. You’ll receive a wallet.screened webhook when complete. We recommend using webhooks rather than polling to track screening status. See our Wallet Screening guide for implementation details.
If you believe a wallet was incorrectly flagged, contact our support team with the wallet details. We can review the screening results and, if appropriate, initiate a manual review process. False positives are rare but do occasionally occur.

Fees & Pricing

Fees consist of a service fee (percentage of transaction) and network fees (blockchain gas costs). Your specific fee structure is determined during partner onboarding and depends on volume and integration type. Contact your account manager for your rate card.
Yes, the targetAmount in a quote reflects what the customer will receive after all fees. The fees object breaks down service, network, and total fees separately for transparency. What you show customers as the final amount is what they’ll get.
Yes, partners can add their own markup on top of NowRamp’s base fees. This is configured at the project level. Contact your account manager to discuss custom pricing arrangements for your integration.
Yes, minimum and maximum amounts are configured per project and vary by currency and KYC tier. Typical minimums are around $20-50 USD equivalent. Maximums depend on the customer’s KYC tier. Check your project configuration or contact support for your specific limits.

Webhooks & Integration

At minimum, handle order.completed (successful purchase), order.failed (something went wrong), kyc.approved (customer can now transact), and kyc.rejected (verification failed). See our Webhooks guide for the complete event list and payload examples.
Failed webhook deliveries are retried with exponential backoff (1 min, 5 min, 30 min, etc.) up to 7 times over 24 hours. After that, events go to a dead-letter queue where you can manually retry them. We recommend implementing health monitoring for your webhook endpoint.
Every webhook includes an X-Webhook-Signature header containing an HMAC-SHA256 signature. Compute the signature using your webhook secret and compare it using a timing-safe comparison. See our Webhooks guide for code examples in multiple languages.
Yes, use tools like ngrok to expose your local endpoint, or use our sandbox environment which sends real webhook events to your configured URL. You can also manually trigger test events from the Partner Dashboard for debugging.
Webhooks may be delivered more than once (at-least-once delivery). Store the event.id and check for duplicates before processing. If you’ve already processed an event ID, return a 200 status but skip the business logic.

Troubleshooting

This error occurs when you try to create an order from a quote that has passed its expiration time. Quotes expire after about 60 seconds due to price volatility. Simply request a new quote and prompt your user to confirm the updated price.
When an order fails, check the failureReason field for details. Common causes include payment decline, KYC rejection, or compliance blocks. You’ll receive an order.failed webhook with specifics. Guide users to resolve the issue (e.g., use a different payment method) and try again.
This usually means you’re using a test key against production (or vice versa), the key has been rotated, or there’s a typo. Verify you’re using the correct key for your environment and that it’s properly included in the X-API-Key header.
First, verify your webhook URL is correct in project settings and is publicly accessible (HTTPS required in production). Check your server logs for incoming requests. Use the Partner Dashboard to view delivery attempts and manually retry failed events. Ensure your endpoint returns a 2xx status quickly.
Use the Partner Dashboard to view order details, webhook delivery logs, and API request history. Enable verbose logging on your server for NowRamp API calls. For urgent issues, contact our support team with the order ID or customer ID for investigation.
For technical issues, reach out to your account manager or email [email protected] with relevant order IDs and error messages. For urgent production issues, use the emergency contact provided during your onboarding. We aim to respond to all inquiries within 24 hours.