Developer API
Match Australian DGR1 charities to verified PAFs and PuAFs from your own product. Same engine the /tool/run page uses, exposed as a REST API. Free tier: 100 requests/day, no card required.
Quickstart
Four lines and you've ranked your first charity. Replace pa_live_... with a key generated at /dashboard/api-keys.
curl -X POST https://patronatlas.com.au/api/v1/match \
-H "Authorization: Bearer pa_live_<your-key>" \
-H "Content-Type: application/json" \
-d '{"charity":"My Charity","description":"After-school literacy in Logan, QLD","region":"QLD","ask":"5k-25k"}'Authentication
Every request sends an Authorization: Bearer <key> header. Keys look like pa_live_aB3c...(40 chars). We store only the SHA-256 hash, so once a key is generated you must copy it immediately — the plaintext is unrecoverable. If you lose it, revoke and generate a new one.
curl https://patronatlas.com.au/api/v1/usage \ -H "Authorization: Bearer pa_live_<your-key>"
Endpoints
/api/v1/matchMatch a charity description against the full dataset and return up to 10 ranked matches.
Request
{
"charity": "Logan Literacy Inc.",
"description": "After-school literacy programs for primary-school kids in Logan, QLD. 1,400 contact hours with 95 students last year. DGR1 endorsed.",
"region": "QLD",
"ask": "5k-25k",
"context": "Past funders: Logan City Council Community Grants 2024."
}Response
{
"matches": [
{
"abn": "12345678901",
"fundName": "Example Public Ancillary Fund",
"fitScore": 8,
"fitReasoning": "Public Ancillary Fund registered in QLD with education and social welfare subtypes...",
"applicationStatus": "unknown",
"sourceUrl": "https://www.acnc.gov.au/charity/charities/...",
"draftEmailSubject": "Logan after-school literacy programs",
"draftEmailBody": "...",
"contact": {
"isPuAF": true,
"acncUrl": "https://www.acnc.gov.au/...",
"abrUrl": "https://abr.business.gov.au/ABN/View?abn=12345678901",
"website": "example.org.au",
"email": "grants@example.org.au",
"phone": null
}
}
],
"usage": {
"promptTokens": 23800,
"completionTokens": 3450,
"totalTokens": 27250,
"estimatedCostAUD": 0,
"model": "deepseek/deepseek-v4-flash:free"
}
}/api/v1/fundersPaginated list of all 2,688 verified funders. Filter by type, state, size, beneficiary, or subtype.
Request
Query params (all optional): type=PAF|PuAF state=NSW|VIC|QLD|WA|SA|TAS|ACT|NT size=Small|Medium|Large|Extra Large beneficiary=children subtype=education page=1 limit=25 (max 100)
Response
{
"page": 1,
"limit": 25,
"total": 412,
"totalPages": 17,
"funders": [
{
"abn": "12345678901",
"name": "Example Public Ancillary Fund",
"state": "NSW",
"postcode": "2000",
"size": "Medium",
"type": "Public Ancillary Fund",
"subtypes": ["education", "social welfare"],
"beneficiaries": ["children", "youth"],
"website": "example.org.au",
"acncUrl": "https://www.acnc.gov.au/...",
"registrationDate": "2018-06-30"
}
]
}/api/v1/funders/:abnFull enriched record for a single fund by 11-digit ABN, including ABR provenance and (for PuAFs only) public contact email and phone.
Request
Path param: ABN, digits only. /api/v1/funders/12345678901
Response
{
"abn": "12345678901",
"name": "Example Public Ancillary Fund",
"state": "NSW",
"postcode": "2000",
"size": "Medium",
"type": "Public Ancillary Fund",
"subtypes": ["education", "social welfare"],
"beneficiaries": ["children", "youth"],
"website": "example.org.au",
"registrationDate": "2018-06-30",
"abr": {
"legalName": "The Trustee for Example Public Ancillary Fund",
"entityType": "Discretionary Trust - Public",
"entityStatus": "Active",
"dgrEndorsed": true,
"dgrItem": 2,
"dgrCategory": "Public Ancillary Fund",
"dgrStartDate": "2018-07-01"
},
"contacts": {
"acncUrl": "https://www.acnc.gov.au/...",
"abrUrl": "https://abr.business.gov.au/ABN/View?abn=12345678901",
"email": "grants@example.org.au",
"phone": null
}
}/api/v1/usageCalling key's rolling-24h usage and tier cap. Same numbers the X-RateLimit-* headers carry.
Request
No body, no query params. Authorization header only.
Response
{
"tier": "free",
"limit": 100,
"used": 7,
"remaining": 93,
"resetUnix": 1742345678,
"window": "rolling-24h"
}Rate limits
Free tier: 100 requests / 24h per key, rolling window. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset (UNIX seconds). Going over returns HTTP 429.
Need more for a real integration? Email info@patronatlas.com.auwith your use case — paid tiers ship later in 2026 but we'll raise your cap manually for beta partners now.
Error codes
| Status | Body.error | Meaning |
|---|---|---|
| 400 | invalid_json | Request body wasn't JSON-parseable. |
| 401 | unauthorized | Authorization header missing, malformed, or key revoked/unrecognised. |
| 404 | not_found | No fund with that ABN in the current dataset. |
| 422 | invalid_request / invalid_query / invalid_abn | Validation failed. Body.issues lists exact paths. |
| 429 | rate_limited | Per-key daily cap reached. Check X-RateLimit-Reset for when it clears. |
| 500 | internal_error | Server bug. Email the request id (Cloudflare cf-ray header) if it recurs. |
| 502 | match_failed | Upstream AI provider failed. Usually transient; retry in ~30s. |
A few honest notes before you build
- The matching engine is AI-ranked from public ACNC + ABR data. It does not have grant history, application deadlines, or trustee personal contacts — and is instructed not to invent them. Your product should still tell its user to verify every match.
- PAFs (private ancillary funds) intentionally return
contact.email = nullandcontact.phone = null. PAFs do not run open application rounds; the entry point is a warm introduction via a trustee listed on the ACNC record. - v1 is beta. We may add fields. We won't remove existing fields without notice. If you need a stable contract for production, email and we'll talk.