API Reference¶
The reference below is generated from the committed OpenAPI specification
(docs/openapi.yaml), which is produced from the server code by
mock-oidc openapi. A CI drift-guard fails the build if the committed
spec falls out of sync with the code.
mock-oidc dev¶
Mock Control¶
GET /_mock/clock¶
Get the clock state
Responses
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
PUT /_mock/clock¶
Freeze or unfreeze the clock
Description
frozen=true pins the clock at instant (required); frozen=false returns it to the wall clock. One global clock drives issuance AND verification, so this moves iat/nbf/exp and the verifier alike.
Request body
Responses
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /_mock/clock/advance¶
Advance the (frozen) clock by a Go duration
Request body
Responses
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /_mock/mint¶
Directly mint a token (issueToken / anyToken)
Description
Signs a token without a grant flow, using the SAME signer/keys as /{issuer}/token, so the result verifies against /{issuer}/jwks. Supply issuerUrl to sign for an arbitrary external iss.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
Host |
header | string | No | ||
X-Forwarded-Host |
header | string | No | ||
X-Forwarded-Port |
header | string | No | ||
X-Forwarded-Proto |
header | string | No |
Request body
{
"audience": [
"string"
],
"claims": {},
"clientId": "string",
"expirySeconds": 59,
"issuer": "string",
"issuerUrl": "string",
"kind": "access_token",
"scope": [
"string"
],
"subject": "string",
"typ": "string"
}
Schema of the request body
{
"additionalProperties": false,
"properties": {
"audience": {
"description": "aud claim. Omitted -> no audience is stamped.",
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"claims": {
"additionalProperties": {},
"description": "Additional/overriding claims.",
"type": "object"
},
"clientId": {
"default": "default",
"type": "string"
},
"expirySeconds": {
"default": 3600,
"format": "int64",
"type": "integer"
},
"issuer": {
"default": "default",
"description": "Issuer id (first segment); '_mock' reserved.",
"type": "string"
},
"issuerUrl": {
"description": "Override iss with an arbitrary URL (anyToken).",
"type": "string"
},
"kind": {
"default": "access_token",
"enum": [
"access_token",
"id_token"
],
"type": "string"
},
"scope": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"subject": {
"description": "sub claim; defaults to a random UUID.",
"type": "string"
},
"typ": {
"default": "JWT",
"description": "JWS typ header (open JOSEType; at+jwt accepted).",
"type": "string"
}
},
"required": [
"issuer"
],
"type": "object"
}
Responses
{
"algorithm": "string",
"claims": {},
"expiresAt": "2022-04-13T15:42:05.901Z",
"issuer": "string",
"kid": "string",
"token": "string"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"algorithm": {
"type": "string"
},
"claims": {
"additionalProperties": {},
"description": "Decoded claim set (convenience).",
"type": "object"
},
"expiresAt": {
"format": "date-time",
"type": "string"
},
"issuer": {
"description": "Resolved iss.",
"type": "string"
},
"kid": {
"type": "string"
},
"token": {
"description": "Compact signed JWT.",
"type": "string"
}
},
"required": [
"token",
"kid",
"algorithm",
"issuer",
"expiresAt",
"claims"
],
"type": "object"
}
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
DELETE /_mock/requests¶
Clear the captured-request log
Responses
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
GET /_mock/requests¶
List the captured-request log (non-destructive)
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
endpoint |
query | string | No | ||
issuer |
query | string | No |
Responses
{
"count": 98,
"requests": [
{
"body": "string",
"bodyBase64": "string",
"headers": {},
"id": "string",
"issuer": "string",
"method": "string",
"path": "string",
"query": {},
"receivedAt": "2022-04-13T15:42:05.901Z",
"url": "string"
}
]
}
Schema of the response body
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /_mock/requests/take¶
Destructively take the oldest captured request (takeRequest)
Description
Long-polls up to timeoutMs for the oldest matching captured request, removes it, and returns it. A miss within the timeout is a clean 404 (not an exception). Raw body bytes are preserved.
Request body
Schema of the request body
{
"additionalProperties": false,
"properties": {
"endpoint": {
"enum": [
"authorize",
"token",
"userinfo",
"introspect",
"revoke",
"endsession",
"jwks"
],
"type": "string"
},
"issuer": {
"type": "string"
},
"timeoutMs": {
"default": 1000,
"description": "Max time to wait for a matching request.",
"format": "int64",
"type": "integer"
}
},
"type": "object"
}
Responses
{
"body": "string",
"bodyBase64": "string",
"headers": {},
"id": "string",
"issuer": "string",
"method": "string",
"path": "string",
"query": {},
"receivedAt": "2022-04-13T15:42:05.901Z",
"url": "string"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"body": {
"description": "Best-effort UTF-8 decode of the body, for convenience.",
"type": "string"
},
"bodyBase64": {
"description": "Raw body bytes, base64 (exact order).",
"type": "string"
},
"headers": {
"additionalProperties": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"type": "object"
},
"id": {
"type": "string"
},
"issuer": {
"type": "string"
},
"method": {
"type": "string"
},
"path": {
"type": "string"
},
"query": {
"additionalProperties": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"type": "object"
},
"receivedAt": {
"format": "date-time",
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"id",
"receivedAt",
"issuer",
"method",
"path",
"url"
],
"type": "object"
}
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /_mock/reset¶
Reset control-plane state (the @AfterEach)
Description
Atomically flushes the scenario queue and the request log and unfreezes the clock. It deliberately does NOT drop materialized signing keys, so JWKS a client already fetched stays valid.
Responses
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
DELETE /_mock/scenarios¶
Flush the scenario queue
Responses
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
GET /_mock/scenarios¶
List the pending scenario queue
Responses
Schema of the response body
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /_mock/scenarios¶
Enqueue a one-shot scenario (enqueueCallback)
Description
Enqueues a single-use, issuer-matched callback consumed by the NEXT matching /token (or refresh) request for that issuer. It does not return a token; it changes how the next real request responds.
Request body
{
"audience": [
"string"
],
"claims": {},
"expirySeconds": 103,
"issuer": "string",
"requestMappings": [
{
"claims": {},
"match": "string",
"param": "string",
"typeHeader": "string"
}
],
"subject": "string",
"typ": "string"
}
Schema of the request body
{
"additionalProperties": false,
"properties": {
"audience": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"claims": {
"additionalProperties": {},
"type": "object"
},
"expirySeconds": {
"format": "int64",
"type": "integer"
},
"issuer": {
"default": "default",
"type": "string"
},
"requestMappings": {
"items": {
"$ref": "#/components/schemas/RequestMappingDTO"
},
"nullable": true,
"type": "array"
},
"subject": {
"type": "string"
},
"typ": {
"type": "string"
}
},
"required": [
"issuer"
],
"type": "object"
}
Responses
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
OIDC¶
GET /favicon.ico¶
Favicon (empty 200)
Responses
Response headers
| Name | Description | Schema |
|---|---|---|
Content-Type |
string | |
Location |
string |
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
GET /{issuer}/.well-known/oauth-authorization-server¶
OIDC/OAuth2 provider metadata
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
issuer |
path | string | No | Issuer id; the first path segment. |
Responses
{
"authorization_endpoint": "string",
"code_challenge_methods_supported": [
"string"
],
"end_session_endpoint": "string",
"id_token_signing_alg_values_supported": [
"string"
],
"introspection_endpoint": "string",
"issuer": "string",
"jwks_uri": "string",
"response_modes_supported": [
"string"
],
"response_types_supported": [
"string"
],
"revocation_endpoint": "string",
"subject_types_supported": [
"string"
],
"token_endpoint": "string",
"userinfo_endpoint": "string"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"authorization_endpoint": {
"type": "string"
},
"code_challenge_methods_supported": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"end_session_endpoint": {
"type": "string"
},
"id_token_signing_alg_values_supported": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"introspection_endpoint": {
"type": "string"
},
"issuer": {
"type": "string"
},
"jwks_uri": {
"type": "string"
},
"response_modes_supported": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"response_types_supported": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"revocation_endpoint": {
"type": "string"
},
"subject_types_supported": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"token_endpoint": {
"type": "string"
},
"userinfo_endpoint": {
"type": "string"
}
},
"required": [
"issuer",
"authorization_endpoint",
"end_session_endpoint",
"revocation_endpoint",
"token_endpoint",
"userinfo_endpoint",
"jwks_uri",
"introspection_endpoint",
"response_types_supported",
"response_modes_supported",
"subject_types_supported",
"id_token_signing_alg_values_supported",
"code_challenge_methods_supported"
],
"type": "object"
}
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
GET /{issuer}/.well-known/openid-configuration¶
OIDC/OAuth2 provider metadata
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
issuer |
path | string | No | Issuer id; the first path segment. |
Responses
{
"authorization_endpoint": "string",
"code_challenge_methods_supported": [
"string"
],
"end_session_endpoint": "string",
"id_token_signing_alg_values_supported": [
"string"
],
"introspection_endpoint": "string",
"issuer": "string",
"jwks_uri": "string",
"response_modes_supported": [
"string"
],
"response_types_supported": [
"string"
],
"revocation_endpoint": "string",
"subject_types_supported": [
"string"
],
"token_endpoint": "string",
"userinfo_endpoint": "string"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"authorization_endpoint": {
"type": "string"
},
"code_challenge_methods_supported": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"end_session_endpoint": {
"type": "string"
},
"id_token_signing_alg_values_supported": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"introspection_endpoint": {
"type": "string"
},
"issuer": {
"type": "string"
},
"jwks_uri": {
"type": "string"
},
"response_modes_supported": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"response_types_supported": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"revocation_endpoint": {
"type": "string"
},
"subject_types_supported": {
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"token_endpoint": {
"type": "string"
},
"userinfo_endpoint": {
"type": "string"
}
},
"required": [
"issuer",
"authorization_endpoint",
"end_session_endpoint",
"revocation_endpoint",
"token_endpoint",
"userinfo_endpoint",
"jwks_uri",
"introspection_endpoint",
"response_types_supported",
"response_modes_supported",
"subject_types_supported",
"id_token_signing_alg_values_supported",
"code_challenge_methods_supported"
],
"type": "object"
}
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
GET /{issuer}/authorize¶
OAuth2/OIDC authorization endpoint
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
client_id |
query | string | No | ||
code_challenge |
query | string | No | ||
code_challenge_method |
query | string | No | ||
issuer |
path | string | No | ||
nonce |
query | string | No | ||
prompt |
query | string | No | ||
redirect_uri |
query | string | No | ||
response_mode |
query | string | No | ||
response_type |
query | string | No | ||
scope |
query | string | No | ||
state |
query | string | No |
Responses
Response headers
| Name | Description | Schema |
|---|---|---|
Content-Type |
string | |
Location |
string |
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /{issuer}/authorize¶
Interactive login submission
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
client_id |
query | string | No | ||
code_challenge |
query | string | No | ||
code_challenge_method |
query | string | No | ||
issuer |
path | string | No | ||
nonce |
query | string | No | ||
prompt |
query | string | No | ||
redirect_uri |
query | string | No | ||
response_mode |
query | string | No | ||
response_type |
query | string | No | ||
scope |
query | string | No | ||
state |
query | string | No |
Request body
Responses
Response headers
| Name | Description | Schema |
|---|---|---|
Content-Type |
string | |
Location |
string |
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
GET /{issuer}/debugger¶
Interactive OIDC debugger (pre-filled authorize form)
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
client_id |
query | string | No | ||
issuer |
path | string | No | ||
scope |
query | string | No | ||
subject |
query | string | No |
Responses
Response headers
| Name | Description | Schema |
|---|---|---|
Content-Type |
string | |
Location |
string |
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /{issuer}/debugger¶
Debugger: start the authorization-code flow
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
issuer |
path | string | No |
Request body
Responses
Response headers
| Name | Description | Schema |
|---|---|---|
Location |
string | |
Set-Cookie |
string |
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
GET /{issuer}/debugger/callback¶
Debugger: authorization-code callback (back-channel exchange)
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
code |
query | string | No | ||
Cookie |
header | string | No | ||
error |
query | string | No | ||
error_description |
query | string | No | ||
issuer |
path | string | No | ||
state |
query | string | No |
Responses
Response headers
| Name | Description | Schema |
|---|---|---|
Content-Type |
string | |
Location |
string |
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /{issuer}/debugger/callback¶
Debugger: authorization-code callback (back-channel exchange)
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
code |
query | string | No | ||
Cookie |
header | string | No | ||
error |
query | string | No | ||
error_description |
query | string | No | ||
issuer |
path | string | No | ||
state |
query | string | No |
Responses
Response headers
| Name | Description | Schema |
|---|---|---|
Content-Type |
string | |
Location |
string |
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
GET /{issuer}/endsession¶
RP-initiated logout endpoint
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
issuer |
path | string | No | ||
post_logout_redirect_uri |
query | string | No | ||
state |
query | string | No |
Responses
Response headers
| Name | Description | Schema |
|---|---|---|
Content-Type |
string | |
Location |
string |
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /{issuer}/endsession¶
RP-initiated logout endpoint
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
issuer |
path | string | No | ||
post_logout_redirect_uri |
query | string | No | ||
state |
query | string | No |
Responses
Response headers
| Name | Description | Schema |
|---|---|---|
Content-Type |
string | |
Location |
string |
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
GET /{issuer}/jwks¶
JSON Web Key Set
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
issuer |
path | string | No | Issuer id; the first path segment. |
Responses
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
GET /{issuer}/userinfo¶
OpenID Connect UserInfo endpoint
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
Authorization |
header | string | No | ||
issuer |
path | string | No |
Responses
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
OAuth2¶
POST /{issuer}/introspect¶
OAuth2 token introspection endpoint
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
Authorization |
header | string | No | ||
issuer |
path | string | No |
Request body
Responses
{
"active": true,
"exp": 78,
"iat": 173,
"iss": "string",
"jti": "string",
"nbf": 173,
"scope": "string",
"sub": "string",
"token_type": "string"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"active": {
"type": "boolean"
},
"exp": {
"format": "int64",
"type": "integer"
},
"iat": {
"format": "int64",
"type": "integer"
},
"iss": {
"type": "string"
},
"jti": {
"type": "string"
},
"nbf": {
"format": "int64",
"type": "integer"
},
"scope": {
"type": "string"
},
"sub": {
"type": "string"
},
"token_type": {
"type": "string"
}
},
"required": [
"active"
],
"type": "object"
}
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /{issuer}/revoke¶
OAuth2 token revocation endpoint
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
issuer |
path | string | No |
Request body
Responses
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
POST /{issuer}/token¶
OAuth2 token endpoint
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
Authorization |
header | string | No | ||
issuer |
path | string | No |
Request body
{
"assertion": "string",
"audience": "string",
"client_assertion": "string",
"client_assertion_type": "string",
"client_id": "string",
"client_secret": "string",
"code": "string",
"code_verifier": "string",
"grant_type": "string",
"password": "string",
"redirect_uri": "string",
"refresh_token": "string",
"scope": "string",
"subject_token": "string",
"subject_token_type": "string",
"username": "string"
}
Schema of the request body
{
"properties": {
"assertion": {
"type": "string"
},
"audience": {
"type": "string"
},
"client_assertion": {
"type": "string"
},
"client_assertion_type": {
"type": "string"
},
"client_id": {
"type": "string"
},
"client_secret": {
"type": "string"
},
"code": {
"type": "string"
},
"code_verifier": {
"type": "string"
},
"grant_type": {
"type": "string"
},
"password": {
"type": "string"
},
"redirect_uri": {
"type": "string"
},
"refresh_token": {
"type": "string"
},
"scope": {
"type": "string"
},
"subject_token": {
"type": "string"
},
"subject_token_type": {
"type": "string"
},
"username": {
"type": "string"
}
},
"type": "object"
}
Responses
{
"access_token": "string",
"expires_in": 29,
"id_token": "string",
"issued_token_type": "string",
"refresh_token": "string",
"scope": "string",
"token_type": "string"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"access_token": {
"type": "string"
},
"expires_in": {
"format": "int64",
"type": "integer"
},
"id_token": {
"type": "string"
},
"issued_token_type": {
"type": "string"
},
"refresh_token": {
"type": "string"
},
"scope": {
"type": "string"
},
"token_type": {
"type": "string"
}
},
"required": [
"token_type",
"access_token",
"expires_in"
],
"type": "object"
}
{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "string",
"message": "string",
"value": null
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}
Schema of the response body
{
"additionalProperties": false,
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem.",
"example": "Property foo is required but is missing.",
"type": "string"
},
"errors": {
"description": "Optional list of individual error details",
"items": {
"$ref": "#/components/schemas/ErrorDetail"
},
"nullable": true,
"type": "array"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem.",
"example": "https://example.com/error-log/abc123",
"format": "uri",
"type": "string"
},
"status": {
"description": "HTTP status code",
"example": 400,
"format": "int64",
"type": "integer"
},
"title": {
"description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
"example": "Bad Request",
"type": "string"
},
"type": {
"default": "about:blank",
"description": "A URI reference to human-readable documentation for the error.",
"example": "https://example.com/errors/example",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
Schemas¶
AdvanceClockInputBody¶
| Name | Type | Description |
|---|---|---|
duration |
string | Go duration, e.g. '90s', '5m', '1h'. Advances (and freezes) the clock. |
CapturedRequestDTO¶
| Name | Type | Description |
|---|---|---|
body |
string | Best-effort UTF-8 decode of the body, for convenience. |
bodyBase64 |
string | Raw body bytes, base64 (exact order). |
headers |
||
id |
string | |
issuer |
string | |
method |
string | |
path |
string | |
query |
||
receivedAt |
string(date-time) | |
url |
string |
ClearRequestsOutputBody¶
| Name | Type | Description |
|---|---|---|
cleared |
boolean |
ClearScenariosOutputBody¶
| Name | Type | Description |
|---|---|---|
queueDepth |
integer(int64) |
ClockStateDTO¶
| Name | Type | Description |
|---|---|---|
frozen |
boolean | |
now |
string(date-time) |
EnqueueScenarioOutputBody¶
| Name | Type | Description |
|---|---|---|
queueDepth |
integer(int64) | |
scenarioId |
string |
ErrorDetail¶
| Name | Type | Description |
|---|---|---|
location |
string | Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id' |
message |
string | Error message text |
value |
The value at the given location |
ErrorModel¶
| Name | Type | Description |
|---|---|---|
detail |
string | A human-readable explanation specific to this occurrence of the problem. |
errors |
Array<ErrorDetail> | Optional list of individual error details |
instance |
string(uri) | A URI reference that identifies the specific occurrence of the problem. |
status |
integer(int64) | HTTP status code |
title |
string | A short, human-readable summary of the problem type. This value should not change between occurrences of the error. |
type |
string(uri) | A URI reference to human-readable documentation for the error. |
JWKDTO¶
| Name | Type | Description |
|---|---|---|
alg |
string | |
crv |
string | |
e |
string | |
kid |
string | |
kty |
string | |
n |
string | |
use |
string | |
x |
string | |
y |
string |
ListRequestsOutputBody¶
| Name | Type | Description |
|---|---|---|
count |
integer(int64) | |
requests |
Array<CapturedRequestDTO> |
ListScenariosOutputBody¶
| Name | Type | Description |
|---|---|---|
queueDepth |
integer(int64) | |
scenarios |
Array<ScenarioSummaryDTO> |
MintRequestDTO¶
| Name | Type | Description |
|---|---|---|
audience |
Array<string> | aud claim. Omitted -> no audience is stamped. |
claims |
Additional/overriding claims. | |
clientId |
string | |
expirySeconds |
integer(int64) | |
issuer |
string | Issuer id (first segment); '_mock' reserved. |
issuerUrl |
string | Override iss with an arbitrary URL (anyToken). |
kind |
string | |
scope |
Array<string> | |
subject |
string | sub claim; defaults to a random UUID. |
typ |
string | JWS typ header (open JOSEType; at+jwt accepted). |
MintTokenOutputBody¶
| Name | Type | Description |
|---|---|---|
algorithm |
string | |
claims |
Decoded claim set (convenience). | |
expiresAt |
string(date-time) | |
issuer |
string | Resolved iss. |
kid |
string | |
token |
string | Compact signed JWT. |
RequestMappingDTO¶
| Name | Type | Description |
|---|---|---|
claims |
${...}-templated claims applied when this mapping matches. | |
match |
string | '*' (any present value), an exact string, or a full-match regex. |
param |
string | Form/synthetic param name to test (e.g. client_id, scope, subject). |
typeHeader |
string | Overrides the JWS typ when this mapping matches. |
ResetOutputBody¶
| Name | Type | Description |
|---|---|---|
reset |
boolean |
ScenarioDTO¶
| Name | Type | Description |
|---|---|---|
audience |
Array<string> | |
claims |
||
expirySeconds |
integer(int64) | |
issuer |
string | |
requestMappings |
Array<RequestMappingDTO> | |
subject |
string | |
typ |
string |
ScenarioSummaryDTO¶
| Name | Type | Description |
|---|---|---|
issuer |
string | |
kind |
string | 'default' or 'requestMapping'. |
SetClockInputBody¶
| Name | Type | Description |
|---|---|---|
frozen |
boolean | |
instant |
string(date-time) | Required when frozen=true; the fixed 'now'. |
TakeRequestInputBody¶
| Name | Type | Description |
|---|---|---|
endpoint |
string | |
issuer |
string | |
timeoutMs |
integer(int64) | Max time to wait for a matching request. |
Security schemes¶
| Name | Type | Scheme | Description |
|---|---|---|---|
| oauth2 | oauth2 | ||
| openIdConnect | openIdConnect |
Tags¶
| Name | Description |
|---|---|
| Mock Control | Test-time control plane (mock-oidc). Direct token mint, one-shot scenario enqueue, captured-request inspection, and clock control. Test-only; disabled by --control-enabled=false. |