Gong
A Gong workspace that answers the Public API v2 (calls, transcripts, users, CRM, Engage flows, stats and data privacy), plus an MCP server.
Vendor reference: https://gong.app.gong.io/settings/api/documentation ↗. Machine-readable: compat/gong.json.
Surfaces
| Kind | Path | Notes |
|---|---|---|
| REST | /v2 | calls, transcripts, users, workspaces, CRM, flows, tasks, stats, coaching, data privacy |
| OAuth | Gong OAuth | Basic access-key auth and OAuth bearer tokens |
| MCP | /mcp | list tools page with the REST cursor |
API versions: Public API v2
Supported
- Calls with date, workspace and cursor filters,
calls/extensivewithcontentSelector, and transcripts - Users, workspaces, CRM integrations and entity uploads, flows, tasks, stats and coaching
- A client generated from the served
/openapi.json; Gong publishes no official SDK - Data-privacy erasure, which deletes the person and the calls they appear on
Not supported
- Webhooks or any push transport; Gong's Public API has none either
- Storing or transcoding uploaded media
Known differences and test guidance
| Scenario | Difference from Gong | In your tests |
|---|---|---|
| Empty selections | An empty call, transcript or log selection answers Gong's documented 404 "No calls found for the specified period". | Treat that 404 as an empty range, as you would against Gong. |
| MCP paging | MCP list tools return the REST records.cursor; the Gong MCP servers in use expose no cursor. | Do not assert that MCP results lack a cursor. |
| Faults over MCP | An injected 429 or 5xx on the MCP transport ends the MCP session instead of returning a retryable tool error. | Reset faults or open a fresh session when you drive MCP. |
| AI text and transcripts | Briefs, outlines and answers are templated, and a transcript has one turn per agenda section, so talk time is a fraction of call duration. | Do not assert on wording or on talk time matching duration. |
| Data-privacy erasure | Gong's erase endpoints are asynchronous; here the erasure is applied at once with no pending state. | Do not poll for a pending state; assert the data is gone. |
| Uploaded media | The filename, content type and byte count are recorded and a playable-looking URL is returned; the media itself is not stored. | Do not download uploaded media and compare bytes. |
Fault injection
| Key | What the client sees |
|---|---|
throttle | 429 {"requestId", "errors": ["Too Many Requests"]} with Retry-After, on /v2 and /mcp |
fail_next | The next N calls fail as throttle does, then clear |
quota_limit | 429 "API calls quota exceeded"; reset_quota clears the window |
error_rate | 500 "Internal server error" for the given fraction of calls |
latency_ms | Fixed added latency on every data-plane request |
Applies to every system
- The hosted data plane is read-only: a write is refused with
403 writes_disabled. A SOQL, GraphQL or searchPOSTis a read and is answered. - Faults are injected through
POST /_admin/faultson a simulator you run yourself;POST /_admin/faults/resetclears them. - Rate limits do not happen on their own unless a page says so. Use fault injection to exercise a client's backoff.
- Distributions come from aggregated metadata sketches of data Eon backs up; no customer records; all Era data is simulated.