Fwozen Exceptions API
Letting one pull request through an active freeze, with a reason and a time limit, and the request-and-approve flow for organizations that require a second person.
Letting one pull request through an active freeze, with a reason and a time limit, and the request-and-approve flow for organizations that require a second person.
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/fwozen-com:fwozen-com-exceptions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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.
openapi: 3.2.0
info:
title: Fwozen Com Exceptions API
version: 1.0.0
contact:
name: Fwozen support
url: https://fwozen.com/docs
email: hello@fwozen.com
license:
name: Fwozen Terms of Service
url: https://fwozen.com/legal/terms
description: 'Operations tagged Exceptions across 2 of this provider''s published API definitions: fwozen-com-openapi.json, fwozen-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.fwozen.com
security:
- bearerApiKey: []
tags:
- name: Exceptions
description: Letting one pull request through an active freeze, with a reason and a time limit, and the request-and-approve flow for organizations that require a second person.
paths:
/v1/exceptions:
get:
operationId: listExceptions
summary: List exceptions
tags:
- Exceptions
security:
- bearerApiKey:
- exception:read
- bearerJwt: []
parameters:
- name: limit
in: query
required: false
schema:
default: 50
type: integer
minimum: 1
maximum: 200
- name: cursor
in: query
required: false
schema:
type: string
maxLength: 512
- name: state
in: query
required: false
schema:
anyOf:
- type: array
items:
type: string
enum:
- pending
- active
- expired
- revoked
- consumed
- denied
- type: string
enum:
- pending
- active
- expired
- revoked
- consumed
- denied
- name: freezeId
in: query
required: false
schema:
type: string
pattern: ^frz_[1-9A-HJ-NP-Za-km-z]{16}$
- name: repoId
in: query
required: false
schema:
type: string
pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
- name: prNumber
in: query
required: false
schema:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
responses:
'200':
description: List exceptions
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionPage'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
x-fwozen-rate-cost: 1
x-fwozen-permissions:
- freeze:read
x-fwozen-scopes:
- exception:read
post:
operationId: grantException
summary: Grant a per-PR exception (one row per covering freeze)
tags:
- Exceptions
security:
- bearerApiKey:
- exception:write
- bearerJwt: []
responses:
'201':
description: Grant a per-PR exception (one row per covering freeze)
content:
application/json:
schema:
$ref: '#/components/schemas/Exception'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
x-fwozen-rate-cost: 1
x-fwozen-feature: pr_exceptions
x-fwozen-permissions:
- exception:grant
x-fwozen-scopes:
- exception:write
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GrantExceptionInputInput'
servers:
- url: https://api.fwozen.com
/v1/exceptions/{exceptionId}:
get:
operationId: getException
summary: Get an exception
tags:
- Exceptions
security:
- bearerApiKey:
- exception:read
- bearerJwt: []
parameters:
- name: exceptionId
in: path
required: true
schema:
type: string
pattern: ^exc_[1-9A-HJ-NP-Za-km-z]{16}$
responses:
'200':
description: Get an exception
content:
application/json:
schema:
$ref: '#/components/schemas/Exception'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
x-fwozen-rate-cost: 1
x-fwozen-permissions:
- freeze:read
x-fwozen-scopes:
- exception:read
servers:
- url: https://api.fwozen.com
/v1/exceptions/{exceptionId}/revoke:
post:
operationId: revokeException
summary: Revoke an exception (never entitlement-gated)
tags:
- Exceptions
security:
- bearerApiKey:
- exception:write
- bearerJwt: []
parameters:
- name: exceptionId
in: path
required: true
schema:
type: string
pattern: ^exc_[1-9A-HJ-NP-Za-km-z]{16}$
responses:
'200':
description: Revoke an exception (never entitlement-gated)
content:
application/json:
schema:
$ref: '#/components/schemas/Exception'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
x-fwozen-rate-cost: 1
x-fwozen-permissions:
- exception:revoke
x-fwozen-scopes:
- exception:write
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RevokeExceptionInputInput'
servers:
- url: https://api.fwozen.com
/v1/exception-requests:
get:
operationId: listExceptionRequests
summary: List pending exception requests
tags:
- Exceptions
security:
- bearerApiKey:
- exception:read
- bearerJwt: []
parameters:
- name: limit
in: query
required: false
schema:
default: 50
type: integer
minimum: 1
maximum: 200
- name: cursor
in: query
required: false
schema:
type: string
maxLength: 512
- name: state
in: query
required: false
schema:
anyOf:
- type: array
items:
type: string
enum:
- pending
- active
- expired
- revoked
- consumed
- denied
- type: string
enum:
- pending
- active
- expired
- revoked
- consumed
- denied
- name: repoId
in: query
required: false
schema:
type: string
pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
- name: prNumber
in: query
required: false
schema:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
responses:
'200':
description: List pending exception requests
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionRequestPage'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
x-fwozen-rate-cost: 1
x-fwozen-permissions:
- freeze:read
x-fwozen-scopes:
- exception:read
post:
operationId: requestException
summary: Request an exception for a pull request
tags:
- Exceptions
security:
- bearerApiKey:
- exception:write
- bearerJwt: []
responses:
'201':
description: Request an exception for a pull request
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionRequest'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
x-fwozen-rate-cost: 1
x-fwozen-feature: pr_exceptions
x-fwozen-permissions:
- exception:request
x-fwozen-scopes:
- exception:write
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RequestExceptionInputInput'
servers:
- url: https://api.fwozen.com
/v1/exception-requests/{exceptionId}/decide:
post:
operationId: decideExceptionRequest
summary: Grant or deny an exception request
tags:
- Exceptions
security:
- bearerApiKey:
- exception:write
- bearerJwt: []
parameters:
- name: exceptionId
in: path
required: true
schema:
type: string
pattern: ^exc_[1-9A-HJ-NP-Za-km-z]{16}$
responses:
'200':
description: Grant or deny an exception request
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionRequest'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
x-fwozen-rate-cost: 1
x-fwozen-feature: pr_exceptions
x-fwozen-permissions:
- exception:grant
x-fwozen-scopes:
- exception:write
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DecideExceptionRequestInputInput'
servers:
- url: https://api.fwozen.com
components:
schemas:
GrantExceptionInputInput:
type: object
properties:
repoId:
type: string
pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
repo:
type: string
pattern: ^[^/\s]+\/[^/\s]+$
prNumber:
type: integer
exclusiveMinimum: 0
maximum: 9007199254740991
reason:
type: string
minLength: 8
maxLength: 500
incidentRef:
type: string
maxLength: 120
expiresInMinutes:
type: integer
minimum: 5
maximum: 10080
policy:
type: string
enum:
- sticky
- strict
requestId:
type: string
pattern: ^exc_[1-9A-HJ-NP-Za-km-z]{16}$
required:
- prNumber
- reason
Exception:
type: object
properties:
id:
type: string
pattern: ^exc_[1-9A-HJ-NP-Za-km-z]{16}$
freezeId:
type: string
pattern: ^frz_[1-9A-HJ-NP-Za-km-z]{16}$
freezeIds:
minItems: 1
type: array
items:
type: string
pattern: ^frz_[1-9A-HJ-NP-Za-km-z]{16}$
grantGroupId:
type: string
repoId:
type: string
pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
repoFullName:
type: string
prNumber:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
prTitle:
anyOf:
- type: string
- type: 'null'
prUrl:
type: string
format: uri
prAuthorLogin:
anyOf:
- type: string
- type: 'null'
headSha:
anyOf:
- type: string
pattern: ^[0-9a-f]{40}$
- type: 'null'
policy:
type: string
enum:
- sticky
- strict
state:
type: string
enum:
- pending
- active
- expired
- revoked
- consumed
- denied
reason:
type: string
incidentRef:
anyOf:
- type: string
- type: 'null'
grantedBy:
$ref: '#/components/schemas/Actor'
grantedAt:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
expiresAt:
anyOf:
- type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
- type: 'null'
revokedAt:
anyOf:
- type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
- type: 'null'
revokedBy:
anyOf:
- $ref: '#/components/schemas/Actor'
- type: 'null'
revokeReason:
anyOf:
- type: string
- type: 'null'
required:
- id
- freezeId
- freezeIds
- grantGroupId
- repoId
- repoFullName
- prNumber
- prTitle
- prUrl
- prAuthorLogin
- headSha
- policy
- state
- reason
- incidentRef
- grantedBy
- grantedAt
- expiresAt
- revokedAt
- revokedBy
- revokeReason
additionalProperties: false
RevokeExceptionInputInput:
type: object
properties:
reason:
type: string
minLength: 8
maxLength: 500
ExceptionRequestPage:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ExceptionRequest'
nextCursor:
anyOf:
- type: string
- type: 'null'
required:
- data
- nextCursor
additionalProperties: false
Actor:
type: object
properties:
type:
type: string
enum:
- user
- api_key
- slack_user
- scheduler
- system
- github_user
id:
anyOf:
- type: string
- type: 'null'
displayName:
type: string
githubLogin:
anyOf:
- type: string
- type: 'null'
slackUserId:
anyOf:
- type: string
- type: 'null'
impersonatorId:
anyOf:
- type: string
- type: 'null'
apiKeyKind:
default: null
anyOf:
- type: string
enum:
- human
- agent
- type: 'null'
required:
- type
- id
- displayName
- githubLogin
- slackUserId
- impersonatorId
- apiKeyKind
additionalProperties: false
ExceptionRequest:
type: object
properties:
id:
type: string
pattern: ^exc_[1-9A-HJ-NP-Za-km-z]{16}$
freezeId:
type: string
pattern: ^frz_[1-9A-HJ-NP-Za-km-z]{16}$
freezeIds:
minItems: 1
type: array
items:
type: string
pattern: ^frz_[1-9A-HJ-NP-Za-km-z]{16}$
grantGroupId:
type: string
repoId:
type: string
pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
repoFullName:
type: string
prNumber:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
prTitle:
anyOf:
- type: string
- type: 'null'
prUrl:
type: string
format: uri
prAuthorLogin:
anyOf:
- type: string
- type: 'null'
headSha:
anyOf:
- type: string
pattern: ^[0-9a-f]{40}$
- type: 'null'
policy:
type: string
enum:
- sticky
- strict
state:
type: string
enum:
- pending
- active
- expired
- revoked
- consumed
- denied
reason:
type: string
incidentRef:
anyOf:
- type: string
- type: 'null'
grantedBy:
$ref: '#/components/schemas/Actor'
grantedAt:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
expiresAt:
anyOf:
- type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
- type: 'null'
revokedAt:
anyOf:
- type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
- type: 'null'
revokedBy:
anyOf:
- $ref: '#/components/schemas/Actor'
- type: 'null'
revokeReason:
anyOf:
- type: string
- type: 'null'
requestedBy:
$ref: '#/components/schemas/Actor'
requestedAt:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
decidedBy:
anyOf:
- $ref: '#/components/schemas/Actor'
- type: 'null'
decidedAt:
anyOf:
- type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
- type: 'null'
decisionReason:
anyOf:
- type: string
- type: 'null'
required:
- id
- freezeId
- freezeIds
- grantGroupId
- repoId
- repoFullName
- prNumber
- prTitle
- prUrl
- prAuthorLogin
- headSha
- policy
- state
- reason
- incidentRef
- grantedBy
- grantedAt
- expiresAt
- revokedAt
- revokedBy
- revokeReason
- requestedBy
- requestedAt
- decidedBy
- decidedAt
- decisionReason
additionalProperties: false
RequestExceptionInputInput:
type: object
properties:
repoId:
type: string
pattern: ^repo_[1-9A-HJ-NP-Za-km-z]{16}$
repo:
type: string
pattern: ^[^/\s]+\/[^/\s]+$
prNumber:
type: integer
exclusiveMinimum: 0
maximum: 9007199254740991
reason:
type: string
minLength: 8
maxLength: 500
incidentRef:
type: string
maxLength: 120
expiresInMinutes:
type: integer
minimum: 5
maximum: 10080
required:
- prNumber
- reason
ExceptionPage:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Exception'
nextCursor:
anyOf:
- type: string
- type: 'null'
required:
- data
- nextCursor
additionalProperties: false
DecideExceptionRequestInputInput:
type: object
properties:
decision:
type: string
enum:
- approve
- deny
reason:
type: string
minLength: 8
maxLength: 500
expiresInMinutes:
type: integer
minimum: 5
maximum: 10080
required:
- decision
ErrorEnvelope:
type: object
properties:
error:
type: object
properties:
type:
type: string
code:
type: string
message:
type: string
details:
type: array
items:
type: object
properties:
path:
type: string
message:
type: string
required:
- path
- message
additionalProperties: false
docsUrl:
type: string
requestId:
type: string
warnings:
type: array
items:
type: string
required:
- type
- code
- message
- requestId
additionalProperties: false
required:
- error
additionalProperties: false
responses:
Forbidden:
description: Authenticated, but not permitted.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
NotFound:
description: No such resource — also returned for another organization's id.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
BadRequest:
description: Malformed request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
RateLimited:
description: Rate limit exceeded. Honour the `Retry-After` header.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
Unauthorized:
description: Missing or invalid credentials.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
ValidationFailed:
description: The request failed schema validation; see `error.details`.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
securitySchemes:
bearerApiKey:
type: http
scheme: bearer
bearerFormat: fwz_<env>_<40 base58>
description: 'Org-scoped, never user-scoped: the scope list IS the authorization. Calling a
session-only route with a key returns **403 `credential_type_not_allowed`**, never 401,
so scripts get an actionable message.
**Where one comes from.** Sign in at
[https://fwozen.com/app/settings/api-keys](https://fwozen.com/app/settings/api-keys) as an owner or an
admin, press **Create key**, tick the narrowest scopes that do the job (`freeze:read`
for a deploy gate, `freeze:write` to freeze and thaw), pick an expiry, and copy the
secret, which is shown once. `POST /v1/api-keys` is the same thing programmatically and
takes a **session** credential only, so a key can never mint another key. Scopes are
fixed at creation and cannot be widened.
- `freeze:read` — List freezes, freeze targets and freeze state, including GET /v1/freeze-state.
- `freeze:write` — Start a freeze, lift one, extend one, create a thaw override, retry targets.
- `schedule:read` — List schedules, occurrences and previews.
- `schedule:write` — Create, edit, delete, skip and import schedules.
- `exception:read` — List per-PR exceptions and exception requests.
- `exception:write` — Grant, decide and revoke per-PR exceptions.
- `repo:read` — List repositories, watched branches and enforcement state.
- `repo:write` — Enable or disable repositories and change watched-branch settings.
- `audit:read` — Read the audit log and stream the CSV export.
- `billing:read` — Read the billing summary, plan, trial state and resolved entitlements.
- `billing:write` — Start the 14-day no-card trial, and ask for a Stripe Checkout or Customer Portal link. It cannot pay for anything: those routes return a URL for a human to open and take no card details of any kind.'
bearerJwt:
type: http
scheme: bearer
bearerFormat: JWT
description: A short-lived RS256 session token from `GET /api/auth/token` on the web origin. Used by the dashboard, the CLI and agents; audience-bound to this API.
x-refined-from:
- fwozen-com-openapi.json
- fwozen-com-openapi.yml
x-provenance:
method: harvested
publisher: Fwozen
source: https://fwozen.com/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)