Sterling ACH
API documentation.
Sandbox access is provisioned with your account — contact us to get API keys.
Overview
The Sterling ACH API is a REST API over HTTPS. Every endpoint lives under api.sterlingridge.io/v1, accepts form-encoded or JSON bodies, and returns predictable JSON. Requests are idempotent when you supply an Idempotency-Key header, and every state change fires a webhook.
GET /v1/account
$ curl https://api.sterlingridge.io/v1/account \
-u sk_test_51Hxxxx:
{
"id": "acct_8Kd2Wq",
"object": "account",
"product": "sterling_ach",
"capabilities": ["payouts", "verified_debits",
"payment_links", "subscriptions", "marketplace"],
"mode": "sandbox"
}Authentication
Authenticate with your secret key using HTTP Basic auth — the key is the username and the password is blank. Sandbox keys are prefixed sk_test_, live keys sk_live_. Keep keys server-side; never ship them in client code.
Authenticated request
$ curl https://api.sterlingridge.io/v1/payments \
-u sk_test_51Hxxxx:
# The colon prevents curl from prompting
# for a password — the key is the username.
# 401 response for a missing or invalid key:
{
"error": {
"type": "authentication_error",
"message": "Invalid API key provided."
}
}Send a payment
Push funds to any US bank account. Choose the rail per payout: rtp for instant 24/7 credits, ach_same_day, or standard ach. If the destination bank does not support RTP, the payout automatically falls back to same-day ACH.
POST /v1/payouts
$ curl https://api.sterlingridge.io/v1/payouts \
-u sk_test_51Hxxxx: \
-d amount=250000 \
-d currency=usd \
-d rail=rtp \
-d destination=ba_3Nv8Qx \
-d description="Affiliate commission — June"
{
"id": "po_5Tk9Zw2Lm",
"object": "payout",
"amount": 250000,
"rail": "rtp",
"status": "paid",
"arrival": "instant"
}Accept a payment
Debit a customer's verified bank account. Customers connect their bank once through Plaid; after that, every debit is verified for ownership and checked for sufficient balance before submission — then settles next business day.
POST /v1/payments
$ curl https://api.sterlingridge.io/v1/payments \
-u sk_test_51Hxxxx: \
-d amount=125000 \
-d currency=usd \
-d method=ach_verified \
-d customer=cus_9f2K3L \
-d description="Invoice #2041"
{
"id": "pay_7Yq2Mn4Rd",
"object": "payment",
"status": "processing",
"verification": { "bank": "verified",
"balance": "sufficient" },
"expected_settlement": "next_day"
}Payment links
Generate a hosted payment page in one call and share the URL by email, SMS, or invoice. The customer connects their bank, the payment verifies, and you get a webhook when it settles — no frontend work required.
POST /v1/payment_links
$ curl https://api.sterlingridge.io/v1/payment_links \
-u sk_test_51Hxxxx: \
-d amount=48000 \
-d currency=usd \
-d description="Consulting retainer" \
-d "notify[email]"=client@example.com
{
"id": "plink_2Rw7Xc",
"object": "payment_link",
"url": "https://pay.sterlingridge.io/l/2Rw7Xc",
"status": "active"
}Subscriptions
Bill a verified bank account on a schedule. Set the amount and interval and Sterling ACH handles retries, balance checks before each charge, and dunning notifications when a payment cannot be collected.
POST /v1/subscriptions
$ curl https://api.sterlingridge.io/v1/subscriptions \
-u sk_test_51Hxxxx: \
-d customer=cus_9f2K3L \
-d amount=9900 \
-d currency=usd \
-d interval=month \
-d description="Pro plan"
{
"id": "sub_6Fh3Pv",
"object": "subscription",
"status": "active",
"next_charge": "2026-08-27"
}Marketplace
Onboard sellers with Plaid-verified accounts, hold funds in white-label wallet balances, and split or route payouts programmatically. Sellers complete a hosted onboarding flow — you never touch their bank credentials.
POST /v1/marketplace/accounts
$ curl https://api.sterlingridge.io/v1/marketplace/accounts \
-u sk_test_51Hxxxx: \
-d type=seller \
-d "profile[name]"="Acme Widgets" \
-d "profile[email]"=payouts@acmewidgets.com
{
"id": "macct_4Jd8Nb",
"object": "marketplace_account",
"onboarding_url":
"https://onboard.sterlingridge.io/m/4Jd8Nb",
"wallet": { "balance": 0, "currency": "usd" }
}Webhooks
Subscribe to events like payment.settled, payout.paid, and payment.returned. Every delivery is signed with your endpoint secret so you can verify authenticity, and failed deliveries retry with backoff for 72 hours.
POST /v1/webhook_endpoints
$ curl https://api.sterlingridge.io/v1/webhook_endpoints \
-u sk_test_51Hxxxx: \
-d url=https://example.com/webhooks/sterling \
-d "events[]"=payment.settled \
-d "events[]"=payout.paid \
-d "events[]"=payment.returned
{
"id": "we_9Qs2Vt",
"object": "webhook_endpoint",
"secret": "whsec_Xp4...",
"status": "enabled"
}Ready to build on
Sterling ACH?
Sign up and our integration team will provision your sandbox, API keys, and a named engineering contact.
Sign Up NowNo long-term contracts · No setup fees · No cancellation fees