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.
{
"data": {
"type": "CompanySearch",
"attributes": {
"companyName": "ZoomInfo"
}
}
}{
"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- 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 API01New 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.
{
"data": {
"type": "Audience",
"attributes": {
"name": "Logistics VPs of Finance",
"type": "CONTACT"
}
}
}Companies
1 parent · 14 subsidiaries
People
212 in buying roles
Signals
9 this quarter
Uber Freight is expanding its carrier platform and its new CFO is reviewing tooling spend. Lead with consolidation.ZoomInfoCRMCalls
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 graphContext Agents
Account Research, Contact Research and Conversation Intelligence do the research on ZoomInfo’s side and return the answer with its sources.
Meet the agentsYour 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.
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 app02
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" } } }'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 promptHelp 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.