The CharitMe API
A REST API over your own campaigns and donations. Free on every account, no sales call and no enterprise tier — create a key in your dashboard and start reading.
Authentication
Create a key at /dashboard/developers. Keys start with cm_live_ and are shown once — CharitMe stores only a hash, so a lost key must be revoked and replaced. Send it as a bearer token:
curl https://www.charitme.com/api/v1/me \ -H "Authorization: Bearer cm_live_your_key_here"
Scopes
Every scope is read-only, and every endpoint is scoped to the data owned by the key's account. There is no scope that reads another account's data, and no write scope — moving money through an API key is not something we will ship without a design that deserves it.
campaigns:readdonations:readprofile:read
Endpoints
GET
/api/v1/meprofile:readThe account a key belongs to, and the scopes it holds. Use it to verify a credential.
GET
/api/v1/campaignscampaigns:readYour campaigns, newest first. Supports
?limit= (1–100, default 25) and ?offset=. Amounts end in _cents and are integers.GET
/api/v1/donationsdonations:readCompleted donations to your campaigns. Optional
?campaign_id= filter. Anonymous donors return donor_name: null and donor_id: null — the amount is yours, the identity is theirs.Response shape
List endpoints share one envelope, so paging works the same everywhere.
{
"data": [ … ],
"pagination": { "limit": 25, "offset": 0, "total": 137 }
}Errors are also uniform. Branch on code, not on the message:
{ "error": { "code": "insufficient_scope",
"message": "This key does not have the `donations:read` scope.",
"required_scope": "donations:read" } }401 unauthorized— missing, malformed, unknown or revoked key403 insufficient_scope— valid key, wrong scope429 rate_limited— 120 requests per minute, per key
Example
curl "https://www.charitme.com/api/v1/donations?limit=5" \
-H "Authorization: Bearer cm_live_your_key_here"
{
"data": [
{ "id": "…", "campaign_id": "…", "amount_cents": 5000,
"tip_cents": 0, "status": "completed", "anonymous": false,
"donor_name": "Ada L.", "message": "Rooting for you!",
"created_at": "2026-07-30T18:04:11.000Z" }
],
"pagination": { "limit": 5, "offset": 0, "total": 1 }
}