Skip to main content
PatronAtlasby Waylight
Back to PatronAtlas

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

POST/api/v1/match

Match 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"
  }
}
GET/api/v1/funders

Paginated 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"
    }
  ]
}
GET/api/v1/funders/:abn

Full 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
  }
}
GET/api/v1/usage

Calling 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

StatusBody.errorMeaning
400invalid_jsonRequest body wasn't JSON-parseable.
401unauthorizedAuthorization header missing, malformed, or key revoked/unrecognised.
404not_foundNo fund with that ABN in the current dataset.
422invalid_request / invalid_query / invalid_abnValidation failed. Body.issues lists exact paths.
429rate_limitedPer-key daily cap reached. Check X-RateLimit-Reset for when it clears.
500internal_errorServer bug. Email the request id (Cloudflare cf-ray header) if it recurs.
502match_failedUpstream 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 = null and contact.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.