Skip to content
fullhall

Your organisation's data, from your own tools

The fullhall API is plain REST over HTTPS: JSON in, JSON out, scoped API keys. It covers contacts, groups, and files, and it calls the same code the dashboard uses, so what your script writes is exactly what your coordinator sees.

Quickstart

You need an API key. In the dashboard, open Settings, then Developer, and create one (you'll need admin access). Grant it read access to contacts. The key shows once: copy it then.

Then list your contacts from a terminal:

curl https://fullhall.au/api/v1/contacts \
  -H "Authorization: Bearer fh_live_..."

You'll get a page of contacts back:

{
  "data": [
    {
      "object": "contact",
      "id": "5f6…",
      "first_name": "Priya",
      "last_name": "Sharma",
      "email": "[email protected]",
      "phone": null,
      "address": null,
      "notes": null,
      "labels": [{ "object": "label", "id": "9a1…", "name": "volunteer" }],
      "source_type": "manual",
      "created_at": "2026-07-20T02:14:00.000Z",
      "updated_at": "2026-07-20T02:14:00.000Z"
    }
  ],
  "has_more": true,
  "next_cursor": "eyJr…"
}

When has_more is true, pass the next_cursor value back as ?cursor= to fetch the next page.

The shape of the API

Base URL https://fullhall.au/api/v1. Three resources: /contacts (with /labels riding along), /groups, and /files. Lists are cursor-paginated with a limit of up to 100. Errors are RFC 9457 problem+json with a stable code field and a request_id you can quote if you write to us.

Versioning is additive: we add fields and endpoints to /v1, we don't change or remove what's there. Treat unknown fields in responses as normal.

Limits

Each key can make bursts of up to 60 requests and a sustained 5 requests a second; each organisation has 10,000 requests a day across all its keys, resetting at midnight UTC. Every authenticated response carries rate-limit headers, and a 429 tells you which limit you hit (rate_limited or quota_exceeded) and when to retry.

Read next