canonical: https://jentic.com/apis/grassrootz.com/grassrootz

# Grassrootz API

Jentic publishes the only available OpenAPI specification for Grassrootz API, keeping it validated and agent-ready. The Grassrootz API exposes the core resources of a Grassrootz fundraising tenant - accounts, campaigns, donations, events, and webhooks - over a single base URL with a dual-key authentication model. ClientKey is required for public endpoints, while ClientSecret is added for private and authenticated endpoints, and access keys grant the same permissions as an Organization Administrator in the admin portal.

## For AI agents

Look up Grassrootz fundraising accounts, campaigns, donations, and events, and register webhooks for change notifications.

## Scope

Does not process card payments directly, host donation forms, or send donor email - use for reading fundraising data and subscribing to webhook notifications only.

## Capabilities

- Retrieve the authenticated organization's account record from `/v1/account`
- List and inspect fundraising campaigns from `/v1/campaigns`
- Pull donations associated with the organization from `/v1/donations`
- List events configured in the Grassrootz tenant from `/v1/events`
- Register a webhook subscription for incoming donation or event activity via `/v1/webhooks`
- Reconcile donation activity into a downstream finance system on a schedule

## Use cases

### Donation Reconciliation into Finance Systems

Charities running Grassrootz campaigns reconcile donation activity into accounting tools by polling `/v1/donations` on a schedule, matching against bank deposits, and posting journal entries downstream. The dual-key model keeps the read-only flow auditable from the finance team's service account.

Example prompt: Fetch all donations from `/v1/donations` created in the last 24 hours and write each one as a journal entry in the accounting system

### Campaign Performance Dashboards

Fundraising teams build internal dashboards that pair `/v1/campaigns` with `/v1/donations` to show running totals, donor counts, and conversion against goals. Refreshing on a five-minute cadence keeps the dashboard close to live without exhausting tenant rate limits.

Example prompt: List all campaigns and for each one sum the amount field across associated donations to build a 'percent of goal' metric

### Event-Triggered Donor Communications

Marketing automation flows subscribe to webhooks via `/v1/webhooks` so that a thank-you message, tax receipt, or social post is triggered when a donation completes or a fitness event milestone is reached, without polling the API.

Example prompt: POST a webhook subscription to `/v1/webhooks` pointing to the team's automation endpoint and verify the subscription returns a 201

### Agent-Driven Fundraising Assistant via Jentic

An AI fundraising assistant uses Jentic to discover the right Grassrootz operation when a charity worker asks 'what came in last night?' or 'is the bike ride campaign live?'. Jentic injects ClientKey and ClientSecret from the vault so the agent never holds either credential.

Example prompt: Search Jentic for 'list grassrootz donations', load the schema, and execute `/v1/donations` to summarize the last 24 hours

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/v1/account` | Retrieve the authenticated organization's account |
| GET | `/v1/campaigns` | List fundraising campaigns |
| GET | `/v1/donations` | List donations |
| GET | `/v1/events` | List configured events |
| POST | `/v1/webhooks` | Subscribe to webhook notifications |

## Key resources

- **Account** — Retrieve the authenticated organization's account record
- **Campaign** — List and inspect fundraising campaigns
- **Donation** — Read donation records associated with the organization
- **Events** — List configured events in the Grassrootz tenant
- **Webhooks** — Subscribe to change notifications for donations and events

## Why Jentic

- **Setup:** Wiring the Grassrootz API by hand means sending both the ClientKey and ClientSecret headers on every request and wiring the account, campaign, donation, event, and webhook endpoints yourself. Through Jentic you install once, import the Grassrootz API from the API Directory, store the ClientKey and ClientSecret once, and your agent calls it.
- **Permission scoping:** Grassrootz exposes flat fundraising collections and carries its targets in the request, so limit the agent to the operations it needs, such as reading donations or listing campaigns. Every operation you allow is one you have chosen, and you leave out ones like registering a webhook if the agent should not manage subscriptions.
- **Credential handling:** Your Grassrootz ClientKey and ClientSecret are stored once, encrypted, by your own Jentic One instance and injected at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'list recent donations' or 'get campaign totals', and Jentic returns the matching Grassrootz operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Donorbox** — Hosted donation forms and recurring giving with a public API
- **Outlook Calendar** — Schedule fundraising follow-ups after a donation event fires
- **Google Calendar API** — Schedule donor calls or volunteer events alongside Grassrootz activity

## FAQ

### Why is there no official OpenAPI spec for Grassrootz API?

Grassrootz does not publish an OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Grassrootz API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Grassrootz API use?

The API uses a dual-key model. ClientKey is required as a header on every request to public endpoints, and ClientSecret is added as an additional header for private or authenticated endpoints. Both keys are issued by the Grassrootz support team. Through Jentic both headers are stored in the encrypted vault and injected per call.

### Can I retrieve historical donations through this API?

Yes. GET `/v1/donations` returns the donations visible to the authenticated organization. Filter and pagination behaviour is documented in the Grassrootz developer portal at https://grassrootz.readme.io/reference/getting-started-with-your-api, and webhooks via `/v1/webhooks` are recommended for near-real-time updates rather than tight polling.

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

Grassrootz does not publish a public rate-limit table. The administrator portal access scope means access keys carry the same permissions as an Organization Administrator, so excessive polling can affect tenant performance. Use webhooks via `/v1/webhooks` for change-driven flows and apply a conservative poll cadence on `/v1/donations` and `/v1/campaigns.`

### How do I list current campaigns through Jentic?

Search Jentic for 'list grassrootz campaigns', load the operation that maps to GET `/v1/campaigns`, and execute it. The response includes campaign identifiers, names, and goal amounts which can then be paired with `/v1/donations` to compute progress.

### Does the API support write operations like creating a donation?

The published spec covers reads on accounts, campaigns, donations, and events, and webhook subscription via `/v1/webhooks.` Direct donation creation typically happens through the Grassrootz hosted donation pages rather than this API. Confirm with Grassrootz support whether your tenant has additional write scopes enabled.

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

Yes. Because you run Jentic One yourself, your own rules decide which Grassrootz operations and credentials the agent can use, so you can allow only the endpoints it needs. For example, you might permit reading donations from GET `/v1/donations` and listing campaigns from GET `/v1/campaigns` while leaving out account lookups on GET `/v1/account`, event listing on GET `/v1/events`, or webhook subscription via POST `/v1/webhooks.` Every operation the agent can call is one you chose, so an agent that should not manage subscriptions simply never gets the POST `/v1/webhooks` permission.
