---
id: export-open-id-conformance-report
title: "Export conformance test log"
description: "Downloads the log of one test of the OpenID Foundation conformance suite as a ZIP file, with the API token that you stored with [Set conformance suite token](/docs/extensions-api/update-open-id-conformance-report-token). The file name is `conformance-<testId>.zip`. The API passes the answer of the suite on as it is, with the status of the suite."
sidebar_label: "Export conformance test log"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "get api-method"
info_path: docs/extensions-api/igrant-io-api-documentation
custom_edit_url: null
---

> **Build this with an AI coding agent.** Install the iGrant.io Agent Skills, then ask your agent to build the integration:
>
> ```bash
> npx skills add L3-iGrant/skills
> ```


import ApiTabs from "@theme/ApiTabs";
import DiscriminatorTabs from "@theme/DiscriminatorTabs";
import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
import SecuritySchemes from "@theme/ApiExplorer/SecuritySchemes";
import MimeTabs from "@theme/MimeTabs";
import ParamsItem from "@theme/ParamsItem";
import ResponseSamples from "@theme/ResponseSamples";
import SchemaItem from "@theme/SchemaItem";
import SchemaTabs from "@theme/SchemaTabs";
import Markdown from "@theme/Markdown";
import OperationTabs from "@theme/OperationTabs";
import TabItem from "@theme/TabItem";

<h1 className={"openapi__heading"}>Export conformance test log</h1>

<MethodEndpoint method={"get"} path={"/v4/config/platform/extension/openid-conformance/report/export/{testId}"}></MethodEndpoint>



Downloads the log of one test of the OpenID Foundation conformance suite as a ZIP file, with the API token that you stored with [Set conformance suite token](/docs/extensions-api/update-open-id-conformance-report-token). The file name is `conformance-<testId>.zip`. The API passes the answer of the suite on as it is, with the status of the suite.

The answer is `400` when no token is stored.


## Request

<details style={{"marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collapsed={false} open={true}><summary style={{}}><h3 className={"openapi-markdown__details-summary-header-params"}>Path Parameters</h3></summary><div><ul><ParamsItem className={"paramsItem"} param={{"name":"testId","in":"path","required":true,"description":"The ID of the test in the suite (an entry of `modules[].instances` of the test plan).","schema":{"type":"string","example":"kLm9NoPq1RsTu"}}}></ParamsItem></ul></div></details><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The log of the test.

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}><li className={"schemaItem"}><summary style={{}}><strong>Content-Disposition</strong><span style={{"opacity":"0.6"}}> string</span></summary><div><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

The file name of the ZIP file.

</div></div></li></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/zip"} value={"application/zip"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem","marginLeft":"1rem"}}>

string

</div></ul></details></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"400"} value={"400"}><div>

No token is stored (`Configure your OpenID conformance suite API token first`), or the organisation or its wallet is not found. An error of the suite keeps the status and the body of the suite.

</div><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

The API key is missing or not valid.

</div><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"404"} value={"404"}><div>

The extension was never turned on (`Extension 'openidConformance' is not enabled for organisation '<organisationId>'`).

</div><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"500"} value={"500"}><div>

Internal server error.

</div><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"502"} value={"502"}><div>

The conformance suite cannot be reached (`Failed to reach OpenID conformance suite`).

</div><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      