Install Jentic One Beta
Jentic One is a self-hosted execution layer for AI agents. It lets your agent call the OpenFundraise Public API, or any other public or private API you need. You set the rules, the agent never sees your credentials, and every call is logged.
Two steps, two machines. Install the instance in a safe environment, then register your agent from wherever it runs.
Step 1: Jentic One Host machine
# On the machine that will host your Jentic One instance:
curl -fsSL "https://jentic.com/install.sh?src=apis&api=%2Fapis%2Fopenfundraise.org%2Fopenfundraise" | shStep 2: Agent machine
# On the machine where your agent runs (keep this separate from the instance):
curl -fsSL "https://jentic.com/install.sh?src=apis&api=%2Fapis%2Fopenfundraise.org%2Fopenfundraise" | sh
jentic register # connects your agent to your Jentic One instanceJentic One is in public beta. The setup above keeps your agent separate from the instance, which is what you want before using real credentials: an agent running as the same OS user as Jentic One can read its stored keys directly. Just evaluating? A single local install is fine to start. See the secure deployment guide for the tiers.
What an agent can do with OpenFundraise Public API.
List active public donation campaigns with their exact amount constraints and designation ids
Create a pending one-time donation intent for an exact amount_cents, with a Stripe payment method or Shared Payment Token and an idempotency_key
Confirm a donation intent to charge exactly the stored exact_total_cents, with retries returning the original receipt
Filter a tenant's donations by status, frequency, campaign_id, designation_id, and date range
GET STARTED
Search supporters by name or email, ordered by latest donation activity
Add an internal or private CRM note to a supporter, optionally pinned
Poll triggers for new donations, new recurring donations, and new or updated supporters
Patterns agents use OpenFundraise Public API for, with concrete tasks.
★ AI agent making a donation a person approved
An AI agent acting for a donor through Jentic lists campaigns with GET /campaigns, then creates a donation intent with POST /donation-intents carrying the campaign_id, the human-approved amount_cents, the donor's first_name, last_name, and email, an idempotency_key, and a Stripe payment method. The API applies no upsell, round-up, or recurring conversion, and POST /donation-intents/{id}/confirm charges exactly the stored total, so the amount the person approved is the amount charged.
Call GET /campaigns, pick the campaign_id the donor named, POST /donation-intents with amount_cents 2500, the donor details, an idempotency_key, and stripe_payment_method, then POST /donation-intents/{id}/confirm
Donation reporting for a nonprofit
Development staff want regular figures without exporting spreadsheets. GET /donations accepts status values such as completed, refunded, and failed, a frequency such as monthly or yearly, campaign and designation filters, and a date window, so an agent can assemble a report of what came in for a campaign over a period and break it down by gift frequency.
Call GET /donations with campaign_id, status=completed, and start_date and end_date for last month, then total the amounts by frequency
Supporter stewardship notes
After a call or event, a fundraiser wants the conversation on the supporter record. GET /supporters finds the person by email or search text, and POST /supporters/{id}/notes adds a note body with visibility internal or private and an optional pinned flag. The tenant CRM module must be enabled for notes to be accepted.
Call GET /supporters with email set to the donor's address, then POST /supporters/{id}/notes with body 'Thanked by phone after gala', visibility internal, pinned true
Polling new gifts into other tools
Automation clients can poll GET /triggers/new-donation, GET /triggers/new-recurring-donation, and GET /triggers/new-updated-supporter with a since timestamp to pick up fresh records, then post thank-you messages or sync supporters into another system.
Poll GET /triggers/new-recurring-donation with since set to the last run time and send each new recurring donor's email to the welcome sequence
11 endpoints — the openfundraise public api takes one-time charitable donations to active campaigns and gives a nonprofit tenant read access to its donations and supporters.
METHOD
PATH
DESCRIPTION
/campaigns
List active donation campaigns
/donation-intents
Create an exact donation intent
/donation-intents/{id}/confirm
Confirm and charge a donation intent
/donations
List donations with filters
/supporters
List supporters
/supporters/{id}/notes
Add a supporter note
/triggers/new-donation
Poll new donations
/campaigns
List active donation campaigns
/donation-intents
Create an exact donation intent
/donation-intents/{id}/confirm
Confirm and charge a donation intent
/donations
List donations with filters
/supporters
List supporters
/supporters/{id}/notes
Add a supporter note
/triggers/new-donation
Poll new donations
What agents get from Jentic-routed access to this vendor.
Setup
Wiring OpenFundraise by hand means picking between the bearer header and X-OpenFundraise-API-Key, generating idempotency keys, handling the Stripe payment method or Shared Payment Token, and backing off on retryAfter. Through Jentic you install once, import OpenFundraise from the API Directory, store the key once, and your agent calls it.
Permission scoping
Rules bound OpenFundraise by operation: the amount and campaign travel in the POST /donation-intents body, so a rule decides whether your agent may create or confirm donations, not for how much. You choose the operations it may call, so the charging step POST /donation-intents/{id}/confirm and supporter note writes are not included unless you add them.
Credential isolation
Your OpenFundraise tenant key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
Intent-based discovery
Agents search Jentic by intent such as 'donate to a campaign' or 'list refunded donations', and Jentic returns the matching OpenFundraise operation with its input schema, including campaign_id, amount_cents, and idempotency_key, so the agent calls it correctly.
Alternatives and complements available in the Jentic catalogue.
Specific to using OpenFundraise Public API through Jentic.
What authentication does the OpenFundraise Public API use?
Per its OpenAPI spec, tenant operations accept the full tenant API key either as a bearer token in the Authorization header or in the X-OpenFundraise-API-Key header. Three operations are public and need no key: GET /campaigns, POST /donation-intents, and POST /donation-intents/{id}/confirm. GET /auth/test validates a key and returns tenant and key metadata. Through Jentic the key is stored by your own instance and attached at call time.
Can the OpenFundraise Public API change the donation amount after I approve it?
No. POST /donation-intents records an exact amount_cents and applies no upsell, round-up, or recurring conversion, and fee coverage defaults off unless cover_fees is set. POST /donation-intents/{id}/confirm accepts no amount or fee fields and charges exactly the stored exact_total_cents; retrying a completed intent returns the original receipt.
What are the rate limits for the OpenFundraise Public API?
The OpenAPI spec does not publish a numeric limit. It documents a 429 response with the code RATE_LIMIT_EXCEEDED and a retryAfter value, so an agent should wait that long before retrying. Contact support@openfundraise.org for the limit on your tenant.
Is there an OpenFundraise MCP server?
You don't need an MCP server to give your agent OpenFundraise. Jentic connects it directly from the API Directory: import it, store your credential once, and your agent calls the campaign, donation, and supporter operations on demand without loading another server's tool definitions into its context.
How do I list a campaign's donations through Jentic?
Search Jentic for 'list donations for a campaign', load the GET /donations operation, and execute it with campaign_id and an optional status such as completed or refunded. Page with limit and offset. To run it on your own infrastructure, install Jentic One from its GitHub repo.
Can I limit what my agent is allowed to do with the OpenFundraise Public API?
Yes. For a reporting assistant, write a rule that allows GET /donations and GET /supporters only, and the agent can read gifts and donors but cannot create or confirm a donation or write notes. For a giving assistant, allow GET /campaigns and POST /donation-intents and keep the confirm operation for a human step, and every call the agent makes is logged.
For Agents
List active donation campaigns, create and confirm exact-amount one-time donations via Stripe, and read a nonprofit's donations and supporters with filters and polling triggers.
Use for: I want to donate 25 dollars to this campaign, List all active donation campaigns I can give to, Find all refunded donations from last month, Search for a supporter by email
Not supported: Does not create recurring donations, issue refunds, or edit campaigns. Use for one-time donations and reading an OpenFundraise tenant's donations and supporters only.
The OpenFundraise Public API takes one-time charitable donations to active campaigns and gives a nonprofit tenant read access to its donations and supporters. A donor or agent lists active campaigns with their exact amount constraints and designation ids, creates a pending donation intent for an exact amount_cents with a Stripe payment method or Shared Payment Token, and confirms it to charge exactly the stored total. With a tenant API key, the API lists and filters donations by status, frequency, campaign, and date, lists supporters, adds internal or private CRM notes, and exposes polling triggers for new donations, new recurring donations, and new or updated supporters.
This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.
Base layer of spec validity and structural soundness.
Aggregated quality score from linter diagnostics, weighted by severity.
Percentage of `$ref` references that resolve successfully.
Checks whether the API description parses successfully and conforms to its declared specification (e.g., OpenAPI).
Structural correctness score based on schema issues using logarithmic dampening.
Clarity, completeness, and ingestion readiness for developers and tooling.
How richly the API is illustrated with examples.
Percentage of examples that conform to their schemas.
Percentage of operations with complete response definitions (success, client error, server error).
Health of API ingestion, bundling, and resolution within Jentic pipelines.
Semantic breadth, depth, and agent comprehension for AI systems.
Coverage of descriptions across API elements.
Coverage of RFC 9457 Problem Details for error responses.
Coverage, uniqueness, and casing consistency of operationIds for AI inference.
Coverage of summaries across operations/tags/info.
Functional utility, complexity comfort, and AI orchestration readiness.
Agent comfort level based on API operational and structural complexity.
Trust, risk posture, and security compliance.
Average quality of security schemes based on authentication method strength (weakest link for OAuth2).
Findability, semantic richness, and reasoning readiness.
Clarity and depth of descriptions across API elements.
Score it yourself
Every API in the directory is allowlisted, so you can re-score it with no key required.
npx @jentic/api-scorecard-cli score <openapi-url>