canonical: https://jentic.com/apis/keela.co/keela

# Keela API

Jentic maintains a curated, agent-ready OpenAPI specification for Keela API, built from the OpenAPI 3.0.0 document Keela publishes in its API reference at developers.keela.co and adding the OAuth2 scheme and HTTPS servers that document omits. Keela is a CRM purpose-built for nonprofits and its API exposes contacts, households, campaigns, donations, revenues, sources, tags, transactions, and impact areas. Together these endpoints let small charities sync donors, log gifts, and track campaign performance from a website donate widget, an event platform, or a finance system without manual data entry.

## For AI agents

Manage donor contacts, households, campaigns, donations, revenues, tags, and impact areas inside a Keela nonprofit CRM tenant. 10 endpoints covering the core fundraising workflow.

## Scope

Does not handle email blast sending, payment processing, or grant-management workflows - use for Keela donor, household, campaign, donation, revenue, and tag operations only.

## Capabilities

- Create and list donor contacts and households via `/api/contacts` and `/api/households`
- Manage fundraising campaigns and their attribution sources via `/api/campaigns` and `/api/sources`
- Record donations and other revenue via `/api/donations` and `/api/revenues`
- Tag donor records and roll them up into impact areas via `/api/tags` and `/api/impact_areas`
- Log financial transactions linked to donations via `/api/transactions`
- Mirror nonprofit CRM data with external accounting and email tools through structured endpoint payloads

## Use cases

### Donate-Widget to CRM Sync

Pipe gifts from a charity's website donate widget straight into Keela so finance and fundraising teams see donations the moment they land. The `/api/contacts` and `/api/donations` endpoints accept the donor and gift in two calls; combined with `/api/sources` for attribution, a small nonprofit can report 'gifts by acquisition source' without exporting and joining files in a spreadsheet.

Example prompt: Resolve or create the contact via POST `/api/contacts`, then record the gift via POST `/api/donations` with the source ID from the campaign tracking parameter.

### Campaign Performance Reporting

Pull campaigns, donations, and sources from Keela into a BI dashboard so program directors can see fundraising velocity by campaign without logging into the CRM. `/api/campaigns` returns campaign metadata, `/api/donations` returns gifts by campaign ID, and `/api/sources` returns attribution. Combined nightly, a $250 BI tool replaces a $10K consulting engagement for many small charities.

Example prompt: List campaigns via GET `/api/campaigns` and donations via GET `/api/donations`, then aggregate gift totals by campaign ID.

### Major Gift and Stewardship Tagging

Apply structured tags to donor contacts ('major gift prospect', 'monthly recurring lapsed', 'thank-you call due') so fundraisers see priority work in their CRM view. POST `/api/tags` applies tags programmatically, and combining with impact-area assignment gives a stewardship team the queue they need without manual segmentation.

Example prompt: Tag every contact with a lifetime giving total over $5,000 as 'major-gift-prospect' via POST `/api/tags.`

### Agent-Driven Fundraising Operations

A nonprofit's AI assistant uses Jentic to update Keela when a fundraiser says 'log Sarah's $500 gift to the climate campaign' or 'tag the volunteer board as monthly donors'. Jentic resolves the contact and campaign by name, picks the right endpoint, and executes the call, with the OAuth credentials staying in the vault and never appearing in chat with the assistant.

