Developer Utilities
Tier 3 Ready
POST /v1/schema-diff
Diff two OpenAPI 3.x or JSON Schemas to catch breaking changes and recommend SemVer bumps. Compare two OpenAPI 3.x specs or JSON Schemas to detect breaking changes, removed endpoints, tightened required fields, and recommend a SemVer bump.
POST /v1/schema-diff){
"ok": true,
"data": {
"compatible": false,
"detected_mode": "json_schema",
"breaking_count": 2,
"non_breaking_count": 0,
"changes": [
{
"path": "$.email",
"kind": "required_field_added",
"severity": "breaking",
"message": "Field 'email' became required",
"before": false,
"after": true
},
{
"path": "$.name",
"kind": "property_removed",
"severity": "breaking",
"message": "Property 'name' was removed",
"before": "name",
"after": null
}
]
},
"meta": {
"request_id": "req_sd_01",
"ms": 1
}
}
curl -X POST "https://api.tinplate.dev/v1/schema-diff" \
-H "Content-Type: application/json" \
-H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" \
-d '{"mode":"json_schema","before":{"type":"object","required":["id"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"after":{"type":"object","required":["id","email"],"properties":{"id":{"type":"string"},"email":{"type":"string"}}}}'import { TinplateClient } from "@tinplate/sdk"; // npm install @tinplate/sdk
const tinplate = new TinplateClient({
rapidApiKey: process.env.RAPIDAPI_KEY!,
});
const { data, meta } = await tinplate.call("/v1/schema-diff", {
"mode": "json_schema",
"before": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"after": {
"type": "object",
"required": [
"id",
"email"
],
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
});
console.log(`[${meta.ms} ms]`, data);import requests
response = requests.post(
"https://api.tinplate.dev/v1/schema-diff",
headers={
"Content-Type": "application/json",
"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
},
json={
"mode": "json_schema",
"before": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"after": {
"type": "object",
"required": [
"id",
"email"
],
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
}
)
print(response.json())const response = await fetch("https://api.tinplate.dev/v1/schema-diff", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
},
body: JSON.stringify({
"mode": "json_schema",
"before": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"after": {
"type": "object",
"required": [
"id",
"email"
],
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
}),
});
const result = await response.json();
console.log(result);{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tinplate_schema_diff",
"arguments": {
"mode": "json_schema",
"before": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"after": {
"type": "object",
"required": [
"id",
"email"
],
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
}
}
}POST /v1/schema-diff)| Parameter | Type & Constraints | Description |
|---|---|---|
beforerequired |
object |
Previous JSON Schema or OpenAPI 3.x document. |
afterrequired |
object |
New JSON Schema or OpenAPI 3.x document. |
modeoptional |
"auto" | "json_schema" | "openapi" |
Comparison mode (auto detects OpenAPI when 'paths' and 'openapi' are present). |
data Object Fields (200 OK)| Field | Type | Description |
|---|---|---|
compatible |
boolean |
Field 'compatible' |
detected_mode |
"json_schema" | "openapi" |
Field 'detected_mode' |
breaking_count |
integer |
Field 'breaking_count' |
non_breaking_count |
integer |
Field 'non_breaking_count' |
changes |
object[] |
Field 'changes' |
Release Version: v1.0.7 ·
Last Verified / Benchmarked: 14 November 2026 ·
Latency Note: Sub-millisecond figures measure in-Worker V8 compute time (typical client HTTPS network RTT to the nearest Cloudflare PoP is 15–65 ms) ·
See Full Portfolio Benchmarks & Corpora →
| Plan | Monthly Price | Included Requests | Rate Limit | Max Request Payload | Best For |
|---|---|---|---|---|---|
| BASIC | $0.00 / month | 500 / month (hard limit) | 10 req / min | 64 KB | Evaluation, local development & CI smoke tests |
| PRO | $9.99 / month | 15,000 / month | 60 req / min | 128 KB | Solo developers & production apps |
| ULTRA | $29.99 / month | 100,000 / month | 300 req / min | 256 KB | Growing SaaS & multi-agent pipelines |
| MEGA | $79.99 / month | 500,000 / month | 1,000 req / min | 256 KB | High-volume enterprise workloads |
Yes—send your main branch OpenAPI JSON as before and the PR branch OpenAPI JSON as after, and fail CI if breaking: true.
Yes: adding a required property to a request body is breaking, while adding a new property to a response body is non-breaking (minor).
Yes, local #/components/schemas/... and #/$defs/... pointers are resolved automatically.
Stateless in-memory schema comparison; specs are never stored.
Worker Zero-Logging Guarantee: Cloudflare Workers Observability and invocation logging are disabled in configuration
(observability.enabled = false, head_sampling_rate = 0, invocation_logs = false). Payloads are processed strictly in volatile V8 memory and never logged or stored by Tinplate.
Marketplace Proxies vs. Direct Bearer Key: Requests sent via RapidAPI or Zyla API Hub pass through those marketplaces' proxy infrastructure (subject to their respective privacy policies). Security-sensitive workloads requiring end-to-end zero-intermediary processing can connect directly to https://api.tinplate.dev using a Direct Bearer Key (Authorization: Bearer <API_KEY>).
Read our full Privacy Notice and OpenAPI 3.0.3 JSON Schema.
POST /v1/semver-lockfile-judge
Developer Utilities
Diff two package.json files to flag breaking SemVer bumps and risky dependency changes.
POST /v1/tool-call-validator
AI Safety & Agents
Validate and auto-repair broken LLM tool-call arguments against your JSON Schema.
POST /v1/json-heal
Live on Hub
Repair malformed or truncated LLM JSON outputs into valid, schema-checked JSON in 1 ms.