About
The Goliath developer API lets your own code — servers, scripts, AI agents, or third-party tools — read and write the same data you work with in the app: contacts, properties, deals and pipelines, workflow automations, forms, and team settings. There is one HTTP endpoint. You never send GraphQL or build queries — instead you call a named operation from a fixed catalog (anoperationId)
with its variables, and Goliath executes a pre-authored, pre-reviewed request
on your behalf. Every call runs as the key’s owning user, so your real
organization permissions and visibility apply — the API can never see or touch
anything you couldn’t see in the app yourself.
Live in productionThe developer API is live: create and scope a key in the app under
Settings → API Keys and call the production endpoint below — no
enrollment or approval step. The server also publishes its own always-current
reference:
GET /api/v1/help (no auth required) renders full documentation
for every operation, generated from the running API.Generating an API key
- Open API Keys. From the app, go to Settings → API Keys (also reachable from the API Keys card on the Integrations page). Independent-operator seats cannot create API keys.
- Create a key. Keys are personal — each key belongs to your user and acts as you. Create one key per host or device so you can revoke them independently.
-
Pick scopes. Each key carries one or more scopes (see below).
ADMINcan only be granted to a key whose owner is a team admin. -
Store the secret. The key looks like
gsk_.... Pass it as a Bearer token on every request and keep it in your secrets manager — never ship it in a browser, mobile app, or any client-side code.
Scopes
Scopes decide what kind of operation a key may run. Which specific records it
may touch is a separate check — see Authorization
for how organization ownership and the two kinds of
403 work.
Making a request
POST /api/v1/graphql is the same endpoint under its original name and stays
supported — despite that path, it does not accept GraphQL queries either.)
A handled request always returns 200 with a GraphQL-style body:
Subscription accessAn organization without a usable plan receives
402 subscription_inactive
before data operations execute. The Billing API
reads, getMyProfile, and getIntegrationSetupUrls remain available for
recovery, subject to their normal scopes. Repeated refused calls can return
429 rate_limited with Retry-After; stop the retry loop and restore the
subscription in the app.Result limits & truncation
Capped list/search operations declare a result cap — a maximum number of rows requested per call. If you send alimit larger than the cap, the
gateway silently clamps it before execution: the operation runs with
the capped limit and returns up to that many rows, without a limit error.
The gateway does not trim the response after execution.
Most list operations are fully pageable — they take an offset (or a cursor)
and return a totalCount and/or hasMore, so you can walk the whole result set a
page at a time. Prefer these when you need everything:
listAppointments and listMyTasks support forward cursor pagination
(default 25, cap 50). When canFetchNext is true, keep the same filters and
set cursor to the last returned row’s id. Repeat until false; restart
without a cursor to revisit earlier rows. Their total is the unpaged match
count.
Discovering operations
The full operation catalog is machine-readable — ideal for AI agents and for keeping your integration in sync:- The list returns one-line summaries of every operation.
- The detail view returns the full variable schema, the exact response shape, and a copy-pasteable example for one operation.
authorizedreflects your key’s scopes, so a caller sees exactly what it is allowed to run.
404 unknown_operation, and
calling their id returns 400 unknown_operation.
Operation reference by area
The catalog is documented alongside each feature’s user guides:- Properties API — search properties, count signal events, author CONTACT/PROPERTY/DEAL filters, manage filter folders, and organize lists
- Contacts API — read, create, update, and enrich contacts, find duplicate groups, and manage contact filters
- Deals API — search and filter deals, read open-task counts, edit custom fields, and manage Scraper Health cards
- Pipelines API — manage pipeline structure and read pipeline analytics
- Workflows API — manage automations and runs across contact, deal, property, appointment, and event domains; set live sending schedules, bulk-enroll contacts, restore archived workflows, and apply task templates and sets
- Content Templates API — manage message, task, and task-set templates and folders
- Forms API — manage lead-capture forms and read form analytics
- Communications API — read and triage inbox threads, read recordings and transcripts, manage suppressions, and render templates
- Notifications API — read your notification feed and mark items read
- Appointments API — check live calendar conflicts, schedule appointments, manage SMS reminders, and configure availability
- Tasks API — create, reschedule, and complete CRM to-do tasks
- Skip Trace API — run skip traces from your own systems
- Bulk Tasks API — poll the status of long-running bulk jobs
- Team API — roster, role changes, member suspension/restoration, invitations, live text/call counts, and nightly analytics
- Account API — your profile, permissions, integration status and disconnection, and setup links
- Billing API — subscription dates, plan allowances, AI usage warnings, credit balances, and fixed credit packs
Capabilities managed in the app
Use the app for capabilities outside the public operation catalog:- File uploads — importing contacts, properties, or skip-trace lists from a CSV.
- Outbound SMS and email — send from the app, where a person supplies the required per-contact consent attestation. Workflow enrollment and automatic appointment reminders have their own operations described above.
The discovery endpoint is always the source of
truth for what your key can call right now — if an operation isn’t listed
there, don’t assume your key can call it.