GTM.ai

ZoomInfo API

GTM data in your own code

A REST API for companies, contacts, intent and audiences. Your code decides what to fetch, and gets back JSON in the same shape every time.

POST /gtm/data/v1/companies/search
{
  "data": {
    "type": "CompanySearch",
    "attributes": {
      "companyName": "ZoomInfo"
    }
  }
}
200 OKapplication/vnd.api+json
{
  "data": [{
    "id": "344589814",
    "type": "Company",
    "attributes": {
      "name": "ZoomInfo",
      "website": "www.zoominfo.com",
      "revenue": 1257700000,
      "employeeCount": 3180
    }
  }]
}

Fixed schema

A fixed schema for every response

Responses follow JSON:API with a fixed schema, so a scoring service or a data pipeline reads the same fields from the same place on every call.

API reference
Companyfixed schema
  • idstring
  • namestring
  • websitestring
  • revenuenumber
  • employeeCountnumber
  • industriesstring[]

Your systems

Built for jobs that write to your systems

Use the API when results need to go into another system, or when the volume is too large for a chat. A nightly job can enrich new CRM records, write them back and refresh an audience on a schedule.

Build an audience through the API
cron · 02:00 nightly

01New CRM records

02Enrich through the API

03Write back to the CRM

04Refresh the audience

The platform

Built on the ZoomInfo platform

The ZoomInfo API connects to the same data, agents and saved GTM context as every other ZoomInfo interface.

POST /gtm/studio/v1/audiences
{
  "data": {
    "type": "Audience",
    "attributes": {
      "name": "Logistics VPs of Finance",
      "type": "CONTACT"
    }
  }
}
Account · Uberresolved from 6 records

Companies

1 parent · 14 subsidiaries

People

212 in buying roles

Signals

9 this quarter

Account Researchcited answer

Uber Freight is expanding its carrier platform and its new CFO is reviewing tooling spend. Lead with consolidation.ZoomInfoCRMCalls

ICP: mid-market logisticsPersona: VP FinanceCompetitor: Acme
  • The context graph

    100M+ companies and 500M+ contacts, matched to the records in your CRM, calls, email and calendar, so every account resolves to a single record.

    Explore the graph
  • Context Agents

    Account Research, Contact Research and Conversation Intelligence do the research on ZoomInfo’s side and return the answer with its sources.

    Meet the agents
  • Your GTM context

    Save your ICPs, personas, offerings and competitors once and every agent uses them. The marketplace adds ready-made skills, workflows and audiences.

    Browse the marketplace

On GTM Bench, Claude with ZoomInfo used 24× fewer tokens than Claude with web search. Read GTM Bench

Get started

From app to first response

Register an app, mint a token with OAuth client credentials, then make your first call.

  1. 01

    Register an app

    If you signed up on GTM.ai, open the API/MCP tab in the ZoomInfo app. Existing customers use the Developer Portal, which an admin turns on. Either way you get a client ID and secret.

    How to register an app
  2. 02

    Mint a token and make a call

    Put your client ID and secret in environment variables, then run this. It fetches a token and searches for ZoomInfo.

    curl quickstart
    # Requires jq (https://jqlang.org) for token parsing.
    TOKEN=$(curl -X POST https://api.zoominfo.com/gtm/oauth/v1/token \
      -H "Content-Type: application/x-www-form-urlencoded" \
      -H "Accept: application/json" \
      -H "User-Agent: zoominfo-quickstart/1.0" \
      --data-urlencode "grant_type=client_credentials" \
      --data-urlencode "client_id=$ZOOMINFO_CLIENT_ID" \
      --data-urlencode "client_secret=$ZOOMINFO_CLIENT_SECRET" \
      | jq -r '.access_token')
    
    curl -X POST https://api.zoominfo.com/gtm/data/v1/companies/search \
      -H "accept: application/vnd.api+json" \
      -H "authorization: Bearer $TOKEN" \
      -H "content-type: application/vnd.api+json" \
      -H "User-Agent: zoominfo-quickstart/1.0" \
      -d '{
        "data": {
          "type": "CompanySearch",
          "attributes": { "companyName": "ZoomInfo" }
        }
      }'
  3. 03

    Build it into your app

    Paste this into your coding agent. It asks which language you use, reads credentials from the environment, and writes the token and first call for you.

    Integration prompt
    Help me integrate the ZoomInfo API into my application.
    
    **Rules:**
    
    - Credentials live in env vars `ZOOMINFO_CLIENT_ID` and `ZOOMINFO_CLIENT_SECRET`. Never hardcode them, and never paste real values into this chat.
    - `access_token` is an opaque ~1KB string. Copy verbatim from `response.access_token` into the header `Authorization: "Bearer " + access_token`. Do not decode, parse, trim, or reformat it. Mint a fresh token whenever the previous one expires.
    - `<your-client-id>` and `<your-client-secret>` below are placeholders - replace with env-var reads in code, not literal values.
    - Set an explicit `User-Agent` header on every request - default stdlib UAs are often gateway-blocked and return a misleading 403.
    
    **Auth**: OAuth2 client credentials.
    
    ```
    POST https://api.zoominfo.com/gtm/oauth/v1/token
    Content-Type: application/x-www-form-urlencoded
    grant_type=client_credentials
    client_id=<your-client-id>
    client_secret=<your-client-secret>
    ```
    
    Example call - POST https://api.zoominfo.com/gtm/data/v1/companies/search with `Content-Type` and `Accept` set to `application/vnd.api+json` and body:
    
    ```
    {
      "data": {
        "type": "CompanySearch",
        "attributes": { "companyName": "ZoomInfo" }
      }
    }
    ```
    
    **Tasks:**
    
    1. If I haven't specified a language or framework, ask.
    2. Read credentials from env vars, fetch a token, make the example call.
    3. Use a standard HTTP client (e.g. `fetch`, `requests`, `net/http`) - no custom parsers.

The response shows ZoomInfo’s own record. Requests and jobs are examples.