Partner Callback URLs
Callback URLs (webhooks) are the recommended integration method for tracking transactions. Instead of polling the API, your server receives HTTP POST requests whenever transaction events occur.Why Use Callback URLs?
Real-Time Updates
Receive notifications instantly when transactions complete, fail, or are refunded
Reduced API Calls
No need to poll for status updates — events are pushed to you
Reliable Delivery
Automatic retries with exponential backoff ensure delivery
Secure
HMAC signatures verify authenticity of every request
Setup
1. Configure Your Endpoint
Configure your webhook URL through the Partner Dashboard at dashboard.nowramp.com under Settings > Webhooks.2. Save Your Signing Key
When you set a webhook URL, a signing key is generated. Copy it from the Partner Dashboard under Settings > Webhooks.3. Implement Your Endpoint
Your endpoint must:- Accept POST requests
- Return 2xx status within 30 seconds
- Verify the signature (strongly recommended)
Request Format
Every callback includes these headers:| Header | Description |
|---|---|
Content-Type | application/json |
X-Webhook-Timestamp | Unix timestamp (seconds) |
X-Webhook-Signature | HMAC-SHA256 signature |
X-Webhook-Event | Event type (e.g., transaction.completed) |
X-Webhook-Delivery-Id | Unique delivery ID |
Payload Structure
The
metadata.partnerMetadata object contains any custom data you passed via session metadata or checkout-intent partnerMetadata. Use it to correlate webhook events back to your internal orders. See the Webhooks guide for details.Signature Verification
Always verify signatures to ensure requests are from NowRamp.Algorithm
Node.js Implementation
Python Implementation
Event Types
| Event | Trigger |
|---|---|
transaction.pending | Checkout created, awaiting payment |
transaction.processing | Payment received, processing crypto transfer |
transaction.completed | Crypto delivered to wallet |
transaction.failed | Transaction failed |
transaction.cancelled | Transaction cancelled by user or system |
transaction.refunded | Payment refunded |
Example: transaction.completed
Example: transaction.failed
Retry Policy
Failed deliveries are automatically retried with exponential backoff:| Attempt | Delay |
|---|---|
| 1 | Immediate |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 15 minutes |
| 5 | 1 hour |
Webhook Delivery Management
NowRamp provides partner-facing endpoints to monitor and manage webhook deliveries.Delivery Statuses
| Status | Description |
|---|---|
pending | Awaiting delivery — queued and will be sent shortly |
delivered | Successfully delivered — your endpoint returned a 2xx response |
failed | Delivery failed after retries — moved to dead-letter queue |
List Webhook Deliveries
| Parameter | Type | Description |
|---|---|---|
status | string | Filter by status: pending, delivered, failed |
eventType | string | Filter by event type (e.g., transaction.completed) |
limit | number | Results per page (default: 50, max: 100) |
offset | number | Pagination offset |
Retry Failed Delivery
You can only retry deliveries with
failed status.Partner Dashboard
You can also manage webhook deliveries from the Partner Dashboard:- View delivery history with filtering
- Inspect full payload and response details
- Retry failed deliveries with one click
- Monitor delivery health and success rates
Best Practices
1. Respond Quickly
Return a 2xx response as fast as possible. Process events asynchronously:2. Handle Duplicates
Events may be delivered more than once. Use the eventid for idempotency:
3. Use HTTPS
Webhook endpoints must use HTTPS in production.4. Verify Signatures
Always verify theX-Webhook-Signature header.
5. Monitor Failures
Set up alerts for failed webhook deliveries. Use the delivery management API or Partner Dashboard to monitor delivery health.Testing
Sandbox Events
In sandbox mode, trigger test events:Local Development
Use ngrok or similar to expose your local server:Troubleshooting
| Issue | Solution |
|---|---|
| No webhooks received | Check webhook URL is set in project settings |
| Signature invalid | Verify using raw request body, check signing key |
| Events delayed | Check your endpoint returns 2xx quickly |
| Missing events | Check dead-letter queue for failed deliveries |