External Donation Ingestion
Last updated: March 3, 2026
Send donation data from any fundraising platform (Fundraise Up, GoodChange, NGP, etc.) directly to Switchboard using this API endpoint.
Endpoint
POST <https://webhooks.oneswitchboard.com/webhooks/donations/v1>Authentication
For each provider you plan to ingest donations from, please send Switchboard:
the provider’s
entity_id(s), andthe Switchboard organization(s) that each
entity_idshould be associated with.
Switchboard will configure each entity/organization mapping and will provide a separate set of credentials per provider.
e.g., “FundraiseUp: entity_id=campaign_123 mapped to Org A, Org B
This endpoint requires HTTP Basic Authentication.
Header | Required | Description |
| Yes | Basic auth: |
| Yes |
|
Request Body
Required Fields
Field | Type | Description |
| string | The campaign or form ID provided by the provider during setup |
| string | Unique identifier for this donation from the provider. |
| enum | The fundraising platform name. Options: |
| integer | Donation amount in cents (e.g., |
| string | ISO 8601 timestamp (e.g., |
| string | Donor's email address. |
Optional Fields
Field | Type | Description |
| boolean | When set to |
| nullable enum | The status of the donation. Only donations with status |
| string | Name of the donation form or campaign. |
| string | Donor's phone number. E.164 format preferred (e.g., |
| string | Donor's first name. |
| string | Donor's last name. |
| string | Street address. |
| string | City. |
| string | State/province. |
| string | Postal code. |
| string | Country code (default: |
| string | Employer name. |
| string | Occupation. |
| boolean | Whether this is a recurring donation ( |
| nullable enum | The recurring frequency. Options: |
| integer | Payment number in the series (e.g., |
| object | Key-value pairs for attribution tracking. |
| string | Switchboard refcode |
| boolean | Whether the donor opted in to SMS. |
| object | Any additional data. |
Example Requests
Full Payload
{
"entity_id": "campaign_12345",
"provider_donation_id": "ord_abc123",
"provider": "goodchange",
"amount_in_cents": 5000,
"paid_at": "2025-01-07T10:00:00Z",
"status": "approved",
"form_name": "End of Year 2024",
"donor": {
"email": "jane@example.com",
"phone": "+15551234567",
"firstname": "Jane",
"lastname": "Donor",
"addr1": "123 Main St",
"city": "Truckee",
"state": "CA",
"zip": "96161",
"country": "US",
"employer": "Acme Corp",
"occupation": "Engineer"
},
"is_recurring": true,
"recurring_period": "monthly",
"recurring_sequence": 3,
"refcodes": {
"refcodeSB": "b-123-xYzAb",
"utm_source": "email"
},
"text_opt_in": true,
"metadata": {
"payment_method": "card"
}
}
Minimal Payload
{
"entity_id": "campaign_12345",
"provider_donation_id": "ord_xyz789",
"provider": "fundraiseup",
"amount_in_cents": 2500,
"paid_at": "2025-01-07T10:00:00Z",
"donor": { "email": "jane@example.com" }
}
Responses
Status | Description |
| Accepted. Donation accepted and queued for processing. |
| Donation status is |
| Invalid Payload. Missing or invalid request body, or missing required fields. |
| Authentication failed. Invalid or missing credentials. |
| Server error. |
Troubleshooting
Issue | Solution |
| Verify your username and password. Contact support if credentials may be inactive. |
| Ensure all required fields are present, valid, and non-empty. |
| Retry or contact support. |
Duplicate Protection
Switchboard uses provider + entity_id + provider_donation_id to construct an idempotency key for the donation. If the same provider_donation_id is sent more than once for the same provider and entity_id, the first request will be processed and subsequent requests will return a normal success response, but the duplicate donation will be ignored and not processed again.
Getting Setup
Before you can send donations, email support@oneswitchboard.com with:
Your provider name(s)
Each provider
entity_idWhich Switchboard organization(s) each
entity_idshould map to
After we receive this, Switchboard will:
Configure your provider/entity-to-organization mappings
Issue your HTTP Basic Auth username/password (one set per provider)
Throughput Guidance
We recommend sending up to 300 requests per minute.
Backfill Guidance
You can start ingesting new donations as soon as credentials are issued.
For historical backfills, send us a CSV and we’ll estimate timing and handle the backfill for you.