{
  "connector": "gong",
  "label": "Gong",
  "vendor_docs": "https://gong.app.gong.io/settings/api/documentation",
  "summary": "A Gong workspace that answers the Public API v2 (calls, transcripts, users, CRM, Engage flows, stats and data privacy), plus an MCP server.",
  "surfaces": [
    {
      "kind": "REST",
      "path": "/v2",
      "notes": "calls, transcripts, users, workspaces, CRM, flows, tasks, stats, coaching, data privacy"
    },
    {
      "kind": "OAuth",
      "path": "Gong OAuth",
      "notes": "Basic access-key auth and OAuth bearer tokens"
    },
    {
      "kind": "MCP",
      "path": "/mcp",
      "notes": "list tools page with the REST cursor"
    }
  ],
  "api_versions": [
    "Public API v2"
  ],
  "supported": [
    {
      "item": "Calls with date, workspace and cursor filters, `calls/extensive` with `contentSelector`, and transcripts"
    },
    {
      "item": "Users, workspaces, CRM integrations and entity uploads, flows, tasks, stats and coaching"
    },
    {
      "item": "A client generated from the served `/openapi.json`; Gong publishes no official SDK"
    },
    {
      "item": "Data-privacy erasure, which deletes the person and the calls they appear on"
    }
  ],
  "unsupported": [
    {
      "item": "Webhooks or any push transport; Gong's Public API has none either"
    },
    {
      "item": "Storing or transcoding uploaded media"
    }
  ],
  "differences": [
    {
      "scenario": "Empty selections",
      "difference": "An empty call, transcript or log selection answers Gong's documented `404` \"No calls found for the specified period\".",
      "guidance": "Treat that 404 as an empty range, as you would against Gong."
    },
    {
      "scenario": "MCP paging",
      "difference": "MCP list tools return the REST `records.cursor`; the Gong MCP servers in use expose no cursor.",
      "guidance": "Do not assert that MCP results lack a cursor."
    },
    {
      "scenario": "Faults over MCP",
      "difference": "An injected 429 or 5xx on the MCP transport ends the MCP session instead of returning a retryable tool error.",
      "guidance": "Reset faults or open a fresh session when you drive MCP."
    },
    {
      "scenario": "AI text and transcripts",
      "difference": "Briefs, outlines and answers are templated, and a transcript has one turn per agenda section, so talk time is a fraction of call duration.",
      "guidance": "Do not assert on wording or on talk time matching duration."
    },
    {
      "scenario": "Data-privacy erasure",
      "difference": "Gong's erase endpoints are asynchronous; here the erasure is applied at once with no pending state.",
      "guidance": "Do not poll for a pending state; assert the data is gone."
    },
    {
      "scenario": "Uploaded media",
      "difference": "The filename, content type and byte count are recorded and a playable-looking URL is returned; the media itself is not stored.",
      "guidance": "Do not download uploaded media and compare bytes."
    }
  ],
  "faults_supported": [
    {
      "fault": "throttle",
      "behaviour": "429 `{\"requestId\", \"errors\": [\"Too Many Requests\"]}` with `Retry-After`, on `/v2` and `/mcp`"
    },
    {
      "fault": "fail_next",
      "behaviour": "The next N calls fail as `throttle` does, then clear"
    },
    {
      "fault": "quota_limit",
      "behaviour": "429 \"API calls quota exceeded\"; `reset_quota` clears the window"
    },
    {
      "fault": "error_rate",
      "behaviour": "500 \"Internal server error\" for the given fraction of calls"
    },
    {
      "fault": "latency_ms",
      "behaviour": "Fixed added latency on every data-plane request"
    }
  ]
}
