Developers

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:read
  • donations:read
  • profile:read

Endpoints

GET/api/v1/meprofile:read
The account a key belongs to, and the scopes it holds. Use it to verify a credential.
GET/api/v1/campaignscampaigns:read
Your campaigns, newest first. Supports ?limit= (1–100, default 25) and ?offset=. Amounts end in _cents and are integers.
GET/api/v1/donationsdonations:read
Completed 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 key
  • 403 insufficient_scope — valid key, wrong scope
  • 429 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 }
}