Quickstart
Authenticate, list schools, and submit your first donation request.
1. Get a key
Request sandbox access at /signup. Keys look like wbk_test_<key_id>:<secret> in sandbox and wbk_live_… in production. The full key is shown once and never again — only a hash is stored.
2. Call the API
Every bank request is server-to-server and carries your key in the X-Wishbone-API-Key header. Start with the school list, which needs nothing else:
curl "https://sandbox.api.getwishbone.io/v1/schools?state=TN" \
-H "X-Wishbone-API-Key: wbk_test_YOUR_KEY_ID:YOUR_SECRET"{
"success": true,
"data": [
{
"school_id": "sch_tennessee",
"name": "Tennessee Fund",
"university": "University of Tennessee",
"state": "TN",
"conference": "SEC",
"minimum_donation_usd": 5.0,
"fund_count": 2,
"active": true
}
],
"meta": { "request_id": "req_01HX...", "total": 1, "limit": 50 }
}3. Submit a donation
Your side converts points to dollars; you send the resulting amount and your own transaction reference. bank_transaction_ref is your idempotency key — resubmitting the same one returns 409 DONATION_DUPLICATE instead of double-posting.
curl -X POST "https://sandbox.api.getwishbone.io/v1/donations/request" \
-H "X-Wishbone-API-Key: wbk_test_YOUR_KEY_ID:YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{
"school_id": "sch_tennessee",
"fund_designation": "annual_fund",
"dollar_amount": 50.00,
"points_redeemed": 5000,
"bank_transaction_ref": "TXN-12345"
}'{
"success": true,
"data": {
"donation_id": "9f14c6d2-7b3a-4e51-a0c8-2d6b8e4f1a92",
"status": "pending",
"school_id": "sch_tennessee",
"dollar_amount": 50.0,
"bank_transaction_ref": "TXN-12345",
"estimated_confirmation_at": "2026-05-07T14:27:00Z"
},
"meta": { "request_id": "req_01HX..." }
}The 202 means accepted, not completed. Wishbone pushes the gift to the school's platform out of band and tells you the outcome via webhooks, or you can poll GET /v1/donations/{id}.
Next
Full endpoint list in the API Reference. For the in-app cardholder flow, see Mobile SDK and App browser routing.