---
id: config-create-sse-ticket
title: "Create SSE ticket"
description: "Exchanges the `Authorization` header of the caller for a one-time ticket for one Server-Sent Events (SSE) operation. The browser `EventSource` API cannot set request headers, so the client puts only the ticket in the SSE URL, in the `ticket` query parameter. The access token or API key then does not appear in a URL or in an access log."
sidebar_label: "Create SSE ticket"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "post api-method"
info_path: docs/openid4vc-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"}>Create SSE ticket</h1>

<MethodEndpoint method={"post"} path={"/v2/config/sse-ticket"}></MethodEndpoint>



Exchanges the `Authorization` header of the caller for a one-time ticket for one Server-Sent Events (SSE) operation. The browser `EventSource` API cannot set request headers, so the client puts only the ticket in the SSE URL, in the `ticket` query parameter. The access token or API key then does not appear in a URL or in an access log.

### SSE operations that accept a ticket

Give one of these paths in `path`:
- `/v2/config/digital-wallet/openid/notifications/sse` - stream notifications - `/v3/config/digital-wallet/openid/notifications/presentation-status/sse` - stream verification status

### Rules

- The caller must be allowed to open the SSE operation of `path`. A ticket never gives more
  access than a request to that operation with the same `Authorization` header.
- The ticket is valid for `expiresIn` seconds (30) and for one request to `path` only. An
  unknown, used or expired ticket, or a ticket for another path, gives 401 on the SSE operation.
- The SSE request with the ticket runs as the caller of this operation: the `Authorization`
  header of this request applies, not the headers of the SSE request.
- Get a new ticket for each connection, also when the client reconnects.

## Request

<MimeTabs className={"openapi-tabs__mime"}><TabItem label={"application/json"} value={"application/json-schema"}><details style={{}} className={"openapi-markdown__details mime"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-mime"}><h3 className={"openapi-markdown__details-summary-header-body"}>Body</h3><strong className={"openapi-schema__required"}>required</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"path"} required={true} schemaName={"string"} qualifierMessage={"**Possible values:** [`/v2/config/digital-wallet/openid/notifications/sse`, `/v3/config/digital-wallet/openid/notifications/presentation-status/sse`]"} schema={{"type":"string","description":"Path (with the version prefix) of the SSE operation that the ticket is for.","enum":["/v2/config/digital-wallet/openid/notifications/sse","/v3/config/digital-wallet/openid/notifications/presentation-status/sse"],"example":"/v2/config/digital-wallet/openid/notifications/sse"}}></SchemaItem></ul></details></TabItem></MimeTabs><div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"201"} value={"201"}><div>

Created. The ticket is valid for one request to the SSE operation of `path`.

</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"}}></ul></details><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={"ticket"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"One-time ticket. Put it in the `ticket` query parameter of the SSE operation of `path`.","example":"q3Jx0b7T8c2vY1nK5mW9pL4sR6uE0aZ2hD8fG3jC1tQ"}}></SchemaItem><SchemaItem collapsible={false} name={"expiresIn"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"Lifetime of the ticket in seconds.","example":30}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"ticket\": \"q3Jx0b7T8c2vY1nK5mW9pL4sR6uE0aZ2hD8fG3jC1tQ\",\n  \"expiresIn\": 30\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"400"} value={"400"}><div>

The body is not JSON, or `path` is not one of the SSE operations above.

</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"}}></ul></details><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></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"path is not an SSE route\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

The `Authorization` header is missing or not valid.

</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"}}></ul></details><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></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"403"} value={"403"}><div>

The caller is not allowed to open the SSE operation of `path`.

</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"}}></ul></details><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={"Code"} required={false} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":403}}></SchemaItem><SchemaItem collapsible={false} name={"Message"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Unauthorized access;User doesn't have enough permissions;"}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"Code\": 403,\n  \"Message\": \"Unauthorized access;User doesn't have enough permissions;\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      