Introduction
The Roster Partner API lets your platform offer payroll-deduction giving to the churches you serve. You import your churches, hand each donor a hosted enrollment link, and follow the results through webhooks and an event feed — Roster coordinates the donor flow and payroll connection, and instructs the bank that moves funds. Enrollment status and money received are separate outcomes.
Environments
| Environment | Base URL | Keys |
|---|---|---|
| Sandbox | https://api.sandbox.rostergiving.com |
sk_test_... |
| Production | https://api.rostergiving.com (opens when Roster releases your production workspace) |
sk_live_... |
Test keys only exist in the sandbox; live keys only in production. A live key is shown once at issuance — store it in your secret manager. The workspace owner can copy the current sandbox key again from the Integration Guide.
Conventions
-
Authentication —
Authorization: Bearer sk_...on every request. Authentication failures are always an opaque401. -
Idempotency — the
Idempotency-Keyheader is required on every POST. Keep a stable key for each action; the same key with a different body gets409and nothing runs. Replay semantics differ by operation. See errors and retries before automating retries. -
Errors — RFC 7807
application/problem+jsonwithtype,title,detail, andrequest_id. Includerequest_idwhen contacting support. Errors from the gateway in front of the API are plain JSON instead; see API errors. - Donor data — financial updates include authorized identity and contact fields for your reporting and existing ChMS integrations. Activity events retain their narrower projection. See financial integration. Keep personal data and API keys out of URLs and logs.
The integration in one paragraph
Import churches (POST /v1/churches/import), then for each donor create a
session (POST /v1/donor_sessions) and open the returned url on your page
with roster.js, as a pop-up or embedded —
a Roster-hosted flow where the donor verifies their phone, consents, and
connects payroll. You observe outcomes on your webhook endpoint
(enrollment.created, enrollment.activated, …) and reconcile with
GET /v1/events. Follow actual donations and donor contact updates through
GET /v1/financial_events, donation.updated and donor.updated to feed your
own reports and ChMS connector, and return a donation to the donor with a
refund. The end of the flow on your page is a courtesy, never the
result: trust the webhook and the feed, not the end of the flow.
Start with your first sandbox request, then follow the import guide, donor handoff and event reconciliation. Use sandbox certification to prove lifecycle behavior before the production readiness checks.