rendry-io · Schema
RenderJobStatus
CompanyImage RenderingPDF GenerationTemplate EngineAPIAI Integration
Properties
| Name | Type | Description |
|---|---|---|
| job_id | string | |
| status | string | |
| result_url | string | Download URL through the API file proxy. New paid document attempt results require the same authenticated owner and use private/no-store caching; obsolete attempts are refused. Historical public rende |
| error | string | |
| created_at | string | |
| started_at | string | |
| completed_at | string | |
| format | string | Output format of the finished job: png | jpeg | webp | pdf | html. |
| warnings | array | Visible warnings from admission and the active worker; paid documents retain bounded per-source snapshots. warnings_omitted explains omitted findings. Compliance receipts use a protected typed field. |
| geometry | object | |
| geometry_error | string | Invalid or inconsistent recorded geometry; geometry is omitted. The completed result URL remains available. Do not infer a replacement transform from image dimensions. |
| page_previews | array | pdf only: the available pictures of the requested pages, up to 3 and free of extra charge. Empty while pending; page_preview_status explicitly names requested and missing pages. Pictures of an unfinis |
| page_preview_status | object | |
| webhook | object | Present only when the job was queued with a webhook_url: what became of calling it. The worker calls the webhook once the job is final (one retry after 2 s). |
| compliance | object | |
| text_fit | object | Paid documents return an exact-count bounded numeric summary. Historical raw arrays remain readable. Inline/image metrics retain details and wraps. Historical PDF/HTML arrays use the existing legacy s |
| text_fit_status | string | |
| text_fit_error | string | |
| warnings_omitted | integer | Exact findings omitted by the paid document count/encoded-byte policy, including oversized entries; replay does not increase this count. |
| warnings_status | string | |
| warnings_error | string | |
| diagnostics_policy | object | |
| print_receipt | object | |
| expires_at | string | Persisted server-owned artifact deadline. |
| delivery | object | |
| ai_content | string | Present only when the rendered output contains an owned AI image; the artifact carries composite AI-content metadata. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/rendry-io/json-schema/rendry-io-render-job-status-schema.json",
"title": "RenderJobStatus",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/rendry-io-openapi.json#/components/schemas/RenderJobStatus",
"type": "object",
"properties": {
"job_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"queued",
"processing",
"done",
"error"
]
},
"result_url": {
"type": "string",
"description": "Download URL through the API file proxy. New paid document attempt results require the same authenticated owner and use private/no-store caching; obsolete attempts are refused. Historical public render links retain their existing policy."
},
"error": {
"type": "string"
},
"created_at": {
"type": "string"
},
"started_at": {
"type": "string"
},
"completed_at": {
"type": "string"
},
"format": {
"type": "string",
"description": "Output format of the finished job: png | jpeg | webp | pdf | html."
},
"warnings": {
"type": "array",
"items": {
"type": "string"
},
"description": "Visible warnings from admission and the active worker; paid documents retain bounded per-source snapshots. warnings_omitted explains omitted findings. Compliance receipts use a protected typed field."
},
"geometry": {
"$ref": "#/$defs/RenderGeometry"
},
"geometry_error": {
"type": "string",
"description": "Invalid or inconsistent recorded geometry; geometry is omitted. The completed result URL remains available. Do not infer a replacement transform from image dimensions."
},
"page_previews": {
"type": "array",
"items": {
"$ref": "#/$defs/PagePreview"
},
"description": "pdf only: the available pictures of the requested pages, up to 3 and free of extra charge. Empty while pending; page_preview_status explicitly names requested and missing pages. Pictures of an unfinished job are never advertised."
},
"page_preview_status": {
"$ref": "#/$defs/PagePreviewStatus"
},
"webhook": {
"type": "object",
"description": "Present only when the job was queued with a webhook_url: what became of calling it. The worker calls the webhook once the job is final (one retry after 2 s).",
"required": [
"status"
],
"properties": {
"status": {
"type": "string",
"enum": [
"pending",
"delivered",
"failed",
"blocked"
],
"description": "pending — not tried yet; delivered — the endpoint answered 2xx; failed — it could not be reached or did not answer 2xx; blocked — the address is not allowed (its name resolves to a private, loopback or link-local address, or a redirect led to one). Addresses that can be judged without DNS are refused at the door with invalid_webhook_url instead."
},
"reason": {
"type": "string",
"description": "Why, for failed and blocked. Never contains the webhook URL itself."
}
}
},
"compliance": {
"$ref": "#/$defs/PDFComplianceReceipt"
},
"text_fit": {
"oneOf": [
{
"$ref": "#/$defs/DocumentDiagnostics"
},
{
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/$defs/TextFit"
},
{
"$ref": "#/$defs/LegacyCollapsedTextFit"
}
]
}
}
],
"description": "Paid documents return an exact-count bounded numeric summary. Historical raw arrays remain readable. Inline/image metrics retain details and wraps. Historical PDF/HTML arrays use the existing legacy summary without claiming prepared table/page provenance (text_fit_status: legacy)."
},
"text_fit_status": {
"type": "string",
"enum": [
"pending",
"unavailable",
"invalid",
"collapsed",
"detailed",
"legacy"
]
},
"text_fit_error": {
"type": "string"
},
"warnings_omitted": {
"type": "integer",
"description": "Exact findings omitted by the paid document count/encoded-byte policy, including oversized entries; replay does not increase this count."
},
"warnings_status": {
"type": "string",
"enum": [
"pending",
"unavailable",
"available",
"invalid"
]
},
"warnings_error": {
"type": "string"
},
"diagnostics_policy": {
"$ref": "#/$defs/DiagnosticPolicy"
},
"print_receipt": {
"$ref": "#/$defs/PDFPrintReceipt"
},
"expires_at": {
"type": "string",
"format": "date-time",
"description": "Persisted server-owned artifact deadline."
},
"delivery": {
"$ref": "#/$defs/DeliveryReceipt"
},
"ai_content": {
"type": "string",
"enum": [
"composite"
],
"description": "Present only when the rendered output contains an owned AI image; the artifact carries composite AI-content metadata."
}
},
"$defs": {
"DeliveryReceipt": {
"type": "object",
"additionalProperties": false,
"required": [
"status"
],
"description": "Present only when deliver_to was given. A delivery failure does not refund or change the render.",
"properties": {
"status": {
"type": "string",
"enum": [
"pending",
"delivered",
"failed"
]
},
"reason": {
"type": "string",
"enum": [
"address",
"transport",
"http",
"source",
"render",
"archive",
"expired"
]
},
"http_status": {
"type": "integer",
"minimum": 100,
"maximum": 599,
"description": "Remote status code, only with reason http."
},
"notice": {
"type": "string",
"const": "The file remains available at Rendry; a delivery failure does not refund the render."
}
}
},
"DiagnosticPolicy": {
"type": "object",
"properties": {
"version": {
"type": "integer"
},
"max_bytes": {
"type": "integer"
},
"max_entries": {
"type": "integer"
},
"max_problem_locations": {
"type": "integer"
}
}
},
"DiagnosticProblem": {
"type": "object",
"properties": {
"location": {
"$ref": "#/$defs/TextDiagnosticOrigin"
},
"fit": {
"$ref": "#/$defs/TextFit"
}
}
},
"DocumentDiagnostics": {
"type": "object",
"properties": {
"version": {
"type": "integer",
"enum": [
1,
2
]
},
"pages": {
"type": "integer"
},
"measured": {
"type": "integer"
},
"shrunk": {
"type": "integer"
},
"overflowed": {
"type": "integer"
},
"header_cells": {
"type": "integer"
},
"problems": {
"type": "integer"
},
"summaries": {
"type": "array",
"items": {
"$ref": "#/$defs/TextDiagnosticSummary"
}
},
"omitted_summaries": {
"type": "integer"
},
"omitted_measurements": {
"type": "integer"
},
"omitted_problem_locations": {
"type": "integer"
},
"policy": {
"$ref": "#/$defs/DiagnosticPolicy"
}
},
"description": "Text diagnostics v1 for default-only origins; v2 when first/even origins occur. Policy.version matches. Warning envelopes remain v1. Readers accept both; older v1-only readers cannot interpret replacement masters."
},
"LegacyCollapsedTextFit": {
"type": "object",
"description": "Historical read-side summaries. These preserve repeat/page/table totals without claiming prepared document provenance.",
"required": [
"id"
],
"anyOf": [
{
"required": [
"collapsed_clones"
]
},
{
"required": [
"collapsed_pages"
]
},
{
"required": [
"collapsed_table_cells"
]
}
],
"properties": {
"id": {
"type": "string"
},
"worst": {
"$ref": "#/$defs/TextFit"
},
"problem_cells": {
"type": "array",
"items": {
"$ref": "#/$defs/TextFit"
}
},
"note": {
"type": "string"
},
"collapsed_clones": {
"type": "boolean",
"enum": [
true
]
},
"collapsed_pages": {
"type": "boolean",
"enum": [
true
]
},
"collapsed_table_cells": {
"type": "boolean",
"enum": [
true
]
},
"rows": {
"type": "integer"
},
"measured": {
"type": "integer"
},
"worst_row": {
"type": "integer"
},
"worst_page": {
"type": "integer"
},
"cells": {
"type": "integer"
},
"header_cells": {
"type": "integer"
},
"shrunk": {
"type": "integer"
},
"overflowed": {
"type": "integer"
},
"shrunk_rows_more": {
"type": "integer"
},
"overflowed_rows_more": {
"type": "integer"
},
"problem_cells_more": {
"type": "integer"
},
"shrunk_rows": {
"type": "array",
"items": {
"type": "integer"
}
},
"overflowed_rows": {
"type": "array",
"items": {
"type": "integer"
}
},
"shrunk_pages": {
"type": "array",
"items": {
"type": "integer"
}
},
"overflowed_pages": {
"type": "array",
"items": {
"type": "integer"
}
}
}
},
"ListParagraph": {
"type": "object",
"additionalProperties": false,
"required": [
"rune_offset",
"prefix_runes",
"reserve_px",
"continued",
"rtl"
],
"properties": {
"rune_offset": {
"type": "integer",
"minimum": 0,
"description": "Paragraph start in the same final parsed rune stream as wraps, including blank paragraphs."
},
"prefix_runes": {
"type": "integer",
"minimum": 0,
"description": "Drawn marker/indent prefix length; zero for a midparagraph flow continuation."
},
"reserve_px": {
"type": "number",
"description": "Native physical continuation reserve in layout pixels: positive left, negative right, zero centered or unconstrained. Never infer RTL from this sign."
},
"continued": {
"type": "boolean",
"description": "Keeps an earlier paragraph marker reserve without drawing that marker again."
},
"rtl": {
"type": "boolean",
"description": "Original native resolved paragraph direction, including empty and continued paragraphs."
}
},
"description": "Measured list paragraph geometry. Bind it and wraps to unchanged render inputs; ordinary non-list text omits this array. Literal list newlines normalize CRLF/CR to LF before formatting."
},
"PDFComplianceReceipt": {
"type": "object",
"required": [
"mode",
"sha256",
"verapdf"
],
"properties": {
"mode": {
"type": "string"
},
"version": {
"type": "string"
},
"profile": {
"type": "string"
},
"sha256": {
"type": "string"
},
"invoice_sha256": {
"type": "string"
},
"verapdf": {
"type": "string"
},
"mustang": {
"type": "string"
}
},
"description": "Available only after successful upload. SHA-256 binds the exact final PDF bytes and, for facturx, actual embedded invoice bytes. Independent pinned validator versions; PDF/A-3b is explicitly selected. This does not claim PDF/UA, XRechnung or Peppol."
},
"PDFPrintPreflight": {
"type": "object",
"required": [
"pages",
"images",
"shadings",
"painted_streams",
"raster_below_300_dpi"
],
"properties": {
"pages": {
"type": "integer",
"minimum": 0
},
"images": {
"type": "integer",
"minimum": 0
},
"shadings": {
"type": "integer",
"minimum": 0
},
"painted_streams": {
"type": "integer",
"minimum": 0
},
"raster_below_300_dpi": {
"type": "integer",
"minimum": 0
},
"minimum_dpi": {
"type": "number",
"minimum": 0
}
},
"description": "Counts from independent inspection of the actual final CMYK PDF resource graph; effective raster placement resolution is checked against the product print DPI. Low resolution is reported, not silently upsampled."
},
"PDFPrintReceipt": {
"type": "object",
"required": [
"version",
"profile",
"profile_sha256",
"sha256",
"color_space",
"intent",
"black_point_compensation",
"preflight"
],
"properties": {
"version": {
"type": "integer",
"enum": [
1
]
},
"profile": {
"type": "string",
"enum": [
"aptec-offset-coated-linearctv-2025-v1"
]
},
"profile_sha256": {
"type": "string",
"enum": [
"2a0a26387276046dc129d4330a7a45542b736c8640e3ec4cb74df809c5ccfb0e"
]
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"color_space": {
"type": "string",
"enum": [
"CMYK"
]
},
"intent": {
"type": "string",
"enum": [
"relative-colorimetric"
]
},
"black_point_compensation": {
"type": "boolean",
"enum": [
true
]
},
"preflight": {
"$ref": "#/$defs/PDFPrintPreflight"
}
},
"description": "Protected receipt bound to the exact uploaded and owner-downloadable final PDF bytes and immutable APTEC profile. Exposed only for the selected done attempt; omitted for ordinary/historical RGB results. This receipt makes no PDF/X certification claim."
},
"PagePreview": {
"type": "object",
"description": "One rasterised page of a finished pdf. A LINK, not base64: an HTTP client can fetch it, and inlining a courtesy picture would add hundreds of kilobytes to every pdf reply. Fetched exactly like result_url; capped on the long side like any preview.",
"properties": {
"page": {
"type": "integer",
"description": "1-based page number of the document."
},
"url": {
"type": "string",
"description": "URL of the stored picture (image/jpeg)."
},
"width": {
"type": "integer",
"description": "Pixel width of the picture as stored, not of the pdf page."
},
"height": {
"type": "integer"
}
}
},
"PagePreviewStatus": {
"type": "object",
"required": [
"status",
"requested_pages",
"available_pages",
"missing_pages"
],
"description": "The requested PDF page pictures and their current storage availability. pending means one or more pictures are unavailable now, including older jobs that never uploaded them; it does not promise a future upload. Re-read status to refresh without rendering or charging again.",
"properties": {
"status": {
"type": "string",
"enum": [
"pending",
"ready"
]
},
"requested_pages": {
"type": "array",
"items": {
"type": "integer"
}
},
"available_pages": {
"type": "array",
"items": {
"type": "integer"
}
},
"missing_pages": {
"type": "array",
"items": {
"type": "integer"
}
}
}
},
"RenderGeometry": {
"type": "object",
"description": "Geometry of the successful render attempt, bound to job_id and attempt_id. Layout is the DSL coordinate space. Scale layout to pre_finish, map finish.source_rect to finish.destination_rect when present, then scale output to the actual displayed image. Without finish, pre_finish equals output. Display resizing never changes this report. Absent on legacy jobs or document results without raster geometry.",
"required": [
"version",
"job_id",
"attempt_id",
"layout",
"pre_finish",
"output"
],
"properties": {
"version": {
"type": "integer",
"enum": [
1
]
},
"job_id": {
"type": "string",
"minLength": 1
},
"attempt_id": {
"type": "string",
"minLength": 1
},
"layout": {
"$ref": "#/$defs/RenderGeometrySize"
},
"pre_finish": {
"$ref": "#/$defs/RenderGeometrySize"
},
"output": {
"$ref": "#/$defs/RenderGeometrySize"
},
"finish": {
"$ref": "#/$defs/RenderGeometryFinish"
}
}
},
"RenderGeometryFinish": {
"type": "object",
"description": "source_rect is in pre_finish; destination_rect is in output. These rectangles define the transform. source_bounds is diagnostic alpha in pre_finish; artwork_bounds and finished_bounds are diagnostic alpha in output. Alpha bounds never replace the transform.",
"required": [
"profile_id",
"source_rect",
"destination_rect",
"source_bounds",
"artwork_bounds",
"finished_bounds"
],
"properties": {
"profile_id": {
"type": "string",
"minLength": 1
},
"source_rect": {
"$ref": "#/$defs/RenderGeometryRect"
},
"destination_rect": {
"$ref": "#/$defs/RenderGeometryRect"
},
"source_bounds": {
"$ref": "#/$defs/RenderGeometryRect"
},
"artwork_bounds": {
"$ref": "#/$defs/RenderGeometryRect"
},
"finished_bounds": {
"$ref": "#/$defs/RenderGeometryRect"
}
}
},
"RenderGeometryRect": {
"type": "object",
"description": "Half-open integer pixel-edge rectangle. Transform rectangles have positive extents and are contained in their raster space. Diagnostic alpha bounds may be the all-zero rectangle for empty alpha.",
"required": [
"x",
"y",
"width",
"height"
],
"properties": {
"x": {
"type": "integer",
"minimum": 0
},
"y": {
"type": "integer",
"minimum": 0
},
"width": {
"type": "integer",
"minimum": 0
},
"height": {
"type": "integer",
"minimum": 0
}
}
},
"RenderGeometrySize": {
"type": "object",
"description": "Positive raster dimensions in pixels.",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "integer",
"minimum": 1
},
"height": {
"type": "integer",
"minimum": 1
}
}
},
"TextDiagnosticOrigin": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Server-created prepared structural identity; independent of generated cell IDs."
},
"layer_id": {
"type": "string",
"description": "Safe authored layer identifier; values and paths are excluded."
},
"table": {
"type": "boolean"
},
"master": {
"type": "boolean"
},
"page": {
"type": "integer",
"description": "Final page, 1-based."
},
"row": {
"type": "integer",
"description": "Original body row, 1-based; header and footer row zero."
},
"column": {
"type": "integer",
"description": "Column, 1-based."
},
"header": {
"type": "boolean"
},
"master_kind": {
"type": "string",
"enum": [
"first",
"even"
],
"description": "Present for replacement-master origins in diagnostics v2; keys use master_first/N or master_even/N. Default-only diagnostics remain v1."
},
"footer": {
"type": "boolean",
"description": "True for the final table footer; row is zero and header is false."
}
}
},
"TextDiagnosticSummary": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"layer_id": {
"type": "string"
},
"table": {
"type": "boolean"
},
"master": {
"type": "boolean"
},
"measured": {
"type": "integer"
},
"shrunk": {
"type": "integer"
},
"overflowed": {
"type": "integer"
},
"header_cells": {
"type": "integer"
},
"problems": {
"type": "integer"
},
"worst": {
"$ref": "#/$defs/DiagnosticProblem"
},
"problem_locations": {
"type": "array",
"items": {
"$ref": "#/$defs/DiagnosticProblem"
}
},
"omitted_problem_locations": {
"type": "integer"
},
"master_kind": {
"type": "string",
"enum": [
"first",
"even"
],
"description": "Present for replacement-master origins in diagnostics v2; keys use master_first/N or master_even/N. Default-only diagnostics remain v1."
}
}
},
"TextFit": {
"type": "object",
"description": "What the finished render MEASURED for one text layer. Every number is in DSL layout coordinates.",
"properties": {
"id": {
"type": "string",
"description": "The measured layer's own id. This is why text_fit is a list: the entry names its layer, the list does not"
},
"plate": {
"$ref": "#/$defs/TextPlateFit",
"description": "Present only for an assembled text plate"
},
"rotation_origin": {
"$ref": "#/$defs/TextRotationOrigin",
"description": "Present for ordinary raster text with rotation or flips; native document text uses its own placement"
},
"raster_top": {
"type": "integer",
"description": "Where the raster image put the top of the text block under vertical_align center or bottom, in whole pixels below the layer's y; absent for top alignment, no box height, a plate, and PDF or HTML output"
},
"size": {
"type": "integer",
"description": "The size that was asked for"
},
"fitted_size": {
"type": "integer",
"description": "The size auto_fit settled on; equal to size when nothing shrank"
},
"text_w": {
"type": "integer",
"description": "Width of the rendered text mask"
},
"text_h": {
"type": "integer",
"description": "Height of the rendered text mask"
},
"box_w": {
"type": "integer",
"description": "Declared layer width; 0 means unconstrained"
},
"box_h": {
"type": "integer",
"description": "Declared layer height; 0 means unconstrained"
},
"lines": {
"type": "integer",
"description": "Lines after wrapping, not only explicit newlines"
},
"wraps": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Where the render broke the text for width: the rune offset, in the text as drawn (variables substituted, list markers and soft hyphens in place, rich_text ** pairs removed), at which each line begins because the line before it was full. A line an explicit newline starts is not listed; absent when nothing wrapped. The editor draws its lines at these offsets"
},
"kept_spaces": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Visible-rune offsets of whitespace replaced with non-breaking spaces by keep_last_words. Shares the wraps coordinate system; absent when no spaces changed. The editor applies these exact substitutions before painting."
},
"mask_x": {
"type": "integer",
"description": "mask_text placement inside a shape or image"
},
"mask_y": {
"type": "integer"
},
"mask_w": {
"type": "integer"
},
"mask_h": {
"type": "integer"
},
"ink_top": {
"type": "integer",
"description": "Mask offset from the logical text box; a diagnostic, not an alignment source — Pango bounds can include empty rows"
},
"ink_left": {
"type": "integer"
},
"fit_group": {
"type": "string",
"description": "The layer's fit_group name, present only for a member of one"
},
"size_alone": {
"type": "integer",
"description": "The size this member would have taken fitted BY ITSELF, before the group levelled. Present only for a member of a fit_group; a layer in no group reports fitted_size and nothing more"
},
"fit_group_size": {
"type": "integer",
"description": "The size the group settled on — the smallest size_alone among its members. A member whose own min_size is above it keeps min_size, so fitted_size can exceed fit_group_size. Present only for a member of a fit_group"
},
"origin": {
"$ref": "#/$defs/TextDiagnosticOrigin"
},
"list_paragraphs": {
"type": "array",
"items": {
"$ref": "#/$defs/ListParagraph"
},
"description": "Native list geometry on the wraps rune coordinate system; includes blank/trailing paragraphs. Absent for ordinary non-list text."
},
"logical_h": {
"type": "integer",
"minimum": 1,
"maximum": 2097151,
"description": "Native logical block height for lists and clip_lines, including blank lines and fallback-font metrics; absent legacy measurements keep existing line-step behavior."
},
"clip_end": {
"type": "integer",
"minimum": 0,
"description": "Exclusive rune endpoint in the final parsed/formatted source, present only when clip_lines removed a suffix. Zero keeps a leading blank line. Slice already parsed styled content before applying wraps/list_paragraphs; this is server observation, never authored DSL."
},
"lines_cut": {
"type": "integer",
"minimum": 0,
"description": "Number of complete native lines removed by clip_lines after full-source fitting. lines is the retained count. Absent when no lines were cut."
}
}
},
"TextPlateFit": {
"type": "object",
"description": "Actual unrotated text plate assembly in DSL pixels, before effects and output scaling. Text coordinates identify the logical text box, not tight glyph bounds.",
"required": [
"x",
"y",
"width",
"height",
"text_x",
"text_y",
"text_width"
],
"properties": {
"x": {
"type": "integer",
"description": "Plate left relative to the layer origin"
},
"y": {
"type": "integer",
"description": "Plate top relative to the layer origin"
},
"width": {
"type": "integer",
"description": "Assembled plate width after minimum size and circle sizing"
},
"height": {
"type": "integer",
"description": "Assembled plate height after minimum size and circle sizing"
},
"text_x": {
"type": "integer",
"description": "Logical text origin inside the plate, including stroke and bearing placement"
},
"text_y": {
"type": "integer",
"description": "Logical text origin inside the plate"
},
"text_width": {
"type": "integer",
"description": "Resolved advance or constrained wrap width"
}
}
},
"TextRotationOrigin": {
"type": "object",
"description": "Actual pre-transform assembly center of ordinary raster text relative to the layer origin, in DSL pixels. Half-pixel centers are preserved.",
"required": [
"x",
"y"
],
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
}
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.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.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/rendry-io-render-job-status"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API 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.