{
  "components": {
    "schemas": {
      "ArchiveFormat": {
        "const": "zip",
        "type": "string"
      },
      "ConstraintConformanceVector": {
        "additionalProperties": true,
        "description": "An executable accepted or rejected example for a files-key rules mirror.",
        "properties": {
          "accepted": {
            "title": "Accepted",
            "type": "boolean"
          },
          "code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code"
          },
          "keys": {
            "items": {
              "type": "string"
            },
            "title": "Keys",
            "type": "array"
          },
          "rule": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rule"
          }
        },
        "required": [
          "keys",
          "accepted"
        ],
        "title": "ConstraintConformanceVector",
        "type": "object"
      },
      "ConstraintLimits": {
        "additionalProperties": true,
        "description": "Deployment-specific limits published by the authenticated constraints endpoint.",
        "properties": {
          "effective_max_files": {
            "title": "Effective Max Files",
            "type": "integer"
          },
          "max_inline_file_bytes": {
            "title": "Max Inline File Bytes",
            "type": "integer"
          },
          "max_inline_files": {
            "title": "Max Inline Files",
            "type": "integer"
          },
          "max_output_bytes": {
            "title": "Max Output Bytes",
            "type": "integer"
          },
          "max_output_files": {
            "title": "Max Output Files",
            "type": "integer"
          },
          "max_request_body_bytes": {
            "title": "Max Request Body Bytes",
            "type": "integer"
          },
          "max_string_bytes": {
            "title": "Max String Bytes",
            "type": "integer"
          },
          "max_template_source_bytes": {
            "title": "Max Template Source Bytes",
            "type": "integer"
          }
        },
        "required": [
          "effective_max_files",
          "max_inline_files",
          "max_inline_file_bytes",
          "max_template_source_bytes",
          "max_string_bytes",
          "max_request_body_bytes",
          "max_output_bytes",
          "max_output_files"
        ],
        "title": "ConstraintLimits",
        "type": "object"
      },
      "ConstraintSetRule": {
        "additionalProperties": true,
        "description": "One rule that applies to the complete set of auxiliary file keys.",
        "properties": {
          "description": {
            "title": "Description",
            "type": "string"
          },
          "error_code": {
            "title": "Error Code",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "error_code",
          "description"
        ],
        "title": "ConstraintSetRule",
        "type": "object"
      },
      "ConstraintsResponse": {
        "additionalProperties": true,
        "description": "The complete client contract returned by ``GET /v1/constraints``.",
        "properties": {
          "case_sensitivity": {
            "title": "Case Sensitivity",
            "type": "string"
          },
          "conformance_vectors": {
            "items": {
              "$ref": "#/components/schemas/ConstraintConformanceVector"
            },
            "title": "Conformance Vectors",
            "type": "array"
          },
          "key_pattern": {
            "title": "Key Pattern",
            "type": "string"
          },
          "key_pattern_flavour": {
            "const": "pcre",
            "title": "Key Pattern Flavour",
            "type": "string"
          },
          "limits": {
            "$ref": "#/components/schemas/ConstraintLimits"
          },
          "max_key_length": {
            "title": "Max Key Length",
            "type": "integer"
          },
          "max_keys": {
            "title": "Max Keys",
            "type": "integer"
          },
          "max_segment_length": {
            "title": "Max Segment Length",
            "type": "integer"
          },
          "min_key_length": {
            "title": "Min Key Length",
            "type": "integer"
          },
          "min_segment_length": {
            "title": "Min Segment Length",
            "type": "integer"
          },
          "output_rules": {
            "$ref": "#/components/schemas/OutputRulesDocument"
          },
          "rules_version": {
            "title": "Rules Version",
            "type": "integer"
          },
          "segment_character_class": {
            "title": "Segment Character Class",
            "type": "string"
          },
          "segments_may_not_be_only_dots": {
            "title": "Segments May Not Be Only Dots",
            "type": "boolean"
          },
          "set_rules": {
            "items": {
              "$ref": "#/components/schemas/ConstraintSetRule"
            },
            "title": "Set Rules",
            "type": "array"
          }
        },
        "required": [
          "rules_version",
          "key_pattern",
          "key_pattern_flavour",
          "segment_character_class",
          "min_segment_length",
          "max_segment_length",
          "segments_may_not_be_only_dots",
          "min_key_length",
          "max_key_length",
          "max_keys",
          "case_sensitivity",
          "set_rules",
          "conformance_vectors",
          "limits",
          "output_rules"
        ],
        "title": "ConstraintsResponse",
        "type": "object"
      },
      "ImageOutputRules": {
        "additionalProperties": true,
        "description": "What PNG and SVG output accept beyond the fields every output shares.",
        "properties": {
          "archives": {
            "items": {
              "type": "string"
            },
            "title": "Archives",
            "type": "array"
          },
          "formats": {
            "items": {
              "type": "string"
            },
            "title": "Formats",
            "type": "array"
          },
          "min_page": {
            "title": "Min Page",
            "type": "integer"
          },
          "png": {
            "$ref": "#/components/schemas/PngOutputRules"
          }
        },
        "required": [
          "formats",
          "archives",
          "min_page",
          "png"
        ],
        "title": "ImageOutputRules",
        "type": "object"
      },
      "JSONValue": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "integer"
          },
          {
            "type": "number"
          },
          {
            "type": "boolean"
          },
          {
            "items": {
              "$ref": "#/components/schemas/JSONValue"
            },
            "type": "array"
          },
          {
            "additionalProperties": {
              "$ref": "#/components/schemas/JSONValue"
            },
            "type": "object"
          },
          {
            "type": "null"
          }
        ]
      },
      "OutputConformanceVector": {
        "additionalProperties": true,
        "description": "An executable accepted or rejected `output` object for an output-rules mirror.",
        "properties": {
          "accepted": {
            "title": "Accepted",
            "type": "boolean"
          },
          "code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code"
          },
          "output": {
            "additionalProperties": true,
            "title": "Output",
            "type": "object"
          },
          "rule": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rule"
          }
        },
        "required": [
          "output",
          "accepted"
        ],
        "title": "OutputConformanceVector",
        "type": "object"
      },
      "OutputRule": {
        "additionalProperties": true,
        "description": "One output-option rule that needs more than one field to decide, named by its stable id.",
        "properties": {
          "description": {
            "title": "Description",
            "type": "string"
          },
          "error_code": {
            "title": "Error Code",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "error_code",
          "description"
        ],
        "title": "OutputRule",
        "type": "object"
      },
      "OutputRulesDocument": {
        "additionalProperties": true,
        "description": "The deployment-independent output-option contract, also exported as output-rules.json.",
        "properties": {
          "conformance_vectors": {
            "items": {
              "$ref": "#/components/schemas/OutputConformanceVector"
            },
            "title": "Conformance Vectors",
            "type": "array"
          },
          "formats": {
            "items": {
              "type": "string"
            },
            "title": "Formats",
            "type": "array"
          },
          "image": {
            "$ref": "#/components/schemas/ImageOutputRules"
          },
          "output_rules_version": {
            "title": "Output Rules Version",
            "type": "integer"
          },
          "page_selection": {
            "$ref": "#/components/schemas/PageSelectionRules"
          },
          "pdf": {
            "$ref": "#/components/schemas/PdfOutputRules"
          },
          "rule_evaluation": {
            "title": "Rule Evaluation",
            "type": "string"
          },
          "rules": {
            "items": {
              "$ref": "#/components/schemas/OutputRule"
            },
            "title": "Rules",
            "type": "array"
          }
        },
        "required": [
          "output_rules_version",
          "formats",
          "pdf",
          "image",
          "page_selection",
          "rule_evaluation",
          "rules",
          "conformance_vectors"
        ],
        "title": "OutputRulesDocument",
        "type": "object"
      },
      "PageSelection": {
        "type": "string"
      },
      "PageSelectionRules": {
        "additionalProperties": true,
        "description": "The `pages` grammar, shared by PDF output and an image archive.",
        "properties": {
          "max_length": {
            "title": "Max Length",
            "type": "integer"
          },
          "max_length_unit": {
            "title": "Max Length Unit",
            "type": "string"
          },
          "max_selections": {
            "title": "Max Selections",
            "type": "integer"
          },
          "selection_pattern": {
            "title": "Selection Pattern",
            "type": "string"
          },
          "selection_pattern_flavour": {
            "const": "pcre",
            "title": "Selection Pattern Flavour",
            "type": "string"
          },
          "selection_pattern_matches_whole_selection": {
            "title": "Selection Pattern Matches Whole Selection",
            "type": "boolean"
          }
        },
        "required": [
          "max_length",
          "max_length_unit",
          "max_selections",
          "selection_pattern",
          "selection_pattern_flavour",
          "selection_pattern_matches_whole_selection"
        ],
        "title": "PageSelectionRules",
        "type": "object"
      },
      "PdfOutput": {
        "additionalProperties": false,
        "properties": {
          "filename": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filename"
          },
          "format": {
            "const": "pdf",
            "default": "pdf",
            "title": "Format",
            "type": "string"
          },
          "pages": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PageSelection"
              },
              {
                "type": "null"
              }
            ]
          },
          "standards": {
            "items": {
              "$ref": "#/components/schemas/PdfStandard"
            },
            "maxItems": 2,
            "title": "Standards",
            "type": "array"
          },
          "version": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PdfVersion"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "title": "PdfOutput",
        "type": "object"
      },
      "PdfOutputRules": {
        "additionalProperties": true,
        "description": "The PDF vocabulary, with the two lookup tables a mirror would otherwise transcribe.",
        "properties": {
          "formats": {
            "items": {
              "type": "string"
            },
            "title": "Formats",
            "type": "array"
          },
          "max_standards": {
            "title": "Max Standards",
            "type": "integer"
          },
          "pdf_a_4_standards": {
            "items": {
              "type": "string"
            },
            "title": "Pdf A 4 Standards",
            "type": "array"
          },
          "pdf_a_version": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Pdf A Version",
            "type": "object"
          },
          "standards": {
            "items": {
              "type": "string"
            },
            "title": "Standards",
            "type": "array"
          },
          "tagged_standards": {
            "items": {
              "type": "string"
            },
            "title": "Tagged Standards",
            "type": "array"
          },
          "versions": {
            "items": {
              "type": "string"
            },
            "title": "Versions",
            "type": "array"
          }
        },
        "required": [
          "formats",
          "versions",
          "standards",
          "max_standards",
          "pdf_a_version",
          "tagged_standards",
          "pdf_a_4_standards"
        ],
        "title": "PdfOutputRules",
        "type": "object"
      },
      "PdfStandard": {
        "enum": [
          "a-1b",
          "a-1a",
          "a-2b",
          "a-2u",
          "a-2a",
          "a-3b",
          "a-3u",
          "a-3a",
          "a-4",
          "a-4f",
          "a-4e",
          "ua-1"
        ],
        "title": "PdfStandard",
        "type": "string"
      },
      "PdfVersion": {
        "enum": [
          "1.4",
          "1.5",
          "1.6",
          "1.7",
          "2.0"
        ],
        "title": "PdfVersion",
        "type": "string"
      },
      "PngOutput": {
        "additionalProperties": false,
        "properties": {
          "archive": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ArchiveFormat"
              },
              {
                "type": "null"
              }
            ]
          },
          "filename": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filename"
          },
          "format": {
            "const": "png",
            "default": "png",
            "title": "Format",
            "type": "string"
          },
          "page": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Page"
          },
          "pages": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PageSelection"
              },
              {
                "type": "null"
              }
            ]
          },
          "ppi": {
            "default": 144,
            "maximum": 300.0,
            "minimum": 1.0,
            "title": "Ppi",
            "type": "integer"
          }
        },
        "title": "PngOutput",
        "type": "object"
      },
      "PngOutputRules": {
        "additionalProperties": true,
        "description": "The bounds PNG output applies to `ppi`, and the value it uses when none is given.",
        "properties": {
          "default_ppi": {
            "title": "Default Ppi",
            "type": "integer"
          },
          "max_ppi": {
            "title": "Max Ppi",
            "type": "integer"
          },
          "min_ppi": {
            "title": "Min Ppi",
            "type": "integer"
          }
        },
        "required": [
          "min_ppi",
          "max_ppi",
          "default_ppi"
        ],
        "title": "PngOutputRules",
        "type": "object"
      },
      "RenderFile": {
        "additionalProperties": false,
        "properties": {
          "content": {
            "title": "Content",
            "type": "string"
          },
          "encoding": {
            "enum": [
              "text",
              "base64"
            ],
            "title": "Encoding",
            "type": "string"
          }
        },
        "required": [
          "encoding",
          "content"
        ],
        "title": "RenderFile",
        "type": "object"
      },
      "RenderOutput": {
        "discriminator": {
          "mapping": {
            "pdf": "#/components/schemas/PdfOutput",
            "png": "#/components/schemas/PngOutput",
            "svg": "#/components/schemas/SvgOutput"
          },
          "propertyName": "format"
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/PdfOutput"
          },
          {
            "$ref": "#/components/schemas/PngOutput"
          },
          {
            "$ref": "#/components/schemas/SvgOutput"
          }
        ]
      },
      "RenderRequest": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "$ref": "#/components/schemas/JSONValue"
          },
          "files": {
            "additionalProperties": {
              "$ref": "#/components/schemas/RenderFile"
            },
            "title": "Files",
            "type": "object"
          },
          "output": {
            "$ref": "#/components/schemas/RenderOutput"
          },
          "source": {
            "minLength": 1,
            "title": "Source",
            "type": "string"
          }
        },
        "required": [
          "source"
        ],
        "title": "RenderRequest",
        "type": "object"
      },
      "SvgOutput": {
        "additionalProperties": false,
        "properties": {
          "archive": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ArchiveFormat"
              },
              {
                "type": "null"
              }
            ]
          },
          "filename": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filename"
          },
          "format": {
            "const": "svg",
            "default": "svg",
            "title": "Format",
            "type": "string"
          },
          "page": {
            "anyOf": [
              {
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Page"
          },
          "pages": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PageSelection"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "title": "SvgOutput",
        "type": "object"
      }
    },
    "securitySchemes": {
      "PrelumApiToken": {
        "in": "header",
        "name": "X-Prelum-Api-Token",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "title": "Prelum",
    "version": "1.2.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/health": {
      "get": {
        "operationId": "health_health_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "title": "Response Health Health Get",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Health"
      }
    },
    "/metrics": {
      "get": {
        "description": "Endpoint that serves Prometheus metrics.",
        "operationId": "metrics_metrics_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Metrics"
      }
    },
    "/v1/constraints": {
      "get": {
        "description": "Publish the files-key and output-option rules with this instance's limits, so a caller can\nvalidate before dispatch.\n\nAuthenticated because the limits describe the deployment's operational configuration. The\nresponse is a pure function of published constants and Settings: no body is read, no permit is\ntaken and no subprocess runs, so it cannot be shed and cannot fail on caller input.",
        "operationId": "constraints_v1_constraints_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConstraintsResponse"
                }
              }
            },
            "description": "Published files-key rules, output-option rules and this instance's limits"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "additionalProperties": true,
                  "description": "The `application/problem+json` body every error response carries.\n\nDocumentation only: `AppError.to_response` builds the body itself, and this model exists so the\nOpenAPI export states the shape. Per-code `context` keys are listed in docs/api/errors.md.",
                  "properties": {
                    "code": {
                      "title": "Code",
                      "type": "string"
                    },
                    "context": {
                      "additionalProperties": true,
                      "title": "Context",
                      "type": "object"
                    },
                    "detail": {
                      "title": "Detail",
                      "type": "string"
                    },
                    "instance": {
                      "title": "Instance",
                      "type": "string"
                    },
                    "origin": {
                      "description": "What a failure is attributable to, published beside `code` on every problem body.\n\nStatus cannot carry this. Seven codes answer 413 and only some are the caller's doing, so a\ncaller that alerts on the rest has to keep its own list of codes \u2014 and such a list drifts in\nsilence, because both sides of the comparison are ours. A code added later classifies itself.",
                      "enum": [
                        "request",
                        "template",
                        "capacity",
                        "service"
                      ],
                      "title": "Origin",
                      "type": "string"
                    },
                    "status": {
                      "title": "Status",
                      "type": "integer"
                    },
                    "title": {
                      "title": "Title",
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "origin",
                    "title",
                    "status",
                    "detail",
                    "instance",
                    "context"
                  ],
                  "title": "Problem",
                  "type": "object"
                }
              }
            },
            "description": "Problem response"
          }
        },
        "security": [
          {
            "PrelumApiToken": []
          }
        ],
        "summary": "Constraints"
      }
    },
    "/v1/render": {
      "post": {
        "description": "Render a caller-supplied inline Typst source.\n\nConcurrent renders are capped by a semaphore (PRELUM_MAX_CONCURRENT_RENDERS): each one forks a\ntypst process, so without the cap a burst of requests exhausts the container rather than queueing.\n\n:raises RenderTimeoutError: If the rendering process exceeds the configured timeout.\n:raises AppError: For known application-level rendering failures.\n:raises ServiceUnavailableError: For unexpected or unhandled errors during rendering.\n:raises asyncio.CancelledError: If the client disconnects or the request is cancelled.",
        "operationId": "render_v1_render_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/pdf": {},
              "application/zip": {},
              "image/png": {},
              "image/svg+xml": {}
            },
            "description": "Rendered artefact"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "additionalProperties": true,
                  "description": "The `application/problem+json` body every error response carries.\n\nDocumentation only: `AppError.to_response` builds the body itself, and this model exists so the\nOpenAPI export states the shape. Per-code `context` keys are listed in docs/api/errors.md.",
                  "properties": {
                    "code": {
                      "title": "Code",
                      "type": "string"
                    },
                    "context": {
                      "additionalProperties": true,
                      "title": "Context",
                      "type": "object"
                    },
                    "detail": {
                      "title": "Detail",
                      "type": "string"
                    },
                    "instance": {
                      "title": "Instance",
                      "type": "string"
                    },
                    "origin": {
                      "description": "What a failure is attributable to, published beside `code` on every problem body.\n\nStatus cannot carry this. Seven codes answer 413 and only some are the caller's doing, so a\ncaller that alerts on the rest has to keep its own list of codes \u2014 and such a list drifts in\nsilence, because both sides of the comparison are ours. A code added later classifies itself.",
                      "enum": [
                        "request",
                        "template",
                        "capacity",
                        "service"
                      ],
                      "title": "Origin",
                      "type": "string"
                    },
                    "status": {
                      "title": "Status",
                      "type": "integer"
                    },
                    "title": {
                      "title": "Title",
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "origin",
                    "title",
                    "status",
                    "detail",
                    "instance",
                    "context"
                  ],
                  "title": "Problem",
                  "type": "object"
                }
              }
            },
            "description": "Problem response"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "additionalProperties": true,
                  "description": "The `application/problem+json` body every error response carries.\n\nDocumentation only: `AppError.to_response` builds the body itself, and this model exists so the\nOpenAPI export states the shape. Per-code `context` keys are listed in docs/api/errors.md.",
                  "properties": {
                    "code": {
                      "title": "Code",
                      "type": "string"
                    },
                    "context": {
                      "additionalProperties": true,
                      "title": "Context",
                      "type": "object"
                    },
                    "detail": {
                      "title": "Detail",
                      "type": "string"
                    },
                    "instance": {
                      "title": "Instance",
                      "type": "string"
                    },
                    "origin": {
                      "description": "What a failure is attributable to, published beside `code` on every problem body.\n\nStatus cannot carry this. Seven codes answer 413 and only some are the caller's doing, so a\ncaller that alerts on the rest has to keep its own list of codes \u2014 and such a list drifts in\nsilence, because both sides of the comparison are ours. A code added later classifies itself.",
                      "enum": [
                        "request",
                        "template",
                        "capacity",
                        "service"
                      ],
                      "title": "Origin",
                      "type": "string"
                    },
                    "status": {
                      "title": "Status",
                      "type": "integer"
                    },
                    "title": {
                      "title": "Title",
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "origin",
                    "title",
                    "status",
                    "detail",
                    "instance",
                    "context"
                  ],
                  "title": "Problem",
                  "type": "object"
                }
              }
            },
            "description": "Problem response"
          },
          "408": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "additionalProperties": true,
                  "description": "The `application/problem+json` body every error response carries.\n\nDocumentation only: `AppError.to_response` builds the body itself, and this model exists so the\nOpenAPI export states the shape. Per-code `context` keys are listed in docs/api/errors.md.",
                  "properties": {
                    "code": {
                      "title": "Code",
                      "type": "string"
                    },
                    "context": {
                      "additionalProperties": true,
                      "title": "Context",
                      "type": "object"
                    },
                    "detail": {
                      "title": "Detail",
                      "type": "string"
                    },
                    "instance": {
                      "title": "Instance",
                      "type": "string"
                    },
                    "origin": {
                      "description": "What a failure is attributable to, published beside `code` on every problem body.\n\nStatus cannot carry this. Seven codes answer 413 and only some are the caller's doing, so a\ncaller that alerts on the rest has to keep its own list of codes \u2014 and such a list drifts in\nsilence, because both sides of the comparison are ours. A code added later classifies itself.",
                      "enum": [
                        "request",
                        "template",
                        "capacity",
                        "service"
                      ],
                      "title": "Origin",
                      "type": "string"
                    },
                    "status": {
                      "title": "Status",
                      "type": "integer"
                    },
                    "title": {
                      "title": "Title",
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "origin",
                    "title",
                    "status",
                    "detail",
                    "instance",
                    "context"
                  ],
                  "title": "Problem",
                  "type": "object"
                }
              }
            },
            "description": "Problem response"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "additionalProperties": true,
                  "description": "The `application/problem+json` body every error response carries.\n\nDocumentation only: `AppError.to_response` builds the body itself, and this model exists so the\nOpenAPI export states the shape. Per-code `context` keys are listed in docs/api/errors.md.",
                  "properties": {
                    "code": {
                      "title": "Code",
                      "type": "string"
                    },
                    "context": {
                      "additionalProperties": true,
                      "title": "Context",
                      "type": "object"
                    },
                    "detail": {
                      "title": "Detail",
                      "type": "string"
                    },
                    "instance": {
                      "title": "Instance",
                      "type": "string"
                    },
                    "origin": {
                      "description": "What a failure is attributable to, published beside `code` on every problem body.\n\nStatus cannot carry this. Seven codes answer 413 and only some are the caller's doing, so a\ncaller that alerts on the rest has to keep its own list of codes \u2014 and such a list drifts in\nsilence, because both sides of the comparison are ours. A code added later classifies itself.",
                      "enum": [
                        "request",
                        "template",
                        "capacity",
                        "service"
                      ],
                      "title": "Origin",
                      "type": "string"
                    },
                    "status": {
                      "title": "Status",
                      "type": "integer"
                    },
                    "title": {
                      "title": "Title",
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "origin",
                    "title",
                    "status",
                    "detail",
                    "instance",
                    "context"
                  ],
                  "title": "Problem",
                  "type": "object"
                }
              }
            },
            "description": "Problem response"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "additionalProperties": true,
                  "description": "The `application/problem+json` body every error response carries.\n\nDocumentation only: `AppError.to_response` builds the body itself, and this model exists so the\nOpenAPI export states the shape. Per-code `context` keys are listed in docs/api/errors.md.",
                  "properties": {
                    "code": {
                      "title": "Code",
                      "type": "string"
                    },
                    "context": {
                      "additionalProperties": true,
                      "title": "Context",
                      "type": "object"
                    },
                    "detail": {
                      "title": "Detail",
                      "type": "string"
                    },
                    "instance": {
                      "title": "Instance",
                      "type": "string"
                    },
                    "origin": {
                      "description": "What a failure is attributable to, published beside `code` on every problem body.\n\nStatus cannot carry this. Seven codes answer 413 and only some are the caller's doing, so a\ncaller that alerts on the rest has to keep its own list of codes \u2014 and such a list drifts in\nsilence, because both sides of the comparison are ours. A code added later classifies itself.",
                      "enum": [
                        "request",
                        "template",
                        "capacity",
                        "service"
                      ],
                      "title": "Origin",
                      "type": "string"
                    },
                    "status": {
                      "title": "Status",
                      "type": "integer"
                    },
                    "title": {
                      "title": "Title",
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "origin",
                    "title",
                    "status",
                    "detail",
                    "instance",
                    "context"
                  ],
                  "title": "Problem",
                  "type": "object"
                }
              }
            },
            "description": "Problem response"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "additionalProperties": true,
                  "description": "The `application/problem+json` body every error response carries.\n\nDocumentation only: `AppError.to_response` builds the body itself, and this model exists so the\nOpenAPI export states the shape. Per-code `context` keys are listed in docs/api/errors.md.",
                  "properties": {
                    "code": {
                      "title": "Code",
                      "type": "string"
                    },
                    "context": {
                      "additionalProperties": true,
                      "title": "Context",
                      "type": "object"
                    },
                    "detail": {
                      "title": "Detail",
                      "type": "string"
                    },
                    "instance": {
                      "title": "Instance",
                      "type": "string"
                    },
                    "origin": {
                      "description": "What a failure is attributable to, published beside `code` on every problem body.\n\nStatus cannot carry this. Seven codes answer 413 and only some are the caller's doing, so a\ncaller that alerts on the rest has to keep its own list of codes \u2014 and such a list drifts in\nsilence, because both sides of the comparison are ours. A code added later classifies itself.",
                      "enum": [
                        "request",
                        "template",
                        "capacity",
                        "service"
                      ],
                      "title": "Origin",
                      "type": "string"
                    },
                    "status": {
                      "title": "Status",
                      "type": "integer"
                    },
                    "title": {
                      "title": "Title",
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "origin",
                    "title",
                    "status",
                    "detail",
                    "instance",
                    "context"
                  ],
                  "title": "Problem",
                  "type": "object"
                }
              }
            },
            "description": "Problem response"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "additionalProperties": true,
                  "description": "The `application/problem+json` body every error response carries.\n\nDocumentation only: `AppError.to_response` builds the body itself, and this model exists so the\nOpenAPI export states the shape. Per-code `context` keys are listed in docs/api/errors.md.",
                  "properties": {
                    "code": {
                      "title": "Code",
                      "type": "string"
                    },
                    "context": {
                      "additionalProperties": true,
                      "title": "Context",
                      "type": "object"
                    },
                    "detail": {
                      "title": "Detail",
                      "type": "string"
                    },
                    "instance": {
                      "title": "Instance",
                      "type": "string"
                    },
                    "origin": {
                      "description": "What a failure is attributable to, published beside `code` on every problem body.\n\nStatus cannot carry this. Seven codes answer 413 and only some are the caller's doing, so a\ncaller that alerts on the rest has to keep its own list of codes \u2014 and such a list drifts in\nsilence, because both sides of the comparison are ours. A code added later classifies itself.",
                      "enum": [
                        "request",
                        "template",
                        "capacity",
                        "service"
                      ],
                      "title": "Origin",
                      "type": "string"
                    },
                    "status": {
                      "title": "Status",
                      "type": "integer"
                    },
                    "title": {
                      "title": "Title",
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "origin",
                    "title",
                    "status",
                    "detail",
                    "instance",
                    "context"
                  ],
                  "title": "Problem",
                  "type": "object"
                }
              }
            },
            "description": "Problem response"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "additionalProperties": true,
                  "description": "The `application/problem+json` body every error response carries.\n\nDocumentation only: `AppError.to_response` builds the body itself, and this model exists so the\nOpenAPI export states the shape. Per-code `context` keys are listed in docs/api/errors.md.",
                  "properties": {
                    "code": {
                      "title": "Code",
                      "type": "string"
                    },
                    "context": {
                      "additionalProperties": true,
                      "title": "Context",
                      "type": "object"
                    },
                    "detail": {
                      "title": "Detail",
                      "type": "string"
                    },
                    "instance": {
                      "title": "Instance",
                      "type": "string"
                    },
                    "origin": {
                      "description": "What a failure is attributable to, published beside `code` on every problem body.\n\nStatus cannot carry this. Seven codes answer 413 and only some are the caller's doing, so a\ncaller that alerts on the rest has to keep its own list of codes \u2014 and such a list drifts in\nsilence, because both sides of the comparison are ours. A code added later classifies itself.",
                      "enum": [
                        "request",
                        "template",
                        "capacity",
                        "service"
                      ],
                      "title": "Origin",
                      "type": "string"
                    },
                    "status": {
                      "title": "Status",
                      "type": "integer"
                    },
                    "title": {
                      "title": "Title",
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "origin",
                    "title",
                    "status",
                    "detail",
                    "instance",
                    "context"
                  ],
                  "title": "Problem",
                  "type": "object"
                }
              }
            },
            "description": "Problem response"
          }
        },
        "security": [
          {
            "PrelumApiToken": []
          }
        ],
        "summary": "Render"
      }
    }
  }
}
