Webhook events
Rinne sends webhooks for the following events:Transaction events
transaction.created: New transaction createdtransaction.status-changed: Transaction status updated
Affiliation events
affiliation.created: New affiliation createdaffiliation.status-changed: Affiliation status updated
Company events
company.created: New company createdcompany.status-changed: Company status updated
KYC events
kyc.completed: KYC check finished for a merchant company
Banking events
cashout.created: New cashout request createdcashout.status-changed: Cashout status updatedinternal-transfer.created: New internal transfer createdinternal-transfer.status-changed: Internal transfer status updated
Ledger entry events
ledger-entry.settled: Ledger entry settled
Webhook payload structure
All webhooks follow a consistent structure:Common fields
id: Unique event identifiertype: Event type (e.g.,transaction.status-changed)version: Event schema versiontimestamp: When the event occurred (ISO 8601)source: Service that generated the eventcompany_id: Company associated with the eventcorrelation_id: ID for tracking related eventspayload: Event-specific data
Setting up webhooks
Contact Rinne support to configure your webhook endpoint URL. We’ll create a webhook configuration for your organization.Webhook endpoint requirements
Your endpoint must:- Accept POST requests
- Respond with 2xx status code within 5 seconds
- Use HTTPS (required for production)
- Handle duplicate events (idempotency)
Webhook security
Rinne uses Svix for webhook delivery, which provides:- Request signing for verification
- Automatic retries with exponential backoff
- Webhook dashboard for monitoring
- Replay functionality for testing
Verifying webhook signatures
Verify that webhooks are from Rinne by checking the signature:Handling webhook events
Transaction status changed
Refund failure handling
When a refund fails, you’ll receive atransaction.status-changed webhook where:
old_statusisPENDING_REFUNDnew_statusisAPPROVED(if no other refunds exist) or remainsPENDING_REFUND(if other refunds are still processing)
Affiliation status changed
The
provider_status_message field contains additional context from the payment provider when available, including possible error messages.Cashout created
Cashout status changed
KYC completed
Internal transfer status changed
Webhook dashboard
Access your webhook dashboard to:- View webhook delivery history
- Replay failed webhooks
- Test webhook endpoints
- Monitor delivery success rates
Retry behavior
If your endpoint returns an error or times out, Rinne automatically retries:- Immediate retry
- After 5 seconds
- After 5 minutes
- After 30 minutes
- After 2 hours
- After 5 hours
- After 10 hours
- After 24 hours
Best practices
Respond quickly
Respond quickly
Return a 200 status code immediately, then process the webhook asynchronously. Don’t perform long-running operations in the webhook handler.
Handle duplicates
Handle duplicates
Use the event
id to track processed events and ignore duplicates. Webhooks may be delivered more than once.Verify signatures
Verify signatures
Always verify webhook signatures to ensure requests are from Rinne.
Use correlation IDs
Use correlation IDs
Use
correlation_id to track related events across different webhook types.Monitor webhook health
Monitor webhook health
Regularly check your webhook dashboard for failed deliveries and fix issues promptly.
Testing webhooks
Local testing with ngrok
Use ngrok to expose your local server for webhook testing:Webhook replay
Use the webhook dashboard to replay events to your endpoint for testing.Example webhook handler
Next steps
API Reference
Explore all webhook event schemas
Error Handling
Handle errors and edge cases

