Qlik Reports API
Generate downloadable report assets from data with configurable templates and output formats.
Generate downloadable report assets from data with configurable templates and output formats.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/reports-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
{
"info": {
"title": "reports",
"version": ""
},
"paths": {
"/api/v1/reports": {
"post": {
"tags": [
"reports"
],
"summary": "Queue a new report request generation.",
"responses": {
"202": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PostReportsResponse"
}
}
},
"headers": {
"Location": {
"schema": {
"type": "string",
"format": "uri",
"example": "https://qlikcloud.com:443/api/v1/reports/0c5c08d3-c211-415a-8f47-1f3e2d2c4476/status"
},
"description": "The uri to get the processing status of the requested report."
}
},
"description": "Report request accepted."
},
"400": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-400000",
"title": "bad or malformed http request",
"detail": "invalid outputType"
}
]
}
}
},
"description": "Bad request, malformed syntax, errors in params or the report request is not valid."
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-401000",
"title": "forbidden",
"detail": ""
}
]
}
}
},
"description": "Unauthorized, JWT invalid or not provided."
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-403000",
"title": "forbidden",
"detail": ""
}
]
}
}
},
"description": "Forbidden, the user does not have access rights."
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-404000",
"title": "Not found",
"detail": ""
}
]
}
}
},
"description": "Not found."
},
"409": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-409000",
"title": "Conflict",
"detail": ""
}
]
}
}
},
"description": "Conflicted request. Report aborted."
},
"429": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "HTTP-429",
"title": "Too Many Requests",
"detail": "The user has sent too frequent requests which resulted in an undesired response code (\"error rate limiting\")"
}
]
}
}
},
"description": "Too many request. Indicates the user has sent too many requests in a given amount of time, aka \"rate limiting\"."
},
"500": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-500000",
"title": "Internal server error",
"detail": ""
}
]
}
}
},
"description": "Internal server error."
}
},
"operationId": "postReports",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReportRequest"
}
}
},
"required": true,
"description": "Definition of the report request.\nPlease note that sense-powerpoint-template-1.0, sense-word-template-1.0, sense-story-x.0 and qv-data-x.0 types are only for internal use.\n\nEach report request type requires a specific template to be provided:\n - composition-1.0 requires compositionTemplates to be set\n - sense-excel-template-1.0 requires senseExcelTemplate to be set\n - sense-image-1.0 requires senseImageTemplate to be set\n - sense-sheet-1.0 requires senseSheetTemplate to be set\n - sense-data-1.0 requires senseDataTemplate to be set\n - sense-pixel-perfect-template-1.0 requires sensePixelPerfectTemplate to be set\n - sense-html-template-1.0 requires senseHtmlTemplate to be set\n - sense-powerpoint-template-1.0 requires sensePowerPointTemplate to be set\n - sense-word-template-1.0 requires senseWordTemplate to be set\n\nEach template type supports specific output types:\n - composition-1.0 supports only pdfcomposition and pptxcomposition output types\n - sense-excel-template-1.0 supports excel and pdf output type\n - sense-image-1.0 supports pdf, pptx and image output types\n - sense-sheet-1.0 supports pdf and pptx output type\n - sense-data-1.0 supports xlsx output type\n - sense-pixel-perfect-template-1.0 supports pdf output types\n - sense-html-template-1.0 supports html output types\n - sense-powerpoint-template-1.0 supports powerpoint and pdf output types\n - sense-word-template-1.0 supports word and pdf output types\n\nEach output type requires a specific output to be provided:\n - pdfcomposition requires pdfCompositionOutput to be set\n - pptxcomposition requires pptxCompositionOutput to be set\n - pdf requires pdfOutput to be set\n - pptx requires pptxOutput to be set\n - image requires imageOutput to be set\n - xlsx requires xlsxOutput to be set\n"
},
"x-qlik-visibility": "public",
"x-qlik-stability": "stable",
"x-qlik-deprecated": false,
"x-qlik-tier": {
"tier": "special",
"limit": 10
}
}
},
"/api/v1/reports/{id}/outputs": {
"get": {
"tags": [
"outputs"
],
"summary": "Get report request outputs.",
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OutputList"
}
}
},
"description": "The outputs have been successfully returned."
},
"400": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-400000",
"title": "Bad or malformed request",
"detail": ""
}
]
}
}
},
"description": "Bad request. Malformed syntax, errors in params."
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-401000",
"title": "Forbidden",
"detail": ""
}
]
}
}
},
"description": "Unauthorized, JWT invalid or not provided."
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-403000",
"title": "Forbidden",
"detail": ""
}
]
}
}
},
"description": "Forbidden, user did not authenticate."
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-404000",
"title": "url path not found",
"detail": ""
}
]
}
}
},
"description": "Not found."
},
"409": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-409000",
"title": "Conflict",
"detail": ""
}
]
}
}
},
"description": "Conflicted request. Report aborted."
},
"429": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "HTTP-429",
"title": "Too Many Requests",
"detail": "The user has sent too frequent requests which resulted in an undesired response code (\"error rate limiting\")"
}
]
}
}
},
"description": "Too many request. Indicates the user has sent too many requests in a given amount of time, aka \"rate limiting\"."
},
"500": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-500000",
"title": "Internal server error",
"detail": ""
}
]
}
}
},
"description": "Internal server error."
}
},
"parameters": [
{
"in": "path",
"name": "id",
"schema": {
"type": "string",
"example": "01562a37-23e3-4b43-865d-84c26122276c"
},
"required": true,
"description": "Identifier of the request."
},
{
"in": "query",
"name": "filter",
"schema": {
"type": "string"
},
"required": false,
"description": "The advanced filtering to use for the query. Refer to [RFC 7644](https://datatracker.ietf.org/doc/rfc7644/) for the syntax. Cannot be combined with any of the fields marked as deprecated. All conditional statements within this query parameter are case insensitive.\nThe following fields support the `eq` (equals) operator: `outputId`\nExample:\noutputId eq \"123\" or outputId eq \"321\"\n"
},
{
"in": "query",
"name": "limit",
"schema": {
"type": "integer",
"default": 20,
"example": 20,
"maximum": 100,
"minimum": 1
},
"required": false,
"description": "Limit the returned result set"
},
{
"in": "query",
"name": "page",
"schema": {
"type": "string",
"example": "NzlmNzI5NWMtZGJlZC00Y2Y4LThkNDAtMzQ5ZDU3YzNjMzQ1",
"nullable": true
},
"example": "NzlmNzI5NWMtZGJlZC00Y2Y4LThkNDAtMzQ5ZDU3YzNjMzQ1",
"description": "If present, the cursor that starts the page of data that is returned."
},
{
"in": "query",
"name": "sort",
"schema": {
"type": "array",
"items": {
"enum": [
"+outputId",
"-outputId",
"+sizeBytes",
"-sizeBytes"
],
"type": "string"
}
},
"required": false,
"description": "Sorting parameters"
}
],
"description": "Get the list of the outputs produced so far for the given report request. The outputs are generated asynchronously \nand are complete only when the status of the report request is 'done' or 'failed' or 'aborted'.\n",
"operationId": "getOutputs",
"x-qlik-visibility": "public",
"x-qlik-stability": "stable",
"x-qlik-deprecated": false,
"x-qlik-tier": {
"tier": "1",
"limit": 1000
}
}
},
"/api/v1/reports/{id}/status": {
"get": {
"tags": [
"status"
],
"summary": "Get report request processing status.",
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReportStatus"
}
}
},
"description": "Returns the request processing status."
},
"400": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-400000",
"title": "Bad or malformed request",
"detail": ""
}
]
}
}
},
"description": "Bad request. Malformed syntax, errors in params."
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-401000",
"title": "Forbidden",
"detail": ""
}
]
}
}
},
"description": "Unauthorized, JWT invalid or not provided."
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-403000",
"title": "Forbidden",
"detail": ""
}
]
}
}
},
"description": "Forbidden, user did not authenticate."
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-404000",
"title": "url path not found",
"detail": ""
}
]
}
}
},
"description": "Not found."
},
"409": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-409000",
"title": "Conflict",
"detail": ""
}
]
}
}
},
"description": "Conflicted request. Report aborted."
},
"429": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "HTTP-429",
"title": "Too Many Requests",
"detail": "The user has sent too frequent requests which resulted in an undesired response code (\"error rate limiting\")"
}
]
}
}
},
"description": "Too many request. Indicates the user has sent too many requests in a given amount of time, aka \"rate limiting\"."
},
"500": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
},
"example": {
"errors": [
{
"code": "REP-500000",
"title": "Internal server error",
"detail": ""
}
]
}
}
},
"description": "Internal server error."
}
},
"parameters": [
{
"in": "path",
"name": "id",
"schema": {
"type": "string",
"example": "01562a37-23e3-4b43-865d-84c26122276c"
},
"required": true,
"description": "Identifier of the request."
}
],
"operationId": "getStatus",
"x-qlik-visibility": "public",
"x-qlik-stability": "stable",
"x-qlik-deprecated": false,
"x-qlik-tier": {
"tier": "1",
"limit": 1000
}
}
}
},
"openapi": "3.0.0",
"components": {
"schemas": {
"AppError": {
"properties": {
"appId": {
"type": "string",
"example": "11ecf638-0be4-4b94-a9e6-91218f34e175",
"description": "app id"
},
"method": {
"type": "string",
"example": "GetObject",
"description": "The method that is failing."
},
"parameters": {
"type": "object",
"description": "Parameters of method that fails.",
"additionalProperties": {
"type": "string"
}
}
},
"description": "Error in resource handling"
},
"AppErrors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AppError"
},
"description": "Errors occurring when dealing with the app."
},
"CallBackAction": {
"properties": {
"httpRequest": {
"$ref": "#/components/schemas/HttpRequest"
}
},
"description": "The callback to be performed once the report is done."
},
"ChainableSelection": {
"required": [
"selectionType"
],
"properties": {
"selectionType": {
"$ref": "#/components/schemas/ChainableSelectionType"
},
"selectionFilter": {
"$ref": "#/components/schemas/SelectionFilter"
},
"persistentBookmark": {
"$ref": "#/components/schemas/SensePersistentBookmark"
},
"temporaryBookmarkV2": {
"$ref": "#/components/schemas/SenseTemporaryBookmarkV2"
}
}
},
"ChainableSelectionType": {
"enum": [
"selectionFilter",
"persistentBookmark",
"temporaryBookmarkV2"
],
"type": "string",
"default": "selectionFilter"
},
"ComposableTemplate": {
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"sense-image-1.0",
"sense-sheet-1.0"
],
"type": "string",
"description": "Template type and version using semantic versioning. It must have the following name convention, dashed-separated-template-name-MAJOR.MINOR"
},
"senseImageTemplate": {
"$ref": "#/components/schemas/SenseImageTemplate"
},
"senseSheetTemplate": {
"$ref": "#/components/schemas/SenseSheetTemplate"
}
}
},
"CycleOutput": {
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"excel",
"pdf",
"html",
"powerpoint",
"word"
],
"type": "string"
},
"pdfOutput": {
"$ref": "#/components/schemas/PdfOutput"
},
"excelOutput": {
"$ref": "#/components/schemas/ExcelOutput"
},
"namingPattern": {
"enum": [
"fieldValueWithUnderscore"
],
"type": "string",
"default": "fieldValueWithUnderscore",
"description": "not needed at initial phase"
}
}
},
"Definitions": {
"properties": {
"selectionsByState": {
"type": "object",
"description": "It maps an ID to a selectionsByState object.",
"additionalProperties": {
"type": "object",
"description": "A selectionsByState definition that can be shared between templates in a composition.",
"additionalProperties": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QSelection"
}
}
}
}
},
"description": "Definitions of common properties that are shared between templates, e.g. selectionsByState can be the same for all templates within a composition of templates."
},
"DocProperties": {
"properties": {
"title": {
"type": "string",
"maxLength": 10000
},
"author": {
"type": "string",
"maxLength": 10000
},
"subject": {
"type": "string",
"maxLength": 10000
}
},
"description": "Properties of the document. In case of multiple composition, only properties specified in the composition output are taken and the ones specified in each output item are ignored."
},
"Error": {
"type": "object",
"properties": {
"errors": {
"$ref": "#/components/schemas/ExportErrors"
}
}
},
"ExcelOutput": {
"properties": {
"outFormat": {
"enum": [
"xlsx"
],
"type": "string",
"default": "xlsx",
"description": "The output format of the report to be produced."
}
},
"description": "Output to be used to export an excel template."
},
"ExportDataOptions": {
"type": "object",
"properties": {
"showTitles": {
"type": "boolean",
"description": "Show Visualization Title, SubTitle, Footnote in the artifact produced"
},
"showTotals": {
"type": "boolean",
"description": "Show Visualization Totals in the artifact produced"
},
"showSelections": {
"type": "boolean",
"description": "Show the Selections Applied to the Visualization in the artifact produced"
}
}
},
"ExportError": {
"type": "object",
"required": [
"code",
"title"
],
"properties": {
"code": {
"type": "string",
"description": "The unique code for the error\n\n- \"REP-400000\" Bad request. The server could not understand the request due to invalid syntax.\n- \"REP-400008\" Selections error.\n- \"REP-400009\" Maximum 16384 columns limit exceeded. Download data in a visualization can't generate an .xlsx file due to limitations to the number of columns you can download.\n- \"REP-400010\" Maximum 1048566 rows limit exceeded. Download data in a visualization can't generate an .xlsx file due to limitations to the number of rows you can download.\n- \"REP-400011\" The size of the downloaded Excel file exceed 100 MB limit. Download data in a visualization can't generate an .xlsx file due to limitations to the amount of data you can download.\n- \"REP-400015\" Bad request in enigma request. The patch value has invalid JSON format.\n- \"REP-400017\" Static App size exceeded.\n- \"REP-400018\" Excel string length exceeded.\n- \"REP-400020\" Invalid Issuer.\n- \"REP-400024\" Cannot extract claims from JWT.\n- \"REP-400028\" Invalid Tags.\n- \"REP-400029\" Reload Entitlement Limit Reached.\n- \"REP-400035\" Multiple selections detected in a field having OneAndOnlyone attribute.\n- \"REP-400036\" No selection detected in a field having OneAndOnlyone attribute.\n- \"REP-400037\" Max number of images exceeded in a report.\n- \"REP-400038\" Max number of nested levels exceeded in report.\n- \"REP-400039\" Max number of objects exceeded in a report.\n- \"REP-400040\" Max number of templates exceeded in a report.\n- \"REP-400041\" Unsupported dimension type for level tag.\n- \"REP-400050\" Error retrieving outputs.\n- \"REP-400052\" Report Request Aborted from internal error.\n- \"REP-400054\" The number of generated cycle reports exceeds the maximum allowed.\n- \"REP-400055\" Export options not allowed for this object.\n- \"REP-400057\" The sense object has an empty GenericType.\n- \"REP-400102\" Image rendering invalid strategy error on Sense client.\n- \"REP-400240\" Engine Client Global generic closure error\n- \"REP-400260\" Engine Client generic closure error.\n- \"REP-400280\" Engine Client proxy generic closure error.\n- \"REP-401000\" Unauthorized. The client must authenticate itself to get the requested response.\n- \"REP-401001\" Unauthorized, bad JWT.\n- \"REP-403000\" Forbidden. The client does not have access rights to the content.\n- \"REP-403001\" App forbidden, the user does not have read permission on the app.\n- \"REP-403002\" Chart type not supported.\n- \"REP-403019\" Export is not available for app with enabled directQuery feature.\n- \"REP-403025\" No entitlement to perform the operation.\n- \"REP-403026\" No entitlement to perform the operation. Export capability is off.\n- \"REP-403027\" Object without Hypercube or unsupported object type.\n- \"REP-403048\" Forbidden. User does not have permission to export the report (access control usePermission)\n- \"REP-404000\" Not found. The server can not find the requested resource.\n- \"REP-404001\" App not found, the app does not exist or it has been deleted.\n- \"REP-404002\" Chart not found, the chart does not exist or it has been deleted.\n- \"REP-404003\" Sheet not found, the sheet does not exist or it has been deleted or it is unavailable.\n- \"REP-404004\" Story not found, the story does not exist or it has been deleted or it is unavailable.\n- \"REP-409001\" App conflict.\n- \"REP-409021\" Reload timestamp constraint not met.\n- \"REP-409046\" Report aborted due to app reload.\n- \"REP-422030\" Apply variables error.\n- \"REP-422051\" There is no report to produce due to empty dataset or missing fields (the measure/dimension was removed or omitted in Section Access)\n- \"REP-429000\" Too many request. The user has sent too many requests in a given amount of time (\"rate limiting\").\n- \"REP-429012\" Exceeded max session tenant quota. A tenant has opened too many different sessions at the same time.\n- \"REP-429014\" The export could not be completed within the requested deadline.\n- \"REP-429016\" Exceeded max session tenant quota per day.\n- \"REP-429022\" Enigma generic abort.\n- \"REP-400064\" Missing Bookmark \n- \"REP-500000\" Fail to resolve resource.\n- \"REP-500006\" Fail to get report session parameters.\n- \"REP-500014\" The app did not open within 10 minutes.\n- \"REP-500023\" Validate Report Request Tags failure.\n- \"REP-500045\" Failure setting Bookmark timestamp.\n- \"REP-500047\" Error setting GroupState.\n- \"REP-500053\" Unexpected number of generated cycle reports.\n- \"REP-500059\" The App is corrupt.\n- \"REP-500061\" Engine Memory limit reached.\n- \"REP-500062\" Too many resolution attempts for a task.\n- \"REP-500063\" Engine terminated\n- \"REP-500100\" Image rendering generic error on Sense client.\n- \"REP-500101\" Image rendering could not set cookies error on Sense client.\n- \"REP-500103\" Image rendering JS timeout error on Sense client.\n- \"REP-500104\" Image rendering load URL timeout error on Sense client.\n- \"REP-500105\" Image rendering max paint attempts exceeded error on Sense client.\n- \"REP-500106\" Image rendering max JS attempts exceeded error on Sense client.\n- \"REP-500107\" Image rendering render timeout error on Sense client.\n- \"REP-500108\" Image rendering JS failure due to timeout error on Sense client.\n- \"REP-500109\" Image rendering generic JS failure error on Sense client.\n- \"REP-500200\" Report Generator error.\n- \"REP-500240\" Engine Global generic closure error.\n- \"REP-500260\" Engine Websocket generic closure error.\n- \"REP-500280\" Engine proxy generic closure error.\n- \"REP-503001\" Rest Engine Error.\n- \"REP-503005\" Engine unavailable, qix-sessions error no engines available.\n- \"REP-503013\" Session unavailable. The engine session used to create the report is unavailable.\n- \"REP-503060\" Engine Service unavailable.\n"
},
"meta": {
"$ref": "#/components/schemas/MetaExportError"
},
"title": {
"type": "string",
"description": "A summary in english explaining what went wrong."
},
"detail": {
"type": "string",
"description": "Optional. MAY be used to provide more concrete details."
}
},
"description": "Error occured during report generation."
},
"ExportErrors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ExportError"
},
"description": "Errors occured during report generation."
},
"Float64": {
"type": "number",
"format": "float64",
"x-go-type": {
"type": "Float64",
"import": {
"alias": "cModels",
"package": "github.com/qlik-trial/repo
# --- truncated at 32 KB (76 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/qliksense/refs/heads/main/openapi/qliksense-reports.json