Every change to the documents and companies the API shows, in order: new documents, documents whose metadata or files changed, documents removed from the API, and the same for companies. Use it to keep a copy of Captide’s data up to date without re-reading the lists.
To start:
Load your starting copy from GET /api/v2/changes/snapshot: companies, then documents. Keep the cursor of the first page you loaded.
From then on, call this endpoint with after set to that cursor (then to each response’s nextCursor) every few minutes, and apply the changes in order. Changes made while you were loading the snapshot come through again, so apply them as upserts and deletes:
document.created / company.created: add it, or replace it if you have it.
document.updated / company.updated: replace it. changedFields says what changed and previous holds the old values. When a file changed (originalFileUrl, markdownFileUrl, layoutJsonFileUrl) or the document’s id changed (a new version of its file), fetch it again with GET /api/v2/documents/{id}.
document.deleted / company.deleted: remove it, if you have it.
A document is in the feed when /documents/list lists it, so a document that gains a category or a listable file appears as document.created. A document dated in the future is announced when it is added, although the list only shows it from its date. Changes are published about a minute after they are made.
GET
/
api
/
v2
/
changes
List changes
curl --request GET \ --url https://rest-api.captide.co/api/v2/changes \ --header 'X-API-Key: <api-key>'
Comma-separated company IDs: only changes to these companies and their documents. A document moved to another company comes through for both, as document.updated with companyId in changedFields.
Comma-separated document category codes: only document changes in these categories (before or after the change). Company changes are not affected; use types to leave them out.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Captide API","colors":{"primary":"#478ef8","light":"#478ef8","dark":"#478ef8"},"logo":{"light":"https://mintcdn.com/captide/9nTwxd7pkhCHGj3r/logo/light.svg?fit=max\u0026auto=format\u0026n=9nTwxd7pkhCHGj3r\u0026q=85\u0026s=f6615b1fe22f08cba979a10550c982df","dark":"https://mintcdn.com/captide/9nTwxd7pkhCHGj3r/logo/dark.svg?fit=max\u0026auto=format\u0026n=9nTwxd7pkhCHGj3r\u0026q=85\u0026s=1b6ed8e12928c3d8d768f7c25647cdd6"},"favicon":"https://mintcdn.com/captide/9nTwxd7pkhCHGj3r/favicon.svg?fit=max\u0026auto=format\u0026n=9nTwxd7pkhCHGj3r\u0026q=85\u0026s=98836a1114e87469711b68f291635b09","api":{"openapi":"https://rest-api.captide.co/openapi.json","playground":{"display":"interactive"}},"navbar":{"links":[{"href":"mailto:support@captide.co","label":"Support"}]},"footer":{"socials":{"github":"https://github.com/captide-tech","linkedin":"https://linkedin.com/company/captide"}},"integrations":{"ga4":{"measurementId":"G-S25SS09G77"}},"styling":{"latex":false},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"captide","hasAudioNarration":false,"actualSubdomain":"captide","customDomains":["docs.captide.ai"],"gitSource":{"type":"github","owner":"captide-tech","repo":"captide-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeb92b52b386302aeb28adc","collectionId":"17078421-2f96-494e-b011-f99a636e8e7e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeb92b52b386302aeb28adc"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6aeb941e97823f91bdd364d6","clientVersion":"0.0.4064","searchFilterCounts":[{"language":"default","tag":"API Reference","count":18},{"language":"default","tag":"Guides","count":8},{"language":"default","tag":"Webhooks","count":5},{"language":"default","tag":"Integration","count":5},{"language":"default","tag":"Agentic RAG","count":4},{"language":"default","tag":"Companies","count":3},{"language":"default","tag":"Getting started","count":3},{"language":"default","tag":"Changes","count":2},{"language":"default","tag":"Documents","count":2},{"language":"default","tag":"API documentation","count":2}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/endpoint/changes","slug":"/api-reference/endpoint/changes","pageMetadata":{"title":"List Changes","openapi":"GET /api/v2/changes","description":"Every change to the documents and companies the API shows, in order: new documents, documents whose metadata or files changed, documents removed from the API, and the same for companies. Use it to keep a copy of Captide's data up to date without re-reading the lists.\n\n To start:\n 1. Load your starting copy from `GET /api/v2/changes/snapshot`: companies, then documents. Keep the `cursor` of the first page you loaded.\n 2. From then on, call this endpoint with `after` set to that `cursor` (then to each response's `nextCursor`) every few minutes, and apply the changes in order. Changes made while you were loading the snapshot come through again, so apply them as upserts and deletes:\n - `document.created` / `company.created`: add it, or replace it if you have it.\n - `document.updated` / `company.updated`: replace it. `changedFields` says what changed and `previous` holds the old values. When a file changed (`originalFileUrl`, `markdownFileUrl`, `layoutJsonFileUrl`) or the document's `id` changed (a new version of its file), fetch it again with `GET /api/v2/documents/{id}`.\n - `document.deleted` / `company.deleted`: remove it, if you have it.\n\n A document is in the feed when `/documents/list` lists it, so a document that gains a category or a listable file appears as `document.created`. A document dated in the future is announced when it is added, although the list only shows it from its date. Changes are published about a minute after they are made.","href":"/api-reference/endpoint/changes"},"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 li: \"li\",\n ol: \"ol\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Every change to the documents and companies the API shows, in order: new documents, documents whose metadata or files changed, documents removed from the API, and the same for companies. Use it to keep a copy of Captide’s data up to date without re-reading the lists.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"To start:\"\n }), \"\\n\", _jsxs(_components.ol, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Load your starting copy from \", _jsx(_components.code, {\n children: \"GET /api/v2/changes/snapshot\"\n }), \": companies, then documents. Keep the \", _jsx(_components.code, {\n children: \"cursor\"\n }), \" of the first page you loaded.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"From then on, call this endpoint with \", _jsx(_components.code, {\n children: \"after\"\n }), \" set to that \", _jsx(_components.code, {\n children: \"cursor\"\n }), \" (then to each response’s \", _jsx(_components.code, {\n children: \"nextCursor\"\n }), \") every few minutes, and apply the changes in order. Changes made while you were loading the snapshot come through again, so apply them as upserts and deletes:\", \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"document.created\"\n }), \" / \", _jsx(_components.code, {\n children: \"company.created\"\n }), \": add it, or replace it if you have it.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"document.updated\"\n }), \" / \", _jsx(_components.code, {\n children: \"company.updated\"\n }), \": replace it. \", _jsx(_components.code, {\n children: \"changedFields\"\n }), \" says what changed and \", _jsx(_components.code, {\n children: \"previous\"\n }), \" holds the old values. When a file changed (\", _jsx(_components.code, {\n children: \"originalFileUrl\"\n }), \", \", _jsx(_components.code, {\n children: \"markdownFileUrl\"\n }), \", \", _jsx(_components.code, {\n children: \"layoutJsonFileUrl\"\n }), \") or the document’s \", _jsx(_components.code, {\n children: \"id\"\n }), \" changed (a new version of its file), fetch it again with \", _jsx(_components.code, {\n children: \"GET /api/v2/documents/{id}\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"document.deleted\"\n }), \" / \", _jsx(_components.code, {\n children: \"company.deleted\"\n }), \": remove it, if you have it.\"]\n }), \"\\n\"]\n }), \"\\n\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A document is in the feed when \", _jsx(_components.code, {\n children: \"/documents/list\"\n }), \" lists it, so a document that gains a category or a listable file appears as \", _jsx(_components.code, {\n children: \"document.created\"\n }), \". A document dated in the future is announced when it is added, although the list only shows it from its date. Changes are published about a minute after they are made.\"]\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":"List Changes","openapi":"GET /api/v2/changes","description":"Every change to the documents and companies the API shows, in order: new documents, documents whose metadata or files changed, documents removed from the API, and the same for companies. Use it to keep a copy of Captide's data up to date without re-reading the lists.\n\n To start:\n 1. Load your starting copy from `GET /api/v2/changes/snapshot`: companies, then documents. Keep the `cursor` of the first page you loaded.\n 2. From then on, call this endpoint with `after` set to that `cursor` (then to each response's `nextCursor`) every few minutes, and apply the changes in order. Changes made while you were loading the snapshot come through again, so apply them as upserts and deletes:\n - `document.created` / `company.created`: add it, or replace it if you have it.\n - `document.updated` / `company.updated`: replace it. `changedFields` says what changed and `previous` holds the old values. When a file changed (`originalFileUrl`, `markdownFileUrl`, `layoutJsonFileUrl`) or the document's `id` changed (a new version of its file), fetch it again with `GET /api/v2/documents/{id}`.\n - `document.deleted` / `company.deleted`: remove it, if you have it.\n\n A document is in the feed when `/documents/list` lists it, so a document that gains a category or a listable file appears as `document.created`. A document dated in the future is announced when it is added, although the list only shows it from its date. Changes are published about a minute after they are made.","href":"/api-reference/endpoint/changes"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Changes"],"summary":"List changes","description":"Every change to the documents and companies the API shows, in order: new documents, documents whose metadata or files changed, documents removed from the API, and the same for companies. Use it to keep a copy of Captide's data up to date without re-reading the lists.\n\n To start:\n 1. Load your starting copy from `GET /api/v2/changes/snapshot`: companies, then documents. Keep the `cursor` of the first page you loaded.\n 2. From then on, call this endpoint with `after` set to that `cursor` (then to each response's `nextCursor`) every few minutes, and apply the changes in order. Changes made while you were loading the snapshot come through again, so apply them as upserts and deletes:\n - `document.created` / `company.created`: add it, or replace it if you have it.\n - `document.updated` / `company.updated`: replace it. `changedFields` says what changed and `previous` holds the old values. When a file changed (`originalFileUrl`, `markdownFileUrl`, `layoutJsonFileUrl`) or the document's `id` changed (a new version of its file), fetch it again with `GET /api/v2/documents/{id}`.\n - `document.deleted` / `company.deleted`: remove it, if you have it.\n\n A document is in the feed when `/documents/list` lists it, so a document that gains a category or a listable file appears as `document.created`. A document dated in the future is announced when it is added, although the list only shows it from its date. Changes are published about a minute after they are made.","operationId":"list_changes_api_v2_changes_get","security":["5b84d93a-81e1-4b2c-b5ea-9af8eecf4926"],"parameters":["622c744f-5ef0-4a24-bb22-0d4b42b0c37d","bf901b2e-d433-4440-98e1-5e8bb196ccb6","46ff54d7-1962-413a-9865-e358ac2019dc","a6368869-8b84-44ab-b6e8-53e5ab60135d","e65a553e-44ea-4da9-ac52-789c39c035f2"],"responses":{"200":"ea4713e3-681b-4fda-ac76-caa750442240","400":"34c0217d-0370-4e8a-a3be-2278bcdbe403","401":"c328f490-bffe-4dbc-aed3-c7a795229596","403":"91f08287-ed6b-4206-a7e4-b8115d3bfa18","422":"a5aa28ca-0dfd-422f-bd6e-6efca4d0faf1","429":"7911b58f-4eb0-4ca7-84cd-c1dd9a51d7a4","500":"6797ce57-2683-4954-a543-efc7864fc44c"},"method":"get","type":"path","servers":["b86aea2b-e867-4413-ac00-32dcb467d264"],"path":"/api/v2/changes","baseUrlOptions":["https://rest-api.captide.co"],"title":"List changes","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"622c744f-5ef0-4a24-bb22-0d4b42b0c37d":{"name":"after","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Return changes after this `sequence`: the last one you processed, or `nextCursor` / `latestCursor` from a previous response","examples":[1310],"default":0,"title":"After","isRequired":false,"uniqueKey":"","typeLabel":"integer"},"description":"Return changes after this `sequence`: the last one you processed, or `nextCursor` / `latestCursor` from a previous response"},"bf901b2e-d433-4440-98e1-5e8bb196ccb6":{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of changes to return","examples":[100],"default":100,"title":"Limit","isRequired":false,"uniqueKey":"","typeLabel":"integer"},"description":"Maximum number of changes to return"},"46ff54d7-1962-413a-9865-e358ac2019dc":{"name":"types","in":"query","required":false,"schema":{"oneOf":[{"type":"string","title":"Types","description":"Comma-separated change types to return, e.g. `document.created,document.updated`. Default: all.","example":"document.created,document.updated","uniqueKey":"oneOf.0","typeLabel":"string"},{"type":"null","title":"Types","description":"Comma-separated change types to return, e.g. `document.created,document.updated`. Default: all.","example":"document.created,document.updated","uniqueKey":"oneOf.1","typeLabel":"null"}],"isRequired":false,"uniqueKey":"","typeLabel":"string | null"},"description":"Comma-separated change types to return, e.g. `document.created,document.updated`. Default: all."},"a6368869-8b84-44ab-b6e8-53e5ab60135d":{"name":"companyIds","in":"query","required":false,"schema":{"oneOf":[{"type":"string","title":"Companyids","description":"Comma-separated company IDs: only changes to these companies and their documents. A document moved to another company comes through for both, as `document.updated` with `companyId` in `changedFields`.","example":"77848abe-a215-41b7-8950-86e89ea1fadc","uniqueKey":"oneOf.0","typeLabel":"string"},{"type":"null","title":"Companyids","description":"Comma-separated company IDs: only changes to these companies and their documents. A document moved to another company comes through for both, as `document.updated` with `companyId` in `changedFields`.","example":"77848abe-a215-41b7-8950-86e89ea1fadc","uniqueKey":"oneOf.1","typeLabel":"null"}],"isRequired":false,"uniqueKey":"","typeLabel":"string | null"},"description":"Comma-separated company IDs: only changes to these companies and their documents. A document moved to another company comes through for both, as `document.updated` with `companyId` in `changedFields`."},"e65a553e-44ea-4da9-ac52-789c39c035f2":{"name":"documentCategories","in":"query","required":false,"schema":{"oneOf":[{"type":"string","title":"Documentcategories","description":"Comma-separated document category codes: only document changes in these categories (before or after the change). Company changes are not affected; use `types` to leave them out.","example":"earnings-release,earnings-call-transcript","uniqueKey":"oneOf.0","typeLabel":"string"},{"type":"null","title":"Documentcategories","description":"Comma-separated document category codes: only document changes in these categories (before or after the change). Company changes are not affected; use `types` to leave them out.","example":"earnings-release,earnings-call-transcript","uniqueKey":"oneOf.1","typeLabel":"null"}],"isRequired":false,"uniqueKey":"","typeLabel":"string | null"},"description":"Comma-separated document category codes: only document changes in these categories (before or after the change). Company changes are not affected; use `types` to leave them out."}},"responses":{"ea4713e3-681b-4fda-ac76-caa750442240":{"description":"A page of changes","content":{"application/json":{"schema":{"properties":{"changes":{"items":{"properties":{"sequence":{"type":"integer","title":"Sequence","description":"Position in the feed. Changes are in this order, without gaps in what Captide publishes; pass the last one you processed as `after`.","isRequired":true,"uniqueKey":"changes.items.[INDEX].sequence","typeLabel":"integer"},"id":{"type":"string","title":"Id","description":"Unique ID of this change","isRequired":true,"uniqueKey":"changes.items.[INDEX].id","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"`document.created`, `document.updated`, `document.deleted`, `company.created`, `company.updated` or `company.deleted`","isRequired":true,"uniqueKey":"changes.items.[INDEX].type","typeLabel":"string"},"changedAt":{"type":"string","format":"date-time","title":"Changedat","description":"When the change was made (UTC)","isRequired":true,"uniqueKey":"changes.items.[INDEX].changedAt","typeLabel":"string\u003cdate-time>"},"changedFields":{"items":{"type":"string","uniqueKey":"changes.items.[INDEX].changedFields.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Changedfields","description":"For `updated`: the fields that changed. `originalFileUrl`, `markdownFileUrl` or `layoutJsonFileUrl` means a new version of that file: fetch fresh links from `GET /api/v2/documents/{id}`.","isRequired":true,"uniqueKey":"changes.items.[INDEX].changedFields","typeLabel":"string[]"},"previous":{"oneOf":[{"type":"object","title":"Previous","description":"For `updated`: the old value of each changed field (file links aside)","additionalProperties":true,"uniqueKey":"changes.items.[INDEX].previous.oneOf.0","typeLabel":"Previous · object"},{"type":"null","title":"Previous","description":"For `updated`: the old value of each changed field (file links aside)","uniqueKey":"changes.items.[INDEX].previous.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].previous","typeLabel":"Previous · object | null"},"document":{"oneOf":[{"type":"object","title":"ChangedDocument","description":"For document changes: the document after the change; for `document.deleted`, as it was last shown","required":["id","documentCategory","companyId"],"properties":{"id":{"type":"string","title":"Id","description":"Document ID, as used by `GET /api/v2/documents/{id}`. A new version of the document's file has a new ID; the old one is in `previous.id`.","isRequired":true,"uniqueKey":"changes.items.[INDEX].document.oneOf.0.id","typeLabel":"string"},"documentCategory":{"type":"string","title":"Documentcategory","description":"Document category code. See [Coverage](/coverage).","isRequired":true,"uniqueKey":"changes.items.[INDEX].document.oneOf.0.documentCategory","typeLabel":"string"},"companyId":{"type":"string","title":"Companyid","description":"ID of the company the document belongs to","isRequired":true,"uniqueKey":"changes.items.[INDEX].document.oneOf.0.companyId","typeLabel":"string"},"secFormType":{"oneOf":[{"type":"string","title":"Secformtype","description":"SEC form type, for SEC filings","uniqueKey":"changes.items.[INDEX].document.oneOf.0.secFormType.oneOf.0","typeLabel":"string"},{"type":"null","title":"Secformtype","description":"SEC form type, for SEC filings","uniqueKey":"changes.items.[INDEX].document.oneOf.0.secFormType.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].document.oneOf.0.secFormType","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","title":"Title","description":"Captide-generated document title","uniqueKey":"changes.items.[INDEX].document.oneOf.0.title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"Captide-generated document title","uniqueKey":"changes.items.[INDEX].document.oneOf.0.title.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].document.oneOf.0.title","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Captide-generated document description","uniqueKey":"changes.items.[INDEX].document.oneOf.0.description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Captide-generated document description","uniqueKey":"changes.items.[INDEX].document.oneOf.0.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].document.oneOf.0.description","typeLabel":"string | null"},"date":{"oneOf":[{"type":"string","title":"Date","description":"Date of the document, as in `/documents/list`","uniqueKey":"changes.items.[INDEX].document.oneOf.0.date.oneOf.0","typeLabel":"string"},{"type":"null","title":"Date","description":"Date of the document, as in `/documents/list`","uniqueKey":"changes.items.[INDEX].document.oneOf.0.date.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].document.oneOf.0.date","typeLabel":"string | null"},"fiscalQuarter":{"oneOf":[{"type":"integer","title":"Fiscalquarter","description":"Fiscal quarter (1 to 4)","uniqueKey":"changes.items.[INDEX].document.oneOf.0.fiscalQuarter.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Fiscalquarter","description":"Fiscal quarter (1 to 4)","uniqueKey":"changes.items.[INDEX].document.oneOf.0.fiscalQuarter.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].document.oneOf.0.fiscalQuarter","typeLabel":"integer | null"},"fiscalYear":{"oneOf":[{"type":"integer","title":"Fiscalyear","description":"Fiscal year","uniqueKey":"changes.items.[INDEX].document.oneOf.0.fiscalYear.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Fiscalyear","description":"Fiscal year","uniqueKey":"changes.items.[INDEX].document.oneOf.0.fiscalYear.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].document.oneOf.0.fiscalYear","typeLabel":"integer | null"},"fiscalPeriod":{"oneOf":[{"type":"string","title":"Fiscalperiod","description":"`year`, `multi-year`, `month`, `half-year`, `quarter` or null","uniqueKey":"changes.items.[INDEX].document.oneOf.0.fiscalPeriod.oneOf.0","typeLabel":"string"},{"type":"null","title":"Fiscalperiod","description":"`year`, `multi-year`, `month`, `half-year`, `quarter` or null","uniqueKey":"changes.items.[INDEX].document.oneOf.0.fiscalPeriod.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].document.oneOf.0.fiscalPeriod","typeLabel":"string | null"},"language":{"oneOf":[{"type":"string","title":"Language","description":"ISO 639-1 language code","uniqueKey":"changes.items.[INDEX].document.oneOf.0.language.oneOf.0","typeLabel":"string"},{"type":"null","title":"Language","description":"ISO 639-1 language code","uniqueKey":"changes.items.[INDEX].document.oneOf.0.language.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].document.oneOf.0.language","typeLabel":"string | null"},"companyName":{"oneOf":[{"type":"string","title":"Companyname","description":"The company's name now","uniqueKey":"changes.items.[INDEX].document.oneOf.0.companyName.oneOf.0","typeLabel":"string"},{"type":"null","title":"Companyname","description":"The company's name now","uniqueKey":"changes.items.[INDEX].document.oneOf.0.companyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].document.oneOf.0.companyName","typeLabel":"string | null"},"companyTickers":{"items":{"type":"string","uniqueKey":"changes.items.[INDEX].document.oneOf.0.companyTickers.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Companytickers","description":"The company's tickers now","uniqueKey":"changes.items.[INDEX].document.oneOf.0.companyTickers","typeLabel":"string[]"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","description":"As in `GET /api/v2/documents/{id}`","uniqueKey":"changes.items.[INDEX].document.oneOf.0.metadata","typeLabel":"Metadata · object"}},"uniqueKey":"changes.items.[INDEX].document.oneOf.0","typeLabel":"ChangedDocument · object"},{"type":"null","description":"For document changes: the document after the change; for `document.deleted`, as it was last shown","uniqueKey":"changes.items.[INDEX].document.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].document","typeLabel":"ChangedDocument · object | null"},"company":{"oneOf":[{"type":"object","title":"CompanyResponse","description":"For company changes: the company after the change; for `company.deleted`, as it was last shown","required":["id","name","tickers","countries","filesWithSec"],"properties":{"id":{"type":"string","title":"Id","description":"Unique company ID","isRequired":true,"uniqueKey":"changes.items.[INDEX].company.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","title":"Name","description":"Company name","isRequired":true,"uniqueKey":"changes.items.[INDEX].company.oneOf.0.name","typeLabel":"string"},"tickers":{"items":{"type":"string","uniqueKey":"changes.items.[INDEX].company.oneOf.0.tickers.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Tickers","description":"List of ticker symbols with exchange suffixes (e.g., 'ASML', 'ASML.AS')","isRequired":true,"uniqueKey":"changes.items.[INDEX].company.oneOf.0.tickers","typeLabel":"string[]"},"countries":{"items":{"type":"string","uniqueKey":"changes.items.[INDEX].company.oneOf.0.countries.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Countries","description":"Company's country of domicile (ISO 3166-1 alpha-2)","isRequired":true,"uniqueKey":"changes.items.[INDEX].company.oneOf.0.countries","typeLabel":"string[]"},"filesWithSec":{"type":"boolean","title":"Fileswithsec","description":"Whether the company files reports with the SEC","isRequired":true,"uniqueKey":"changes.items.[INDEX].company.oneOf.0.filesWithSec","typeLabel":"boolean"},"cik":{"oneOf":[{"type":"string","title":"Cik","description":"Central Index Key (CIK) assigned by the SEC","uniqueKey":"changes.items.[INDEX].company.oneOf.0.cik.oneOf.0","typeLabel":"string"},{"type":"null","title":"Cik","description":"Central Index Key (CIK) assigned by the SEC","uniqueKey":"changes.items.[INDEX].company.oneOf.0.cik.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].company.oneOf.0.cik","typeLabel":"string | null"},"permId":{"oneOf":[{"type":"string","title":"Permid","description":"PermID (Permanent Identifier) assigned by Refinitiv","uniqueKey":"changes.items.[INDEX].company.oneOf.0.permId.oneOf.0","typeLabel":"string"},{"type":"null","title":"Permid","description":"PermID (Permanent Identifier) assigned by Refinitiv","uniqueKey":"changes.items.[INDEX].company.oneOf.0.permId.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].company.oneOf.0.permId","typeLabel":"string | null"}},"uniqueKey":"changes.items.[INDEX].company.oneOf.0","typeLabel":"CompanyResponse · object"},{"type":"null","description":"For company changes: the company after the change; for `company.deleted`, as it was last shown","uniqueKey":"changes.items.[INDEX].company.oneOf.1","typeLabel":"null"}],"uniqueKey":"changes.items.[INDEX].company","typeLabel":"CompanyResponse · object | null"}},"type":"object","required":["sequence","id","type","changedAt","changedFields"],"title":"Change","description":"One change to a document or company the API shows.","uniqueKey":"changes.items.[INDEX]","typeLabel":"Change · object"},"type":"array","title":"Changes","description":"Changes after `after`, oldest first","isRequired":true,"uniqueKey":"changes","typeLabel":"Change · object[]"},"nextCursor":{"type":"integer","title":"Nextcursor","description":"Pass as `after` to get the next page. It can move forward even when `changes` is empty, past changes your filters skip.","isRequired":true,"uniqueKey":"nextCursor","typeLabel":"integer"},"hasMore":{"type":"boolean","title":"Hasmore","description":"Whether more changes may follow `nextCursor` right now","isRequired":true,"uniqueKey":"hasMore","typeLabel":"boolean"},"latestCursor":{"type":"integer","title":"Latestcursor","description":"The newest position in the feed","isRequired":true,"uniqueKey":"latestCursor","typeLabel":"integer"}},"type":"object","required":["changes","nextCursor","hasMore","latestCursor"],"title":"ChangesResponse","description":"A page of changes.","uniqueKey":"","typeLabel":"ChangesResponse · object"},"example":{"changes":[{"sequence":1312,"id":"6f1d9c1e-2b7a-4d0e-9d5f-0c9a7e2b41a3","type":"document.updated","changedAt":"2026-11-04T18:02:11.514Z","changedFields":["fiscalQuarter","markdownFileUrl"],"previous":{},"document":{"id":"97ac0c55-7349-46ec-8670-92f8524f5294","documentCategory":"interim-financial-report","title":"Third Quarter Report","description":"Santos Limited third quarter report for the period ending 30 September 2026, summarising record quarterly production and free cash flow, operational performance across assets (including Barossa, Pikka and PNG LNG), sales and pricing, updated 2026 guidance and project developments.","date":"2026-10-22","fiscalQuarter":3,"fiscalYear":2026,"fiscalPeriod":"quarter","language":"en","companyId":"77848abe-a215-41b7-8950-86e89ea1fadc","companyName":"Santos Ltd.","companyTickers":["STO.AX"],"metadata":{}}},{"sequence":1315,"id":"0b8e4f52-7c33-4a61-a9d2-5e1f0c6d7b88","type":"company.updated","changedAt":"2026-11-04T18:03:40.027Z","changedFields":["permId"],"previous":{},"company":{"id":"77848abe-a215-41b7-8950-86e89ea1fadc","name":"Santos Ltd.","tickers":["STO.AX"],"countries":["AU"],"filesWithSec":false,"permId":"4295857141"}}],"nextCursor":1315,"hasMore":false,"latestCursor":1315},"examples":{"Example":{"title":"Example","value":{"changes":[{"sequence":1312,"id":"6f1d9c1e-2b7a-4d0e-9d5f-0c9a7e2b41a3","type":"document.updated","changedAt":"2026-11-04T18:02:11.514Z","changedFields":["fiscalQuarter","markdownFileUrl"],"previous":{},"document":{"id":"97ac0c55-7349-46ec-8670-92f8524f5294","documentCategory":"interim-financial-report","title":"Third Quarter Report","description":"Santos Limited third quarter report for the period ending 30 September 2026, summarising record quarterly production and free cash flow, operational performance across assets (including Barossa, Pikka and PNG LNG), sales and pricing, updated 2026 guidance and project developments.","date":"2026-10-22","fiscalQuarter":3,"fiscalYear":2026,"fiscalPeriod":"quarter","language":"en","companyId":"77848abe-a215-41b7-8950-86e89ea1fadc","companyName":"Santos Ltd.","companyTickers":["STO.AX"],"metadata":{}}},{"sequence":1315,"id":"0b8e4f52-7c33-4a61-a9d2-5e1f0c6d7b88","type":"company.updated","changedAt":"2026-11-04T18:03:40.027Z","changedFields":["permId"],"previous":{},"company":{"id":"77848abe-a215-41b7-8950-86e89ea1fadc","name":"Santos Ltd.","tickers":["STO.AX"],"countries":["AU"],"filesWithSec":false,"permId":"4295857141"}}],"nextCursor":1315,"hasMore":false,"latestCursor":1315}}},"exampleType":"examples"}},"exampleType":"examples"},"34c0217d-0370-4e8a-a3be-2278bcdbe403":{"description":"Invalid request parameters","content":{"application/json":{"examples":{"unknown_type":{"title":"unknown_type","value":{"detail":"Unknown change type(s): document.moved. Valid types: document.created, document.updated, document.deleted, company.created, company.updated, company.deleted"}},"invalid_company_id":{"title":"invalid_company_id","value":{"detail":"Invalid companyIds: each value must be a UUID"}},"invalid_category":{"title":"invalid_category","value":{"detail":"Invalid document categories: quarterly-letter"}}},"schema":{"properties":{"detail":{"type":"string","title":"Detail","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["detail"],"title":"ErrorResponse","description":"Standard error response model for all API endpoints.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"exampleType":"examples"}},"exampleType":"examples"},"c328f490-bffe-4dbc-aed3-c7a795229596":{"description":"Missing or invalid API key","content":{"application/json":{"examples":{"missing_key":{"title":"missing_key","value":{"detail":"Missing API key"}},"invalid_key":{"title":"invalid_key","value":{"detail":"Invalid or expired API key"}}},"schema":{"properties":{"detail":{"type":"string","title":"Detail","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["detail"],"title":"ErrorResponse","description":"Standard error response model for all API endpoints.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"exampleType":"examples"}},"exampleType":"examples"},"91f08287-ed6b-4206-a7e4-b8115d3bfa18":{"description":"Your organization doesn't have access to this endpoint","content":{"application/json":{"examples":{"forbidden":{"title":"forbidden","value":{"detail":"Access to this endpoint is not allowed for your organization"}}},"schema":{"properties":{"detail":{"type":"string","title":"Detail","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["detail"],"title":"ErrorResponse","description":"Standard error response model for all API endpoints.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"exampleType":"examples"}},"exampleType":"examples"},"a5aa28ca-0dfd-422f-bd6e-6efca4d0faf1":{"description":"Validation error: a parameter or body field is missing, has the wrong type or is out of range","content":{"application/json":{"example":{"detail":[{"type":"less_than_equal","loc":["query","limit"],"msg":"Input should be less than or equal to 1000","input":"5000","ctx":{"le":1000}}]},"schema":{"properties":{"detail":{"items":{"properties":{"type":{"type":"string","title":"Type","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"},"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"type":"array","title":"Loc","isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"input":{"oneOf":[{"title":"Input"},{"type":"null","title":"Input","uniqueKey":"detail.items.[INDEX].input.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail.items.[INDEX].input","typeLabel":"null"},"ctx":{"oneOf":[{"type":"object","title":"Ctx","additionalProperties":true,"uniqueKey":"detail.items.[INDEX].ctx.oneOf.0","typeLabel":"Ctx · object"},{"type":"null","title":"Ctx","uniqueKey":"detail.items.[INDEX].ctx.oneOf.1","typeLabel":"null"}],"uniqueKey":"detail.items.[INDEX].ctx","typeLabel":"Ctx · object | null"}},"type":"object","required":["type","loc","msg"],"title":"ValidationErrorItem","description":"One invalid field, as FastAPI reports it.","uniqueKey":"detail.items.[INDEX]","typeLabel":"ValidationErrorItem · object"},"type":"array","title":"Detail","isRequired":true,"uniqueKey":"detail","typeLabel":"ValidationErrorItem · object[]"}},"type":"object","required":["detail"],"title":"ValidationErrorResponse","description":"422 body: every invalid field of the request.","uniqueKey":"","typeLabel":"ValidationErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"detail":[{"type":"less_than_equal","loc":["query","limit"],"msg":"Input should be less than or equal to 1000","input":"5000","ctx":{"le":1000}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"7911b58f-4eb0-4ca7-84cd-c1dd9a51d7a4":{"description":"Rate limit exceeded","content":{"application/json":{"examples":{"rate_limited":{"title":"rate_limited","value":{"detail":"Rate limit exceeded: 100 requests per minute"}}},"schema":{"properties":{"detail":{"type":"string","title":"Detail","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["detail"],"title":"ErrorResponse","description":"Standard error response model for all API endpoints.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"exampleType":"examples"}},"exampleType":"examples"},"6797ce57-2683-4954-a543-efc7864fc44c":{"description":"Internal server error","content":{"application/json":{"examples":{"database_error":{"title":"database_error","value":{"detail":"Database error occurred"}}},"schema":{"properties":{"detail":{"type":"string","title":"Detail","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["detail"],"title":"ErrorResponse","description":"Standard error response model for all API endpoints.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"5b84d93a-81e1-4b2c-b5ea-9af8eecf4926":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"APIKeyHeader"}}},"servers":{"b86aea2b-e867-4413-ac00-32dcb467d264":{"url":"https://rest-api.captide.co","description":"Prod server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"APIKeyHeader"},"schema":{"title":"X-API-Key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"APIKeyHeader","name":"X-API-Key"}],"title":"APIKeyHeader"}]},"originalFileLocation":"https://rest-api.captide.co/openapi.json"},"subdomain":"captide","siteName":"Captide API","title":"List Changes - Captide API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T20:17:46.708Z","originalFileLocation":"api-reference/endpoint/changes.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=\"Every change to the documents and companies the API shows, in order: new documents, documents whose metadata or files changed, documents removed from the API, and the same for companies. Use it to keep a copy of Captide\u0026#x27;s data up to date without re-reading the lists. To start: 1. Load your starting copy from GET /api/v2/changes/snapshot: companies, then documents. Keep the cursor of the first page you loaded. 2. From then on, call this endpoint with after set to that cursor (then to each response\u0026#x27;s nextCursor) every few minutes, and apply the changes in order. Changes made while you were loading the snapshot come through again, so apply them as upserts and deletes: - document.created / company.created: add it, or replace it if you have it. - document.updated / company.updated: replace it. changedFields says what changed and previous holds the old values. When a file changed (originalFileUrl, markdownFileUrl, layoutJsonFileUrl) or the document\u0026#x27;s id changed (a new version of its file), fetch it again with GET /api/v2/documents/{id}. - document.deleted / company.deleted: remove it, if you have it. A document is in the feed when /documents/list lists it, so a document that gains a category or a listable file appears as document.created. A document dated in the future is announced when it is added, although the list only shows it from its date. Changes are published about a minute after they are made.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Captide API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/captide/-FVRvyiygpJBqmBK/_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/captide/-FVRvyiygpJBqmBK/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/captide/-FVRvyiygpJBqmBK/_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/captide/-FVRvyiygpJBqmBK/_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/captide/-FVRvyiygpJBqmBK/_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/captide/-FVRvyiygpJBqmBK/_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/captide/-FVRvyiygpJBqmBK/_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/captide/-FVRvyiygpJBqmBK/_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/captide/-FVRvyiygpJBqmBK/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"List Changes - Captide API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Every change to the documents and companies the API shows, in order: new documents, documents whose metadata or files changed, documents removed from the API, and the same for companies. Use it to keep a copy of Captide\u0026#x27;s data up to date without re-reading the lists. To start: 1. Load your starting copy from GET /api/v2/changes/snapshot: companies, then documents. Keep the cursor of the first page you loaded. 2. From then on, call this endpoint with after set to that cursor (then to each response\u0026#x27;s nextCursor) every few minutes, and apply the changes in order. Changes made while you were loading the snapshot come through again, so apply them as upserts and deletes: - document.created / company.created: add it, or replace it if you have it. - document.updated / company.updated: replace it. changedFields says what changed and previous holds the old values. When a file changed (originalFileUrl, markdownFileUrl, layoutJsonFileUrl) or the document\u0026#x27;s id changed (a new version of its file), fetch it again with GET /api/v2/documents/{id}. - document.deleted / company.deleted: remove it, if you have it. A document is in the feed when /documents/list lists it, so a document that gains a category or a listable file appears as document.created. A document dated in the future is announced when it is added, although the list only shows it from its date. Changes are published about a minute after they are made.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Captide API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.captide.ai/api-reference/endpoint/changes\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://captide.mintlify.app/_mintlify/api/og/v2?division=Changes\u0026amp;title=List+Changes\u0026amp;description=Every+change+to+the+documents+and+companies+the+API+shows%2C+in+order%3A+new+documents%2C+documents+whose+metadata+or+files+changed%2C+documents+removed+from+the+API%2C+a\u0026amp;theme=9b0f99567cd7e39d13fdfb91\u0026amp;signature=4e50a42f7a87546910a25e62036c194c5446965d9d591589358a39a97c865f24\">\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=\"List Changes - Captide API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Every change to the documents and companies the API shows, in order: new documents, documents whose metadata or files changed, documents removed from the API, and the same for companies. Use it to keep a copy of Captide\u0026#x27;s data up to date without re-reading the lists. To start: 1. Load your starting copy from GET /api/v2/changes/snapshot: companies, then documents. Keep the cursor of the first page you loaded. 2. From then on, call this endpoint with after set to that cursor (then to each response\u0026#x27;s nextCursor) every few minutes, and apply the changes in order. Changes made while you were loading the snapshot come through again, so apply them as upserts and deletes: - document.created / company.created: add it, or replace it if you have it. - document.updated / company.updated: replace it. changedFields says what changed and previous holds the old values. When a file changed (originalFileUrl, markdownFileUrl, layoutJsonFileUrl) or the document\u0026#x27;s id changed (a new version of its file), fetch it again with GET /api/v2/documents/{id}. - document.deleted / company.deleted: remove it, if you have it. A document is in the feed when /documents/list lists it, so a document that gains a category or a listable file appears as document.created. A document dated in the future is announced when it is added, although the list only shows it from its date. Changes are published about a minute after they are made.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://captide.mintlify.app/_mintlify/api/og/v2?division=Changes\u0026amp;title=List+Changes\u0026amp;description=Every+change+to+the+documents+and+companies+the+API+shows%2C+in+order%3A+new+documents%2C+documents+whose+metadata+or+files+changed%2C+documents+removed+from+the+API%2C+a\u0026amp;theme=9b0f99567cd7e39d13fdfb91\u0026amp;signature=4e50a42f7a87546910a25e62036c194c5446965d9d591589358a39a97c865f24\">\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/captide/-FVRvyiygpJBqmBK/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Captide API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#478ef8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.captide.ai/api-reference/endpoint/changes\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoint/changes.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.captide.ai/#organization\",\"name\":\"Captide API\",\"url\":\"https://docs.captide.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/captide/9nTwxd7pkhCHGj3r/logo/light.svg?fit=max\u0026auto=format\u0026n=9nTwxd7pkhCHGj3r\u0026q=85\u0026s=f6615b1fe22f08cba979a10550c982df\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.captide.ai#website\",\"name\":\"Captide API\",\"url\":\"https://docs.captide.ai\",\"publisher\":{\"@id\":\"https://docs.captide.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.captide.ai/api-reference/endpoint/changes#webpage\",\"url\":\"https://docs.captide.ai/api-reference/endpoint/changes\",\"name\":\"List Changes\",\"description\":\"Every change to the documents and companies the API shows, in order: new documents, documents whose metadata or files changed, documents removed from the API, and the same for companies. Use it to keep a copy of Captide's data up to date without re-reading the lists. To start: 1. Load your starting copy from GET /api/v2/changes/snapshot: companies, then documents. Keep the cursor of the first page you loaded. 2. From then on, call this endpoint with after set to that cursor (then to each response's nextCursor) every few minutes, and apply the changes in order. Changes made while you were loading the snapshot come through again, so apply them as upserts and deletes: - document.created / company.created: add it, or replace it if you have it. - document.updated / company.updated: replace it. changedFields says what changed and previous holds the old values. When a file changed (originalFileUrl, markdownFileUrl, layoutJsonFileUrl) or the document's id changed (a new version of its file), fetch it again with GET /api/v2/documents/{id}. - document.deleted / company.deleted: remove it, if you have it. A document is in the feed when /documents/list lists it, so a document that gains a category or a listable file appears as document.created. A document dated in the future is announced when it is added, although the list only shows it from its date. Changes are published about a minute after they are made.\",\"dateModified\":\"2026-11-04T20:17:46.708Z\",\"isPartOf\":{\"@id\":\"https://docs.captide.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.captide.ai/api-reference/endpoint/changes#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.captide.ai/api-reference/endpoint/changes#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Captide API\",\"item\":\"https://docs.captide.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"List Changes\",\"item\":\"https://docs.captide.ai/api-reference/endpoint/changes\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.captide.ai/api-reference/endpoint/changes#apireference\",\"headline\":\"List Changes\",\"name\":\"List Changes\",\"description\":\"Every change to the documents and companies the API shows, in order: new documents, documents whose metadata or files changed, documents removed from the API, and the same for companies. Use it to keep a copy of Captide's data up to date without re-reading the lists. To start: 1. Load your starting copy from GET /api/v2/changes/snapshot: companies, then documents. Keep the cursor of the first page you loaded. 2. From then on, call this endpoint with after set to that cursor (then to each response's nextCursor) every few minutes, and apply the changes in order. Changes made while you were loading the snapshot come through again, so apply them as upserts and deletes: - document.created / company.created: add it, or replace it if you have it. - document.updated / company.updated: replace it. changedFields says what changed and previous holds the old values. When a file changed (originalFileUrl, markdownFileUrl, layoutJsonFileUrl) or the document's id changed (a new version of its file), fetch it again with GET /api/v2/documents/{id}. - document.deleted / company.deleted: remove it, if you have it. A document is in the feed when /documents/list lists it, so a document that gains a category or a listable file appears as document.created. A document dated in the future is announced when it is added, although the list only shows it from its date. Changes are published about a minute after they are made.\",\"url\":\"https://docs.captide.ai/api-reference/endpoint/changes\",\"mainEntityOfPage\":{\"@id\":\"https://docs.captide.ai/api-reference/endpoint/changes#webpage\"},\"dateModified\":\"2026-11-04T20:17:46.708Z\",\"publisher\":{\"@id\":\"https://docs.captide.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.captide.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Captide API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Captide API","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"API documentation","pages":[{"title":"Introduction","href":"/api-reference/introduction"},{"title":"Conventions","href":"/api-reference/versions"}]},{"group":"Companies","pages":[{"title":"Find Companies","openapi":"GET /api/v2/companies/list","href":"/api-reference/endpoint/companies"},{"title":"Search Companies","openapi":"GET /api/v2/companies/search","href":"/api-reference/endpoint/search_company"},{"title":"Get Company by ID","openapi":"GET /api/v2/companies/{id}","href":"/api-reference/endpoint/get_company"}]},{"group":"Documents","pages":[{"title":"Find Documents","openapi":"GET /api/v2/documents/list","href":"/api-reference/endpoint/documents"},{"title":"Get Document by ID","openapi":"GET /api/v2/documents/{id}","href":"/api-reference/endpoint/get_document"}]},{"group":"Agentic RAG","pages":[{"title":"Company Retrieval","openapi":"POST /api/v2/rag/company-retrieval","href":"/api-reference/endpoint/company_retrieval"},{"title":"Chunk Retrieval","openapi":"POST /api/v2/rag/chunks","href":"/api-reference/endpoint/chunks"},{"title":"Agent Response","openapi":"POST /api/v2/rag/agent-response","href":"/api-reference/endpoint/agent"},{"title":"Agent Response (Stream)","openapi":"POST /api/v2/rag/agent-response-stream","description":"Answer a natural-language question from corporate disclosures, streamed as Server-Sent Events, so you can show progress and the answer as it is written.\n\n Each event is a `data:` line holding a JSON object. Its `type` is one of:\n - `thinking`: a progress update, with a `stage`\n - `message`: the next piece of the answer\n - `content_final`: the complete answer; when present, it replaces the text built from `message` events\n - `sources`: the `sourceMap`, mapping each citation to its passage, page and excerpt\n - `warning`: a non-fatal issue, such as no relevant documents being found\n - `done`: the end of the stream","href":"/api-reference/endpoint/agent_stream"}]},{"group":"Changes","pages":[{"title":"List Changes","openapi":"GET /api/v2/changes","href":"/api-reference/endpoint/changes"},{"title":"Changes Snapshot","openapi":"GET /api/v2/changes/snapshot","description":"Every document or company the changes feed covers, as it is now: the starting copy to keep up to date with `GET /api/v2/changes`.\n\n Page through it with `pageToken` (each response's `nextPageToken`, until it is null), then follow the feed from `cursor`. Load companies first, then documents, and follow the feed from the `cursor` of the first page you loaded. Changes made while you load come through the feed again; apply them as upserts and deletes.\n\n Unlike `/documents/list`, paging can't skip anything when documents are added or removed meanwhile, and documents dated in the future are included, as the feed includes them. Documents come without file links; get those from `GET /api/v2/documents/{id}`.","href":"/api-reference/endpoint/changes_snapshot"}]},{"group":"Webhooks","pages":[{"title":"Create Webhook","openapi":"POST /api/v2/webhooks","href":"/api-reference/endpoint/webhook_create"},{"title":"List Webhooks","openapi":"GET /api/v2/webhooks","href":"/api-reference/endpoint/webhook_list"},{"title":"Get Webhook","openapi":"GET /api/v2/webhooks/{id}","href":"/api-reference/endpoint/webhook_get"},{"title":"Update Webhook","openapi":"PATCH /api/v2/webhooks/{id}","href":"/api-reference/endpoint/webhook_update"},{"title":"Delete Webhook","openapi":"DELETE /api/v2/webhooks/{id}","href":"/api-reference/endpoint/webhook_delete"}]}]}]},"basePath":"","title":"List Changes - Captide API","buildId":"dpl_2gSLkbMoF5kkLsBqYzq9KWtDyJRo","deploymentId":"dpl_2gSLkbMoF5kkLsBqYzq9KWtDyJRo","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-hfTk6MZX.js","utils-Bfp7HcY4.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D8dSW7yV.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CFgQXcZO.js","snippetPresets-dMW1-pV3.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-DyrCOido.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Bwwdcyh3.js","shallow-drVXTg79.js","getApiPlaygroundDisplay-GMPxUzWV.js","CodeSnippet-wTmV0wP6.js","CodeSnippets-D_QxCJEq.js","Page-BsZAA8xk.js","getPastedJson-Dev-X0Xy.js","icon-7L2WL0jD.js","MethodPill-Ble59Dl_.js","DuplicateIcon-r-98uLGh.js","createIcon-DaFzipjW.js","DynamicMarkdown-Jk8YAWGN.js","SectionHeading-nLgrCDOg.js","axios-vUo_bRtp.js","Markdown-_QGow1Wo.js","clsx-v8ssfMzu.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CjboTi0T.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DkAyo-p5.js"]}