Example prompt: Use the Jentic search 'record a Keela donation', load the schema, and POST `/api/donations` for the contact, campaign, and amount specified by the fundraiser.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/api/campaigns` | List fundraising campaigns |
| GET | `/api/contacts` | List donor contacts |
| GET | `/api/households` | List households |
| GET | `/api/impact_areas` | List impact areas |
| GET | `/api/sources` | List campaign attribution sources |
| GET | `/api/tags` | List donor tags |
| GET | `/api/donations` | List donations |
| GET | `/api/revenues` | List revenues |

## Key resources

- **Contacts** — Create and list donor contact records.
- **Households** — Roll contacts into household units for joint giving.
- **Campaigns and Sources** — Manage fundraising campaigns and their attribution sources.
- **Donations and Revenues** — Record gifts and non-donation revenue (grants, earned income).
- **Tags and Impact Areas** — Segment donors and roll them up into program impact areas.
- **Transactions** — Log the financial transactions tied to donation records.

## Why Jentic

- **Setup:** Wiring the Keela API by hand means running its OAuth2 flow, tracking token refresh, and mapping donor, donation, and campaign reads to their query shapes against usa.keela.co yourself. Through Jentic you install once, import the Keela API from the API Directory, store the OAuth credential once, and your agent calls it.
- **Permission scoping:** Keela's listed surface is read-only collection endpoints like `/api/donations`, `/api/contacts`, and `/api/campaigns`, so scope the agent by the operations it needs, such as reading donations or listing households. You pick that set, so an agent built to report on donations is not given tag or revenue reads unless you add them.
- **Credential handling:** Your Keela OAuth2 credential is stored once, encrypted, by your own Jentic One instance and injected at execution time. The access token and any refresh token never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'list Keela donations' or 'read donor households', and Jentic returns the matching Keela operation with its parameter schema so the agent calls the right endpoint without reading Keela's developer docs.

## Related APIs

- **Donorbox API** — Donation form provider that posts gifts; pair with Keela for the CRM-of-record.
- **Neon CRM API** — Larger nonprofit CRM with broader event and membership features than Keela.
- **Salesforce API** — Generic CRM with the Nonprofit Cloud overlay - heavier than Keela for small teams.
- **Mailchimp API** — Email marketing platform that segments donors using tags synced from Keela.

## FAQ

### Does Keela publish an official OpenAPI spec?

Yes. Keela's API reference at https://developers.keela.co publishes an OpenAPI 3.0.0 document, info.version 1.0.0, covering the same 8 paths and 10 operations described here. That document is embedded in the reference page instead of a standalone openapi.json file, and it declares no security scheme while listing its servers over http. Jentic therefore keeps a curated copy of it that declares the OAuth2 authorization-code flow against https://usa.keela.co, so an agent can authenticate from the spec alone. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Keela API use?

The API uses OAuth2 access tokens. Each request includes `Authorization: Bearer {token}` where the token is issued from the Keela tenant's API settings. Through Jentic the token is held encrypted in the vault and injected at execution time so the agent never sees the raw access token.

### Can I record a donation against a campaign with the Keela API?

Yes. POST `/api/donations` accepts a contact reference, campaign ID, amount, and source ID, and the response returns the donation ID for follow-up calls. Resolve the contact first via GET `/api/contacts` if you only have an email, and the campaign via GET `/api/campaigns` if you only have a name.

### What are the rate limits for the Keela API?

Keela does not publish hard rate limits in the spec. The platform tolerates typical small-charity automation traffic (nightly syncs, real-time gift posting) and returns HTTP 429 on bursts. Cache `/api/sources` and `/api/campaigns` daily - they change rarely - to keep request volume down.

### How do I tag a Keela donor through Jentic?

Run `pip install jentic` and search Jentic for 'tag a Keela donor'. Jentic returns the schema for POST `/api/tags`; supply the contact ID and tag name, then execute. The OAuth token is injected from your Jentic One instance.

### Does the Keela API distinguish donations from other revenue?

Yes. POST `/api/donations` records charitable gifts that need receipts; POST `/api/revenues` records non-donation revenue like grants, sponsorships, and earned income. Keep them on the right endpoint so tax-receipt automation does not issue receipts for non-donation revenue.

### Is the Keela API included in every plan?

API access is included with Keela paid plans for nonprofits. The free or trial tier may be read-only; check the tenant plan if POST `/api/donations` returns 403.

### Can I limit what my agent is allowed to do with the Keela API?

Yes. Because Jentic One is self-hosted, you decide which Keela operations the agent can call, so you can grant only the read-only collection endpoints it needs, such as GET `/api/donations` or GET `/api/contacts`, while withholding others like `/api/tags` or `/api/revenues.` An agent built to report on donations is never handed tag or revenue reads unless you add them to its allowed set. The OAuth2 credential is stored by your own instance and injected only for the operations you have approved.
