Recurring payments
Subscriptions that charge themselves.
Email a payment link every cycle, or let customers approve once and auto-charge on-chain each period.
Payment links
A hosted checkout link is emailed to the payer each billing cycle. They click, pay, done.
Auto-charge
The payer approves a token allowance (EVM) or delegation (Solana) once. OrcaRail collects automatically every period.
Create a subscription
const subscription = await orcarail.subscriptions.create({
amount: '9.99',
currency: 'usd',
interval: 'month',
interval_count: 1,
collection_method: 'auto_charge',
token_id: 1,
network_id: 1,
payer_email: '[email protected]',
withdrawal_addresses: [
{ address: '0x...', percentage: 100 }
],
})

Why OrcaRail
Ship crypto payments without rewriting your stack.
Drop-in checkout
Checkout links and embeddable widgets with a clean, web2-friendly UX.
Stablecoin-first
Price in fiat, settle in USDC/USDT, and show exact amounts at checkout.
Smart routing
Automatically select the fastest or lowest-fee network for each payment.
Webhooks + idempotency
Reliable events for paid, pending, and refunded states with retry safety.
Refunds + disputes
Partial refunds, notes, and audit trails built into every transaction.
Auditable flows
Clear payment logic with exportable events you can verify end to end.
Free sandbox on testnets
Open a sandbox with one click: test API keys, testnet networks, free test USDC and simulated payments. No real funds until you go live.
How it works
Three steps from intent to settlement.
Create a payment
Use the API or dashboard to price in USD/EUR and choose a settlement token.
Customer pays
WalletConnect-ready checkout, clear confirmations, and network routing.
You deliver
Webhook confirms on-chain status so you can fulfill instantly.
Networks & tokens
One API across EVM, Solana, and Bitcoin.
Stablecoin-first with USDC/USDT across EVM, Solana, Bitcoin, and more. Networks and tokens are fetched live from our API.
Built for SaaS & marketplaces
Route every payment to the right wallet.
Set a withdrawal_address on each payment intent and funds land exactly where they should — one wallet per vendor, seller, or campaign.
Per-payment routing
Pass a wallet address when you create a payment. Funds from that payment are withdrawn there automatically.
Fallback to default
Omit the address and funds go to your account's default withdrawal wallet — zero config for simple setups.
Split and get your commission
Give API keys a commission %. You earn that share on every payment; it appears in the quote and is sent to your withdrawal address.
Dynamic withdrawal example
// Each vendor gets paid to their own wallet
for (const order of orders) {
await orcarail.paymentIntents.create({
amount: order.total,
currency: 'usd',
payment_method_types: ['crypto'],
tokenId,
networkId,
return_url: `${appUrl}/success`,
withdrawal_address: order.vendor.walletAddress,
metadata: { orderId: order.id },
})
}Built for developers
A clean API with predictable states.
Use the SDK, receive webhook events, and rely on idempotency to keep your web2 stack consistent with on-chain reality. See the payment flow in the demo and full integration guide.
Webhook events
payment_intent.succeeded · payment_intent.processing · payment_intent.canceled · payment_intent.requires_payment_method
Confirmations policy
Require 1–N confirmations per chain, configurable per app.
Create payment
import OrcaRail from '@orcarail/node'
const orcarail = new OrcaRail(
process.env.ORCARAIL_API_KEY,
process.env.ORCARAIL_API_SECRET
)
const intent = await orcarail.paymentIntents.create({
amount: '100.00',
currency: 'usd',
payment_method_types: ['crypto'],
tokenId: 1,
networkId: 1,
return_url: 'https://yourapp.com/success',
metadata: { orderId: 'A-2049' },
withdrawal_address: vendor.walletAddress, // optional per-payment routing
})
// Confirm and redirect to hosted checkout
const confirmed = await orcarail.paymentIntents.confirm(intent.id, {
client_secret: intent.client_secret,
return_url: 'https://yourapp.com/success',
})
// Redirect customer to confirmed.nextAction.redirectToUrl.urlWebhook event
POST /webhooks/orcarail
x-webhook-signature: <hmac-sha256-hex>
{
"type": "payment_intent.succeeded",
"data": {
"object": {
"id": "abc123",
"amount": "100.00",
"currency": "usd",
"status": "succeeded"
}
}
}Plugins & integrations
Connect OrcaRail to the tools you already use.
Official integrations for stores, backends, and AI coding agents.
All integrations
Claude Code
Add @orcarail/mcp so Claude Code can create payment intents, manage subscriptions, and look up rates.
Cursor
Wire OrcaRail into Cursor via MCP config and ask your agent to handle payments from the editor.
Codex
Configure the official MCP server in Codex and ship crypto payment flows from your agent session.
WooCommerce
Accept crypto checkout in WooCommerce with the official OrcaRail WordPress plugin.
Node.js SDK
Use @orcarail/node for payment intents, subscriptions, catalog, and webhooks in TypeScript or JavaScript.
PHP SDK
Integrate OrcaRail in PHP apps with orcarail/orcarail-php — payments, subscriptions, and more.
Pricing
Simple, transparent pricing.
Hosted OrcaRail is 0.5% of each transaction with your first 1,000 free. Self-hosted is free on your own infrastructure.
Transparent by design
Non-custodial by default, no lock-in, and the same integration whether we host it or you do.
FAQ
Everything teams ask before shipping.
How much does OrcaRail cost?
Hosted OrcaRail charges 0.5% per completed transaction, and your first 1,000 transactions are free. Self-hosted has no software fee.
Is OrcaRail non-custodial?
Yes, by default. Payments settle to withdrawal addresses you control, so you decide where payouts go.
Which blockchains and tokens does OrcaRail support?
OrcaRail supports EVM networks, Solana, and Bitcoin, with USDC and USDT as the main settlement tokens. More networks are added based on user requests.
How do refunds work?
You can issue full or partial refunds with notes and an audit trail.
Is there a dashboard?
Yes. The dashboard includes transaction views, webhook settings, and logs.
How does OrcaRail handle KYC and compliance?
Add metadata fields for KYT/KYC workflows or connect your own provider.
How do webhooks stay reliable?
Webhook retries, signatures, and idempotency keys are built in.
Can I test OrcaRail without real funds?
Yes. Every organization can open a free sandbox that uses testnets only, with its own ak_test_ API keys, test USDC from a faucet, and simulated payments that need no wallet. Live and sandbox data never mix, and you switch to your live keys when you are ready.
