StarPay Developers

Build money movement into anything.

A REST API that behaves the way you'd build it: sandbox keys in minutes, webhooks for every event, idempotent retries, and errors that tell you what actually went wrong.

sk_test_ keys work against the full sandbox — no sales call required.

first_collection
$ curl https://api.starpay.example/v1/collections \
  -H "Authorization: Bearer sk_test_····" \
  -H "Idempotency-Key: order_8842" \
  -d amount=150.00 \
  -d currency=GHS \
  -d channel=momo \
  -d customer="+233 24 XXX XXXX"

# 201 Created
{ "id": "col_9dK2m", "status": "pending_approval" }
// npm install @starpay/sdk
const starpay = require("@starpay/sdk")("sk_test_····");

const collection = await starpay.collections.create({
  amount: 150.00,
  currency: "GHS",
  channel: "momo",
  customer: "+233 24 XXX XXXX",
  idempotencyKey: "order_8842"
});
// → collection.status: "pending_approval"
# pip install starpay
import starpay
client = starpay.Client("sk_test_····")

collection = client.collections.create(
    amount=150.00,
    currency="GHS",
    channel="momo",
    customer="+233 24 XXX XXXX",
    idempotency_key="order_8842",
)
# → collection.status == "pending_approval"
Quickstart

Sandbox to first payment in an afternoon.

Get your test keys

Create an account, grab sk_test_ keys, and hit the full sandbox — simulated MoMo prompts, card flows and bank transfers included.

Make your first collection

One POST to /v1/collections. Pass an idempotency key and retry as hard as you like — you'll never double-charge.

Listen for the webhook

We call you back on every state change — collection.settled, payout.settled and friends. Verify the signature, update your books, done.

The surface area

Small API. Every way Ghana pays.

Predictable REST, versioned from day one, cursor pagination, and a ledger entry behind every object — because an API for money should reconcile by construction, not by cron job.

  • POST /v1/collections charge over MoMo, card or bank
  • POST /v1/payouts send to wallet, bank or bulk
  • POST /v1/bills airtime, data & utilities
  • POST /v1/payment_links shareable checkout links
  • GET /v1/ledger/entries your reconciliation source of truth
  • GET /v1/settlements reports, fees & receipts
Built for production

Production-grade reliability you can build on.

Webhooks for every event

Signed payloads on every state change, with automatic retries and a redelivery log you can replay from the dashboard.

Idempotent retries

Networks in the real world drop packets. Send the same idempotency key twice and we return the same result — never a double charge.

Provider failover, free

You integrate once. When a rail degrades, we reroute underneath your API call — same request, same response shape.

Sandbox & live keys

A full-fidelity sandbox with simulated rails. Flip sk_test_ to sk_live_ when you're ready.

Risk controls built in

IP whitelisting, scoped keys per environment, role separation between finance and engineering.

Reconciliation-first

Every API object maps to a ledger entry. Query /v1/ledger/entries and your books match ours, to the pesewa.

Ship your integration this week.

Sandbox keys in minutes. Docs that respect your time. An API that reconciles itself.