Everything you need to know about one of your users: whether they are
connected right now, whether they must reconnect, and how active they
have been in the last 30 days. Lists every connection of the user,
including revoked ones (a revoked connection was either replaced by a
newer one after a reconnect, or deleted on purpose by the user).
Always query by userRef. Connection ids change when a user reconnects.
recentConversationCount counts conversations whose first message
is dated within the last 30 days. It measures the user’s own activity:
the initial import of an old history does not count, and continuing an
old conversation does not move it into the window.
historyComplete is true once the whole history of a connection has
been imported; oldestConversationAt and newestConversationAt give
its span (first message of the oldest and of the newest conversation).
While the initial import is still running, historyComplete is false
and the span only reflects what has arrived so far.
Size of the rolling window used for recent counts.
Example:
30
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Verso Fetch","description":"Developer documentation for Verso Fetch: let your users connect their ChatGPT account, then read their conversations through the API and stay in sync with webhooks.","colors":{"primary":"#2547F4","light":"#DFF564","dark":"#0F0E0C"},"logo":{"light":"https://mintcdn.com/verso-ai/5r53IM5i9gqsvSub/logo/light.svg?fit=max\u0026auto=format\u0026n=5r53IM5i9gqsvSub\u0026q=85\u0026s=791e9482cf67f04b0ab758de621b87e9","dark":"https://mintcdn.com/verso-ai/5r53IM5i9gqsvSub/logo/dark.svg?fit=max\u0026auto=format\u0026n=5r53IM5i9gqsvSub\u0026q=85\u0026s=81afe79932a58fe9c4377a7bb8830891"},"favicon":"https://mintcdn.com/verso-ai/5r53IM5i9gqsvSub/logo/favicon.svg?fit=max\u0026auto=format\u0026n=5r53IM5i9gqsvSub\u0026q=85\u0026s=a93a0bdb874a7cce96db4ced185014de","navbar":{"links":[{"href":"https://tryverso.ai","label":"Website"},{"href":"mailto:hello@tryverso.ai","label":"Get API access"}],"primary":{"type":"button","label":"Developer portal","href":"https://connect.tryverso.ai/developers"}},"footer":{"socials":{"website":"https://tryverso.ai"}},"fonts":{"family":"Inter"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"verso-ai","hasAudioNarration":false,"actualSubdomain":"verso-ai","customDomains":["docs.tryverso.ai"],"gitSource":{"type":"github","owner":"vrsoai","repo":"verso-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6af48c9c6368b4f72dedd3c7","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"Guides","count":21},{"language":"default","tag":"API Reference","count":8},{"language":"default","tag":"Endpoints","count":6},{"language":"default","tag":"Resources","count":3},{"language":"default","tag":"Getting started","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/list-connections","slug":"/api-reference/list-connections","pageMetadata":{"title":"User status and connections","openapi":"GET /api/connections","description":"Everything you need to know about one of your users: whether they are\nconnected right now, whether they must reconnect, and how active they\nhave been in the last 30 days. Lists every connection of the user,\nincluding `revoked` ones (a revoked connection was either replaced by a\nnewer one after a reconnect, or deleted on purpose by the user).\n\nAlways query by `userRef`. Connection ids change when a user reconnects.\n\n`recentConversationCount` counts conversations whose **first message**\nis dated within the last 30 days. It measures the user's own activity:\nthe initial import of an old history does not count, and continuing an\nold conversation does not move it into the window.\n\n`historyComplete` is true once the whole history of a connection has\nbeen imported; `oldestConversationAt` and `newestConversationAt` give\nits span (first message of the oldest and of the newest conversation).\nWhile the initial import is still running, `historyComplete` is false\nand the span only reflects what has arrived so far.\n","href":"/api-reference/list-connections"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Everything you need to know about one of your users: whether they are\\nconnected right now, whether they must reconnect, and how active they\\nhave been in the last 30 days. Lists every connection of the user,\\nincluding \", _jsx(_components.code, {\n children: \"revoked\"\n }), \" ones (a revoked connection was either replaced by a\\nnewer one after a reconnect, or deleted on purpose by the user).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Always query by \", _jsx(_components.code, {\n children: \"userRef\"\n }), \". Connection ids change when a user reconnects.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"recentConversationCount\"\n }), \" counts conversations whose \", _jsx(_components.strong, {\n children: \"first message\"\n }), \"\\nis dated within the last 30 days. It measures the user’s own activity:\\nthe initial import of an old history does not count, and continuing an\\nold conversation does not move it into the window.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"historyComplete\"\n }), \" is true once the whole history of a connection has\\nbeen imported; \", _jsx(_components.code, {\n children: \"oldestConversationAt\"\n }), \" and \", _jsx(_components.code, {\n children: \"newestConversationAt\"\n }), \" give\\nits span (first message of the oldest and of the newest conversation).\\nWhile the initial import is still running, \", _jsx(_components.code, {\n children: \"historyComplete\"\n }), \" is false\\nand the span only reflects what has arrived so far.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"User status and connections","openapi":"GET /api/connections","description":"Everything you need to know about one of your users: whether they are\nconnected right now, whether they must reconnect, and how active they\nhave been in the last 30 days. Lists every connection of the user,\nincluding `revoked` ones (a revoked connection was either replaced by a\nnewer one after a reconnect, or deleted on purpose by the user).\n\nAlways query by `userRef`. Connection ids change when a user reconnects.\n\n`recentConversationCount` counts conversations whose **first message**\nis dated within the last 30 days. It measures the user's own activity:\nthe initial import of an old history does not count, and continuing an\nold conversation does not move it into the window.\n\n`historyComplete` is true once the whole history of a connection has\nbeen imported; `oldestConversationAt` and `newestConversationAt` give\nits span (first message of the oldest and of the newest conversation).\nWhile the initial import is still running, `historyComplete` is false\nand the span only reflects what has arrived so far.\n","href":"/api-reference/list-connections"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getUserConnections","tags":["Connections"],"summary":"User status and connections","description":"Everything you need to know about one of your users: whether they are\nconnected right now, whether they must reconnect, and how active they\nhave been in the last 30 days. Lists every connection of the user,\nincluding `revoked` ones (a revoked connection was either replaced by a\nnewer one after a reconnect, or deleted on purpose by the user).\n\nAlways query by `userRef`. Connection ids change when a user reconnects.\n\n`recentConversationCount` counts conversations whose **first message**\nis dated within the last 30 days. It measures the user's own activity:\nthe initial import of an old history does not count, and continuing an\nold conversation does not move it into the window.\n\n`historyComplete` is true once the whole history of a connection has\nbeen imported; `oldestConversationAt` and `newestConversationAt` give\nits span (first message of the oldest and of the newest conversation).\nWhile the initial import is still running, `historyComplete` is false\nand the span only reflects what has arrived so far.\n","parameters":["18a6bd9f-9df1-4932-8815-0c4d5fe470e1"],"responses":{"200":"9a63aade-698d-403c-96e9-c91d1a2407b0","400":"eed78399-9164-447e-80f0-a9ddf1c97ea3","401":"001052d4-2c50-47af-92ee-fda9a1b5d71f","404":"846f525d-415f-41f6-a97d-5ccba0585bd1","429":"e0378f32-e7d1-4817-b44b-771a603c3fbf"},"method":"get","type":"path","servers":["dc186219-d78d-4281-ae1c-3b4bdc3703c4"],"security":["0b5286f6-630c-4845-abc6-f0ede65fefdc"],"path":"/api/connections","baseUrlOptions":["https://connect.tryverso.ai"],"title":"User status and connections","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"18a6bd9f-9df1-4932-8815-0c4d5fe470e1":{"name":"userRef","in":"query","required":true,"description":"The identifier you passed to `signLink()` for this user.","schema":{"type":"string","isRequired":true,"description":"The identifier you passed to `signLink()` for this user.","uniqueKey":"","typeLabel":"string"},"example":"user_123"}},"responses":{"9a63aade-698d-403c-96e9-c91d1a2407b0":{"description":"The user's status and connections.","headers":{"RateLimit-Limit":{"description":"Requests allowed per minute for your app (600 by default).","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current minute ends.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["recentWindowDays","userRef","connected","needsReauth","recentConversationCount","historyComplete","oldestConversationAt","connections"],"properties":{"userRef":{"type":"string","description":"Your identifier for the user.","example":"user_123","isRequired":true,"uniqueKey":"userRef","typeLabel":"string"},"connected":{"type":"boolean","description":"At least one connection is `active`.","isRequired":true,"uniqueKey":"connected","typeLabel":"boolean"},"needsReauth":{"type":"boolean","description":"At least one connection is `needs_reauth`. Ask the user to reconnect.","isRequired":true,"uniqueKey":"needsReauth","typeLabel":"boolean"},"recentConversationCount":{"type":"integer","description":"Sum of `recentConversationCount` over all connections.","example":12,"isRequired":true,"uniqueKey":"recentConversationCount","typeLabel":"integer"},"historyComplete":{"type":"boolean","description":"Every connection that is not `revoked` has its whole history imported. False when the user has no connection.","isRequired":true,"uniqueKey":"historyComplete","typeLabel":"boolean"},"oldestConversationAt":{"oneOf":[{"type":"string","format":"date-time","description":"Earliest `oldestConversationAt` over the connections. Null when no conversation is imported.","isRequired":true,"uniqueKey":"oldestConversationAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Earliest `oldestConversationAt` over the connections. Null when no conversation is imported.","isRequired":true,"uniqueKey":"oldestConversationAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oldestConversationAt","typeLabel":"string\u003cdate-time> | null"},"connections":{"type":"array","items":{"type":"object","required":["id","provider","accountId","plan","country","status","capturedAt","lastSyncAt","conversationCount","recentConversationCount","historyComplete","historyCompletedAt","oldestConversationAt","newestConversationAt"],"properties":{"id":{"type":"string","format":"uuid","description":"Connection UUID. Changes when the user reconnects.","isRequired":true,"uniqueKey":"connections.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"provider":{"type":"string","description":"Provider of the connected account.","enum":["chatgpt"],"isRequired":true,"uniqueKey":"connections.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"accountId":{"oneOf":[{"type":"string","description":"Stable identifier of the connected provider account within your app:\ntwo connections with the same `accountId` are the same ChatGPT\naccount, for example before and after a reconnect. Opaque, not\ncorrelatable across apps. A ChatGPT account can be connected by only\none user of your app. Null for connections created before this\nfield existed, until their next sync.\n","example":"3f9c2e1a7b4d5c6e8f0a1b2c3d4e5f60","isRequired":true,"uniqueKey":"connections.items.[INDEX].accountId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Stable identifier of the connected provider account within your app:\ntwo connections with the same `accountId` are the same ChatGPT\naccount, for example before and after a reconnect. Opaque, not\ncorrelatable across apps. A ChatGPT account can be connected by only\none user of your app. Null for connections created before this\nfield existed, until their next sync.\n","example":"3f9c2e1a7b4d5c6e8f0a1b2c3d4e5f60","isRequired":true,"uniqueKey":"connections.items.[INDEX].accountId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"connections.items.[INDEX].accountId","typeLabel":"string | null"},"plan":{"oneOf":[{"type":"string","description":"The account's plan as the provider reports it: `free`, `go`, `plus`,\n`pro`, `team`, `enterprise`… Null until the first sync. Ads are\nshown to `free` and `go` accounts only.\n","example":"free","isRequired":true,"uniqueKey":"connections.items.[INDEX].plan.oneOf.0","typeLabel":"string"},{"type":"null","description":"The account's plan as the provider reports it: `free`, `go`, `plus`,\n`pro`, `team`, `enterprise`… Null until the first sync. Ads are\nshown to `free` and `go` accounts only.\n","example":"free","isRequired":true,"uniqueKey":"connections.items.[INDEX].plan.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"connections.items.[INDEX].plan","typeLabel":"string | null"},"country":{"oneOf":[{"type":"string","description":"ISO 3166-1 alpha-2 country the provider assigns the account.\nNull until the first sync.\n","example":"US","isRequired":true,"uniqueKey":"connections.items.[INDEX].country.oneOf.0","typeLabel":"string"},{"type":"null","description":"ISO 3166-1 alpha-2 country the provider assigns the account.\nNull until the first sync.\n","example":"US","isRequired":true,"uniqueKey":"connections.items.[INDEX].country.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"connections.items.[INDEX].country","typeLabel":"string | null"},"status":{"type":"string","description":"`active`: syncing. `needs_reauth`: the stored session was rejected, the user must reconnect.\n`revoked`: replaced by a newer connection of the same account, or deleted.\n","enum":["active","needs_reauth","revoked"],"isRequired":true,"uniqueKey":"connections.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"capturedAt":{"type":"string","format":"date-time","description":"When the user connected.","isRequired":true,"uniqueKey":"connections.items.[INDEX].capturedAt","typeLabel":"string\u003cdate-time>"},"lastSyncAt":{"oneOf":[{"type":"string","format":"date-time","description":"Last successful sync, i.e. the last time the session was verified.","isRequired":true,"uniqueKey":"connections.items.[INDEX].lastSyncAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Last successful sync, i.e. the last time the session was verified.","isRequired":true,"uniqueKey":"connections.items.[INDEX].lastSyncAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"connections.items.[INDEX].lastSyncAt","typeLabel":"string\u003cdate-time> | null"},"conversationCount":{"type":"integer","description":"Conversations currently imported for this connection.","example":142,"isRequired":true,"uniqueKey":"connections.items.[INDEX].conversationCount","typeLabel":"integer"},"recentConversationCount":{"type":"integer","description":"Conversations whose first message is dated within the last `recentWindowDays` days.","example":12,"isRequired":true,"uniqueKey":"connections.items.[INDEX].recentConversationCount","typeLabel":"integer"},"historyComplete":{"type":"boolean","description":"True once the sync has walked the account's whole conversation\nlist. While false, older conversations are still being imported and\n`oldestConversationAt` only reflects what has arrived so far.\n`history.completed` is sent the moment it turns true.\n","isRequired":true,"uniqueKey":"connections.items.[INDEX].historyComplete","typeLabel":"boolean"},"historyCompletedAt":{"oneOf":[{"type":"string","format":"date-time","description":"When the history became complete. Null while it is not.","isRequired":true,"uniqueKey":"connections.items.[INDEX].historyCompletedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the history became complete. Null while it is not.","isRequired":true,"uniqueKey":"connections.items.[INDEX].historyCompletedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"connections.items.[INDEX].historyCompletedAt","typeLabel":"string\u003cdate-time> | null"},"oldestConversationAt":{"oneOf":[{"type":"string","format":"date-time","description":"First message of the oldest imported conversation. Null when there is none.","example":"2024-10-30T15:34:30.894Z","isRequired":true,"uniqueKey":"connections.items.[INDEX].oldestConversationAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"First message of the oldest imported conversation. Null when there is none.","example":"2024-10-30T15:34:30.894Z","isRequired":true,"uniqueKey":"connections.items.[INDEX].oldestConversationAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"connections.items.[INDEX].oldestConversationAt","typeLabel":"string\u003cdate-time> | null"},"newestConversationAt":{"oneOf":[{"type":"string","format":"date-time","description":"First message of the newest imported conversation. Null when there is none.","example":"2026-09-26T18:02:11.000Z","isRequired":true,"uniqueKey":"connections.items.[INDEX].newestConversationAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"First message of the newest imported conversation. Null when there is none.","example":"2026-09-26T18:02:11.000Z","isRequired":true,"uniqueKey":"connections.items.[INDEX].newestConversationAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"connections.items.[INDEX].newestConversationAt","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"connections.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"connections","typeLabel":"object[]"},"recentWindowDays":{"type":"integer","description":"Size of the rolling window used for recent counts.","example":30,"isRequired":true,"uniqueKey":"recentWindowDays","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"userRef":"user_123","connected":true,"needsReauth":true,"recentConversationCount":12,"historyComplete":true,"oldestConversationAt":"2023-11-07T05:31:56Z","connections":[{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","provider":"chatgpt","accountId":"3f9c2e1a7b4d5c6e8f0a1b2c3d4e5f60","plan":"free","country":"US","status":"active","capturedAt":"2023-11-07T05:31:56Z","lastSyncAt":"2023-11-07T05:31:56Z","conversationCount":142,"recentConversationCount":12,"historyComplete":true,"historyCompletedAt":"2023-11-07T05:31:56Z","oldestConversationAt":"2024-10-30T15:34:30.894Z","newestConversationAt":"2026-09-26T18:02:11.000Z"}],"recentWindowDays":30}}},"exampleType":"generated"}},"exampleType":"generated"},"eed78399-9164-447e-80f0-a9ddf1c97ea3":{"description":"`Missing userRef parameter`","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message. Stable strings, safe to match on.","example":"Connection not found","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Connection not found"}}},"exampleType":"generated"}},"exampleType":"generated"},"001052d4-2c50-47af-92ee-fda9a1b5d71f":{"description":"`Missing Authorization header` or `Invalid API key`","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message. Stable strings, safe to match on.","example":"Connection not found","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Connection not found"}}},"exampleType":"generated"}},"exampleType":"generated"},"846f525d-415f-41f6-a97d-5ccba0585bd1":{"description":"`User not found`: no user with this `userRef` has opened a connect link for your app yet.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message. Stable strings, safe to match on.","example":"Connection not found","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Connection not found"}}},"exampleType":"generated"}},"exampleType":"generated"},"e0378f32-e7d1-4817-b44b-771a603c3fbf":{"description":"`Rate limit exceeded`: the app's per-minute allowance (600 by default) is used up.","headers":{"RateLimit-Limit":{"description":"Requests allowed per minute for your app (600 by default).","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current minute ends.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message. Stable strings, safe to match on.","example":"Connection not found","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Connection not found"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"0b5286f6-630c-4845-abc6-f0ede65fefdc":{"apiKey":{"type":"http","scheme":"bearer","description":"Your API key (`vsk_…`), issued at onboarding. Keep it server-side.\n","scopes":[],"schemeName":"apiKey"}}},"servers":{"dc186219-d78d-4281-ae1c-3b4bdc3703c4":{"url":"https://connect.tryverso.ai","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Your API key (`vsk_…`), issued at onboarding. Keep it server-side.\n","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Your API key (`vsk_…`), issued at onboarding. Keep it server-side.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"verso-ai","siteName":"Verso Fetch","title":"User status and connections - Verso Fetch","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T08:56:26.108Z","originalFileLocation":"api-reference/list-connections.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Everything you need to know about one of your users: whether they are connected right now, whether they must reconnect, and how active they have been in the last 30 days. Lists every connection of the user, including revoked ones (a revoked connection was either replaced by a newer one after a reconnect, or deleted on purpose by the user). Always query by userRef. Connection ids change when a user reconnects. recentConversationCount counts conversations whose first message is dated within the last 30 days. It measures the user\u0026#x27;s own activity: the initial import of an old history does not count, and continuing an old conversation does not move it into the window. historyComplete is true once the whole history of a connection has been imported; oldestConversationAt and newestConversationAt give its span (first message of the oldest and of the newest conversation). While the initial import is still running, historyComplete is false and the span only reflects what has arrived so far.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Verso Fetch\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/verso-ai/shlNgYQs0fmhaxWw/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/verso-ai/shlNgYQs0fmhaxWw/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/verso-ai/shlNgYQs0fmhaxWw/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/verso-ai/shlNgYQs0fmhaxWw/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/verso-ai/shlNgYQs0fmhaxWw/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/verso-ai/shlNgYQs0fmhaxWw/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/verso-ai/shlNgYQs0fmhaxWw/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/verso-ai/shlNgYQs0fmhaxWw/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/verso-ai/shlNgYQs0fmhaxWw/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"User status and connections - Verso Fetch\">\u003cmeta data-mint-head property=\"og:description\" content=\"Everything you need to know about one of your users: whether they are connected right now, whether they must reconnect, and how active they have been in the last 30 days. Lists every connection of the user, including revoked ones (a revoked connection was either replaced by a newer one after a reconnect, or deleted on purpose by the user). Always query by userRef. Connection ids change when a user reconnects. recentConversationCount counts conversations whose first message is dated within the last 30 days. It measures the user\u0026#x27;s own activity: the initial import of an old history does not count, and continuing an old conversation does not move it into the window. historyComplete is true once the whole history of a connection has been imported; oldestConversationAt and newestConversationAt give its span (first message of the oldest and of the newest conversation). While the initial import is still running, historyComplete is false and the span only reflects what has arrived so far.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Verso Fetch\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.tryverso.ai/api-reference/list-connections\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://verso-ai.mintlify.site/_mintlify/api/og/v2?division=Endpoints\u0026amp;title=User+status+and+connections\u0026amp;description=Everything+you+need+to+know+about+one+of+your+users%3A+whether+they+are%0Aconnected+right+now%2C+whether+they+must+reconnect%2C+and+how+active+they%0Ahave+been+in+the+las\u0026amp;theme=c3f87b20654641d9af5f8b92\u0026amp;signature=463c7572519380c299c09eded3ad5ac5587455bc543b46cc7f11abd0a1d8c9f3\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"User status and connections - Verso Fetch\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Everything you need to know about one of your users: whether they are connected right now, whether they must reconnect, and how active they have been in the last 30 days. Lists every connection of the user, including revoked ones (a revoked connection was either replaced by a newer one after a reconnect, or deleted on purpose by the user). Always query by userRef. Connection ids change when a user reconnects. recentConversationCount counts conversations whose first message is dated within the last 30 days. It measures the user\u0026#x27;s own activity: the initial import of an old history does not count, and continuing an old conversation does not move it into the window. historyComplete is true once the whole history of a connection has been imported; oldestConversationAt and newestConversationAt give its span (first message of the oldest and of the newest conversation). While the initial import is still running, historyComplete is false and the span only reflects what has arrived so far.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://verso-ai.mintlify.site/_mintlify/api/og/v2?division=Endpoints\u0026amp;title=User+status+and+connections\u0026amp;description=Everything+you+need+to+know+about+one+of+your+users%3A+whether+they+are%0Aconnected+right+now%2C+whether+they+must+reconnect%2C+and+how+active+they%0Ahave+been+in+the+las\u0026amp;theme=c3f87b20654641d9af5f8b92\u0026amp;signature=463c7572519380c299c09eded3ad5ac5587455bc543b46cc7f11abd0a1d8c9f3\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/verso-ai/shlNgYQs0fmhaxWw/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Verso Fetch\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2547F4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.tryverso.ai/api-reference/list-connections\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/list-connections.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.tryverso.ai/#organization\",\"name\":\"Verso Fetch\",\"url\":\"https://docs.tryverso.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/verso-ai/5r53IM5i9gqsvSub/logo/light.svg?fit=max\u0026auto=format\u0026n=5r53IM5i9gqsvSub\u0026q=85\u0026s=791e9482cf67f04b0ab758de621b87e9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.tryverso.ai#website\",\"name\":\"Verso Fetch\",\"url\":\"https://docs.tryverso.ai\",\"publisher\":{\"@id\":\"https://docs.tryverso.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.tryverso.ai/api-reference/list-connections#webpage\",\"url\":\"https://docs.tryverso.ai/api-reference/list-connections\",\"name\":\"User status and connections\",\"description\":\"Everything you need to know about one of your users: whether they are connected right now, whether they must reconnect, and how active they have been in the last 30 days. Lists every connection of the user, including revoked ones (a revoked connection was either replaced by a newer one after a reconnect, or deleted on purpose by the user). Always query by userRef. Connection ids change when a user reconnects. recentConversationCount counts conversations whose first message is dated within the last 30 days. It measures the user's own activity: the initial import of an old history does not count, and continuing an old conversation does not move it into the window. historyComplete is true once the whole history of a connection has been imported; oldestConversationAt and newestConversationAt give its span (first message of the oldest and of the newest conversation). While the initial import is still running, historyComplete is false and the span only reflects what has arrived so far.\",\"dateModified\":\"2026-10-22T08:56:26.108Z\",\"isPartOf\":{\"@id\":\"https://docs.tryverso.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.tryverso.ai/api-reference/list-connections#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.tryverso.ai/api-reference/list-connections#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Verso Fetch\",\"item\":\"https://docs.tryverso.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"User status and connections\",\"item\":\"https://docs.tryverso.ai/api-reference/list-connections\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.tryverso.ai/api-reference/list-connections#apireference\",\"headline\":\"User status and connections\",\"name\":\"User status and connections\",\"description\":\"Everything you need to know about one of your users: whether they are connected right now, whether they must reconnect, and how active they have been in the last 30 days. Lists every connection of the user, including revoked ones (a revoked connection was either replaced by a newer one after a reconnect, or deleted on purpose by the user). Always query by userRef. Connection ids change when a user reconnects. recentConversationCount counts conversations whose first message is dated within the last 30 days. It measures the user's own activity: the initial import of an old history does not count, and continuing an old conversation does not move it into the window. historyComplete is true once the whole history of a connection has been imported; oldestConversationAt and newestConversationAt give its span (first message of the oldest and of the newest conversation). While the initial import is still running, historyComplete is false and the span only reflects what has arrived so far.\",\"url\":\"https://docs.tryverso.ai/api-reference/list-connections\",\"mainEntityOfPage\":{\"@id\":\"https://docs.tryverso.ai/api-reference/list-connections#webpage\"},\"dateModified\":\"2026-10-22T08:56:26.108Z\",\"publisher\":{\"@id\":\"https://docs.tryverso.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.tryverso.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Verso Fetch\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Verso Fetch\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/list-connections.md","siteName":"Verso Fetch","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"API Reference","pages":[{"title":"API overview","description":"Base URL, authentication, endpoints and conventions.","href":"/api-reference/overview"}]},{"group":"Endpoints","pages":[{"title":"User status and connections","openapi":"GET /api/connections","href":"/api-reference/list-connections"},{"title":"List conversations","openapi":"GET /api/conversations","description":"Returns the imported conversations of one connection, newest update\nfirst, paginated with `limit` and `offset`. Each conversation carries\nits normalized `payload` (`title` and `messages`), the `ads` ChatGPT\nshowed in it and the `adImpressions` matched to it.\n\nConversations are ordered by `update_time`, so a conversation the user\ncontinues moves back to the top of the list.\n\nDeprecated: passing `userRef` instead of `connectionId` returns the\nuser status object. Use `GET /api/connections` for that.\n","href":"/api-reference/list-conversations"},{"title":"List ad impressions","openapi":"GET /api/ad-impressions","href":"/api-reference/list-ad-impressions"},{"title":"Ingest a ChatGPT export","openapi":"POST /api/ingest-export","href":"/api-reference/ingest-export"},{"title":"Delete data","openapi":"POST /api/purge","href":"/api-reference/purge-data"},{"title":"Native connect (mobile SDKs)","openapi":"POST /api/connect-native","href":"/api-reference/connect-native"}]}]}]},"basePath":"","title":"User status and connections - Verso Fetch","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}