{
"message": "You're trying to access resource you're not authorized to.",
"type": "UnauthorizedError"
}
{
"message": "You don't have permission to access this resource.",
"type": "ForbiddenError",
"error": "ForbiddenError"
}
Discovery
List Data Structures
Retrieves all available data structures (statement reporting, record reporting and quotas) accessible through the API. Use this endpoint to discover what data you can extract.
GET
/
v2
/
data-structures
List Data Structures
curl --request GET \
--url https://api.qobra.co/v2/data-structures \
--header 'X-API-Key: <api-key>'
This endpoint returns all data structures (tables) available in your Qobra account. It’s the entry point for the V2 API — use it to discover what data you can extract.
This is always your first call. It tells you what data structures exist and where to find their schemas and records.
Only data structures from your company’s live environment are returned.
Reporting tables and quotas that exist in a sandbox environment are not listed
and their ids cannot be used with the other V2 endpoints. See the
introduction for
details.
The type field indicates what kind of data the structure contains:
statement_reporting
What it is: A statement report summarizes commission data at statement level.Typical use: payroll integration, high-level payout analysis per user, sales performance trackingData endpoint:/v2/reporting/{id}/statementsContains fields like:
Statement user
Statement date
Payment
Statement status (paid, pending, validated)
record_reporting
What it is: A record report summarizes commission data at transaction level (e.g. CRM opportunity level).Typical use: Commission analysis per opportunity, cost of sales and deal margin monitoringData endpoint:/v2/reporting/{id}/recordsContains fields like:
Deal/opportunity information
Account details
Close dates and amounts
Commission amounts
quota
What it is: The target assigned to each person, for each period.Typical use: BI reporting on targets vs attainment, warehouse syncData endpoint:/v2/quotas/{id}/valuesContains fields like:
The person the target is set for
The period it applies to
The target value
Whether it was set in Qobra or synchronized from an integration
For a quota, total_records is the exact, live number of quota values it
holds — one per person and per period. For a reporting table it is a
periodically refreshed count, and it can be null.
Every structure carries a status, either active or archived.
Archiving a quota does not hide it here. An archived quota stays listed,
with "status": "archived", and its fields and values stay readable. Filter
on status yourself to leave archived quotas out of a sync.
Only a quota can be archived. Reporting tables are always active.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Qobra public API documentation","description":"Reference and guides for integrating with Qobra: inbound/outbound data integrations, the v1 and v2 public REST API, and the MCP server for AI agents.","colors":{"primary":"#460629","light":"#FBF5DF","dark":"#460629"},"logo":{"light":"https://mintcdn.com/qobra/BOwfuCXh9Zd24PEc/logo/dark.svg?fit=max\u0026auto=format\u0026n=BOwfuCXh9Zd24PEc\u0026q=85\u0026s=89cd1b29990b669fb3daa20d2e46c52f","dark":"https://mintcdn.com/qobra/BOwfuCXh9Zd24PEc/logo/white.svg?fit=max\u0026auto=format\u0026n=BOwfuCXh9Zd24PEc\u0026q=85\u0026s=b7fa948d600e3558dc1307d622a4c7e2"},"favicon":"https://mintcdn.com/qobra/4g7tQyP7wYl6AlCt/favicon.svg?fit=max\u0026auto=format\u0026n=4g7tQyP7wYl6AlCt\u0026q=85\u0026s=8bd0cfde4ff59d84d6892e4bbdc66cf8","api":{"openapi":["api_reference/v1/openapi.json","api_reference/v2/openapi.json","mcp_documentation/openapi.json"]},"background":{"color":{"light":"#FFFFFF","dark":"#00161F"}},"navbar":{"links":[{"href":"https://app.qobra.co/auth","label":"Application"},{"href":"mailto:support@qobra.co","label":"Support"}],"primary":{"type":"button","label":"Book a demo!","href":"https://www.qobra.co/book-a-call"}},"footer":{"socials":{"github":"https://github.com/qobra-co","linkedin":"https://www.linkedin.com/company/qobra-co"}},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Help center","icon":"hands-holding-heart","href":"https://help.qobra.co/en/"},{"anchor":"Blog","icon":"newspaper","href":"https://www.qobra.co/blog"},{"anchor":"Security","icon":"shield-check","href":"https://trust.qobra.co/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"qobra","hasAudioNarration":false,"actualSubdomain":"qobra","customDomains":["docs.qobra.co"],"gitSource":{"type":"github","owner":"qobra-co","repo":"public-api-doc","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad9e0cb9679105657d4d9d3","collectionId":"fc39573c-79e9-49cf-bc77-a3fd4750aa8e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad9e0cb9679105657d4d9d3"},"feedback":{"thumbs":true,"issues":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ad9e0cb9679105657d4d9d3","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"MCP server","count":69},{"language":"default","tag":"Qobra MCP server","count":69},{"language":"default","tag":"Tools","count":67},{"language":"default","tag":"Documentation","count":37},{"language":"default","tag":"Public API Documentation","count":19},{"language":"default","tag":"Integrations","count":16},{"language":"default","tag":"Inbound data integrations","count":15},{"language":"default","tag":"Endpoints","count":10},{"language":"default","tag":"Data tables","count":8},{"language":"default","tag":"CRMs","count":7}]},"assistantConfig":{"enableStarterQuestions":false},"hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api_reference/v2/endpoints/discovery/list_data_structures","slug":"/api_reference/v2/endpoints/discovery/list_data_structures","pageMetadata":{"openapi":"get /v2/data-structures","title":"List Data Structures","description":"Retrieves all available data structures (statement reporting, record reporting and quotas) accessible through the API. Use this endpoint to discover what data you can extract.","href":"/api_reference/v2/endpoints/discovery/list_data_structures"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Retrieves all available data structures (statement reporting, record reporting and quotas) accessible through the API. Use this endpoint to discover what data you can extract.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Heading,Info,Note,Table,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`This endpoint returns all data structures (tables) available in your Qobra account. It’s the `,_jsx(_components.strong,{children:`entry point`}),` for the V2 API — use it to discover what data you can extract.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`This is always your first call.`}),` It tells you what data structures exist and where to find their schemas and records.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Only data structures from your company’s `,_jsx(_components.strong,{children:`live environment`}),` are returned.\nReporting tables and quotas that exist in a sandbox environment are not listed\nand their ids cannot be used with the other V2 endpoints. See the\n`,_jsx(_components.a,{href:`/api_reference/v2/introduction#live-environment-only`,children:`introduction`}),` for\ndetails.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`understanding-data-structure-types`,children:`Understanding data structure types`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`type`}),` field indicates what kind of data the structure contains:`]}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`statement_reporting`,id:`statement-reporting`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`What it is:`}),` A statement report summarizes commission data at statement level.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Typical use:`}),` payroll integration, high-level payout analysis per user, sales performance tracking`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Data endpoint:`}),` `,_jsx(_components.code,{children:`/v2/reporting/{id}/statements`})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Contains fields like:`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Statement user`}),`\n`,_jsx(_components.li,{children:`Statement date`}),`\n`,_jsx(_components.li,{children:`Payment`}),`\n`,_jsx(_components.li,{children:`Statement status (paid, pending, validated)`}),`\n`]})]}),_jsxs(Accordion,{title:`record_reporting`,id:`record-reporting`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`What it is:`}),` A record report summarizes commission data at transaction level (e.g. CRM opportunity level).`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Typical use:`}),` Commission analysis per opportunity, cost of sales and deal margin monitoring`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Data endpoint:`}),` `,_jsx(_components.code,{children:`/v2/reporting/{id}/records`})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Contains fields like:`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Deal/opportunity information`}),`\n`,_jsx(_components.li,{children:`Account details`}),`\n`,_jsx(_components.li,{children:`Close dates and amounts`}),`\n`,_jsx(_components.li,{children:`Commission amounts`}),`\n`]})]}),_jsxs(Accordion,{title:`quota`,id:`quota`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`What it is:`}),` The target assigned to each person, for each period.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Typical use:`}),` BI reporting on targets vs attainment, warehouse sync`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Data endpoint:`}),` `,_jsx(_components.code,{children:`/v2/quotas/{id}/values`})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Contains fields like:`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The person the target is set for`}),`\n`,_jsx(_components.li,{children:`The period it applies to`}),`\n`,_jsx(_components.li,{children:`The target value`}),`\n`,_jsx(_components.li,{children:`Whether it was set in Qobra or synchronized from an integration`}),`\n`]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`For a quota, `,_jsx(_components.code,{children:`total_records`}),` is the exact, live number of quota values it\nholds — one per person and per period. For a reporting table it is a\nperiodically refreshed count, and it can be `,_jsx(_components.code,{children:`null`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`active-and-archived-structures`,children:`Active and archived structures`}),`\n`,_jsxs(_components.p,{children:[`Every structure carries a `,_jsx(_components.code,{children:`status`}),`, either `,_jsx(_components.code,{children:`active`}),` or `,_jsx(_components.code,{children:`archived`}),`.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Archiving a quota does not hide it here.`}),` An archived quota stays listed,\nwith `,_jsx(_components.code,{children:`\"status\": \"archived\"`}),`, and its fields and values stay readable. Filter\non `,_jsx(_components.code,{children:`status`}),` yourself to leave archived quotas out of a sync.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Only a quota can be archived. Reporting tables are always `,_jsx(_components.code,{children:`active`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsxs(Heading,{level:`2`,id:`following-the-records-link`,children:[`Following the `,_jsx(_components.code,{children:`records`}),` link`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`links.records`}),` points at the data endpoint that matches the structure’s type:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`links.records`})})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`statement_reporting`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/v2/reporting/{id}/statements`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`record_reporting`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/v2/reporting/{id}/records`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`quota`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/v2/quotas/{id}/values`})})]})]})]}),`\n`,_jsx(_components.p,{children:`The URL is absolute and already carries the id. Follow it rather than mapping\ntypes to routes yourself.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"openapi":"get /v2/data-structures","title":"List Data Structures","description":"Retrieves all available data structures (statement reporting, record reporting and quotas) accessible through the API. Use this endpoint to discover what data you can extract.","href":"/api_reference/v2/endpoints/discovery/list_data_structures"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Understanding data structure types","slug":"understanding-data-structure-types","depth":2,"children":[]},{"title":"Active and archived structures","slug":"active-and-archived-structures","depth":2,"children":[]},{"title":"Following the records link","slug":"following-the-records-link","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["public_api","v2","discovery"],"summary":"List Data Structures","description":"Retrieves all available data structures (statement reporting, record reporting and quotas) accessible through the API. Use this endpoint to discover what data you can extract.","operationId":"GET_/v2/data-structures","security":["c1063981-d2b1-402a-98fb-44b74d98a88d"],"responses":{"200":"14f581ea-9bb3-4a62-b0b0-f6e8cc86f18d","401":"8febeceb-5930-45e5-966a-561fd09f54af","403":"543d3e2e-9d3e-4267-9058-d22e596c0cc8"},"method":"get","type":"path","servers":["8a4e6ae9-4990-42e4-b0f4-8e3dd0d26b04"],"path":"/v2/data-structures","baseUrlOptions":["https://api.qobra.co"],"title":"List Data Structures","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"responses":{"14f581ea-9bb3-4a62-b0b0-f6e8cc86f18d":{"description":"Returns a list of all available data structures (statement reporting and record reporting) accessible through the API.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"ObjectId","description":"Unique identifier of the data structure","isRequired":true,"uniqueKey":"data.items.[INDEX].id","typeLabel":"string\u003cObjectId>"},"name":{"type":"string","description":"Human-readable name of the data structure","isRequired":true,"uniqueKey":"data.items.[INDEX].name","typeLabel":"string"},"type":{"type":"string","enum":["statement_reporting","record_reporting","quota"],"description":"Type of data structure: statement_reporting (commission statements), record_reporting (CRM records with commission impact), or quota (per-user targets, one value per user and period)","isRequired":true,"uniqueKey":"data.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["active","archived"],"description":"Whether the data structure is still active. Only a quota can be archived; reporting tables are always active. An archived quota stays listed and remains readable.","isRequired":true,"uniqueKey":"data.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"total_records":{"oneOf":[{"type":"integer","description":"Total number of records in this structure. Counted live and exactly for a quota (its number of values); periodically refreshed, and null when unavailable, for a reporting table","isRequired":true,"uniqueKey":"data.items.[INDEX].total_records.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Total number of records in this structure. Counted live and exactly for a quota (its number of values); periodically refreshed, and null when unavailable, for a reporting table","isRequired":true,"uniqueKey":"data.items.[INDEX].total_records.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].total_records","typeLabel":"integer | null"},"links":{"type":"object","properties":{"fields":{"type":"string","description":"URL to fetch the fields schema for this data structure","isRequired":true,"uniqueKey":"data.items.[INDEX].links.fields","typeLabel":"string"},"records":{"oneOf":[{"type":"string","description":"URL to fetch the data of this data structure: its statements, its records, or the values of a quota. Null when the structure exposes no data endpoint","isRequired":true,"uniqueKey":"data.items.[INDEX].links.records.oneOf.0","typeLabel":"string"},{"type":"null","description":"URL to fetch the data of this data structure: its statements, its records, or the values of a quota. Null when the structure exposes no data endpoint","isRequired":true,"uniqueKey":"data.items.[INDEX].links.records.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].links.records","typeLabel":"string | null"}},"required":["fields","records"],"isRequired":true,"uniqueKey":"data.items.[INDEX].links","typeLabel":"object"}},"required":["id","name","type","status","total_records","links"],"uniqueKey":"data.items.[INDEX]","typeLabel":"object"},"description":"List of available data structures","isRequired":true,"uniqueKey":"data","typeLabel":"object[]"}},"required":["data"],"uniqueKey":"","typeLabel":"object"},"examples":{"data-structures-success":{"title":"data-structures-success","value":{"data":[{"id":"507f1f77bcf86cd799439011","name":"Commission Statements","type":"statement_reporting","status":"active","total_records":12450,"links":{"fields":"https://api.qobra.co/v2/data-structures/507f1f77bcf86cd799439011/fields","records":"https://api.qobra.co/v2/reporting/507f1f77bcf86cd799439011/statements"}},{"id":"507f1f77bcf86cd799439012","name":"Opportunities (Record Reporting)","type":"record_reporting","status":"active","total_records":45230,"links":{"fields":"https://api.qobra.co/v2/data-structures/507f1f77bcf86cd799439012/fields","records":"https://api.qobra.co/v2/reporting/507f1f77bcf86cd799439012/records"}},{"id":"507f1f77bcf86cd799439013","name":"Quota ARR 2026","type":"quota","status":"active","total_records":4800,"links":{"fields":"https://api.qobra.co/v2/data-structures/507f1f77bcf86cd799439013/fields","records":"https://api.qobra.co/v2/quotas/507f1f77bcf86cd799439013/values"}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"8febeceb-5930-45e5-966a-561fd09f54af":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"type":{"type":"string","enum":["UnauthorizedError"],"description":"Type of the error","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"}},"required":["message","type"],"uniqueKey":"","typeLabel":"object"},"examples":{"unauthorized-error":{"title":"unauthorized-error","value":{"message":"You're trying to access resource you're not authorized to.","type":"UnauthorizedError"}}},"exampleType":"examples"}},"exampleType":"examples"},"543d3e2e-9d3e-4267-9058-d22e596c0cc8":{"description":"Forbidden - the public API is not enabled for your company","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"type":{"type":"string","enum":["ForbiddenError"],"description":"Type of the error","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Machine-readable error code","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"required":["message","type","error"],"uniqueKey":"","typeLabel":"object"},"examples":{"forbidden-error":{"title":"forbidden-error","value":{"message":"You don't have permission to access this resource.","type":"ForbiddenError","error":"ForbiddenError"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"c1063981-d2b1-402a-98fb-44b74d98a88d":{"api_key":{"type":"apiKey","name":"X-API-Key","in":"header","description":"Your Qobra API key. Generate it from Settings > API Keys in Qobra.","scopes":[]}}},"servers":{"8a4e6ae9-4990-42e4-b0f4-8e3dd0d26b04":{"url":"https://api.qobra.co","description":"Production API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","name":"X-API-Key","in":"header","description":"Your Qobra API key. Generate it from Settings > API Keys in Qobra.","scopes":[]},"schema":{"title":"X-API-Key","type":"string","description":"Your Qobra API key. Generate it from Settings > API Keys in Qobra.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"api_key","name":"X-API-Key"}],"title":"api_key"}]},"originalFileLocation":"api_reference/v2/openapi.json"},"subdomain":"qobra","siteName":"Qobra public API documentation","title":"List Data Structures - Qobra public API documentation","navMaps":{"firstHrefInVersion":{"v1":{"href":"/api_reference/v1/introduction","matchLevel":2},"v2":{"href":"/api_reference/v2/endpoints/discovery/list_data_structures","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-09-30T08:05:24.943Z","originalFileLocation":"api_reference/v2/endpoints/discovery/list_data_structures.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=\"Retrieves all available data structures (statement reporting, record reporting and quotas) accessible through the API. Use this endpoint to discover what data you can extract.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Qobra public API documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qobra/LfZGqJYgKlEETanR/_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/qobra/LfZGqJYgKlEETanR/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qobra/LfZGqJYgKlEETanR/_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/qobra/LfZGqJYgKlEETanR/_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/qobra/LfZGqJYgKlEETanR/_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/qobra/LfZGqJYgKlEETanR/_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/qobra/LfZGqJYgKlEETanR/_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/qobra/LfZGqJYgKlEETanR/_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/qobra/LfZGqJYgKlEETanR/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"List Data Structures - Qobra public API documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Retrieves all available data structures (statement reporting, record reporting and quotas) accessible through the API. Use this endpoint to discover what data you can extract.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Qobra public API documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.qobra.co/api_reference/v2/endpoints/discovery/list_data_structures\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://qobra.mintlify.app/_mintlify/api/og/v2?division=Discovery\u0026amp;title=List+Data+Structures\u0026amp;description=Retrieves+all+available+data+structures+%28statement+reporting%2C+record+reporting+and+quotas%29+accessible+through+the+API.+Use+this+endpoint+to+discover+what+data+y\u0026amp;theme=3f6043674a55ff34ed6fbc78\u0026amp;signature=c882cafbfbf97dfdd23465f4045747bba056ebbcc20c96c0384218b0911a7713\">\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 Data Structures - Qobra public API documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Retrieves all available data structures (statement reporting, record reporting and quotas) accessible through the API. Use this endpoint to discover what data you can extract.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://qobra.mintlify.app/_mintlify/api/og/v2?division=Discovery\u0026amp;title=List+Data+Structures\u0026amp;description=Retrieves+all+available+data+structures+%28statement+reporting%2C+record+reporting+and+quotas%29+accessible+through+the+API.+Use+this+endpoint+to+discover+what+data+y\u0026amp;theme=3f6043674a55ff34ed6fbc78\u0026amp;signature=c882cafbfbf97dfdd23465f4045747bba056ebbcc20c96c0384218b0911a7713\">\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/qobra/LfZGqJYgKlEETanR/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Qobra public API documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#460629\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.qobra.co/api_reference/v2/endpoints/discovery/list_data_structures\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api_reference/v2/endpoints/discovery/list_data_structures.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.qobra.co/#organization\",\"name\":\"Qobra public API documentation\",\"url\":\"https://docs.qobra.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/qobra/BOwfuCXh9Zd24PEc/logo/dark.svg?fit=max\u0026auto=format\u0026n=BOwfuCXh9Zd24PEc\u0026q=85\u0026s=89cd1b29990b669fb3daa20d2e46c52f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.qobra.co#website\",\"name\":\"Qobra public API documentation\",\"url\":\"https://docs.qobra.co\",\"publisher\":{\"@id\":\"https://docs.qobra.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.qobra.co/api_reference/v2/endpoints/discovery/list_data_structures#webpage\",\"url\":\"https://docs.qobra.co/api_reference/v2/endpoints/discovery/list_data_structures\",\"name\":\"List Data Structures\",\"description\":\"Retrieves all available data structures (statement reporting, record reporting and quotas) accessible through the API. Use this endpoint to discover what data you can extract.\",\"dateModified\":\"2026-09-30T08:05:24.943Z\",\"isPartOf\":{\"@id\":\"https://docs.qobra.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.qobra.co/api_reference/v2/endpoints/discovery/list_data_structures#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.qobra.co/api_reference/v2/endpoints/discovery/list_data_structures#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Public API Documentation\",\"item\":\"https://docs.qobra.co/api_reference/v2/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"List Data Structures\",\"item\":\"https://docs.qobra.co/api_reference/v2/endpoints/discovery/list_data_structures\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.qobra.co/api_reference/v2/endpoints/discovery/list_data_structures#apireference\",\"headline\":\"List Data Structures\",\"name\":\"List Data Structures\",\"description\":\"Retrieves all available data structures (statement reporting, record reporting and quotas) accessible through the API. Use this endpoint to discover what data you can extract.\",\"url\":\"https://docs.qobra.co/api_reference/v2/endpoints/discovery/list_data_structures\",\"mainEntityOfPage\":{\"@id\":\"https://docs.qobra.co/api_reference/v2/endpoints/discovery/list_data_structures#webpage\"},\"dateModified\":\"2026-09-30T08:05:24.943Z\",\"publisher\":{\"@id\":\"https://docs.qobra.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.qobra.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Qobra public API documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Qobra public API documentation","nav":{"global":{"anchors":[{"anchor":"Help center","icon":"hands-holding-heart","href":"https://help.qobra.co/en/"},{"anchor":"Blog","icon":"newspaper","href":"https://www.qobra.co/blog"},{"anchor":"Security","icon":"shield-check","href":"https://trust.qobra.co/"}]},"versions":[{"version":"v1","pages":[{"title":"v1","href":"/api_reference/v1/introduction"}]},{"version":"v2","anchors":[{"anchor":"Documentation","icon":"book-open","groups":[{"group":"Inbound data integrations","pages":[{"title":"Introduction","href":"/integration_documentation/introductions/inbound_integration"},{"group":"Integrations","pages":[{"group":"CRMs","pages":[{"title":null,"href":"/integration_documentation/crms/salesforce"},{"title":null,"href":"/integration_documentation/crms/hubspot"},{"title":null,"href":"/integration_documentation/crms/pipedrive"},{"title":"Microsoft Dynamics","href":"/integration_documentation/crms/microsoft_dynamics"},{"title":null,"href":"/integration_documentation/crms/zoho"},{"title":null,"href":"/integration_documentation/crms/odoo"},{"title":null,"href":"/integration_documentation/crms/attio"}]},{"group":"Databases","pages":[{"title":"snowflake","href":"/integration_documentation/databases/snowflake"},{"title":null,"href":"/integration_documentation/databases/bigquery"},{"title":"PostgreSQL","href":"/integration_documentation/databases/postgresql"}]},{"group":"ERP","pages":[{"title":"NetSuite","href":"/integration_documentation/erp/netsuite"}]},{"group":"Files","pages":[{"title":null,"href":"/integration_documentation/files/s3"},{"title":"SFTP","href":"/integration_documentation/files/sftp"}]},{"group":"HRIS","pages":[{"title":"HRIS Connector","href":"/integration_documentation/hris/hris_connector"}]}]}]},{"group":"Outbound data integrations","pages":[{"title":"Introduction","href":"/integration_documentation/introductions/outbound_integration"},{"group":"Integrations","pages":[{"title":null,"href":"/integration_documentation/webhook/webhook"}]}]},{"group":"Public API Documentation","pages":[{"title":"Introduction","href":"/api_reference/v2/introduction"},{"group":"Getting Started","pages":[{"title":"Quickstart Guide","href":"/api_reference/v2/quickstart"},{"title":"Migration guide v1 → v2","description":"What moves to v2, what stays on v1, and how to migrate your reporting integration","href":"/api_reference/v2/migration_guide"}]},{"group":"API Reference","pages":[{"group":"Discovery","pages":[{"openapi":"get /v2/data-structures","title":"List Data Structures","href":"/api_reference/v2/endpoints/discovery/list_data_structures"},{"openapi":"get /v2/data-structures/{table_id}/fields","title":"Get Fields Schema","description":"Retrieves the complete schema (field names, types, formats) for a specific data structure. Essential for understanding what fields are available before extracting data. Accepts the id of a reporting table or of a quota.","href":"/api_reference/v2/endpoints/discovery/get_fields_schema"}]},{"group":"Reporting","pages":[{"openapi":"get /v2/reporting/{table_id}/statements","title":"Fetch Statements Reporting","href":"/api_reference/v2/endpoints/data/fetch_statements"},{"openapi":"get /v2/reporting/{table_id}/records","title":"Fetch Records Reporting","href":"/api_reference/v2/endpoints/data/fetch_records"}]},{"group":"Quotas","pages":[{"openapi":"get /v2/quotas/{quota_id}/values","title":"Fetch Quota Values","href":"/api_reference/v2/endpoints/data/fetch_quota_values"}]}]}]},{"group":"Authentication","pages":[{"title":"SSO","href":"/authentication_documentation/sso/sso_documentation"}]}]},{"anchor":"MCP server","icon":"plug","pages":[{"title":"MCP server","href":"/mcp_documentation/introduction"}]}]}]},"title":"List Data Structures - Qobra public API documentation","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Bbp7I60D.js","utils-C3RIvJha.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DqD-vLt8.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B31Loprg.js","snippetPresets-DKpk-b8t.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Cj65AhOR.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BXtn5gcC.js","shallow-RY2b03Cp.js","getApiPlaygroundDisplay-B0jeiPk3.js","CodeSnippet-CYgBjjwn.js","CodeSnippets-DOngDrYB.js","Page-n7I5XbKb.js","getPastedJson-DRQbJx-T.js","icon-CQiQCicY.js","MethodPill-BKTLdNtu.js","DuplicateIcon-B9jpAdat.js","createIcon-DCddRrXv.js","DynamicMarkdown-a8hUKrw6.js","SectionHeading-eECVV2eH.js","axios-vUo_bRtp.js","Markdown--GF7ZIpf.js","clsx-DZLdJUrt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-2LoAhjKH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Zwc0ZncM.js"]}