GTM Plays API · v1
Read your contacts from your own tools
Pull the people your agents find - with their score, signals, outreach step and replies - into a CRM, a spreadsheet or a script. The API is read-only and scoped to the account that created the key.
Authentication
Create a key in Settings → API. It is shown once; store it like a password. Send it as a Bearer token on every request:
curl -H "Authorization: Bearer gtm_live_…" https://gtmplays.io/api/v1/me
Limit: 100 requests per minute per key. Errors are JSON - { "error": "…" } - with 401 for a missing or invalid key, 400 for a bad parameter, 404 for anything not in your account, and 429 when rate-limited.
GET/api/v1/contacts
Your contacts, newest first.
| search | Matches name, company, title, email or location. |
| agent | An agent id - only that agent’s contacts. |
| stage | new, approved, contacted, replied, meeting or disqualified. |
| step | none (not contacted) or invitation_sent, invitation_skipped, invitation_accepted, message_sent, finished, replied, interested, unsubscribed. |
| list | A list name, exactly as shown in Contacts → Lists. |
| minScore | Only contacts scoring at least this (0-100) against the agent’s ICP. |
| dateFrom / dateTo | Created between these dates, inclusive, as YYYY-MM-DD (UTC). |
| page / limit | Pagination. limit is 1-100, default 50. |
curl -H "Authorization: Bearer gtm_live_…" \ "https://gtmplays.io/api/v1/contacts?stage=replied&minScore=70&limit=100"
{
"data": [{
"id": "…", "agent_id": "…",
"full_name": "Ada Lovelace", "job_title": "Head of Growth", "location": "London, United Kingdom",
"linkedin_url": "https://www.linkedin.com/in/ada-lovelace", "email": "ada@analytical.co", "phone": null,
"company": { "name": "Analytical Co", "website": "analytical.co", "industry": "Software Development", "size": "11-50" },
"signal": { "label": "Company competitor profile", "detail": "Raised funding · March 2026", "url": null },
"other_signals": [{ "label": "\"pipeline generation\" engagement", "detail": null, "detected_at": "2026-09-23T10:00:00Z" }],
"score": 92, "score_reasons": ["Title matches \"Head of Growth\"", "Located in Europe"],
"stage": "replied", "outreach_step": "replied", "list": null,
"last_reply": { "text": "Happy to chat Thursday", "at": "2026-09-23T12:00:00Z" },
"created_at": "…", "updated_at": "…"
}],
"pagination": { "page": 1, "limit": 100, "total": 1, "pages": 1 }
}GET/api/v1/contacts/{id}
One contact, in the same shape, under data.
GET/api/v1/agents
Your agents with their targeting, status and run times.
GET/api/v1/me
The account the key acts as - useful to check a key works.
GET/api/v1/health
Unauthenticated liveness check.