{"openapi":"3.1.0","info":{"title":"ComputeFirst","version":"0.2.0","description":"Free deterministic tools for AI agents: 350 exact, repeatable tools for CSV, JSON, text, UTC/ISO dates, math, graphs and more. No key or sign-up needed: search in plain English, read a versioned contract, then POST its execute URL. An optional profile key (Bearer) adds saved tools and personal history. MCP: https://computefirst.net/mcp. Privacy: https://computefirst.net/privacy.","termsOfService":"https://computefirst.net/terms","contact":{"name":"Idan Roth","email":"idan.roth.ai@gmail.com","url":"https://computefirst.net/docs"},"x-privacy-policy":"https://computefirst.net/privacy"},"externalDocs":{"description":"Documentation and connection guides","url":"https://computefirst.net/docs"},"servers":[{"url":"https://computefirst.net"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Discovery","description":"Find a tool for a task."},{"name":"Execution","description":"Run tools in batches."},{"name":"MCP","description":"Model Context Protocol endpoint."},{"name":"Feedback","description":"Tell us what helped or what is missing."},{"name":"Newsletter","description":"Optional new-tool emails, with explicit consent."},{"name":"Savings","description":"Measured token savings."},{"name":"Account","description":"Optional email sign-in, passkey profile and keys."},{"name":"Service","description":"Health and API description."},{"name":"CSV & tables","description":"Convert, join, filter, sort, reconcile and compare CSV tables. (29 tools)"},{"name":"YAML, TOML, INI, XML & TSV","description":"Convert YAML, TOML, INI, XML and TSV documents to and from JSON, with explicit rejections. (10 tools)"},{"name":"JSON & JSONL","description":"Diff, patch, query, join, group and validate JSON documents and arrays. (31 tools)"},{"name":"Text","description":"Compare texts, work with lines, patches, merges and Unicode details. (34 tools)"},{"name":"Sequences & diffs","description":"Edit scripts, longest common subsequences, hunks and three-way merges. (10 tools)"},{"name":"Dates & times (UTC, ISO 8601)","description":"Add, compare and bucket ISO 8601 dates and UTC timestamps. (44 tools)"},{"name":"Numbers & math","description":"Exact integer, decimal and rational arithmetic, statistics and intervals. (58 tools)"},{"name":"Vectors & matrices","description":"Exact vector and matrix arithmetic: products, norms, determinants, inverses and linear systems. (27 tools)"},{"name":"Units & sizes","description":"Convert, add and compare lengths, masses, temperatures and byte sizes. (11 tools)"},{"name":"Graphs & scheduling","description":"Topological sort, cycles, paths, reachability and task schedules. (20 tools)"},{"name":"File paths (lexical)","description":"Normalize, join, match and group path strings without touching a filesystem. (20 tools)"},{"name":"Forms","description":"Compare form definitions, answers and response sets. (6 tools)"},{"name":"Encoding & checksums","description":"Base64, UTF-8, hex bytes and non-cryptographic checksums. (8 tools)"},{"name":"URLs & IP addresses","description":"Parse, build and normalize URLs and query strings; IPv4 and IPv6 addresses, CIDR blocks and subnets. (35 tools)"},{"name":"Versions & config","description":"Semantic version ranges and sorting; .env parsing and merging. (7 tools)"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Optional key from email sign-in or a passkey profile. Not needed for search, contracts or execution."}},"schemas":{"TokenUsage":{"type":"object","additionalProperties":false,"required":["input","cached_input","output"],"properties":{"input":{"type":"integer","minimum":0,"maximum":10000000},"cached_input":{"type":"integer","minimum":0,"maximum":10000000},"output":{"type":"integer","minimum":0,"maximum":10000000}}}}},"paths":{"/health":{"get":{"tags":["Service"],"summary":"Service health","description":"Status, deployed commit and number of tools.","operationId":"health","security":[],"responses":{"200":{"description":"Service status, commit (null when unknown) and tool count"}}}},"/openapi.json":{"get":{"tags":["Service"],"summary":"This OpenAPI document","description":"Public, cacheable description of the ComputeFirst HTTP API.","operationId":"getOpenApi","security":[],"responses":{"200":{"description":"This OpenAPI document"},"304":{"description":"Not modified (ETag)"}}}},"/v1/tools/search":{"get":{"tags":["Discovery"],"summary":"Search tools by task description","description":"Exact IDs and operation phrases take priority; otherwise returns English lexical candidates, each with a score from 0 to 1 (1 = exact). Read the selected version contract before execution. Maximum 256 UTF-8 bytes and 40 distinct normalized query terms; empty results mean no confident match.","operationId":"searchTools","security":[],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":256}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":5,"default":1}}],"responses":{"200":{"description":"Up to 5 compact exact or English lexical candidates"}}}},"/v1/feedback":{"post":{"tags":["Feedback"],"summary":"Send feedback","description":"Tell ComputeFirst what helped, what went wrong or which capability is missing. Idempotent per idempotency_key. No key needed.","operationId":"createFeedback","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["category","idempotency_key"],"properties":{"category":{"type":"string","enum":["useful","wrong_result","missing_capability","hard_to_use","other"]},"idempotency_key":{"type":"string","maxLength":100},"note":{"type":"string","maxLength":1000},"tool":{"type":"string","maxLength":100},"version":{"type":"string","maxLength":100},"execution_ref":{"type":"string","maxLength":100}}}}}},"responses":{"201":{"description":"Feedback submitted"}}}},"/v1/tool-requests":{"post":{"tags":["Feedback"],"summary":"Request a missing tool","description":"Describe a task no tool covers yet; example input and output help. contact_email is optional and requires email_consent: true (\"Email me once when the tool I requested ships.\"). No key needed.","operationId":"requestTool","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["description"],"properties":{"description":{"type":"string","minLength":1,"maxLength":4096},"example_input":{"description":"Text or JSON, at most 4 KB"},"example_output":{"description":"Text or JSON, at most 4 KB"},"contact_email":{"type":"string","format":"email","maxLength":254},"email_consent":{"type":"boolean"}}}}}},"responses":{"201":{"description":"Request recorded"},"400":{"description":"Invalid request, or an email without email_consent: true"},"429":{"description":"Daily request limit reached; see retry_after"}}}},"/v1/subscribe":{"post":{"tags":["Newsletter"],"summary":"Subscribe to new-tool emails","description":"Only with the person's explicit agreement: consent must be true (\"Email me about new ComputeFirst tools. I can unsubscribe at any time.\"). The same answer whether the address is new, already listed or unsubscribed. The address stays unconfirmed and gets nothing until it is confirmed (one confirmation email before the first newsletter); an address that unsubscribed is never re-added. Also accepts the website form (application/x-www-form-urlencoded).","operationId":"subscribe","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["email","consent"],"properties":{"email":{"type":"string","format":"email","maxLength":254},"consent":{"const":true}}}}}},"responses":{"200":{"description":"Received, pending confirmation"},"400":{"description":"Invalid email or consent not given"},"429":{"description":"Daily subscription limit reached; see retry_after"}}}},"/v1/unsubscribe":{"get":{"tags":["Newsletter"],"summary":"Unsubscribe","description":"The link in every newsletter email. Works without signing in; other query parameters (utm_*, ...) are ignored.","operationId":"unsubscribe","security":[],"parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Unsubscribed"},"404":{"description":"Link not active"}}},"post":{"tags":["Newsletter"],"summary":"One-click unsubscribe","description":"RFC 8058 one-click unsubscribe for mail clients.","operationId":"unsubscribeOneClick","security":[],"parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Unsubscribed"},"404":{"description":"Link not active"}}}},"/v1/me":{"get":{"tags":["Account"],"summary":"Read key quota","description":"Quota and expiry of the calling key.","operationId":"getClientQuota","responses":{"200":{"description":"Client quota and expiry"},"401":{"description":"Bearer authentication failed"}}},"delete":{"tags":["Account"],"summary":"Revoke the calling key","description":"Revokes the key used for this request.","operationId":"revokeClient","responses":{"200":{"description":"Client key revoked"},"401":{"description":"Bearer authentication failed"}}}},"/mcp":{"post":{"tags":["MCP"],"summary":"MCP Streamable HTTP endpoint","description":"Stateless MCP over Streamable HTTP at https://computefirst.net/mcp. No key needed; an optional key (email sign_in or passkey profile) adds saved tools, history and personal savings. Send Accept: application/json, text/event-stream.","operationId":"mcp","security":[{},{"bearerAuth":[]}],"responses":{"200":{"description":"JSON-RPC response"},"202":{"description":"Notification accepted"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily request allowance reached"}}}},"/v1/discover":{"get":{"tags":["Discovery"],"summary":"Discover tools with an optional contract","description":"Exact or lexical candidates for a task (3 by default), optionally with the contract of a confident first match. With no match, or only uncertain candidates, a short hint says so and points to POST /v1/tool-requests. No key needed.","operationId":"discoverTools","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":256}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":5,"default":3}},{"name":"include_contract","in":"query","schema":{"type":"string","enum":["0","1"],"default":"0"}}],"responses":{"200":{"description":"Exact or lexical candidates; optional first match contract; empty results are valid"}}}},"/v1/execute-batch":{"post":{"tags":["Execution"],"summary":"Run up to 20 tools in one request","description":"Run 1–20 versioned tools, optionally binding distinct top-level input keys to earlier successful result JSON Pointers. No forward/self references. include_result:false omits result data from this response, not consent-gated audit. Each resolved input, individual result and aggregate response JSON is bounded at 256 KiB. Only successes use allowance: without a key or with an email key they are charged after the batch runs; passkey-profile keys reserve every operation and get failures and skipped dependencies (424) back. Inspect summary.failed on HTTP 200. Rebuild failed inputs/references before retrying. No automatic replay.","operationId":"executeBatch","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"X-ComputeFirst-Model","in":"header","required":false,"description":"Optional: your model id, recorded with the call as usage metadata (no estimate is returned; use POST /v1/savings for one). An unusable value is ignored.","schema":{"type":"string","maxLength":256}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["operations"],"properties":{"operations":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["id","version","input"],"properties":{"id":{"type":"string","pattern":"^[a-z0-9_-]+$","minLength":1,"maxLength":100},"version":{"type":"string","pattern":"^[a-zA-Z0-9.+_-]+$","minLength":1,"maxLength":100},"input":{"type":"object"},"include_result":{"type":"boolean","default":true,"description":"False returns a success receipt only; the bounded result remains available to later bindings and consent-gated audit."},"bindings":{"type":"array","maxItems":16,"description":"Fill distinct top-level input keys from earlier successful results; keys must be absent from input.","items":{"type":"object","additionalProperties":false,"required":["key","from","path"],"properties":{"key":{"type":"string","minLength":1,"maxLength":100},"from":{"type":"integer","minimum":0,"maximum":19,"description":"Zero-based earlier operation index; no forward/self references."},"path":{"type":"string","maxLength":1024,"description":"RFC 6901 JSON Pointer into that operation result, not its receipt. Empty selects the whole result."}}}}}}}}}}}},"responses":{"200":{"description":"Ordered per-item outcomes and succeeded/failed summary"},"400":{"description":"Invalid batch envelope; nothing executed"},"401":{"description":"A key was sent but is invalid or expired"},"413":{"description":"Request too large"},"429":{"description":"Insufficient request or execution allowance; nothing executed"},"503":{"description":"Recording unavailable or outcome uncertain; inspect activity before retrying"}}}},"/v1/savings":{"get":{"tags":["Savings"],"summary":"Community savings totals","description":"Anonymous verified cumulative totals; null means unmeasured.","operationId":"getServiceSavings","security":[],"responses":{"200":{"description":"Anonymous verified cumulative totals; null when unmeasured"}}},"post":{"tags":["Savings"],"summary":"Report your model and savings","description":"Give a little data, get more value. With model (and optionally estimated_tokens_saved) this is a model report: the answer carries an estimated dollar value at the model's dated public list price (2026-09-28), labeled \"estimated (client-reported)\", or null when the price or estimate is unknown. With task_id, baseline_id, baseline, actual, whole_task and execution_ref it is a measured comparison, kept separate and client reported until verified. No key needed.","operationId":"reportSavings","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["model"],"properties":{"model":{"type":"string","maxLength":100,"description":"Your model id, free text (normalized), e.g. claude-opus-5-5"},"provider":{"type":"string","maxLength":40},"execution_ref":{"type":"string","format":"uuid"},"estimated_tokens_saved":{"type":"object","additionalProperties":false,"required":["input","output"],"description":"Your own estimate of the tokens this work would otherwise have cost","properties":{"input":{"type":"integer","minimum":0,"maximum":10000000},"output":{"type":"integer","minimum":0,"maximum":10000000}}},"task_id":{"type":"string","minLength":1,"maxLength":100},"baseline_id":{"type":"string","minLength":1,"maxLength":100},"whole_task":{"const":true},"baseline":{"$ref":"#/components/schemas/TokenUsage"},"actual":{"$ref":"#/components/schemas/TokenUsage"}}}}}},"responses":{"200":{"description":"The report with its estimate, and personal totals with a key"},"404":{"description":"A measured comparison names an execution this caller cannot use"},"429":{"description":"Daily report limit reached; see retry_after"}}}},"/v1/stats":{"get":{"tags":["Service"],"summary":"Live counters","description":"Tool count, executions served (today is approximate) and verified community savings. Cached for 5 minutes.","operationId":"getStats","security":[],"responses":{"200":{"description":"Counters"}}}},"/v1/me/savings":{"get":{"tags":["Savings"],"summary":"Read your savings","description":"Account totals, optionally by model, with the latest 20 executions on request.","operationId":"getAccountSavings","parameters":[{"name":"model","in":"query","schema":{"type":"string","maxLength":100}},{"name":"detail","in":"query","schema":{"type":"string","const":"1"}}],"responses":{"200":{"description":"Account totals; optional model breakdown and latest 20 executions"}}},"post":{"tags":["Savings"],"summary":"Report your model and savings (with a key)","description":"Give a little data, get more value. With model (and optionally estimated_tokens_saved) this is a model report: the answer carries an estimated dollar value at the model's dated public list price (2026-09-28), labeled \"estimated (client-reported)\", or null when the price or estimate is unknown. With task_id, baseline_id, baseline, actual, whole_task and execution_ref it is a measured comparison, kept separate and client reported until verified. No key needed. Same as POST /v1/savings.","operationId":"reportTaskComparison","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["model"],"properties":{"model":{"type":"string","maxLength":100,"description":"Your model id, free text (normalized), e.g. claude-opus-5-5"},"provider":{"type":"string","maxLength":40},"execution_ref":{"type":"string","format":"uuid"},"estimated_tokens_saved":{"type":"object","additionalProperties":false,"required":["input","output"],"description":"Your own estimate of the tokens this work would otherwise have cost","properties":{"input":{"type":"integer","minimum":0,"maximum":10000000},"output":{"type":"integer","minimum":0,"maximum":10000000}}},"task_id":{"type":"string","minLength":1,"maxLength":100},"baseline_id":{"type":"string","minLength":1,"maxLength":100},"whole_task":{"const":true},"baseline":{"$ref":"#/components/schemas/TokenUsage"},"actual":{"$ref":"#/components/schemas/TokenUsage"}}}}}},"responses":{"200":{"description":"The report, or a compact client-reported comparison receipt"},"409":{"description":"Conflicting execution/task comparison"}}}},"/v1/accounts/email":{"post":{"tags":["Account"],"summary":"Sign in with an email","description":"Optional and only with the person's agreement: consent must be true (\"Create a free ComputeFirst account for this email. The email is not verified, and ComputeFirst sends it nothing unless I write to ComputeFirst. I accept the Terms of Use and Privacy Policy.\"). Creates a free account for the email (not verified) and returns a new agent key once, for saved tools, history, personal savings, a higher daily limit and tool-request status. Each sign-in is its own account; nothing is merged or disclosed for an email used before. newsletter: true also subscribes the email to new-tool announcements. No key needed.","operationId":"signInWithEmail","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["email","consent"],"properties":{"email":{"type":"string","format":"email","maxLength":254},"consent":{"const":true},"newsletter":{"type":"boolean"}}}}}},"responses":{"201":{"description":"api_key (shown once), key_id, expires_at, privileges"},"400":{"description":"Invalid email or consent not true"},"409":{"description":"The call already uses a key"},"429":{"description":"Daily sign-in limit reached; see retry_after"}}}},"/v1/me/profile":{"get":{"tags":["Account"],"summary":"Read your profile","description":"Identified account profile and agent last seen.","operationId":"getProfile","responses":{"200":{"description":"Identified account profile and agent last seen"}}}},"/v1/me/activity":{"get":{"tags":["Account"],"summary":"Read your activity","description":"Recent account activity with a pagination cursor.","operationId":"getActivity","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"before","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Account activity and next cursor"}}}},"/v1/me/saved-tools":{"get":{"tags":["Account"],"summary":"List saved tools","description":"Your versioned tool library.","operationId":"listSavedTools","responses":{"200":{"description":"Account versioned tool library"}}},"put":{"tags":["Account"],"summary":"Save a tool","description":"Adds a versioned tool to your library; idempotent.","operationId":"saveTool","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["tool","version"],"properties":{"tool":{"type":"string"},"version":{"type":"string"},"note":{"type":"string","maxLength":200}}}}}},"responses":{"200":{"description":"Tool saved; idempotent"}}},"delete":{"tags":["Account"],"summary":"Remove a saved tool","description":"Removes a versioned tool from your library; idempotent.","operationId":"removeSavedTool","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["tool","version"],"properties":{"tool":{"type":"string"},"version":{"type":"string"}}}}}},"responses":{"200":{"description":"Tool removed; idempotent"}}}},"/v1/tools/adler32/versions/1.0.0":{"get":{"tags":["Encoding & checksums"],"summary":"Contract: Adler-32 of UTF-8 bytes (RFC 1950). Integrity check only; no security claim.","description":"Versioned contract (schemas, limits, examples) for adler32. Supported: adler32; adler-32; zlib adler32. Not supported: hmac; sha; cryptographic hash.","operationId":"describe_adler32","security":[],"responses":{"200":{"description":"Adler-32 of UTF-8 bytes (RFC 1950). Integrity check only; no security claim."}}}},"/v1/tools/adler32/versions/1.0.0/execute":{"post":{"tags":["Encoding & checksums"],"summary":"Adler-32 of UTF-8 bytes (RFC 1950). Integrity check only; no security claim.","description":"Supported: adler32; adler-32; zlib adler32. Not supported: hmac; sha; cryptographic hash. Page: https://computefirst.net/tools/adler32","operationId":"execute_adler32","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["hex","value"],"properties":{"hex":{"type":"string","minLength":8,"maxLength":8},"value":{"type":"integer","minimum":0,"maximum":4294967295}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/angle-dms-convert/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Convert a signed integer angle between degrees, arcminutes, and arcseconds as an exact rational.","description":"Versioned contract (schemas, limits, examples) for angle-dms-convert. Supported: angle dms convert; convert degrees arcminutes arcseconds; degree minute second conversion. Not supported: radians; gradians; wrap to 0..360; DMS composite objects.","operationId":"describe_angle_dms_convert","security":[],"responses":{"200":{"description":"Convert a signed integer angle between degrees, arcminutes, and arcseconds as an exact rational."}}}},"/v1/tools/angle-dms-convert/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Convert a signed integer angle between degrees, arcminutes, and arcseconds as an exact rational.","description":"Supported: angle dms convert; convert degrees arcminutes arcseconds; degree minute second conversion. Not supported: radians; gradians; wrap to 0..360; DMS composite objects. Page: https://computefirst.net/tools/angle-dms-convert","operationId":"execute_angle_dms_convert","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value","from","to"],"properties":{"value":{"type":"string","maxLength":1001},"from":{"type":"string","enum":["deg","arcmin","arcsec"]},"to":{"type":"string","enum":["deg","arcmin","arcsec"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-adjacent-diff/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Replace an array of canonical integer strings with consecutive first differences.","description":"Versioned contract (schemas, limits, examples) for array-integer-adjacent-diff. Supported: array integer adjacent diff; consecutive integer differences; first differences of integer array. Not supported: second differences; percentage change; floating point differences; derivative of a function; CSV column differences.","operationId":"describe_array_integer_adjacent_diff","security":[],"responses":{"200":{"description":"Replace an array of canonical integer strings with consecutive first differences."}}}},"/v1/tools/array-integer-adjacent-diff/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Replace an array of canonical integer strings with consecutive first differences.","description":"Supported: array integer adjacent diff; consecutive integer differences; first differences of integer array. Not supported: second differences; percentage change; floating point differences; derivative of a function; CSV column differences. Page: https://computefirst.net/tools/array-integer-adjacent-diff","operationId":"execute_array_integer_adjacent_diff","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":10000,"items":{"type":"string","minLength":1,"maxLength":1001}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":9999,"items":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$","maxLength":1001}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-clamp/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Clamp an array of canonical integer strings to optional inclusive min and max bounds.","description":"Versioned contract (schemas, limits, examples) for array-integer-clamp. Supported: array integer clamp; clamp integer array to bounds; bound integer values by min and max. Not supported: floating point clamp; percentile clipping; outlier detection; interpolate out-of-range values; CSV column clamp.","operationId":"describe_array_integer_clamp","security":[],"responses":{"200":{"description":"Clamp an array of canonical integer strings to optional inclusive min and max bounds."}}}},"/v1/tools/array-integer-clamp/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Clamp an array of canonical integer strings to optional inclusive min and max bounds.","description":"Supported: array integer clamp; clamp integer array to bounds; bound integer values by min and max. Not supported: floating point clamp; percentile clipping; outlier detection; interpolate out-of-range values; CSV column clamp. Page: https://computefirst.net/tools/array-integer-clamp","operationId":"execute_array_integer_clamp","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"anyOf":[{"required":["min"]},{"required":["max"]}],"properties":{"values":{"type":"array","maxItems":10000,"items":{"type":"string","minLength":1,"maxLength":1001}},"min":{"type":"string","minLength":1,"maxLength":1001},"max":{"type":"string","minLength":1,"maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":10000,"items":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$","maxLength":1001}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-cumulative-sum/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Replace an array of canonical integer strings with equal-length prefix sums.","description":"Versioned contract (schemas, limits, examples) for array-integer-cumulative-sum. Supported: array integer cumulative sum; prefix sums of integer array; running total of integer strings. Not supported: floating point prefix sums; moving average; cumulative product; mean of integers; CSV column sums.","operationId":"describe_array_integer_cumulative_sum","security":[],"responses":{"200":{"description":"Replace an array of canonical integer strings with equal-length prefix sums."}}}},"/v1/tools/array-integer-cumulative-sum/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Replace an array of canonical integer strings with equal-length prefix sums.","description":"Supported: array integer cumulative sum; prefix sums of integer array; running total of integer strings. Not supported: floating point prefix sums; moving average; cumulative product; mean of integers; CSV column sums. Page: https://computefirst.net/tools/array-integer-cumulative-sum","operationId":"execute_array_integer_cumulative_sum","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":10000,"items":{"type":"string","minLength":1,"maxLength":1001}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":10000,"items":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$","maxLength":1001}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-median/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Select lower and upper middle canonical integers; emit median only for odd length.","description":"Versioned contract (schemas, limits, examples) for array-integer-median. Supported: array integer median; median of integer strings; middle values of an integer list. Not supported: average even-length arrays; floating-point median; percentiles; CSV column median.","operationId":"describe_array_integer_median","security":[],"responses":{"200":{"description":"Select lower and upper middle canonical integers; emit median only for odd length."}}}},"/v1/tools/array-integer-median/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Select lower and upper middle canonical integers; emit median only for odd length.","description":"Supported: array integer median; median of integer strings; middle values of an integer list. Not supported: average even-length arrays; floating-point median; percentiles; CSV column median. Page: https://computefirst.net/tools/array-integer-median","operationId":"execute_array_integer_median","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"string","minLength":1,"maxLength":1001}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["n","lower","upper"],"properties":{"n":{"type":"integer","minimum":1,"maximum":10000},"lower":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"},"upper":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"},"median":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-min-max/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Return the numeric minimum and maximum of canonical integer strings.","description":"Versioned contract (schemas, limits, examples) for array-integer-min-max. Supported: array integer min max; minimum and maximum of integers; integer array bounds. Not supported: index of min; floating comparison; mean; csv column min max.","operationId":"describe_array_integer_min_max","security":[],"responses":{"200":{"description":"Return the numeric minimum and maximum of canonical integer strings."}}}},"/v1/tools/array-integer-min-max/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Return the numeric minimum and maximum of canonical integer strings.","description":"Supported: array integer min max; minimum and maximum of integers; integer array bounds. Not supported: index of min; floating comparison; mean; csv column min max. Page: https://computefirst.net/tools/array-integer-min-max","operationId":"execute_array_integer_min_max","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["min","max"],"properties":{"min":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$","maxLength":1001},"max":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$","maxLength":1001}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-mode/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Return the most frequent canonical integers, listing every mode in first-seen order.","description":"Versioned contract (schemas, limits, examples) for array-integer-mode. Supported: array integer mode; mode of integer strings; most frequent integers. Not supported: kernel density; fuzzy clustering; mean of integers; CSV column mode.","operationId":"describe_array_integer_mode","security":[],"responses":{"200":{"description":"Return the most frequent canonical integers, listing every mode in first-seen order."}}}},"/v1/tools/array-integer-mode/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Return the most frequent canonical integers, listing every mode in first-seen order.","description":"Supported: array integer mode; mode of integer strings; most frequent integers. Not supported: kernel density; fuzzy clustering; mean of integers; CSV column mode. Page: https://computefirst.net/tools/array-integer-mode","operationId":"execute_array_integer_mode","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"string","minLength":1,"maxLength":1001}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["modes","count"],"properties":{"modes":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"}},"count":{"type":"integer","minimum":1,"maximum":10000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-product/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Multiply an array of canonical integer strings and return the canonical product.","description":"Versioned contract (schemas, limits, examples) for array-integer-product. Supported: array integer product; product of integer array; multiply canonical integer strings. Not supported: floating point product; factorial; csv column product; mean.","operationId":"describe_array_integer_product","security":[],"responses":{"200":{"description":"Multiply an array of canonical integer strings and return the canonical product."}}}},"/v1/tools/array-integer-product/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Multiply an array of canonical integer strings and return the canonical product.","description":"Supported: array integer product; product of integer array; multiply canonical integer strings. Not supported: floating point product; factorial; csv column product; mean. Page: https://computefirst.net/tools/array-integer-product","operationId":"execute_array_integer_product","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":10000,"items":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["product"],"properties":{"product":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$","maxLength":1001}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-ranks/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Assign competition (1224) ranks to canonical integers; ties share the minimum rank.","description":"Versioned contract (schemas, limits, examples) for array-integer-ranks. Supported: array integer ranks; competition ranks of integers; 1224 integer ranks. Not supported: dense ranks; ordinal ranks; fractional ranks; percentile ranks.","operationId":"describe_array_integer_ranks","security":[],"responses":{"200":{"description":"Assign competition (1224) ranks to canonical integers; ties share the minimum rank."}}}},"/v1/tools/array-integer-ranks/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Assign competition (1224) ranks to canonical integers; ties share the minimum rank.","description":"Supported: array integer ranks; competition ranks of integers; 1224 integer ranks. Not supported: dense ranks; ordinal ranks; fractional ranks; percentile ranks. Page: https://computefirst.net/tools/array-integer-ranks","operationId":"execute_array_integer_ranks","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"string","minLength":1,"maxLength":1001}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["ranks"],"properties":{"ranks":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"integer","minimum":1,"maximum":10000}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-sum/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Sum an array of canonical integer strings and return the canonical total.","description":"Versioned contract (schemas, limits, examples) for array-integer-sum. Supported: array integer sum; sum integer array; sum canonical integer strings. Not supported: floating point sum; mean; csv column sum; integer product.","operationId":"describe_array_integer_sum","security":[],"responses":{"200":{"description":"Sum an array of canonical integer strings and return the canonical total."}}}},"/v1/tools/array-integer-sum/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Sum an array of canonical integer strings and return the canonical total.","description":"Supported: array integer sum; sum integer array; sum canonical integer strings. Not supported: floating point sum; mean; csv column sum; integer product. Page: https://computefirst.net/tools/array-integer-sum","operationId":"execute_array_integer_sum","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":10000,"items":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["sum"],"properties":{"sum":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$","maxLength":1001}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-rational-mean/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Return the reduced arithmetic mean of an array of canonical rationals.","description":"Versioned contract (schemas, limits, examples) for array-rational-mean. Supported: array rational mean; average of rationals; mean of an array of fractions. Not supported: floating-point mean; weighted mean; median of rationals; standard deviation; decimal string mean; IEEE-754 arithmetic.","operationId":"describe_array_rational_mean","security":[],"responses":{"200":{"description":"Return the reduced arithmetic mean of an array of canonical rationals."}}}},"/v1/tools/array-rational-mean/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Return the reduced arithmetic mean of an array of canonical rationals.","description":"Supported: array rational mean; average of rationals; mean of an array of fractions. Not supported: floating-point mean; weighted mean; median of rationals; standard deviation; decimal string mean; IEEE-754 arithmetic. Page: https://computefirst.net/tools/array-rational-mean","operationId":"execute_array_rational_mean","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-rational-min-max/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Return the reduced numeric minimum and maximum of an array of canonical rationals.","description":"Versioned contract (schemas, limits, examples) for array-rational-min-max. Supported: array rational min max; minimum and maximum of rationals; min and max of an array of fractions. Not supported: index of min or max; floating-point comparison; sort rationals; mean of rationals; decimal string min max; IEEE-754 arithmetic.","operationId":"describe_array_rational_min_max","security":[],"responses":{"200":{"description":"Return the reduced numeric minimum and maximum of an array of canonical rationals."}}}},"/v1/tools/array-rational-min-max/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Return the reduced numeric minimum and maximum of an array of canonical rationals.","description":"Supported: array rational min max; minimum and maximum of rationals; min and max of an array of fractions. Not supported: index of min or max; floating-point comparison; sort rationals; mean of rationals; decimal string min max; IEEE-754 arithmetic. Page: https://computefirst.net/tools/array-rational-min-max","operationId":"execute_array_rational_min_max","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["min","max"],"properties":{"min":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}},"max":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-rational-sum/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Sum an array of canonical rationals and return the reduced total.","description":"Versioned contract (schemas, limits, examples) for array-rational-sum. Supported: array rational sum; sum an array of rationals; add a list of fractions; total of rational numbers. Not supported: mean of rationals; min and max of rationals; floating-point sum; decimal string sum; CSV column sum; IEEE-754 arithmetic.","operationId":"describe_array_rational_sum","security":[],"responses":{"200":{"description":"Sum an array of canonical rationals and return the reduced total."}}}},"/v1/tools/array-rational-sum/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Sum an array of canonical rationals and return the reduced total.","description":"Supported: array rational sum; sum an array of rationals; add a list of fractions; total of rational numbers. Not supported: mean of rationals; min and max of rationals; floating-point sum; decimal string sum; CSV column sum; IEEE-754 arithmetic. Page: https://computefirst.net/tools/array-rational-sum","operationId":"execute_array_rational_sum","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-to-jsonl/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Serialize an array of JSON-safe values as JSON Lines text.","description":"Versioned contract (schemas, limits, examples) for array-to-jsonl. Supported: array to jsonl; serialize array as json lines; convert json array to jsonl. Not supported: pretty-print jsonl; sort object keys; JSONL comments; non-integer numbers; read files.","operationId":"describe_array_to_jsonl","security":[],"responses":{"200":{"description":"Serialize an array of JSON-safe values as JSON Lines text."}}}},"/v1/tools/array-to-jsonl/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Serialize an array of JSON-safe values as JSON Lines text.","description":"Supported: array to jsonl; serialize array as json lines; convert json array to jsonl. Not supported: pretty-print jsonl; sort object keys; JSONL comments; non-integer numbers; read files. Page: https://computefirst.net/tools/array-to-jsonl","operationId":"execute_array_to_jsonl","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":5000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/base64-utf8/versions/1.0.0":{"get":{"tags":["Encoding & checksums"],"summary":"Contract: Decode standard Base64 to UTF-8 text. Transformation only; no security claim.","description":"Versioned contract (schemas, limits, examples) for base64-utf8. Supported: base64 utf8; base64 decode utf8; decode base64 text. Not supported: base64url; ignore whitespace; compression; encryption.","operationId":"describe_base64_utf8","security":[],"responses":{"200":{"description":"Decode standard Base64 to UTF-8 text. Transformation only; no security claim."}}}},"/v1/tools/base64-utf8/versions/1.0.0/execute":{"post":{"tags":["Encoding & checksums"],"summary":"Decode standard Base64 to UTF-8 text. Transformation only; no security claim.","description":"Supported: base64 utf8; base64 decode utf8; decode base64 text. Not supported: base64url; ignore whitespace; compression; encryption. Page: https://computefirst.net/tools/base64-utf8","operationId":"execute_base64_utf8","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["base64"],"properties":{"base64":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/bytesize-add/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Add non-negative integer byte-size terms in mixed IEC units and return the exact sum in a chosen unit.","description":"Versioned contract (schemas, limits, examples) for bytesize-add. Supported: bytesize add; add binary byte sizes; sum kibibyte amounts. Not supported: SI kB/MB/GB; bits; signed byte sizes; more than 32 terms; subtract byte sizes.","operationId":"describe_bytesize_add","security":[],"responses":{"200":{"description":"Add non-negative integer byte-size terms in mixed IEC units and return the exact sum in a chosen unit."}}}},"/v1/tools/bytesize-add/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Add non-negative integer byte-size terms in mixed IEC units and return the exact sum in a chosen unit.","description":"Supported: bytesize add; add binary byte sizes; sum kibibyte amounts. Not supported: SI kB/MB/GB; bits; signed byte sizes; more than 32 terms; subtract byte sizes. Page: https://computefirst.net/tools/bytesize-add","operationId":"execute_bytesize_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["terms","to"],"properties":{"terms":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["B","KiB","MiB","GiB","TiB"]}}}},"to":{"type":"string","enum":["B","KiB","MiB","GiB","TiB"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"denominator":{"type":"string","pattern":"^[1-9][0-9]*$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/bytesize-compare/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Compare two non-negative integer byte sizes by exact byte amounts.","description":"Versioned contract (schemas, limits, examples) for bytesize-compare. Supported: bytesize compare; compare binary byte sizes; compare kibibytes and mebibytes. Not supported: SI kB/MB/GB; bits; signed byte sizes; sort a list of sizes; approximate comparison.","operationId":"describe_bytesize_compare","security":[],"responses":{"200":{"description":"Compare two non-negative integer byte sizes by exact byte amounts."}}}},"/v1/tools/bytesize-compare/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Compare two non-negative integer byte sizes by exact byte amounts.","description":"Supported: bytesize compare; compare binary byte sizes; compare kibibytes and mebibytes. Not supported: SI kB/MB/GB; bits; signed byte sizes; sort a list of sizes; approximate comparison. Page: https://computefirst.net/tools/bytesize-compare","operationId":"execute_bytesize_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["B","KiB","MiB","GiB","TiB"]}}},"right":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["B","KiB","MiB","GiB","TiB"]}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["cmp"],"properties":{"cmp":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/bytesize-convert/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Convert a non-negative integer byte size between IEC binary units as an exact rational.","description":"Versioned contract (schemas, limits, examples) for bytesize-convert. Supported: bytesize convert; convert binary byte units; convert kibibytes to bytes. Not supported: SI kB/MB/GB; bits; signed byte sizes; decimal megabytes; fuzzy unit names.","operationId":"describe_bytesize_convert","security":[],"responses":{"200":{"description":"Convert a non-negative integer byte size between IEC binary units as an exact rational."}}}},"/v1/tools/bytesize-convert/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Convert a non-negative integer byte size between IEC binary units as an exact rational.","description":"Supported: bytesize convert; convert binary byte units; convert kibibytes to bytes. Not supported: SI kB/MB/GB; bits; signed byte sizes; decimal megabytes; fuzzy unit names. Page: https://computefirst.net/tools/bytesize-convert","operationId":"execute_bytesize_convert","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value","from","to"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"from":{"type":"string","enum":["B","KiB","MiB","GiB","TiB"]},"to":{"type":"string","enum":["B","KiB","MiB","GiB","TiB"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"denominator":{"type":"string","pattern":"^[1-9][0-9]*$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/crc32/versions/1.0.0":{"get":{"tags":["Encoding & checksums"],"summary":"Contract: CRC-32 of UTF-8 bytes (ISO 3309 / ZIP / PNG polynomial). Integrity check only; no security claim.","description":"Versioned contract (schemas, limits, examples) for crc32. Supported: crc32; crc-32; zip crc32. Not supported: crc32c; hmac; sha; cryptographic hash.","operationId":"describe_crc32","security":[],"responses":{"200":{"description":"CRC-32 of UTF-8 bytes (ISO 3309 / ZIP / PNG polynomial). Integrity check only; no security claim."}}}},"/v1/tools/crc32/versions/1.0.0/execute":{"post":{"tags":["Encoding & checksums"],"summary":"CRC-32 of UTF-8 bytes (ISO 3309 / ZIP / PNG polynomial). Integrity check only; no security claim.","description":"Supported: crc32; crc-32; zip crc32. Not supported: crc32c; hmac; sha; cryptographic hash. Page: https://computefirst.net/tools/crc32","operationId":"execute_crc32","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["hex","value"],"properties":{"hex":{"type":"string","minLength":8,"maxLength":8},"value":{"type":"integer","minimum":0,"maximum":4294967295}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-abs-integer-column/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Replace every data cell in a named CSV column with the absolute value of a canonical integer.","description":"Versioned contract (schemas, limits, examples) for csv-abs-integer-column. Supported: csv abs integer column; absolute value csv integer column; csv column absolute value. Not supported: floating point abs; complex modulus; unicode digit normalization; read files; fetch urls.","operationId":"describe_csv_abs_integer_column","security":[],"responses":{"200":{"description":"Replace every data cell in a named CSV column with the absolute value of a canonical integer."}}}},"/v1/tools/csv-abs-integer-column/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Replace every data cell in a named CSV column with the absolute value of a canonical integer.","description":"Supported: csv abs integer column; absolute value csv integer column; csv column absolute value. Not supported: floating point abs; complex modulus; unicode digit normalization; read files; fetch urls. Page: https://computefirst.net/tools/csv-abs-integer-column","operationId":"execute_csv_abs_integer_column","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","column"],"properties":{"csv":{"type":"string","maxLength":256000},"column":{"type":"string","minLength":1,"maxLength":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-add-row-number/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Prepend a 1-based row_number column of canonical integer strings.","description":"Versioned contract (schemas, limits, examples) for csv-add-row-number. Supported: csv add row number; csv row numbers; enumerate csv rows. Not supported: 0-based; gap fill; sort.","operationId":"describe_csv_add_row_number","security":[],"responses":{"200":{"description":"Prepend a 1-based row_number column of canonical integer strings."}}}},"/v1/tools/csv-add-row-number/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Prepend a 1-based row_number column of canonical integer strings.","description":"Supported: csv add row number; csv row numbers; enumerate csv rows. Not supported: 0-based; gap fill; sort. Page: https://computefirst.net/tools/csv-add-row-number","operationId":"execute_csv_add_row_number","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string","maxLength":256000},"column_name":{"type":"string","minLength":1,"maxLength":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","rows_in"],"properties":{"csv":{"type":"string"},"rows_in":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-anti-join/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Keep left CSV rows whose exact key tuples do not appear in the right document.","description":"Versioned contract (schemas, limits, examples) for csv-anti-join. Supported: csv anti join; keep unmatched left csv rows; csv rows absent from right keys. Not supported: inner join; left join; outer join; fuzzy keys; numeric keys; suffix collision renaming; read files; fetch urls.","operationId":"describe_csv_anti_join","security":[],"responses":{"200":{"description":"Keep left CSV rows whose exact key tuples do not appear in the right document."}}}},"/v1/tools/csv-anti-join/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Keep left CSV rows whose exact key tuples do not appear in the right document.","description":"Supported: csv anti join; keep unmatched left csv rows; csv rows absent from right keys. Not supported: inner join; left join; outer join; fuzzy keys; numeric keys; suffix collision renaming; read files; fetch urls. Page: https://computefirst.net/tools/csv-anti-join","operationId":"execute_csv_anti_join","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right","keys"],"properties":{"left":{"type":"string","maxLength":256000},"right":{"type":"string","maxLength":256000},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","rows_in","rows_out"],"properties":{"csv":{"type":"string","maxLength":256000},"rows_in":{"type":"integer"},"rows_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-clamp-integer-column/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Clamp every data cell in a named CSV column to optional canonical integer min and max bounds.","description":"Versioned contract (schemas, limits, examples) for csv-clamp-integer-column. Supported: csv clamp integer column; clamp csv integer column; bound csv integer column. Not supported: floating point clamp; percentile clip; infer bounds; trim cells; read files; fetch urls.","operationId":"describe_csv_clamp_integer_column","security":[],"responses":{"200":{"description":"Clamp every data cell in a named CSV column to optional canonical integer min and max bounds."}}}},"/v1/tools/csv-clamp-integer-column/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Clamp every data cell in a named CSV column to optional canonical integer min and max bounds.","description":"Supported: csv clamp integer column; clamp csv integer column; bound csv integer column. Not supported: floating point clamp; percentile clip; infer bounds; trim cells; read files; fetch urls. Page: https://computefirst.net/tools/csv-clamp-integer-column","operationId":"execute_csv_clamp_integer_column","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","column"],"properties":{"csv":{"type":"string","maxLength":256000},"column":{"type":"string","minLength":1,"maxLength":256},"min":{"type":"string","minLength":1,"maxLength":1001},"max":{"type":"string","minLength":1,"maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-concat/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Concatenate CSV documents that share identical headers, preserving document and row order.","description":"Versioned contract (schemas, limits, examples) for csv-concat. Supported: csv concat; concatenate csv documents; append csv rows with matching headers; stack csv documents. Not supported: union mismatched schemas; reorder columns to match; fuzzy header matching; case-insensitive headers; read files; fetch urls.","operationId":"describe_csv_concat","security":[],"responses":{"200":{"description":"Concatenate CSV documents that share identical headers, preserving document and row order."}}}},"/v1/tools/csv-concat/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Concatenate CSV documents that share identical headers, preserving document and row order.","description":"Supported: csv concat; concatenate csv documents; append csv rows with matching headers; stack csv documents. Not supported: union mismatched schemas; reorder columns to match; fuzzy header matching; case-insensitive headers; read files; fetch urls. Page: https://computefirst.net/tools/csv-concat","operationId":"execute_csv_concat","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["documents"],"properties":{"documents":{"type":"array","minItems":2,"maxItems":20,"items":{"type":"string","maxLength":256000}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","documents_in","rows_out"],"properties":{"csv":{"type":"string"},"documents_in":{"type":"integer"},"rows_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-dedupe/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Remove duplicate CSV data rows while preserving the first occurrence.","description":"Versioned contract (schemas, limits, examples) for csv-dedupe. Supported: csv dedupe; csv deduplicate; remove duplicate csv rows; dedupe csv by named columns. Not supported: normalize values; fuzzy matching; merge rows; read files; fetch urls.","operationId":"describe_csv_dedupe","security":[],"responses":{"200":{"description":"Remove duplicate CSV data rows while preserving the first occurrence."}}}},"/v1/tools/csv-dedupe/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Remove duplicate CSV data rows while preserving the first occurrence.","description":"Supported: csv dedupe; csv deduplicate; remove duplicate csv rows; dedupe csv by named columns. Not supported: normalize values; fuzzy matching; merge rows; read files; fetch urls. Page: https://computefirst.net/tools/csv-dedupe","operationId":"execute_csv_dedupe","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string","maxLength":256000},"key_columns":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","minLength":1},"maxItems":100}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","rows_in","rows_out","duplicates_removed"],"properties":{"csv":{"type":"string"},"rows_in":{"type":"integer"},"rows_out":{"type":"integer"},"duplicates_removed":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-distinct-values/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: List distinct exact values of one CSV column in first-seen order.","description":"Versioned contract (schemas, limits, examples) for csv-distinct-values. Supported: csv distinct values; unique csv column values; distinct column. Not supported: sort; case fold; trim; numeric unique.","operationId":"describe_csv_distinct_values","security":[],"responses":{"200":{"description":"List distinct exact values of one CSV column in first-seen order."}}}},"/v1/tools/csv-distinct-values/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"List distinct exact values of one CSV column in first-seen order.","description":"Supported: csv distinct values; unique csv column values; distinct column. Not supported: sort; case fold; trim; numeric unique. Page: https://computefirst.net/tools/csv-distinct-values","operationId":"execute_csv_distinct_values","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","column"],"properties":{"csv":{"type":"string","maxLength":256000},"column":{"type":"string","minLength":1,"maxLength":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["values","rows_in","distinct"],"properties":{"values":{"type":"array","items":{"type":"string"}},"rows_in":{"type":"integer"},"distinct":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-drop-columns/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Drop named CSV columns and keep the remaining columns in original header order.","description":"Versioned contract (schemas, limits, examples) for csv-drop-columns. Supported: csv drop columns; drop csv columns; remove csv columns. Not supported: rename columns; reorder remaining columns; fuzzy header matching; drop rows; read files; fetch urls.","operationId":"describe_csv_drop_columns","security":[],"responses":{"200":{"description":"Drop named CSV columns and keep the remaining columns in original header order."}}}},"/v1/tools/csv-drop-columns/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Drop named CSV columns and keep the remaining columns in original header order.","description":"Supported: csv drop columns; drop csv columns; remove csv columns. Not supported: rename columns; reorder remaining columns; fuzzy header matching; drop rows; read files; fetch urls. Page: https://computefirst.net/tools/csv-drop-columns","operationId":"execute_csv_drop_columns","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","columns"],"properties":{"csv":{"type":"string","maxLength":256000},"columns":{"type":"array","minItems":1,"maxItems":256,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-fill-defaults/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Replace empty cells in named CSV columns with exact default strings.","description":"Versioned contract (schemas, limits, examples) for csv-fill-defaults. Supported: csv fill defaults; fill empty csv cells with defaults; replace empty csv cells; csv fill empty columns. Not supported: trim cells before filling; fill whitespace-only cells; infer defaults; fuzzy column matching; type coercion; read files; fetch urls.","operationId":"describe_csv_fill_defaults","security":[],"responses":{"200":{"description":"Replace empty cells in named CSV columns with exact default strings."}}}},"/v1/tools/csv-fill-defaults/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Replace empty cells in named CSV columns with exact default strings.","description":"Supported: csv fill defaults; fill empty csv cells with defaults; replace empty csv cells; csv fill empty columns. Not supported: trim cells before filling; fill whitespace-only cells; infer defaults; fuzzy column matching; type coercion; read files; fetch urls. Page: https://computefirst.net/tools/csv-fill-defaults","operationId":"execute_csv_fill_defaults","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","defaults"],"properties":{"csv":{"type":"string","maxLength":256000},"defaults":{"type":"object","additionalProperties":{"type":"string"},"maxProperties":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","cells_filled"],"properties":{"csv":{"type":"string"},"cells_filled":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-filter-empty/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Keep or drop CSV rows whose named column is the empty string.","description":"Versioned contract (schemas, limits, examples) for csv-filter-empty. Supported: csv filter empty; drop empty csv cells; keep empty csv cells. Not supported: whitespace as empty; null inference; read files.","operationId":"describe_csv_filter_empty","security":[],"responses":{"200":{"description":"Keep or drop CSV rows whose named column is the empty string."}}}},"/v1/tools/csv-filter-empty/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Keep or drop CSV rows whose named column is the empty string.","description":"Supported: csv filter empty; drop empty csv cells; keep empty csv cells. Not supported: whitespace as empty; null inference; read files. Page: https://computefirst.net/tools/csv-filter-empty","operationId":"execute_csv_filter_empty","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","column"],"properties":{"csv":{"type":"string","maxLength":256000},"column":{"type":"string","minLength":1,"maxLength":256},"keep_empty":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","rows_in","rows_out"],"properties":{"csv":{"type":"string"},"rows_in":{"type":"integer"},"rows_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-filter-equals/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Keep CSV data rows whose named column equals an exact string.","description":"Versioned contract (schemas, limits, examples) for csv-filter-equals. Supported: csv filter equals; filter csv by column value; csv where column equals. Not supported: trim; case fold; regex; numeric compare; read files.","operationId":"describe_csv_filter_equals","security":[],"responses":{"200":{"description":"Keep CSV data rows whose named column equals an exact string."}}}},"/v1/tools/csv-filter-equals/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Keep CSV data rows whose named column equals an exact string.","description":"Supported: csv filter equals; filter csv by column value; csv where column equals. Not supported: trim; case fold; regex; numeric compare; read files. Page: https://computefirst.net/tools/csv-filter-equals","operationId":"execute_csv_filter_equals","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","column","value"],"properties":{"csv":{"type":"string","maxLength":256000},"column":{"type":"string","minLength":1,"maxLength":256},"value":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","rows_in","rows_out"],"properties":{"csv":{"type":"string"},"rows_in":{"type":"integer"},"rows_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-group-count/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Count CSV rows by exact named-column tuples in first-seen order.","description":"Versioned contract (schemas, limits, examples) for csv-group-count. Supported: csv group count; count csv rows by columns; csv group by. Not supported: sum other columns; sort groups; case fold; numeric bins.","operationId":"describe_csv_group_count","security":[],"responses":{"200":{"description":"Count CSV rows by exact named-column tuples in first-seen order."}}}},"/v1/tools/csv-group-count/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Count CSV rows by exact named-column tuples in first-seen order.","description":"Supported: csv group count; count csv rows by columns; csv group by. Not supported: sum other columns; sort groups; case fold; numeric bins. Page: https://computefirst.net/tools/csv-group-count","operationId":"execute_csv_group_count","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","group_columns"],"properties":{"csv":{"type":"string","maxLength":256000},"group_columns":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","rows_in","groups_out"],"properties":{"csv":{"type":"string"},"rows_in":{"type":"integer"},"groups_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-inner-join/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Inner join two CSV documents on exact named key columns.","description":"Versioned contract (schemas, limits, examples) for csv-inner-join. Supported: csv inner join; inner join csv; join csv documents on keys. Not supported: outer join; left join; fuzzy keys; numeric keys; read files; fetch urls.","operationId":"describe_csv_inner_join","security":[],"responses":{"200":{"description":"Inner join two CSV documents on exact named key columns."}}}},"/v1/tools/csv-inner-join/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Inner join two CSV documents on exact named key columns.","description":"Supported: csv inner join; inner join csv; join csv documents on keys. Not supported: outer join; left join; fuzzy keys; numeric keys; read files; fetch urls. Page: https://computefirst.net/tools/csv-inner-join","operationId":"execute_csv_inner_join","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right","keys"],"properties":{"left":{"type":"string","maxLength":256000},"right":{"type":"string","maxLength":256000},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}},"left_suffix":{"type":"string","minLength":1,"maxLength":32,"default":"_left"},"right_suffix":{"type":"string","minLength":1,"maxLength":32,"default":"_right"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","rows_out"],"properties":{"csv":{"type":"string"},"rows_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-left-join/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Left join two CSV documents on exact named key columns.","description":"Versioned contract (schemas, limits, examples) for csv-left-join. Supported: csv left join; left join csv documents; left join csv on named keys. Not supported: inner join; right join; full outer join; fuzzy keys; numeric keys; read files; fetch urls.","operationId":"describe_csv_left_join","security":[],"responses":{"200":{"description":"Left join two CSV documents on exact named key columns."}}}},"/v1/tools/csv-left-join/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Left join two CSV documents on exact named key columns.","description":"Supported: csv left join; left join csv documents; left join csv on named keys. Not supported: inner join; right join; full outer join; fuzzy keys; numeric keys; read files; fetch urls. Page: https://computefirst.net/tools/csv-left-join","operationId":"execute_csv_left_join","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right","keys"],"properties":{"left":{"type":"string","maxLength":256000},"right":{"type":"string","maxLength":256000},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}},"left_suffix":{"type":"string","minLength":1,"maxLength":32,"default":"_left"},"right_suffix":{"type":"string","minLength":1,"maxLength":32,"default":"_right"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","rows_out","unmatched_left_rows"],"properties":{"csv":{"type":"string"},"rows_out":{"type":"integer"},"unmatched_left_rows":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-merge-columns/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Join named CSV columns with an exact separator into one column.","description":"Versioned contract (schemas, limits, examples) for csv-merge-columns. Supported: csv merge columns; join csv columns with separator; combine csv columns into one. Not supported: skip empty parts; trim cells before joining; regex join; infer target name; fuzzy matching; read files; fetch urls.","operationId":"describe_csv_merge_columns","security":[],"responses":{"200":{"description":"Join named CSV columns with an exact separator into one column."}}}},"/v1/tools/csv-merge-columns/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Join named CSV columns with an exact separator into one column.","description":"Supported: csv merge columns; join csv columns with separator; combine csv columns into one. Not supported: skip empty parts; trim cells before joining; regex join; infer target name; fuzzy matching; read files; fetch urls. Page: https://computefirst.net/tools/csv-merge-columns","operationId":"execute_csv_merge_columns","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","columns","separator","into"],"properties":{"csv":{"type":"string","maxLength":256000},"columns":{"type":"array","minItems":2,"maxItems":16,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}},"separator":{"type":"string","maxLength":16},"into":{"type":"string","minLength":1,"maxLength":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-min-max-integers/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Minimum and maximum of a CSV column of strict signed base-10 integer strings.","description":"Versioned contract (schemas, limits, examples) for csv-min-max-integers. Supported: csv min max integers; csv integer range; min max csv integers. Not supported: floats; ignore empty; median; locale.","operationId":"describe_csv_min_max_integers","security":[],"responses":{"200":{"description":"Minimum and maximum of a CSV column of strict signed base-10 integer strings."}}}},"/v1/tools/csv-min-max-integers/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Minimum and maximum of a CSV column of strict signed base-10 integer strings.","description":"Supported: csv min max integers; csv integer range; min max csv integers. Not supported: floats; ignore empty; median; locale. Page: https://computefirst.net/tools/csv-min-max-integers","operationId":"execute_csv_min_max_integers","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","column"],"properties":{"csv":{"type":"string","maxLength":256000},"column":{"type":"string","minLength":1,"maxLength":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["min","max","rows_used"],"properties":{"min":{"type":"string"},"max":{"type":"string"},"rows_used":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-rename-columns/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Rename CSV headers by an exact from/to mapping, preserving row cells and column order.","description":"Versioned contract (schemas, limits, examples) for csv-rename-columns. Supported: csv rename columns; rename csv columns; rename csv headers. Not supported: fuzzy header matching; case-insensitive rename; infer new names; drop columns; reorder columns; read files; fetch urls.","operationId":"describe_csv_rename_columns","security":[],"responses":{"200":{"description":"Rename CSV headers by an exact from/to mapping, preserving row cells and column order."}}}},"/v1/tools/csv-rename-columns/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Rename CSV headers by an exact from/to mapping, preserving row cells and column order.","description":"Supported: csv rename columns; rename csv columns; rename csv headers. Not supported: fuzzy header matching; case-insensitive rename; infer new names; drop columns; reorder columns; read files; fetch urls. Page: https://computefirst.net/tools/csv-rename-columns","operationId":"execute_csv_rename_columns","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","mapping"],"properties":{"csv":{"type":"string","maxLength":256000},"mapping":{"type":"array","minItems":1,"maxItems":256,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-replace-exact/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Replace CSV data cells whose entire value equals an exact find string.","description":"Versioned contract (schemas, limits, examples) for csv-replace-exact. Supported: csv replace exact; replace exact csv cells; csv cell exact substitution. Not supported: substring replacement; regex replacement; case-insensitive replace; header replacement; text-replace-exact on the raw csv document; trim cells; read files; fetch urls.","operationId":"describe_csv_replace_exact","security":[],"responses":{"200":{"description":"Replace CSV data cells whose entire value equals an exact find string."}}}},"/v1/tools/csv-replace-exact/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Replace CSV data cells whose entire value equals an exact find string.","description":"Supported: csv replace exact; replace exact csv cells; csv cell exact substitution. Not supported: substring replacement; regex replacement; case-insensitive replace; header replacement; text-replace-exact on the raw csv document; trim cells; read files; fetch urls. Page: https://computefirst.net/tools/csv-replace-exact","operationId":"execute_csv_replace_exact","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","find","replace"],"properties":{"csv":{"type":"string","maxLength":256000},"find":{"type":"string","maxLength":262144},"replace":{"type":"string","maxLength":262144},"columns":{"type":"array","minItems":1,"maxItems":256,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","replacements"],"properties":{"csv":{"type":"string"},"replacements":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-row-diff/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Compare two CSV documents with identical headers by unique key tuples and report added, removed, and changed rows.","description":"Versioned contract (schemas, limits, examples) for csv-row-diff. Supported: csv row diff; diff csv rows by keys; compare keyed csv rows. Not supported: outer join; fuzzy matching; numeric comparison; case-insensitive diff; unkeyed row diff; read files; fetch urls.","operationId":"describe_csv_row_diff","security":[],"responses":{"200":{"description":"Compare two CSV documents with identical headers by unique key tuples and report added, removed, and changed rows."}}}},"/v1/tools/csv-row-diff/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Compare two CSV documents with identical headers by unique key tuples and report added, removed, and changed rows.","description":"Supported: csv row diff; diff csv rows by keys; compare keyed csv rows. Not supported: outer join; fuzzy matching; numeric comparison; case-insensitive diff; unkeyed row diff; read files; fetch urls. Page: https://computefirst.net/tools/csv-row-diff","operationId":"execute_csv_row_diff","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right","keys"],"properties":{"left":{"type":"string","maxLength":256000},"right":{"type":"string","maxLength":256000},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["added","removed","changed","counts"],"properties":{"added":{"type":"string"},"removed":{"type":"string"},"changed":{"type":"string"},"counts":{"type":"object","additionalProperties":false,"required":["added","removed","changed","unchanged"],"properties":{"added":{"type":"integer"},"removed":{"type":"integer"},"changed":{"type":"integer"},"unchanged":{"type":"integer"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-scale-integer-column/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Multiply every data cell in a named CSV column by a canonical integer factor.","description":"Versioned contract (schemas, limits, examples) for csv-scale-integer-column. Supported: csv scale integer column; multiply csv integer column; scale csv column by integer. Not supported: floating point scale; percentage scale; infer numeric types; locale grouping separators; read files; fetch urls.","operationId":"describe_csv_scale_integer_column","security":[],"responses":{"200":{"description":"Multiply every data cell in a named CSV column by a canonical integer factor."}}}},"/v1/tools/csv-scale-integer-column/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Multiply every data cell in a named CSV column by a canonical integer factor.","description":"Supported: csv scale integer column; multiply csv integer column; scale csv column by integer. Not supported: floating point scale; percentage scale; infer numeric types; locale grouping separators; read files; fetch urls. Page: https://computefirst.net/tools/csv-scale-integer-column","operationId":"execute_csv_scale_integer_column","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","column","factor"],"properties":{"csv":{"type":"string","maxLength":256000},"column":{"type":"string","minLength":1,"maxLength":256},"factor":{"type":"string","minLength":1,"maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-schema-check/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Validate a CSV document against an ordered column list and per-column string constraints.","description":"Versioned contract (schemas, limits, examples) for csv-schema-check. Supported: csv schema check; validate csv columns; check csv column constraints. Not supported: infer types; coerce values; locale number formats; regex cell patterns; json schema; read files; fetch urls.","operationId":"describe_csv_schema_check","security":[],"responses":{"200":{"description":"Validate a CSV document against an ordered column list and per-column string constraints."}}}},"/v1/tools/csv-schema-check/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Validate a CSV document against an ordered column list and per-column string constraints.","description":"Supported: csv schema check; validate csv columns; check csv column constraints. Not supported: infer types; coerce values; locale number formats; regex cell patterns; json schema; read files; fetch urls. Page: https://computefirst.net/tools/csv-schema-check","operationId":"execute_csv_schema_check","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","columns"],"properties":{"csv":{"type":"string","maxLength":256000},"columns":{"type":"array","maxItems":256,"items":{"type":"object","additionalProperties":false,"required":["name","constraint"],"properties":{"name":{"type":"string","minLength":1},"constraint":{"type":"string","enum":["any","nonempty","integer","decimal"]}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["valid","rows_checked","violations","truncated"],"properties":{"valid":{"type":"boolean"},"rows_checked":{"type":"integer"},"truncated":{"type":"boolean"},"violations":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["row","column","reason"],"properties":{"row":{"type":"integer"},"column":{"type":"string"},"reason":{"type":"string","enum":["empty","not_integer","not_decimal","header_mismatch"]}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-select-columns/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Select and reorder exact named columns from a complete CSV document.","description":"Versioned contract (schemas, limits, examples) for csv-select-columns. Supported: csv select columns; select csv columns; reorder csv columns; project csv columns. Not supported: rename columns; match columns fuzzily; infer types; filter rows; read files; fetch urls.","operationId":"describe_csv_select_columns","security":[],"responses":{"200":{"description":"Select and reorder exact named columns from a complete CSV document."}}}},"/v1/tools/csv-select-columns/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Select and reorder exact named columns from a complete CSV document.","description":"Supported: csv select columns; select csv columns; reorder csv columns; project csv columns. Not supported: rename columns; match columns fuzzily; infer types; filter rows; read files; fetch urls. Page: https://computefirst.net/tools/csv-select-columns","operationId":"execute_csv_select_columns","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","columns"],"properties":{"csv":{"type":"string","maxLength":256000},"columns":{"type":"array","minItems":1,"maxItems":256,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"string"},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-slice-rows/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Take a contiguous window of CSV data rows by offset and limit, keeping the header.","description":"Versioned contract (schemas, limits, examples) for csv-slice-rows. Supported: csv slice rows; slice csv rows; csv row window. Not supported: negative indexes; wrap-around slicing; sample random rows; filter by key; read files; fetch urls.","operationId":"describe_csv_slice_rows","security":[],"responses":{"200":{"description":"Take a contiguous window of CSV data rows by offset and limit, keeping the header."}}}},"/v1/tools/csv-slice-rows/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Take a contiguous window of CSV data rows by offset and limit, keeping the header.","description":"Supported: csv slice rows; slice csv rows; csv row window. Not supported: negative indexes; wrap-around slicing; sample random rows; filter by key; read files; fetch urls. Page: https://computefirst.net/tools/csv-slice-rows","operationId":"execute_csv_slice_rows","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","offset","limit"],"properties":{"csv":{"type":"string","maxLength":256000},"offset":{"type":"integer","minimum":0,"maximum":5000},"limit":{"type":"integer","minimum":0,"maximum":5000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","rows_in","rows_out"],"properties":{"csv":{"type":"string"},"rows_in":{"type":"integer","minimum":0},"rows_out":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-sort/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Stably sort CSV rows by exact named string columns.","description":"Versioned contract (schemas, limits, examples) for csv-sort. Supported: csv sort; sort csv rows; sort csv ascending; sort csv descending; sort csv by columns. Not supported: numeric sort; locale sort; natural sort; fuzzy matching; mixed sort directions; read files; fetch urls.","operationId":"describe_csv_sort","security":[],"responses":{"200":{"description":"Stably sort CSV rows by exact named string columns."}}}},"/v1/tools/csv-sort/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Stably sort CSV rows by exact named string columns.","description":"Supported: csv sort; sort csv rows; sort csv ascending; sort csv descending; sort csv by columns. Not supported: numeric sort; locale sort; natural sort; fuzzy matching; mixed sort directions; read files; fetch urls. Page: https://computefirst.net/tools/csv-sort","operationId":"execute_csv_sort","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","key_columns"],"properties":{"csv":{"type":"string","maxLength":256000},"key_columns":{"type":"array","minItems":1,"maxItems":256,"uniqueItems":true,"items":{"type":"string","minLength":1}},"order":{"type":"string","enum":["ascending","descending"],"default":"ascending"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"string"},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-split-column/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Split one CSV column on an exact separator into uniquely named columns.","description":"Versioned contract (schemas, limits, examples) for csv-split-column. Supported: csv split column; split a csv column by exact separator; expand csv column into named columns. Not supported: regex split; infer column names; trim cells; limit split parts without throwing; fuzzy matching; read files; fetch urls.","operationId":"describe_csv_split_column","security":[],"responses":{"200":{"description":"Split one CSV column on an exact separator into uniquely named columns."}}}},"/v1/tools/csv-split-column/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Split one CSV column on an exact separator into uniquely named columns.","description":"Supported: csv split column; split a csv column by exact separator; expand csv column into named columns. Not supported: regex split; infer column names; trim cells; limit split parts without throwing; fuzzy matching; read files; fetch urls. Page: https://computefirst.net/tools/csv-split-column","operationId":"execute_csv_split_column","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","column","separator","names"],"properties":{"csv":{"type":"string","maxLength":256000},"column":{"type":"string","minLength":1,"maxLength":256},"separator":{"type":"string","minLength":1,"maxLength":16},"names":{"type":"array","minItems":2,"maxItems":16,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-sum-integers/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Sum a CSV column of strict signed base-10 integer strings using BigInt.","description":"Versioned contract (schemas, limits, examples) for csv-sum-integers. Supported: csv sum integers; sum csv integer column. Not supported: floats; ignore empty; currency; average.","operationId":"describe_csv_sum_integers","security":[],"responses":{"200":{"description":"Sum a CSV column of strict signed base-10 integer strings using BigInt."}}}},"/v1/tools/csv-sum-integers/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Sum a CSV column of strict signed base-10 integer strings using BigInt.","description":"Supported: csv sum integers; sum csv integer column. Not supported: floats; ignore empty; currency; average. Page: https://computefirst.net/tools/csv-sum-integers","operationId":"execute_csv_sum_integers","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv","column"],"properties":{"csv":{"type":"string","maxLength":256000},"column":{"type":"string","minLength":1,"maxLength":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["sum","rows_used"],"properties":{"sum":{"type":"string"},"rows_used":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-to-json/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Convert a complete CSV document into an array of string-valued objects.","description":"Versioned contract (schemas, limits, examples) for csv-to-json. Supported: csv to json; convert csv to json; parse csv rows. Not supported: infer types; stream rows; read files; fetch urls; json to csv.","operationId":"describe_csv_to_json","security":[],"responses":{"200":{"description":"Convert a complete CSV document into an array of string-valued objects."}}}},"/v1/tools/csv-to-json/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Convert a complete CSV document into an array of string-valued objects.","description":"Supported: csv to json; convert csv to json; parse csv rows. Not supported: infer types; stream rows; read files; fetch urls; json to csv. Page: https://computefirst.net/tools/csv-to-json","operationId":"execute_csv_to_json","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","maxItems":5000,"items":{"type":"object","additionalProperties":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-transpose/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Transpose a CSV matrix including the header row, then re-validate headers.","description":"Versioned contract (schemas, limits, examples) for csv-transpose. Supported: csv transpose; transpose csv; csv rotate columns to rows. Not supported: jagged fill; multi-header; read files.","operationId":"describe_csv_transpose","security":[],"responses":{"200":{"description":"Transpose a CSV matrix including the header row, then re-validate headers."}}}},"/v1/tools/csv-transpose/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Transpose a CSV matrix including the header row, then re-validate headers.","description":"Supported: csv transpose; transpose csv; csv rotate columns to rows. Not supported: jagged fill; multi-header; read files. Page: https://computefirst.net/tools/csv-transpose","operationId":"execute_csv_transpose","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["csv"],"properties":{"csv":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["csv","rows_in","cols_in","rows_out","cols_out"],"properties":{"csv":{"type":"string"},"rows_in":{"type":"integer"},"cols_in":{"type":"integer"},"rows_out":{"type":"integer"},"cols_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/decimal-add/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Exact decimal addition of canonicalizable decimal strings.","description":"Versioned contract (schemas, limits, examples) for decimal-add. Supported: decimal add; add decimals; exact decimal sum. Not supported: ieee754; currency rounding; tax; interest.","operationId":"describe_decimal_add","security":[],"responses":{"200":{"description":"Exact decimal addition of canonicalizable decimal strings."}}}},"/v1/tools/decimal-add/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Exact decimal addition of canonicalizable decimal strings.","description":"Supported: decimal add; add decimals; exact decimal sum. Not supported: ieee754; currency rounding; tax; interest. Page: https://computefirst.net/tools/decimal-add","operationId":"execute_decimal_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":1,"maxLength":44},"b":{"type":"string","minLength":1,"maxLength":44}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/decimal-compare/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compare two decimal strings exactly after canonicalization.","description":"Versioned contract (schemas, limits, examples) for decimal-compare. Supported: decimal compare; compare decimals; cmp decimal strings. Not supported: ieee754; epsilon; locale.","operationId":"describe_decimal_compare","security":[],"responses":{"200":{"description":"Compare two decimal strings exactly after canonicalization."}}}},"/v1/tools/decimal-compare/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compare two decimal strings exactly after canonicalization.","description":"Supported: decimal compare; compare decimals; cmp decimal strings. Not supported: ieee754; epsilon; locale. Page: https://computefirst.net/tools/decimal-compare","operationId":"execute_decimal_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":1,"maxLength":44},"b":{"type":"string","minLength":1,"maxLength":44}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/decimal-subtract/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Exact decimal subtraction a minus b of canonicalizable decimal strings.","description":"Versioned contract (schemas, limits, examples) for decimal-subtract. Supported: decimal subtract; subtract decimals; exact decimal difference. Not supported: ieee754; currency rounding; tax.","operationId":"describe_decimal_subtract","security":[],"responses":{"200":{"description":"Exact decimal subtraction a minus b of canonicalizable decimal strings."}}}},"/v1/tools/decimal-subtract/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Exact decimal subtraction a minus b of canonicalizable decimal strings.","description":"Supported: decimal subtract; subtract decimals; exact decimal difference. Not supported: ieee754; currency rounding; tax. Page: https://computefirst.net/tools/decimal-subtract","operationId":"execute_decimal_subtract","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":1,"maxLength":44},"b":{"type":"string","minLength":1,"maxLength":44}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/duration-add/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Sum mixed SI duration terms in nanoseconds and return the exact rational in a target unit.","description":"Versioned contract (schemas, limits, examples) for duration-add. Supported: duration add; add duration terms; sum mixed duration units. Not supported: months; years; weeks; leap seconds; ISO-8601 duration strings; average duration; floats.","operationId":"describe_duration_add","security":[],"responses":{"200":{"description":"Sum mixed SI duration terms in nanoseconds and return the exact rational in a target unit."}}}},"/v1/tools/duration-add/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Sum mixed SI duration terms in nanoseconds and return the exact rational in a target unit.","description":"Supported: duration add; add duration terms; sum mixed duration units. Not supported: months; years; weeks; leap seconds; ISO-8601 duration strings; average duration; floats. Page: https://computefirst.net/tools/duration-add","operationId":"execute_duration_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["terms","to"],"properties":{"terms":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["ns","us","ms","s","min","h","day"]}}}},"to":{"type":"string","enum":["ns","us","ms","s","min","h","day"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"},"denominator":{"type":"string","pattern":"^[1-9][0-9]*$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/duration-compare/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Compare two SI duration amounts after converting both to nanoseconds.","description":"Versioned contract (schemas, limits, examples) for duration-compare. Supported: duration compare; compare two durations; compare duration amounts. Not supported: months; years; weeks; leap seconds; ISO-8601 duration strings; sort durations; approximate compare.","operationId":"describe_duration_compare","security":[],"responses":{"200":{"description":"Compare two SI duration amounts after converting both to nanoseconds."}}}},"/v1/tools/duration-compare/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Compare two SI duration amounts after converting both to nanoseconds.","description":"Supported: duration compare; compare two durations; compare duration amounts. Not supported: months; years; weeks; leap seconds; ISO-8601 duration strings; sort durations; approximate compare. Page: https://computefirst.net/tools/duration-compare","operationId":"execute_duration_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["ns","us","ms","s","min","h","day"]}}},"right":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["ns","us","ms","s","min","h","day"]}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["cmp"],"properties":{"cmp":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/duration-convert/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Convert a canonical integer duration between nanosecond-based SI units as an exact rational.","description":"Versioned contract (schemas, limits, examples) for duration-convert. Supported: duration convert; convert duration units; convert seconds minutes hours days. Not supported: months; years; weeks; leap seconds; ISO-8601 duration strings; floats; calendar dates.","operationId":"describe_duration_convert","security":[],"responses":{"200":{"description":"Convert a canonical integer duration between nanosecond-based SI units as an exact rational."}}}},"/v1/tools/duration-convert/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Convert a canonical integer duration between nanosecond-based SI units as an exact rational.","description":"Supported: duration convert; convert duration units; convert seconds minutes hours days. Not supported: months; years; weeks; leap seconds; ISO-8601 duration strings; floats; calendar dates. Page: https://computefirst.net/tools/duration-convert","operationId":"execute_duration_convert","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value","from","to"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"from":{"type":"string","enum":["ns","us","ms","s","min","h","day"]},"to":{"type":"string","enum":["ns","us","ms","s","min","h","day"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"},"denominator":{"type":"string","pattern":"^[1-9][0-9]*$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/env-merge/versions/1.0.0":{"get":{"tags":["Versions & config"],"summary":"Contract: Overlay two dotenv-subset documents, replacing left values and appending right-only keys.","description":"Versioned contract (schemas, limits, examples) for env-merge. Supported: env merge; merge env files; overlay env documents. Not supported: merge more than two documents; preserve comments; variable expansion; three-way merge; read files.","operationId":"describe_env_merge","security":[],"responses":{"200":{"description":"Overlay two dotenv-subset documents, replacing left values and appending right-only keys."}}}},"/v1/tools/env-merge/versions/1.0.0/execute":{"post":{"tags":["Versions & config"],"summary":"Overlay two dotenv-subset documents, replacing left values and appending right-only keys.","description":"Supported: env merge; merge env files; overlay env documents. Not supported: merge more than two documents; preserve comments; variable expansion; three-way merge; read files. Page: https://computefirst.net/tools/env-merge","operationId":"execute_env_merge","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"string","maxLength":256000},"right":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/env-parse/versions/1.0.0":{"get":{"tags":["Versions & config"],"summary":"Contract: Parse a strict dotenv-subset document into ordered key/value entries.","description":"Versioned contract (schemas, limits, examples) for env-parse. Supported: env parse; parse dotenv subset; parse env file text. Not supported: export prefix; variable expansion; multiline quoted values; INI sections; read files.","operationId":"describe_env_parse","security":[],"responses":{"200":{"description":"Parse a strict dotenv-subset document into ordered key/value entries."}}}},"/v1/tools/env-parse/versions/1.0.0/execute":{"post":{"tags":["Versions & config"],"summary":"Parse a strict dotenv-subset document into ordered key/value entries.","description":"Supported: env parse; parse dotenv subset; parse env file text. Not supported: export prefix; variable expansion; multiline quoted values; INI sections; read files. Page: https://computefirst.net/tools/env-parse","operationId":"execute_env_parse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["entries","env"],"properties":{"entries":{"type":"array","maxItems":5000,"items":{"type":"object","additionalProperties":false,"required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"env":{"type":"object","additionalProperties":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/env-stringify/versions/1.0.0":{"get":{"tags":["Versions & config"],"summary":"Contract: Serialize unique env key/value entries to a canonical dotenv-subset document.","description":"Versioned contract (schemas, limits, examples) for env-stringify. Supported: env stringify; serialize env entries; stringify dotenv subset. Not supported: preserve comments; single-quoted output; variable expansion; export prefix; read files.","operationId":"describe_env_stringify","security":[],"responses":{"200":{"description":"Serialize unique env key/value entries to a canonical dotenv-subset document."}}}},"/v1/tools/env-stringify/versions/1.0.0/execute":{"post":{"tags":["Versions & config"],"summary":"Serialize unique env key/value entries to a canonical dotenv-subset document.","description":"Supported: env stringify; serialize env entries; stringify dotenv subset. Not supported: preserve comments; single-quoted output; variable expansion; export prefix; read files. Page: https://computefirst.net/tools/env-stringify","operationId":"execute_env_stringify","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["entries"],"properties":{"entries":{"type":"array","maxItems":5000,"items":{"type":"object","additionalProperties":false,"required":["key","value"],"properties":{"key":{"type":"string","minLength":1},"value":{"type":"string","maxLength":65536}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-ancestors/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: List every ancestor of given targets, including the targets, in reverse-graph BFS discovery order.","description":"Versioned contract (schemas, limits, examples) for graph-ancestors. Supported: graph ancestors; upstream prerequisites of targets; ancestors of graph nodes. Not supported: dominance; immediate parents only; undirected ancestor search; enumerating every ancestor path.","operationId":"describe_graph_ancestors","security":[],"responses":{"200":{"description":"List every ancestor of given targets, including the targets, in reverse-graph BFS discovery order."}}}},"/v1/tools/graph-ancestors/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"List every ancestor of given targets, including the targets, in reverse-graph BFS discovery order.","description":"Supported: graph ancestors; upstream prerequisites of targets; ancestors of graph nodes. Not supported: dominance; immediate parents only; undirected ancestor search; enumerating every ancestor path. Page: https://computefirst.net/tools/graph-ancestors","operationId":"execute_graph_ancestors","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges","targets"],"properties":{"nodes":{"type":"array","maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"targets":{"type":"array","minItems":1,"maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["nodes"],"properties":{"nodes":{"type":"array","items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-connected-components/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Partition a directed simple graph into undirected connected components, ignoring edge direction.","description":"Versioned contract (schemas, limits, examples) for graph-connected-components. Supported: graph connected components; undirected connected components; connected components ignoring edge direction. Not supported: strongly connected components; community detection; directed weak and strong mixed partition; undirected input mode flag.","operationId":"describe_graph_connected_components","security":[],"responses":{"200":{"description":"Partition a directed simple graph into undirected connected components, ignoring edge direction."}}}},"/v1/tools/graph-connected-components/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Partition a directed simple graph into undirected connected components, ignoring edge direction.","description":"Supported: graph connected components; undirected connected components; connected components ignoring edge direction. Not supported: strongly connected components; community detection; directed weak and strong mixed partition; undirected input mode flag. Page: https://computefirst.net/tools/graph-connected-components","operationId":"execute_graph_connected_components","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["components"],"properties":{"components":{"type":"array","items":{"type":"array","items":{"type":"string"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-dag-longest-path/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Return a longest node-weighted path in a DAG, where path weight is the sum of node durations.","description":"Versioned contract (schemas, limits, examples) for graph-dag-longest-path. Supported: graph dag longest path; longest node-weighted path in a dag; dag longest duration chain. Not supported: edge weights; longest path in cyclic graphs; negative durations; k shortest paths.","operationId":"describe_graph_dag_longest_path","security":[],"responses":{"200":{"description":"Return a longest node-weighted path in a DAG, where path weight is the sum of node durations."}}}},"/v1/tools/graph-dag-longest-path/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Return a longest node-weighted path in a DAG, where path weight is the sum of node durations.","description":"Supported: graph dag longest path; longest node-weighted path in a dag; dag longest duration chain. Not supported: edge weights; longest path in cyclic graphs; negative durations; k shortest paths. Page: https://computefirst.net/tools/graph-dag-longest-path","operationId":"execute_graph_dag_longest_path","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges","durations"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"durations":{"type":"object","additionalProperties":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["path","length"],"properties":{"path":{"type":"array","items":{"type":"string"}},"length":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-dependency-impact/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: List nodes downstream of a removed set: not themselves removed, reachable by a directed path of length at least 1.","description":"Versioned contract (schemas, limits, examples) for graph-dependency-impact. Supported: graph dependency impact; downstream impact of removed nodes; nodes affected by removing dependencies. Not supported: version-range resolution; rebuilding a remaining schedule; undirected impact; upstream-only ancestor impact.","operationId":"describe_graph_dependency_impact","security":[],"responses":{"200":{"description":"List nodes downstream of a removed set: not themselves removed, reachable by a directed path of length at least 1."}}}},"/v1/tools/graph-dependency-impact/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"List nodes downstream of a removed set: not themselves removed, reachable by a directed path of length at least 1.","description":"Supported: graph dependency impact; downstream impact of removed nodes; nodes affected by removing dependencies. Not supported: version-range resolution; rebuilding a remaining schedule; undirected impact; upstream-only ancestor impact. Page: https://computefirst.net/tools/graph-dependency-impact","operationId":"execute_graph_dependency_impact","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges","removed"],"properties":{"nodes":{"type":"array","maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"removed":{"type":"array","minItems":1,"maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["impacted","impacted_count"],"properties":{"impacted":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"impacted_count":{"type":"integer","minimum":0,"maximum":2000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-find-cycle/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Find one directed cycle by 3-color DFS, or report that the graph is acyclic.","description":"Versioned contract (schemas, limits, examples) for graph-find-cycle. Supported: graph find cycle; find a directed cycle; report one directed cycle. Not supported: listing every cycle; enumerating all simple cycles; undirected cycles; cycle basis; topological sort.","operationId":"describe_graph_find_cycle","security":[],"responses":{"200":{"description":"Find one directed cycle by 3-color DFS, or report that the graph is acyclic."}}}},"/v1/tools/graph-find-cycle/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Find one directed cycle by 3-color DFS, or report that the graph is acyclic.","description":"Supported: graph find cycle; find a directed cycle; report one directed cycle. Not supported: listing every cycle; enumerating all simple cycles; undirected cycles; cycle basis; topological sort. Page: https://computefirst.net/tools/graph-find-cycle","operationId":"execute_graph_find_cycle","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["cyclic","cycle"],"properties":{"cyclic":{"type":"boolean"},"cycle":{"type":"array","items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-from-adjacency/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Rebuild a simple directed graph from adjacency lists of node ids and successors.","description":"Versioned contract (schemas, limits, examples) for graph-from-adjacency. Supported: graph from adjacency; adjacency list to graph; rebuild graph from adjacency lists. Not supported: adding missing successor nodes silently; weighted adjacency; undirected pairs; adjacency matrix input.","operationId":"describe_graph_from_adjacency","security":[],"responses":{"200":{"description":"Rebuild a simple directed graph from adjacency lists of node ids and successors."}}}},"/v1/tools/graph-from-adjacency/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Rebuild a simple directed graph from adjacency lists of node ids and successors.","description":"Supported: graph from adjacency; adjacency list to graph; rebuild graph from adjacency lists. Not supported: adding missing successor nodes silently; weighted adjacency; undirected pairs; adjacency matrix input. Page: https://computefirst.net/tools/graph-from-adjacency","operationId":"execute_graph_from_adjacency","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["adjacency"],"properties":{"adjacency":{"type":"array","maxItems":2000,"items":{"type":"object","additionalProperties":false,"required":["node","successors"],"properties":{"node":{"type":"string","minLength":1,"maxLength":256},"successors":{"type":"array","maxItems":10000,"items":{"type":"string","minLength":1,"maxLength":256}}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-induced-subgraph/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Return the vertex-induced subgraph on a listed node subset, preserving declared node and edge order.","description":"Versioned contract (schemas, limits, examples) for graph-induced-subgraph. Supported: graph induced subgraph; induced subgraph of listed nodes; restrict graph to a node subset. Not supported: edge-induced subgraph; graph contraction; identify or merge vertices; undirected subgraph mode.","operationId":"describe_graph_induced_subgraph","security":[],"responses":{"200":{"description":"Return the vertex-induced subgraph on a listed node subset, preserving declared node and edge order."}}}},"/v1/tools/graph-induced-subgraph/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Return the vertex-induced subgraph on a listed node subset, preserving declared node and edge order.","description":"Supported: graph induced subgraph; induced subgraph of listed nodes; restrict graph to a node subset. Not supported: edge-induced subgraph; graph contraction; identify or merge vertices; undirected subgraph mode. Page: https://computefirst.net/tools/graph-induced-subgraph","operationId":"execute_graph_induced_subgraph","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges","keep"],"properties":{"nodes":{"type":"array","maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"keep":{"type":"array","maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","items":{"type":"string"}},"edges":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-reachable-from/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: List nodes reachable from given sources by directed BFS, in discovery order.","description":"Versioned contract (schemas, limits, examples) for graph-reachable-from. Supported: graph reachable from; directed reachability from sources; bfs reachable nodes from sources. Not supported: depth-limited search as a heuristic; undirected reachability; ancestors or upstream reachability; shortest path; weighted reachability.","operationId":"describe_graph_reachable_from","security":[],"responses":{"200":{"description":"List nodes reachable from given sources by directed BFS, in discovery order."}}}},"/v1/tools/graph-reachable-from/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"List nodes reachable from given sources by directed BFS, in discovery order.","description":"Supported: graph reachable from; directed reachability from sources; bfs reachable nodes from sources. Not supported: depth-limited search as a heuristic; undirected reachability; ancestors or upstream reachability; shortest path; weighted reachability. Page: https://computefirst.net/tools/graph-reachable-from","operationId":"execute_graph_reachable_from","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges","sources"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"sources":{"type":"array","minItems":1,"maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["nodes"],"properties":{"nodes":{"type":"array","items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-reverse/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Reverse every directed edge of a simple graph, keeping node order and original edge order.","description":"Versioned contract (schemas, limits, examples) for graph-reverse. Supported: graph reverse; reverse every directed edge; transpose a directed graph. Not supported: reversing a subset of edges; transpose of adjacency matrix export; undirected reverse; weighted edge reverse.","operationId":"describe_graph_reverse","security":[],"responses":{"200":{"description":"Reverse every directed edge of a simple graph, keeping node order and original edge order."}}}},"/v1/tools/graph-reverse/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Reverse every directed edge of a simple graph, keeping node order and original edge order.","description":"Supported: graph reverse; reverse every directed edge; transpose a directed graph. Not supported: reversing a subset of edges; transpose of adjacency matrix export; undirected reverse; weighted edge reverse. Page: https://computefirst.net/tools/graph-reverse","operationId":"execute_graph_reverse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-shortest-unweighted-path/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Find a shortest directed path by fewest edges from source to target.","description":"Versioned contract (schemas, limits, examples) for graph-shortest-unweighted-path. Supported: graph shortest unweighted path; fewest directed edges from source to target; unweighted shortest path between two nodes. Not supported: weighted shortest path; k-shortest paths; negative-weight shortest path; all-pairs shortest paths; undirected shortest path.","operationId":"describe_graph_shortest_unweighted_path","security":[],"responses":{"200":{"description":"Find a shortest directed path by fewest edges from source to target."}}}},"/v1/tools/graph-shortest-unweighted-path/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Find a shortest directed path by fewest edges from source to target.","description":"Supported: graph shortest unweighted path; fewest directed edges from source to target; unweighted shortest path between two nodes. Not supported: weighted shortest path; k-shortest paths; negative-weight shortest path; all-pairs shortest paths; undirected shortest path. Page: https://computefirst.net/tools/graph-shortest-unweighted-path","operationId":"execute_graph_shortest_unweighted_path","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges","source","target"],"properties":{"nodes":{"type":"array","maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"source":{"type":"string","minLength":1,"maxLength":256},"target":{"type":"string","minLength":1,"maxLength":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["reachable","path","length"],"properties":{"reachable":{"type":"boolean"},"path":{"type":"array","items":{"type":"string"}},"length":{"type":["integer","null"],"minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-strongly-connected-components/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Partition a directed simple graph into strongly connected components, listed by declared node index.","description":"Versioned contract (schemas, limits, examples) for graph-strongly-connected-components. Supported: graph strongly connected components; directed strongly connected components; collapse cyclic dependency clumps. Not supported: 2-SAT; condensation DAG extras; undirected connected components; listing every cycle.","operationId":"describe_graph_strongly_connected_components","security":[],"responses":{"200":{"description":"Partition a directed simple graph into strongly connected components, listed by declared node index."}}}},"/v1/tools/graph-strongly-connected-components/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Partition a directed simple graph into strongly connected components, listed by declared node index.","description":"Supported: graph strongly connected components; directed strongly connected components; collapse cyclic dependency clumps. Not supported: 2-SAT; condensation DAG extras; undirected connected components; listing every cycle. Page: https://computefirst.net/tools/graph-strongly-connected-components","operationId":"execute_graph_strongly_connected_components","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["components"],"properties":{"components":{"type":"array","items":{"type":"array","items":{"type":"string"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-to-adjacency/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Convert a directed simple graph into per-node outgoing adjacency lists.","description":"Versioned contract (schemas, limits, examples) for graph-to-adjacency. Supported: graph to adjacency; convert directed graph to adjacency lists; list outgoing successors per node. Not supported: incoming predecessor lists; adjacency matrix; weighted adjacency; undirected adjacency pairs.","operationId":"describe_graph_to_adjacency","security":[],"responses":{"200":{"description":"Convert a directed simple graph into per-node outgoing adjacency lists."}}}},"/v1/tools/graph-to-adjacency/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Convert a directed simple graph into per-node outgoing adjacency lists.","description":"Supported: graph to adjacency; convert directed graph to adjacency lists; list outgoing successors per node. Not supported: incoming predecessor lists; adjacency matrix; weighted adjacency; undirected adjacency pairs. Page: https://computefirst.net/tools/graph-to-adjacency","operationId":"execute_graph_to_adjacency","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["adjacency"],"properties":{"adjacency":{"type":"array","maxItems":2000,"items":{"type":"object","additionalProperties":false,"required":["node","successors"],"properties":{"node":{"type":"string","minLength":1,"maxLength":256},"successors":{"type":"array","items":{"type":"string","minLength":1,"maxLength":256}}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-topological-sort/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Return a Kahn topological order of a directed acyclic graph, breaking ready-set ties by declared node index.","description":"Versioned contract (schemas, limits, examples) for graph-topological-sort. Supported: graph topological sort; kahn topological order; linearize dag dependencies. Not supported: partial topological order of a subgraph; weighted edges; lexicographic-by-id ready-set ties; undirected topological sort.","operationId":"describe_graph_topological_sort","security":[],"responses":{"200":{"description":"Return a Kahn topological order of a directed acyclic graph, breaking ready-set ties by declared node index."}}}},"/v1/tools/graph-topological-sort/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Return a Kahn topological order of a directed acyclic graph, breaking ready-set ties by declared node index.","description":"Supported: graph topological sort; kahn topological order; linearize dag dependencies. Not supported: partial topological order of a subgraph; weighted edges; lexicographic-by-id ready-set ties; undirected topological sort. Page: https://computefirst.net/tools/graph-topological-sort","operationId":"execute_graph_topological_sort","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["order"],"properties":{"order":{"type":"array","items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-transitive-closure/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: List directed reachability pairs of path length at least 1, ordered by declared node index.","description":"Versioned contract (schemas, limits, examples) for graph-transitive-closure. Supported: graph transitive closure; directed reachability pairs; positive-length reachability pairs. Not supported: counting paths; reflexive closure option; undirected closure; reachability from named sources.","operationId":"describe_graph_transitive_closure","security":[],"responses":{"200":{"description":"List directed reachability pairs of path length at least 1, ordered by declared node index."}}}},"/v1/tools/graph-transitive-closure/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"List directed reachability pairs of path length at least 1, ordered by declared node index.","description":"Supported: graph transitive closure; directed reachability pairs; positive-length reachability pairs. Not supported: counting paths; reflexive closure option; undirected closure; reachability from named sources. Page: https://computefirst.net/tools/graph-transitive-closure","operationId":"execute_graph_transitive_closure","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":500,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["pairs"],"properties":{"pairs":{"type":"array","maxItems":50000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string"},"to":{"type":"string"}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-transitive-reduction/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Compute the transitive reduction of a DAG: keep an edge u→v iff the original graph has no directed path from u to v of length at least 2.","description":"Versioned contract (schemas, limits, examples) for graph-transitive-reduction. Supported: graph transitive reduction; DAG transitive reduction; remove redundant DAG edges. Not supported: reduction of cyclic graphs; undirected transitive reduction; minimum equivalent graph on cycles; counting paths.","operationId":"describe_graph_transitive_reduction","security":[],"responses":{"200":{"description":"Compute the transitive reduction of a DAG: keep an edge u→v iff the original graph has no directed path from u to v of length at least 2."}}}},"/v1/tools/graph-transitive-reduction/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Compute the transitive reduction of a DAG: keep an edge u→v iff the original graph has no directed path from u to v of length at least 2.","description":"Supported: graph transitive reduction; DAG transitive reduction; remove redundant DAG edges. Not supported: reduction of cyclic graphs; undirected transitive reduction; minimum equivalent graph on cycles; counting paths. Page: https://computefirst.net/tools/graph-transitive-reduction","operationId":"execute_graph_transitive_reduction","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/graph-validate/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Inspect a well-formed directed simple graph and report counts, isolated nodes, and maximum degrees.","description":"Versioned contract (schemas, limits, examples) for graph-validate. Supported: graph validate; inspect directed graph structure; count isolated nodes and degrees. Not supported: undirected mode; weighted edges; drawing; files.","operationId":"describe_graph_validate","security":[],"responses":{"200":{"description":"Inspect a well-formed directed simple graph and report counts, isolated nodes, and maximum degrees."}}}},"/v1/tools/graph-validate/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Inspect a well-formed directed simple graph and report counts, isolated nodes, and maximum degrees.","description":"Supported: graph validate; inspect directed graph structure; count isolated nodes and degrees. Not supported: undirected mode; weighted edges; drawing; files. Page: https://computefirst.net/tools/graph-validate","operationId":"execute_graph_validate","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["node_count","edge_count","self_loop_count","isolated_node_count","max_in_degree","max_out_degree"],"properties":{"node_count":{"type":"integer","minimum":0},"edge_count":{"type":"integer","minimum":0},"self_loop_count":{"type":"integer","minimum":0},"isolated_node_count":{"type":"integer","minimum":0},"max_in_degree":{"type":"integer","minimum":0},"max_out_degree":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/hex-bytes-concat/versions/1.0.0":{"get":{"tags":["Encoding & checksums"],"summary":"Contract: Concatenate a bounded ordered list of lowercase hex byte strings into one hex string.","description":"Versioned contract (schemas, limits, examples) for hex-bytes-concat. Supported: hex bytes concat; concatenate hex byte strings; join hex byte parts. Not supported: uppercase hex; 0x prefix; byte separators; insert delimiter between parts; flatten nested arrays; decode hex to text.","operationId":"describe_hex_bytes_concat","security":[],"responses":{"200":{"description":"Concatenate a bounded ordered list of lowercase hex byte strings into one hex string."}}}},"/v1/tools/hex-bytes-concat/versions/1.0.0/execute":{"post":{"tags":["Encoding & checksums"],"summary":"Concatenate a bounded ordered list of lowercase hex byte strings into one hex string.","description":"Supported: hex bytes concat; concatenate hex byte strings; join hex byte parts. Not supported: uppercase hex; 0x prefix; byte separators; insert delimiter between parts; flatten nested arrays; decode hex to text. Page: https://computefirst.net/tools/hex-bytes-concat","operationId":"execute_hex_bytes_concat","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["parts"],"properties":{"parts":{"type":"array","maxItems":1000,"items":{"type":"string","maxLength":256000}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["hex"],"properties":{"hex":{"type":"string","maxLength":256000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/hex-bytes-slice/versions/1.0.0":{"get":{"tags":["Encoding & checksums"],"summary":"Contract: Slice a lowercase hex byte string by explicit byte-index bounds, half-open like Array.slice.","description":"Versioned contract (schemas, limits, examples) for hex-bytes-slice. Supported: hex bytes slice; slice hex byte string; byte-range slice of hex. Not supported: negative indexes; python wrap-around slicing; uppercase hex; 0x prefix; code-point or character slicing; decode hex to text.","operationId":"describe_hex_bytes_slice","security":[],"responses":{"200":{"description":"Slice a lowercase hex byte string by explicit byte-index bounds, half-open like Array.slice."}}}},"/v1/tools/hex-bytes-slice/versions/1.0.0/execute":{"post":{"tags":["Encoding & checksums"],"summary":"Slice a lowercase hex byte string by explicit byte-index bounds, half-open like Array.slice.","description":"Supported: hex bytes slice; slice hex byte string; byte-range slice of hex. Not supported: negative indexes; python wrap-around slicing; uppercase hex; 0x prefix; code-point or character slicing; decode hex to text. Page: https://computefirst.net/tools/hex-bytes-slice","operationId":"execute_hex_bytes_slice","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["hex","start","end"],"properties":{"hex":{"type":"string","maxLength":256000},"start":{"type":"integer","minimum":0,"maximum":128000},"end":{"type":"integer","minimum":0,"maximum":128000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["hex"],"properties":{"hex":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/hex-bytes-xor/versions/1.0.0":{"get":{"tags":["Encoding & checksums"],"summary":"Contract: Byte-wise XOR of two equal-length lowercase hex byte strings. Transformation only; no cryptographic security claim.","description":"Versioned contract (schemas, limits, examples) for hex-bytes-xor. Supported: hex bytes xor; xor hex byte strings; byte-wise xor of hex. Not supported: unequal-length xor; uppercase hex; 0x prefix; byte separators; stream cipher key expansion; encryption; decode hex to text.","operationId":"describe_hex_bytes_xor","security":[],"responses":{"200":{"description":"Byte-wise XOR of two equal-length lowercase hex byte strings. Transformation only; no cryptographic security claim."}}}},"/v1/tools/hex-bytes-xor/versions/1.0.0/execute":{"post":{"tags":["Encoding & checksums"],"summary":"Byte-wise XOR of two equal-length lowercase hex byte strings. Transformation only; no cryptographic security claim.","description":"Supported: hex bytes xor; xor hex byte strings; byte-wise xor of hex. Not supported: unequal-length xor; uppercase hex; 0x prefix; byte separators; stream cipher key expansion; encryption; decode hex to text. Page: https://computefirst.net/tools/hex-bytes-xor","operationId":"execute_hex_bytes_xor","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","maxLength":256000},"b":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["hex"],"properties":{"hex":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-add/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Add two canonical signed integer strings and return their canonical sum.","description":"Versioned contract (schemas, limits, examples) for integer-add. Supported: integer add; add two integers; sum two integer strings. Not supported: decimal add; floating point add; integer multiply; scientific notation; locale digit grouping; hexadecimal add.","operationId":"describe_integer_add","security":[],"responses":{"200":{"description":"Add two canonical signed integer strings and return their canonical sum."}}}},"/v1/tools/integer-add/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Add two canonical signed integer strings and return their canonical sum.","description":"Supported: integer add; add two integers; sum two integer strings. Not supported: decimal add; floating point add; integer multiply; scientific notation; locale digit grouping; hexadecimal add. Page: https://computefirst.net/tools/integer-add","operationId":"execute_integer_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"b":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$","maxLength":1001}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-base-convert/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Convert a signed integer string between bases 2 and 36 using BigInt.","description":"Versioned contract (schemas, limits, examples) for integer-base-convert. Supported: integer base convert; convert integer base; base convert integer. Not supported: floats; base 1; base 64; leading zeros output.","operationId":"describe_integer_base_convert","security":[],"responses":{"200":{"description":"Convert a signed integer string between bases 2 and 36 using BigInt."}}}},"/v1/tools/integer-base-convert/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Convert a signed integer string between bases 2 and 36 using BigInt.","description":"Supported: integer base convert; convert integer base; base convert integer. Not supported: floats; base 1; base 64; leading zeros output. Page: https://computefirst.net/tools/integer-base-convert","operationId":"execute_integer_base_convert","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value","from_base","to_base"],"properties":{"value":{"type":"string","minLength":1,"maxLength":257},"from_base":{"type":"integer","minimum":2,"maximum":36},"to_base":{"type":"integer","minimum":2,"maximum":36}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["canonical"],"properties":{"canonical":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-compare/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compare two canonical signed base-10 integer strings using BigInt.","description":"Versioned contract (schemas, limits, examples) for integer-compare. Supported: integer compare; compare integers; cmp integer strings. Not supported: floats; locale numeric; Number coercion.","operationId":"describe_integer_compare","security":[],"responses":{"200":{"description":"Compare two canonical signed base-10 integer strings using BigInt."}}}},"/v1/tools/integer-compare/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compare two canonical signed base-10 integer strings using BigInt.","description":"Supported: integer compare; compare integers; cmp integer strings. Not supported: floats; locale numeric; Number coercion. Page: https://computefirst.net/tools/integer-compare","operationId":"execute_integer_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":1,"maxLength":257},"b":{"type":"string","minLength":1,"maxLength":257}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-divmod/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Integer quotient and remainder truncated toward zero.","description":"Versioned contract (schemas, limits, examples) for integer-divmod. Supported: integer divmod; integer quotient remainder; divide integers with remainder. Not supported: floor division; euclidean remainder; modular inverse; floating point division; rational division.","operationId":"describe_integer_divmod","security":[],"responses":{"200":{"description":"Integer quotient and remainder truncated toward zero."}}}},"/v1/tools/integer-divmod/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Integer quotient and remainder truncated toward zero.","description":"Supported: integer divmod; integer quotient remainder; divide integers with remainder. Not supported: floor division; euclidean remainder; modular inverse; floating point division; rational division. Page: https://computefirst.net/tools/integer-divmod","operationId":"execute_integer_divmod","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["dividend","divisor"],"properties":{"dividend":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"divisor":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["quotient","remainder"],"properties":{"quotient":{"type":"string"},"remainder":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-gcd/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the non-negative greatest common divisor of two canonical integer strings.","description":"Versioned contract (schemas, limits, examples) for integer-gcd. Supported: integer gcd; greatest common divisor of two integers; gcd of integers. Not supported: least common multiple; gcd of more than two integers; floating-point gcd; polynomial gcd.","operationId":"describe_integer_gcd","security":[],"responses":{"200":{"description":"Compute the non-negative greatest common divisor of two canonical integer strings."}}}},"/v1/tools/integer-gcd/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the non-negative greatest common divisor of two canonical integer strings.","description":"Supported: integer gcd; greatest common divisor of two integers; gcd of integers. Not supported: least common multiple; gcd of more than two integers; floating-point gcd; polynomial gcd. Page: https://computefirst.net/tools/integer-gcd","operationId":"execute_integer_gcd","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":1,"maxLength":1001},"b":{"type":"string","minLength":1,"maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","minLength":1,"maxLength":1000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-multiply/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Multiply two canonical base-10 integer strings and return their product.","description":"Versioned contract (schemas, limits, examples) for integer-multiply. Supported: integer multiply; multiply two integers; integer product. Not supported: integer add; integer division; floating point multiply; hexadecimal integers; scientific notation.","operationId":"describe_integer_multiply","security":[],"responses":{"200":{"description":"Multiply two canonical base-10 integer strings and return their product."}}}},"/v1/tools/integer-multiply/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Multiply two canonical base-10 integer strings and return their product.","description":"Supported: integer multiply; multiply two integers; integer product. Not supported: integer add; integer division; floating point multiply; hexadecimal integers; scientific notation. Page: https://computefirst.net/tools/integer-multiply","operationId":"execute_integer_multiply","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":1,"maxLength":1001},"b":{"type":"string","minLength":1,"maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","minLength":1,"maxLength":1001}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-sort/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Stable-sort canonical signed base-10 integer strings using BigInt.","description":"Versioned contract (schemas, limits, examples) for integer-sort. Supported: integer sort; sort integer strings; order integers. Not supported: locale sort; floats; natural sort of mixed tokens.","operationId":"describe_integer_sort","security":[],"responses":{"200":{"description":"Stable-sort canonical signed base-10 integer strings using BigInt."}}}},"/v1/tools/integer-sort/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Stable-sort canonical signed base-10 integer strings using BigInt.","description":"Supported: integer sort; sort integer strings; order integers. Not supported: locale sort; floats; natural sort of mixed tokens. Page: https://computefirst.net/tools/integer-sort","operationId":"execute_integer_sort","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":10000,"items":{"type":"string"}},"order":{"type":"string","enum":["asc","desc"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-format/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Format a uint32 integer string or four octets as a canonical dotted-decimal IPv4 address.","description":"Versioned contract (schemas, limits, examples) for ipv4-format. Supported: ipv4 format; format ipv4 dotted decimal; uint32 or octets to ipv4. Not supported: IPv6; hexadecimal; CIDR prefixes; leading-zero dotted decimal as input; hostnames.","operationId":"describe_ipv4_format","security":[],"responses":{"200":{"description":"Format a uint32 integer string or four octets as a canonical dotted-decimal IPv4 address."}}}},"/v1/tools/ipv4-format/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Format a uint32 integer string or four octets as a canonical dotted-decimal IPv4 address.","description":"Supported: ipv4 format; format ipv4 dotted decimal; uint32 or octets to ipv4. Not supported: IPv6; hexadecimal; CIDR prefixes; leading-zero dotted decimal as input; hostnames. Page: https://computefirst.net/tools/ipv4-format","operationId":"execute_ipv4_format","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"oneOf":[{"required":["integer"],"properties":{"integer":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001}}},{"required":["octets"],"properties":{"octets":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"integer","minimum":0,"maximum":255}}}}]}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["address"],"properties":{"address":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-in-cidr/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Test whether a canonical IPv4 address lies in a CIDR prefix whose host bits are zero.","description":"Versioned contract (schemas, limits, examples) for ipv4-in-cidr. Supported: ipv4 in cidr; check ipv4 cidr membership; ipv4 address in network prefix. Not supported: IPv6; IPv4-mapped IPv6; ranges with hyphens; dotted netmasks; host bits ignored.","operationId":"describe_ipv4_in_cidr","security":[],"responses":{"200":{"description":"Test whether a canonical IPv4 address lies in a CIDR prefix whose host bits are zero."}}}},"/v1/tools/ipv4-in-cidr/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Test whether a canonical IPv4 address lies in a CIDR prefix whose host bits are zero.","description":"Supported: ipv4 in cidr; check ipv4 cidr membership; ipv4 address in network prefix. Not supported: IPv6; IPv4-mapped IPv6; ranges with hyphens; dotted netmasks; host bits ignored. Page: https://computefirst.net/tools/ipv4-in-cidr","operationId":"execute_ipv4_in_cidr","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address","cidr"],"properties":{"address":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"},"cidr":{"type":"string","maxLength":18}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["inside","network","prefix"],"properties":{"inside":{"type":"boolean"},"network":{"type":"string","maxLength":15},"prefix":{"type":"integer","minimum":0,"maximum":32}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-parse/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Parse a canonical dotted-decimal IPv4 address into octets and a uint32 integer string.","description":"Versioned contract (schemas, limits, examples) for ipv4-parse. Supported: ipv4 parse; parse dotted decimal ipv4; ipv4 to octets and uint32. Not supported: IPv6; IPv4-mapped IPv6; hexadecimal octets; CIDR prefixes; hostnames; ports.","operationId":"describe_ipv4_parse","security":[],"responses":{"200":{"description":"Parse a canonical dotted-decimal IPv4 address into octets and a uint32 integer string."}}}},"/v1/tools/ipv4-parse/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Parse a canonical dotted-decimal IPv4 address into octets and a uint32 integer string.","description":"Supported: ipv4 parse; parse dotted decimal ipv4; ipv4 to octets and uint32. Not supported: IPv6; IPv4-mapped IPv6; hexadecimal octets; CIDR prefixes; hostnames; ports. Page: https://computefirst.net/tools/ipv4-parse","operationId":"execute_ipv4_parse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address"],"properties":{"address":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["octets","integer"],"properties":{"octets":{"type":"array","minItems":4,"maxItems":4,"items":{"type":"integer","minimum":0,"maximum":255}},"integer":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-add-months/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Add a signed month count to a YYYY-MM-DD date, clamping the day to the target month.","description":"Versioned contract (schemas, limits, examples) for iso-date-add-months. Supported: iso date add months; add calendar months to an iso date; shift iso date by months. Not supported: add days; add seconds; add years as a separate unit; time zones; locale month names; fiscal calendars; datetime with time; ISO week arithmetic.","operationId":"describe_iso_date_add_months","security":[],"responses":{"200":{"description":"Add a signed month count to a YYYY-MM-DD date, clamping the day to the target month."}}}},"/v1/tools/iso-date-add-months/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Add a signed month count to a YYYY-MM-DD date, clamping the day to the target month.","description":"Supported: iso date add months; add calendar months to an iso date; shift iso date by months. Not supported: add days; add seconds; add years as a separate unit; time zones; locale month names; fiscal calendars; datetime with time; ISO week arithmetic. Page: https://computefirst.net/tools/iso-date-add-months","operationId":"execute_iso_date_add_months","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date","months"],"properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10},"months":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":7}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-add/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Add a signed whole-day delta to a strict YYYY-MM-DD calendar date.","description":"Versioned contract (schemas, limits, examples) for iso-date-add. Supported: iso date add; add days to date; date plus days. Not supported: timezones; weeks; months; locale; Date local time.","operationId":"describe_iso_date_add","security":[],"responses":{"200":{"description":"Add a signed whole-day delta to a strict YYYY-MM-DD calendar date."}}}},"/v1/tools/iso-date-add/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Add a signed whole-day delta to a strict YYYY-MM-DD calendar date.","description":"Supported: iso date add; add days to date; date plus days. Not supported: timezones; weeks; months; locale; Date local time. Page: https://computefirst.net/tools/iso-date-add","operationId":"execute_iso_date_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date","days"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10},"days":{"type":"string","minLength":1,"maxLength":257}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-difference/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Whole days from start to end as a canonical integer string (end - start).","description":"Versioned contract (schemas, limits, examples) for iso-date-difference. Supported: iso date difference; days between dates; date minus date. Not supported: business days; timezones; hours; locale.","operationId":"describe_iso_date_difference","security":[],"responses":{"200":{"description":"Whole days from start to end as a canonical integer string (end - start)."}}}},"/v1/tools/iso-date-difference/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Whole days from start to end as a canonical integer string (end - start).","description":"Supported: iso date difference; days between dates; date minus date. Not supported: business days; timezones; hours; locale. Page: https://computefirst.net/tools/iso-date-difference","operationId":"execute_iso_date_difference","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10},"end":{"type":"string","minLength":10,"maxLength":10}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["days"],"properties":{"days":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-month-end/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the last valid calendar day of the year-month of a YYYY-MM-DD date.","description":"Versioned contract (schemas, limits, examples) for iso-date-month-end. Supported: iso date month end; last day of month; end of calendar month. Not supported: last business day; last weekday; ISO week end; time zones; datetime with time; fiscal month end.","operationId":"describe_iso_date_month_end","security":[],"responses":{"200":{"description":"Return the last valid calendar day of the year-month of a YYYY-MM-DD date."}}}},"/v1/tools/iso-date-month-end/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the last valid calendar day of the year-month of a YYYY-MM-DD date.","description":"Supported: iso date month end; last day of month; end of calendar month. Not supported: last business day; last weekday; ISO week end; time zones; datetime with time; fiscal month end. Page: https://computefirst.net/tools/iso-date-month-end","operationId":"execute_iso_date_month_end","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-month-start/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the first calendar day of the year-month of a YYYY-MM-DD date.","description":"Versioned contract (schemas, limits, examples) for iso-date-month-start. Supported: iso date month start; first day of month; start of calendar month. Not supported: ISO week start; fiscal year start; timezone local midnight; datetime truncate; last day of month; add months.","operationId":"describe_iso_date_month_start","security":[],"responses":{"200":{"description":"Return the first calendar day of the year-month of a YYYY-MM-DD date."}}}},"/v1/tools/iso-date-month-start/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the first calendar day of the year-month of a YYYY-MM-DD date.","description":"Supported: iso date month start; first day of month; start of calendar month. Not supported: ISO week start; fiscal year start; timezone local midnight; datetime truncate; last day of month; add months. Page: https://computefirst.net/tools/iso-date-month-start","operationId":"execute_iso_date_month_start","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-to-week/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Convert a YYYY-MM-DD calendar date to an ISO-8601 week date.","description":"Versioned contract (schemas, limits, examples) for iso-date-to-week. Supported: iso date to week; convert calendar date to iso week date; iso week year week and weekday. Not supported: locale week numbers; Sunday-first weeks; ISO ordinal dates; timezones; datetime input; fiscal weeks.","operationId":"describe_iso_date_to_week","security":[],"responses":{"200":{"description":"Convert a YYYY-MM-DD calendar date to an ISO-8601 week date."}}}},"/v1/tools/iso-date-to-week/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Convert a YYYY-MM-DD calendar date to an ISO-8601 week date.","description":"Supported: iso date to week; convert calendar date to iso week date; iso week year week and weekday. Not supported: locale week numbers; Sunday-first weeks; ISO ordinal dates; timezones; datetime input; fiscal weeks. Page: https://computefirst.net/tools/iso-date-to-week","operationId":"execute_iso_date_to_week","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["year","week","weekday","iso"],"properties":{"year":{"type":"integer","minimum":1,"maximum":9999},"week":{"type":"integer","minimum":1,"maximum":53},"weekday":{"type":"integer","minimum":1,"maximum":7},"iso":{"type":"string","pattern":"^\\d{4}-W\\d{2}-[1-7]$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-week-bounds/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the Monday and Sunday of the ISO-8601 week that contains a calendar date.","description":"Versioned contract (schemas, limits, examples) for iso-date-week-bounds. Supported: iso date week bounds; monday and sunday of an iso week; iso week start and end dates. Not supported: locale week numbers; Sunday-first weeks; month start and end; timezones; datetime input; fiscal weeks.","operationId":"describe_iso_date_week_bounds","security":[],"responses":{"200":{"description":"Return the Monday and Sunday of the ISO-8601 week that contains a calendar date."}}}},"/v1/tools/iso-date-week-bounds/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the Monday and Sunday of the ISO-8601 week that contains a calendar date.","description":"Supported: iso date week bounds; monday and sunday of an iso week; iso week start and end dates. Not supported: locale week numbers; Sunday-first weeks; month start and end; timezones; datetime input; fiscal weeks. Page: https://computefirst.net/tools/iso-date-week-bounds","operationId":"execute_iso_date_week_bounds","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-weekday/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: ISO-8601 weekday number of a strict YYYY-MM-DD date (Monday=1 ... Sunday=7).","description":"Versioned contract (schemas, limits, examples) for iso-date-weekday. Supported: iso date weekday; day of week iso; iso weekday number. Not supported: locale weekday names; Sunday-first; timezones.","operationId":"describe_iso_date_weekday","security":[],"responses":{"200":{"description":"ISO-8601 weekday number of a strict YYYY-MM-DD date (Monday=1 ... Sunday=7)."}}}},"/v1/tools/iso-date-weekday/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"ISO-8601 weekday number of a strict YYYY-MM-DD date (Monday=1 ... Sunday=7).","description":"Supported: iso date weekday; day of week iso; iso weekday number. Not supported: locale weekday names; Sunday-first; timezones. Page: https://computefirst.net/tools/iso-date-weekday","operationId":"execute_iso_date_weekday","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["weekday"],"properties":{"weekday":{"type":"integer","minimum":1,"maximum":7}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-datetime-add-seconds/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Add a signed whole-second delta to a strict UTC ISO-8601 datetime.","description":"Versioned contract (schemas, limits, examples) for iso-datetime-add-seconds. Supported: iso datetime add seconds; add seconds to utc datetime; shift iso datetime by whole seconds. Not supported: leap seconds; time zones; offsets other than Z; fractional seconds; locale; ISO-8601 duration strings; add months or years; DST.","operationId":"describe_iso_datetime_add_seconds","security":[],"responses":{"200":{"description":"Add a signed whole-second delta to a strict UTC ISO-8601 datetime."}}}},"/v1/tools/iso-datetime-add-seconds/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Add a signed whole-second delta to a strict UTC ISO-8601 datetime.","description":"Supported: iso datetime add seconds; add seconds to utc datetime; shift iso datetime by whole seconds. Not supported: leap seconds; time zones; offsets other than Z; fractional seconds; locale; ISO-8601 duration strings; add months or years; DST. Page: https://computefirst.net/tools/iso-datetime-add-seconds","operationId":"execute_iso_datetime_add_seconds","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["datetime","seconds"],"properties":{"datetime":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"},"seconds":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":13}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["datetime"],"properties":{"datetime":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-datetime-diff-seconds/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the signed whole-second difference between two strict UTC ISO-8601 datetimes.","description":"Versioned contract (schemas, limits, examples) for iso-datetime-diff-seconds. Supported: iso datetime diff seconds; difference between utc datetimes in seconds; utc datetime difference in seconds. Not supported: leap seconds; time zones; offsets other than Z; fractional seconds; locale; ISO-8601 duration strings; calendar month or year difference; DST.","operationId":"describe_iso_datetime_diff_seconds","security":[],"responses":{"200":{"description":"Return the signed whole-second difference between two strict UTC ISO-8601 datetimes."}}}},"/v1/tools/iso-datetime-diff-seconds/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the signed whole-second difference between two strict UTC ISO-8601 datetimes.","description":"Supported: iso datetime diff seconds; difference between utc datetimes in seconds; utc datetime difference in seconds. Not supported: leap seconds; time zones; offsets other than Z; fractional seconds; locale; ISO-8601 duration strings; calendar month or year difference; DST. Page: https://computefirst.net/tools/iso-datetime-diff-seconds","operationId":"execute_iso_datetime_diff_seconds","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"},"end":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["seconds"],"properties":{"seconds":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-datetime-truncate/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Truncate a strict UTC ISO-8601 datetime toward UTC zero at day, hour, minute, or second.","description":"Versioned contract (schemas, limits, examples) for iso-datetime-truncate. Supported: iso datetime truncate; truncate utc datetime; floor iso datetime to unit. Not supported: round or ceil; truncate to week, month, or year; leap seconds; time zones; offsets other than Z; fractional seconds; locale; DST.","operationId":"describe_iso_datetime_truncate","security":[],"responses":{"200":{"description":"Truncate a strict UTC ISO-8601 datetime toward UTC zero at day, hour, minute, or second."}}}},"/v1/tools/iso-datetime-truncate/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Truncate a strict UTC ISO-8601 datetime toward UTC zero at day, hour, minute, or second.","description":"Supported: iso datetime truncate; truncate utc datetime; floor iso datetime to unit. Not supported: round or ceil; truncate to week, month, or year; leap seconds; time zones; offsets other than Z; fractional seconds; locale; DST. Page: https://computefirst.net/tools/iso-datetime-truncate","operationId":"execute_iso_datetime_truncate","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["datetime","unit"],"properties":{"datetime":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"},"unit":{"type":"string","enum":["day","hour","minute","second"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["datetime"],"properties":{"datetime":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-week-to-date/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Convert an ISO-8601 week date to a YYYY-MM-DD calendar date.","description":"Versioned contract (schemas, limits, examples) for iso-week-to-date. Supported: iso week to date; convert iso week date to calendar date; calendar date from iso week. Not supported: locale week numbers; Sunday-first weeks; ISO ordinal dates; timezones; datetime output; fiscal weeks.","operationId":"describe_iso_week_to_date","security":[],"responses":{"200":{"description":"Convert an ISO-8601 week date to a YYYY-MM-DD calendar date."}}}},"/v1/tools/iso-week-to-date/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Convert an ISO-8601 week date to a YYYY-MM-DD calendar date.","description":"Supported: iso week to date; convert iso week date to calendar date; calendar date from iso week. Not supported: locale week numbers; Sunday-first weeks; ISO ordinal dates; timezones; datetime output; fiscal weeks. Page: https://computefirst.net/tools/iso-week-to-date","operationId":"execute_iso_week_to_date","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["year","week","weekday"],"properties":{"year":{"type":"integer","minimum":1,"maximum":9999},"week":{"type":"integer","minimum":1,"maximum":53},"weekday":{"type":"integer","minimum":1,"maximum":7}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-count/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Count structural occurrences in a JSON array in first-seen order.","description":"Versioned contract (schemas, limits, examples) for json-array-count. Supported: json array count; count json values; json value histogram. Not supported: sort by count; reference identity.","operationId":"describe_json_array_count","security":[],"responses":{"200":{"description":"Count structural occurrences in a JSON array in first-seen order."}}}},"/v1/tools/json-array-count/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Count structural occurrences in a JSON array in first-seen order.","description":"Supported: json array count; count json values; json value histogram. Not supported: sort by count; reference identity. Page: https://computefirst.net/tools/json-array-count","operationId":"execute_json_array_count","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","maxItems":10000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["items","items_in","unique"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["value","count"],"properties":{"value":{},"count":{"type":"integer"}}}},"items_in":{"type":"integer"},"unique":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-sort-objects/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Stably sort an array of objects by explicit string keys using UTF-16 lexicographic order.","description":"Versioned contract (schemas, limits, examples) for json-array-sort-objects. Supported: json array sort objects; sort json objects by keys; stable sort object array; order json objects lexicographically. Not supported: numeric sort; locale sort; nested paths; json pointer sort; fuzzy matching; read files; fetch urls.","operationId":"describe_json_array_sort_objects","security":[],"responses":{"200":{"description":"Stably sort an array of objects by explicit string keys using UTF-16 lexicographic order."}}}},"/v1/tools/json-array-sort-objects/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Stably sort an array of objects by explicit string keys using UTF-16 lexicographic order.","description":"Supported: json array sort objects; sort json objects by keys; stable sort object array; order json objects lexicographically. Not supported: numeric sort; locale sort; nested paths; json pointer sort; fuzzy matching; read files; fetch urls. Page: https://computefirst.net/tools/json-array-sort-objects","operationId":"execute_json_array_sort_objects","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items","keys"],"properties":{"items":{"type":"array","maxItems":5000,"items":{"type":"object"}},"keys":{"type":"array","minItems":1,"maxItems":16,"uniqueItems":true,"items":{"type":"string","minLength":1}},"order":{"type":"string","enum":["asc","desc"],"default":"asc"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","maxItems":5000,"items":{"type":"object"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-unique/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Deduplicate a JSON array by structural equality, keeping first-seen order.","description":"Versioned contract (schemas, limits, examples) for json-array-unique. Supported: json array unique; unique json values; dedupe json array. Not supported: sort; reference unique; hash unstable.","operationId":"describe_json_array_unique","security":[],"responses":{"200":{"description":"Deduplicate a JSON array by structural equality, keeping first-seen order."}}}},"/v1/tools/json-array-unique/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Deduplicate a JSON array by structural equality, keeping first-seen order.","description":"Supported: json array unique; unique json values; dedupe json array. Not supported: sort; reference unique; hash unstable. Page: https://computefirst.net/tools/json-array-unique","operationId":"execute_json_array_unique","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","maxItems":10000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["items","items_in","items_out"],"properties":{"items":{"type":"array"},"items_in":{"type":"integer"},"items_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-canonical-serialize/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Serialize a JSON value to deterministic compact text with sorted object keys and safe integers only.","description":"Versioned contract (schemas, limits, examples) for json-canonical-serialize. Supported: json canonical serialize; canonicalize json; serialize json deterministically. Not supported: serialize non-integer numbers; pretty-print json; jsonc comments; locale-aware key sort; read files; fetch urls.","operationId":"describe_json_canonical_serialize","security":[],"responses":{"200":{"description":"Serialize a JSON value to deterministic compact text with sorted object keys and safe integers only."}}}},"/v1/tools/json-canonical-serialize/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Serialize a JSON value to deterministic compact text with sorted object keys and safe integers only.","description":"Supported: json canonical serialize; canonicalize json; serialize json deterministically. Not supported: serialize non-integer numbers; pretty-print json; jsonc comments; locale-aware key sort; read files; fetch urls. Page: https://computefirst.net/tools/json-canonical-serialize","operationId":"execute_json_canonical_serialize","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["json"],"properties":{"json":{"type":"string","maxLength":1048576}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-deep-diff/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Bounded deterministic JSON difference records. Not a JSON Patch implementation.","description":"Versioned contract (schemas, limits, examples) for json-deep-diff. Supported: json deep diff; diff json values; json structural diff. Not supported: json patch apply; json merge patch; text diff.","operationId":"describe_json_deep_diff","security":[],"responses":{"200":{"description":"Bounded deterministic JSON difference records. Not a JSON Patch implementation."}}}},"/v1/tools/json-deep-diff/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Bounded deterministic JSON difference records. Not a JSON Patch implementation.","description":"Supported: json deep diff; diff json values; json structural diff. Not supported: json patch apply; json merge patch; text diff. Page: https://computefirst.net/tools/json-deep-diff","operationId":"execute_json_deep_diff","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{},"b":{}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["changes"],"properties":{"changes":{"type":"array","maxItems":1000,"items":{"type":"object","additionalProperties":false,"required":["pointer","op"],"properties":{"pointer":{"type":"string"},"op":{"type":"string","enum":["replace","add","remove"]},"left":{},"right":{}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-deep-equal/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: JSON-only structural equality. Object key order does not matter; array order does.","description":"Versioned contract (schemas, limits, examples) for json-deep-equal. Supported: json deep equal; json equals; structural json equality. Not supported: reference equality; date compare; json patch; epsilon floats.","operationId":"describe_json_deep_equal","security":[],"responses":{"200":{"description":"JSON-only structural equality. Object key order does not matter; array order does."}}}},"/v1/tools/json-deep-equal/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"JSON-only structural equality. Object key order does not matter; array order does.","description":"Supported: json deep equal; json equals; structural json equality. Not supported: reference equality; date compare; json patch; epsilon floats. Page: https://computefirst.net/tools/json-deep-equal","operationId":"execute_json_deep_equal","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{},"b":{}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["equal"],"properties":{"equal":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-flatten/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Flatten a JSON value into a null-prototype map keyed by RFC 6901 JSON Pointers.","description":"Versioned contract (schemas, limits, examples) for json-flatten. Supported: json flatten; flatten json to json pointers; expand nested json into pointer keys. Not supported: json pointer get; json pointer set; unflatten json pointers; read files; detect cycles.","operationId":"describe_json_flatten","security":[],"responses":{"200":{"description":"Flatten a JSON value into a null-prototype map keyed by RFC 6901 JSON Pointers."}}}},"/v1/tools/json-flatten/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Flatten a JSON value into a null-prototype map keyed by RFC 6901 JSON Pointers.","description":"Supported: json flatten; flatten json to json pointers; expand nested json into pointer keys. Not supported: json pointer get; json pointer set; unflatten json pointers; read files; detect cycles. Page: https://computefirst.net/tools/json-flatten","operationId":"execute_json_flatten","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"description":"JSON object, array, string, boolean, null, or safe integer"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["pointers"],"properties":{"pointers":{"type":"object"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-merge-patch/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Apply an RFC 7396 JSON Merge Patch to a JSON value.","description":"Versioned contract (schemas, limits, examples) for json-merge-patch. Supported: json merge patch; apply json merge patch; rfc 7396 merge patch. Not supported: json patch rfc 6902; elementwise array merge; json pointer set; fuzzy merge; read files; fetch urls.","operationId":"describe_json_merge_patch","security":[],"responses":{"200":{"description":"Apply an RFC 7396 JSON Merge Patch to a JSON value."}}}},"/v1/tools/json-merge-patch/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Apply an RFC 7396 JSON Merge Patch to a JSON value.","description":"Supported: json merge patch; apply json merge patch; rfc 7396 merge patch. Not supported: json patch rfc 6902; elementwise array merge; json pointer set; fuzzy merge; read files; fetch urls. Page: https://computefirst.net/tools/json-merge-patch","operationId":"execute_json_merge_patch","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["target","patch"],"properties":{"target":true,"patch":true}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":true}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-omit-pointers/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Deep-clone JSON and delete values at explicit RFC 6901 pointers.","description":"Versioned contract (schemas, limits, examples) for json-omit-pointers. Supported: json omit pointers; remove json pointers; delete json pointers. Not supported: json patch document; omit by regex.","operationId":"describe_json_omit_pointers","security":[],"responses":{"200":{"description":"Deep-clone JSON and delete values at explicit RFC 6901 pointers."}}}},"/v1/tools/json-omit-pointers/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Deep-clone JSON and delete values at explicit RFC 6901 pointers.","description":"Supported: json omit pointers; remove json pointers; delete json pointers. Not supported: json patch document; omit by regex. Page: https://computefirst.net/tools/json-omit-pointers","operationId":"execute_json_omit_pointers","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["json","pointers"],"properties":{"json":{},"pointers":{"type":"array","minItems":1,"maxItems":256,"uniqueItems":true,"items":{"type":"string","maxLength":1024}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["json"],"properties":{"json":{}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-pick-pointers/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Pick cloned JSON values at explicit RFC 6901 pointers into a null-prototype map.","description":"Versioned contract (schemas, limits, examples) for json-pick-pointers. Supported: json pick pointers; project json pointers; select json pointers. Not supported: reconstruct nested tree; create missing; json patch.","operationId":"describe_json_pick_pointers","security":[],"responses":{"200":{"description":"Pick cloned JSON values at explicit RFC 6901 pointers into a null-prototype map."}}}},"/v1/tools/json-pick-pointers/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Pick cloned JSON values at explicit RFC 6901 pointers into a null-prototype map.","description":"Supported: json pick pointers; project json pointers; select json pointers. Not supported: reconstruct nested tree; create missing; json patch. Page: https://computefirst.net/tools/json-pick-pointers","operationId":"execute_json_pick_pointers","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["json","pointers"],"properties":{"json":{},"pointers":{"type":"array","minItems":1,"maxItems":256,"uniqueItems":true,"items":{"type":"string","maxLength":1024}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"object"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-pointer-get/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Return the cloned JSON value at an RFC 6901 pointer.","description":"Versioned contract (schemas, limits, examples) for json-pointer-get. Supported: json pointer get; get json pointer; read json pointer. Not supported: json patch; create missing; prototype walk; fetch.","operationId":"describe_json_pointer_get","security":[],"responses":{"200":{"description":"Return the cloned JSON value at an RFC 6901 pointer."}}}},"/v1/tools/json-pointer-get/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Return the cloned JSON value at an RFC 6901 pointer.","description":"Supported: json pointer get; get json pointer; read json pointer. Not supported: json patch; create missing; prototype walk; fetch. Page: https://computefirst.net/tools/json-pointer-get","operationId":"execute_json_pointer_get","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["json","pointer"],"properties":{"json":{},"pointer":{"type":"string","maxLength":1024}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-pointer-has/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Return whether an RFC 6901 pointer exists as an own path.","description":"Versioned contract (schemas, limits, examples) for json-pointer-has. Supported: json pointer has; has json pointer; json pointer exists. Not supported: prototype has; json patch.","operationId":"describe_json_pointer_has","security":[],"responses":{"200":{"description":"Return whether an RFC 6901 pointer exists as an own path."}}}},"/v1/tools/json-pointer-has/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Return whether an RFC 6901 pointer exists as an own path.","description":"Supported: json pointer has; has json pointer; json pointer exists. Not supported: prototype has; json patch. Page: https://computefirst.net/tools/json-pointer-has","operationId":"execute_json_pointer_has","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["json","pointer"],"properties":{"json":{},"pointer":{"type":"string","maxLength":1024}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["present"],"properties":{"present":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-pointer-list/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: List RFC 6901 pointers to every reachable JSON node, root first.","description":"Versioned contract (schemas, limits, examples) for json-pointer-list. Supported: json pointer list; list json pointers; enumerate json pointers. Not supported: json path; regex; prototype walk.","operationId":"describe_json_pointer_list","security":[],"responses":{"200":{"description":"List RFC 6901 pointers to every reachable JSON node, root first."}}}},"/v1/tools/json-pointer-list/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"List RFC 6901 pointers to every reachable JSON node, root first.","description":"Supported: json pointer list; list json pointers; enumerate json pointers. Not supported: json path; regex; prototype walk. Page: https://computefirst.net/tools/json-pointer-list","operationId":"execute_json_pointer_list","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["json"],"properties":{"json":{}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["pointers"],"properties":{"pointers":{"type":"array","maxItems":10000,"items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-schema-validate/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Validate a JSON instance against ComputeFirst Schema 1.0.","description":"Versioned contract (schemas, limits, examples) for json-schema-validate. Supported: json schema validate; validate json against schema; check json instance against schema; computefirst schema validate. Not supported: regex patterns; string formats; remote $ref; float numbers; allOf anyOf oneOf not; draft-2020-12 full.","operationId":"describe_json_schema_validate","security":[],"responses":{"200":{"description":"Validate a JSON instance against ComputeFirst Schema 1.0."}}}},"/v1/tools/json-schema-validate/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Validate a JSON instance against ComputeFirst Schema 1.0.","description":"Supported: json schema validate; validate json against schema; check json instance against schema; computefirst schema validate. Not supported: regex patterns; string formats; remote $ref; float numbers; allOf anyOf oneOf not; draft-2020-12 full. Page: https://computefirst.net/tools/json-schema-validate","operationId":"execute_json_schema_validate","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["schema","instance"],"properties":{"schema":{"type":"object"},"instance":{}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["valid","errors"],"properties":{"valid":{"type":"boolean"},"errors":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["path","keyword","message"],"properties":{"path":{"type":"string"},"keyword":{"type":"string"},"message":{"type":"string"}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-to-csv/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Serialize string-valued JSON rows to CSV using explicit ordered columns.","description":"Versioned contract (schemas, limits, examples) for json-to-csv. Supported: json to csv; convert json rows to csv; serialize json objects as csv. Not supported: infer columns; coerce values; flatten nested json; stream rows; read files; fetch urls.","operationId":"describe_json_to_csv","security":[],"responses":{"200":{"description":"Serialize string-valued JSON rows to CSV using explicit ordered columns."}}}},"/v1/tools/json-to-csv/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Serialize string-valued JSON rows to CSV using explicit ordered columns.","description":"Supported: json to csv; convert json rows to csv; serialize json objects as csv. Not supported: infer columns; coerce values; flatten nested json; stream rows; read files; fetch urls. Page: https://computefirst.net/tools/json-to-csv","operationId":"execute_json_to_csv","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["columns","rows"],"properties":{"columns":{"type":"array","minItems":1,"maxItems":256,"uniqueItems":true,"items":{"type":"string","minLength":1}},"rows":{"type":"array","maxItems":5000,"items":{"type":"object","additionalProperties":{"type":"string"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"string"},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-unflatten/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Reconstruct a JSON value from a map of RFC 6901 JSON Pointers to leaves.","description":"Versioned contract (schemas, limits, examples) for json-unflatten. Supported: json unflatten; unflatten json pointers; reconstruct json from pointers; expand json pointer map. Not supported: json pointer get; json pointer set; sparse arrays; read files; fetch urls.","operationId":"describe_json_unflatten","security":[],"responses":{"200":{"description":"Reconstruct a JSON value from a map of RFC 6901 JSON Pointers to leaves."}}}},"/v1/tools/json-unflatten/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Reconstruct a JSON value from a map of RFC 6901 JSON Pointers to leaves.","description":"Supported: json unflatten; unflatten json pointers; reconstruct json from pointers; expand json pointer map. Not supported: json pointer get; json pointer set; sparse arrays; read files; fetch urls. Page: https://computefirst.net/tools/json-unflatten","operationId":"execute_json_unflatten","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["pointers"],"properties":{"pointers":{"type":"object","maxProperties":5000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":true}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/jsonl-to-array/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Parse strict JSON Lines text into an array of JSON-safe values.","description":"Versioned contract (schemas, limits, examples) for jsonl-to-array. Supported: jsonl to array; parse json lines into an array; convert jsonl to json array. Not supported: JSONL comments; NDJSON with blank lines; concatenated JSON without newlines; streaming parse; read files.","operationId":"describe_jsonl_to_array","security":[],"responses":{"200":{"description":"Parse strict JSON Lines text into an array of JSON-safe values."}}}},"/v1/tools/jsonl-to-array/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Parse strict JSON Lines text into an array of JSON-safe values.","description":"Supported: jsonl to array; parse json lines into an array; convert jsonl to json array. Not supported: JSONL comments; NDJSON with blank lines; concatenated JSON without newlines; streaming parse; read files. Page: https://computefirst.net/tools/jsonl-to-array","operationId":"execute_jsonl_to_array","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":5000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/jsonl-validate/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Validate strict JSON Lines text and report the value count and UTF-8 byte length.","description":"Versioned contract (schemas, limits, examples) for jsonl-validate. Supported: jsonl validate; validate json lines; check jsonl document. Not supported: JSONL comments; concatenated JSON without newlines; NDJSON with blank lines; JSON schema validation; return valid false; read files.","operationId":"describe_jsonl_validate","security":[],"responses":{"200":{"description":"Validate strict JSON Lines text and report the value count and UTF-8 byte length."}}}},"/v1/tools/jsonl-validate/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Validate strict JSON Lines text and report the value count and UTF-8 byte length.","description":"Supported: jsonl validate; validate json lines; check jsonl document. Not supported: JSONL comments; concatenated JSON without newlines; NDJSON with blank lines; JSON schema validation; return valid false; read files. Page: https://computefirst.net/tools/jsonl-validate","operationId":"execute_jsonl_validate","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["valid","lines","bytes"],"properties":{"valid":{"type":"boolean","const":true},"lines":{"type":"integer","minimum":0,"maximum":5000},"bytes":{"type":"integer","minimum":0,"maximum":256000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/length-add/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Add integer length terms in mixed units and return the exact sum in a chosen unit.","description":"Versioned contract (schemas, limits, examples) for length-add. Supported: length add; add length measurements; sum length terms into a unit. Not supported: more than 32 terms; nautical miles; floating-point lengths; mean of lengths.","operationId":"describe_length_add","security":[],"responses":{"200":{"description":"Add integer length terms in mixed units and return the exact sum in a chosen unit."}}}},"/v1/tools/length-add/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Add integer length terms in mixed units and return the exact sum in a chosen unit.","description":"Supported: length add; add length measurements; sum length terms into a unit. Not supported: more than 32 terms; nautical miles; floating-point lengths; mean of lengths. Page: https://computefirst.net/tools/length-add","operationId":"execute_length_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["terms","to"],"properties":{"terms":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["nm","um","mm","cm","m","km","in","ft","yd","mi"]}}}},"to":{"type":"string","enum":["nm","um","mm","cm","m","km","in","ft","yd","mi"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"},"denominator":{"type":"string","pattern":"^[1-9][0-9]*$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/length-compare/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Compare two integer length measurements by exact nanometer amounts.","description":"Versioned contract (schemas, limits, examples) for length-compare. Supported: length compare; compare length measurements; compare two integer lengths. Not supported: sort a list of lengths; approximate comparison; nautical miles; floating-point lengths.","operationId":"describe_length_compare","security":[],"responses":{"200":{"description":"Compare two integer length measurements by exact nanometer amounts."}}}},"/v1/tools/length-compare/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Compare two integer length measurements by exact nanometer amounts.","description":"Supported: length compare; compare length measurements; compare two integer lengths. Not supported: sort a list of lengths; approximate comparison; nautical miles; floating-point lengths. Page: https://computefirst.net/tools/length-compare","operationId":"execute_length_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["nm","um","mm","cm","m","km","in","ft","yd","mi"]}}},"right":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["nm","um","mm","cm","m","km","in","ft","yd","mi"]}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["cmp"],"properties":{"cmp":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/length-convert/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Convert a canonical integer length between exact SI and international customary units.","description":"Versioned contract (schemas, limits, examples) for length-convert. Supported: length convert; convert length units; convert integer length between units. Not supported: nautical miles; survey feet; SI prefixes other than nm um mm cm m km; floating-point lengths.","operationId":"describe_length_convert","security":[],"responses":{"200":{"description":"Convert a canonical integer length between exact SI and international customary units."}}}},"/v1/tools/length-convert/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Convert a canonical integer length between exact SI and international customary units.","description":"Supported: length convert; convert length units; convert integer length between units. Not supported: nautical miles; survey feet; SI prefixes other than nm um mm cm m km; floating-point lengths. Page: https://computefirst.net/tools/length-convert","operationId":"execute_length_convert","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value","from","to"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"from":{"type":"string","enum":["nm","um","mm","cm","m","km","in","ft","yd","mi"]},"to":{"type":"string","enum":["nm","um","mm","cm","m","km","in","ft","yd","mi"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"},"denominator":{"type":"string","pattern":"^[1-9][0-9]*$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/mass-add/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Add mixed-unit canonical integer mass amounts and express the sum in a target unit as a reduced rational.","description":"Versioned contract (schemas, limits, examples) for mass-add. Supported: mass add; add mass quantities; sum masses in mixed units. Not supported: mass multiply; average mass; density from mass and volume; troy or stone units; floating-point mass.","operationId":"describe_mass_add","security":[],"responses":{"200":{"description":"Add mixed-unit canonical integer mass amounts and express the sum in a target unit as a reduced rational."}}}},"/v1/tools/mass-add/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Add mixed-unit canonical integer mass amounts and express the sum in a target unit as a reduced rational.","description":"Supported: mass add; add mass quantities; sum masses in mixed units. Not supported: mass multiply; average mass; density from mass and volume; troy or stone units; floating-point mass. Page: https://computefirst.net/tools/mass-add","operationId":"execute_mass_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["terms","to"],"properties":{"terms":{"type":"array","minItems":1,"maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["ng","ug","mg","g","kg","t","oz","lb"]}}}},"to":{"type":"string","enum":["ng","ug","mg","g","kg","t","oz","lb"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"},"denominator":{"type":"string","pattern":"^[1-9][0-9]*$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/mass-compare/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Compare two mixed-unit canonical integer mass amounts using exact nanogram BigInt values.","description":"Versioned contract (schemas, limits, examples) for mass-compare. Supported: mass compare; compare mass quantities; compare grams and pounds. Not supported: sort a list of masses; approximate or rounded compare; locale unit names; troy or stone units; floating-point mass.","operationId":"describe_mass_compare","security":[],"responses":{"200":{"description":"Compare two mixed-unit canonical integer mass amounts using exact nanogram BigInt values."}}}},"/v1/tools/mass-compare/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Compare two mixed-unit canonical integer mass amounts using exact nanogram BigInt values.","description":"Supported: mass compare; compare mass quantities; compare grams and pounds. Not supported: sort a list of masses; approximate or rounded compare; locale unit names; troy or stone units; floating-point mass. Page: https://computefirst.net/tools/mass-compare","operationId":"execute_mass_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["ng","ug","mg","g","kg","t","oz","lb"]}}},"right":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"unit":{"type":"string","enum":["ng","ug","mg","g","kg","t","oz","lb"]}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["cmp"],"properties":{"cmp":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/mass-convert/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Convert a canonical integer mass amount between exact nanogram-based units as a reduced rational.","description":"Versioned contract (schemas, limits, examples) for mass-convert. Supported: mass convert; convert mass units; convert grams kilograms pounds. Not supported: troy ounces or pounds; stone; short tons; long tons; floating-point mass; SI prefixes other than ng ug mg g kg t.","operationId":"describe_mass_convert","security":[],"responses":{"200":{"description":"Convert a canonical integer mass amount between exact nanogram-based units as a reduced rational."}}}},"/v1/tools/mass-convert/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Convert a canonical integer mass amount between exact nanogram-based units as a reduced rational.","description":"Supported: mass convert; convert mass units; convert grams kilograms pounds. Not supported: troy ounces or pounds; stone; short tons; long tons; floating-point mass; SI prefixes other than ng ug mg g kg t. Page: https://computefirst.net/tools/mass-convert","operationId":"execute_mass_convert","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value","from","to"],"properties":{"value":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001},"from":{"type":"string","enum":["ng","ug","mg","g","kg","t","oz","lb"]},"to":{"type":"string","enum":["ng","ug","mg","g","kg","t","oz","lb"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","pattern":"^(0|-?[1-9][0-9]*)$"},"denominator":{"type":"string","pattern":"^[1-9][0-9]*$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/rational-add/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Add two rational numbers given as numerator/denominator integer strings and return the reduced sum.","description":"Versioned contract (schemas, limits, examples) for rational-add. Supported: rational add; add two rational numbers; add fractions as rationals; sum two rationals. Not supported: rational multiply; decimal add; float addition; mixed numbers; continued fractions; IEEE-754 arithmetic.","operationId":"describe_rational_add","security":[],"responses":{"200":{"description":"Add two rational numbers given as numerator/denominator integer strings and return the reduced sum."}}}},"/v1/tools/rational-add/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Add two rational numbers given as numerator/denominator integer strings and return the reduced sum.","description":"Supported: rational add; add two rational numbers; add fractions as rationals; sum two rationals. Not supported: rational multiply; decimal add; float addition; mixed numbers; continued fractions; IEEE-754 arithmetic. Page: https://computefirst.net/tools/rational-add","operationId":"execute_rational_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"b":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/rational-multiply/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Multiply two rational numbers given as numerator/denominator integer strings and return the reduced product.","description":"Versioned contract (schemas, limits, examples) for rational-multiply. Supported: rational multiply; multiply two rational numbers; multiply fractions as rationals; product of two rationals. Not supported: rational add; decimal multiply; float multiplication; mixed numbers; continued fractions; IEEE-754 arithmetic.","operationId":"describe_rational_multiply","security":[],"responses":{"200":{"description":"Multiply two rational numbers given as numerator/denominator integer strings and return the reduced product."}}}},"/v1/tools/rational-multiply/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Multiply two rational numbers given as numerator/denominator integer strings and return the reduced product.","description":"Supported: rational multiply; multiply two rational numbers; multiply fractions as rationals; product of two rationals. Not supported: rational add; decimal multiply; float multiplication; mixed numbers; continued fractions; IEEE-754 arithmetic. Page: https://computefirst.net/tools/rational-multiply","operationId":"execute_rational_multiply","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"b":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/schedule-asap-layers/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Partition a DAG into ASAP topological generations: each layer is the nodes that become ready together.","description":"Versioned contract (schemas, limits, examples) for schedule-asap-layers. Supported: schedule asap layers; topological generations; ASAP depth layers of a DAG. Not supported: ALAP layers; processor counts; node durations and earliest finish; resource and capacity constraints.","operationId":"describe_schedule_asap_layers","security":[],"responses":{"200":{"description":"Partition a DAG into ASAP topological generations: each layer is the nodes that become ready together."}}}},"/v1/tools/schedule-asap-layers/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Partition a DAG into ASAP topological generations: each layer is the nodes that become ready together.","description":"Supported: schedule asap layers; topological generations; ASAP depth layers of a DAG. Not supported: ALAP layers; processor counts; node durations and earliest finish; resource and capacity constraints. Page: https://computefirst.net/tools/schedule-asap-layers","operationId":"execute_schedule_asap_layers","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["layers"],"properties":{"layers":{"type":"array","maxItems":2000,"items":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/schedule-critical-path/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Compute CPM zero-slack critical nodes and tight edges on a DAG, plus one representative critical path.","description":"Versioned contract (schemas, limits, examples) for schedule-critical-path. Supported: schedule critical path; cpm zero-slack critical path; critical nodes edges and representative path. Not supported: multiple enumerated critical paths; probabilistic PERT; crashing; calendar dates and working hours.","operationId":"describe_schedule_critical_path","security":[],"responses":{"200":{"description":"Compute CPM zero-slack critical nodes and tight edges on a DAG, plus one representative critical path."}}}},"/v1/tools/schedule-critical-path/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Compute CPM zero-slack critical nodes and tight edges on a DAG, plus one representative critical path.","description":"Supported: schedule critical path; cpm zero-slack critical path; critical nodes edges and representative path. Not supported: multiple enumerated critical paths; probabilistic PERT; crashing; calendar dates and working hours. Page: https://computefirst.net/tools/schedule-critical-path","operationId":"execute_schedule_critical_path","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges","durations"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"durations":{"type":"object","additionalProperties":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["makespan","critical_nodes","critical_edges","path"],"properties":{"makespan":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18},"critical_nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"critical_edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"path":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/schedule-earliest-finish/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: Compute CPM earliest start and earliest finish times for a DAG with node durations, plus the project makespan.","description":"Versioned contract (schemas, limits, examples) for schedule-earliest-finish. Supported: schedule earliest finish; cpm earliest start and finish; earliest finish times for dag tasks. Not supported: calendar dates; working hours; edge lags other than finish-to-start 0; latest start slack and critical path.","operationId":"describe_schedule_earliest_finish","security":[],"responses":{"200":{"description":"Compute CPM earliest start and earliest finish times for a DAG with node durations, plus the project makespan."}}}},"/v1/tools/schedule-earliest-finish/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"Compute CPM earliest start and earliest finish times for a DAG with node durations, plus the project makespan.","description":"Supported: schedule earliest finish; cpm earliest start and finish; earliest finish times for dag tasks. Not supported: calendar dates; working hours; edge lags other than finish-to-start 0; latest start slack and critical path. Page: https://computefirst.net/tools/schedule-earliest-finish","operationId":"execute_schedule_earliest_finish","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges","durations"],"properties":{"nodes":{"type":"array","maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"durations":{"type":"object","additionalProperties":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["nodes","makespan"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"object","additionalProperties":false,"required":["id","earliest_start","earliest_finish"],"properties":{"id":{"type":"string","minLength":1,"maxLength":256},"earliest_start":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18},"earliest_finish":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18}}}},"makespan":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/schedule-ready-nodes/versions/1.0.0":{"get":{"tags":["Graphs & scheduling"],"summary":"Contract: List DAG nodes that can start because they are not completed and every predecessor is completed.","description":"Versioned contract (schemas, limits, examples) for schedule-ready-nodes. Supported: schedule ready nodes; ready nodes given completed set; which dependency nodes can start. Not supported: resource and capacity constraints; running versus completed distinction; ALAP layers; calendar dates and working hours.","operationId":"describe_schedule_ready_nodes","security":[],"responses":{"200":{"description":"List DAG nodes that can start because they are not completed and every predecessor is completed."}}}},"/v1/tools/schedule-ready-nodes/versions/1.0.0/execute":{"post":{"tags":["Graphs & scheduling"],"summary":"List DAG nodes that can start because they are not completed and every predecessor is completed.","description":"Supported: schedule ready nodes; ready nodes given completed set; which dependency nodes can start. Not supported: resource and capacity constraints; running versus completed distinction; ALAP layers; calendar dates and working hours. Page: https://computefirst.net/tools/schedule-ready-nodes","operationId":"execute_schedule_ready_nodes","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["nodes","edges","completed"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"completed":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["ready"],"properties":{"ready":{"type":"array","maxItems":2000,"items":{"type":"string","minLength":1,"maxLength":256}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/semver-compare/versions/1.0.0":{"get":{"tags":["Versions & config"],"summary":"Contract: Compare two strict Semantic Versions by precedence.","description":"Versioned contract (schemas, limits, examples) for semver-compare. Supported: semver compare; compare semver; cmp semantic versions. Not supported: loose versions; descending option; npm lookup.","operationId":"describe_semver_compare","security":[],"responses":{"200":{"description":"Compare two strict Semantic Versions by precedence."}}}},"/v1/tools/semver-compare/versions/1.0.0/execute":{"post":{"tags":["Versions & config"],"summary":"Compare two strict Semantic Versions by precedence.","description":"Supported: semver compare; compare semver; cmp semantic versions. Not supported: loose versions; descending option; npm lookup. Page: https://computefirst.net/tools/semver-compare","operationId":"execute_semver_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":1,"maxLength":256},"b":{"type":"string","minLength":1,"maxLength":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/semver-filter/versions/1.0.0":{"get":{"tags":["Versions & config"],"summary":"Contract: Filter strict versions that satisfy a range, preserving original order and strings.","description":"Versioned contract (schemas, limits, examples) for semver-filter. Supported: semver filter; filter versions by range; select matching semver. Not supported: sort; loose; npm lookup.","operationId":"describe_semver_filter","security":[],"responses":{"200":{"description":"Filter strict versions that satisfy a range, preserving original order and strings."}}}},"/v1/tools/semver-filter/versions/1.0.0/execute":{"post":{"tags":["Versions & config"],"summary":"Filter strict versions that satisfy a range, preserving original order and strings.","description":"Supported: semver filter; filter versions by range; select matching semver. Not supported: sort; loose; npm lookup. Page: https://computefirst.net/tools/semver-filter","operationId":"execute_semver_filter","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["versions","range"],"properties":{"versions":{"type":"array","maxItems":5000,"items":{"type":"string","minLength":1,"maxLength":256}},"range":{"type":"string","minLength":1,"maxLength":512},"include_prerelease":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["versions"],"properties":{"versions":{"type":"array","items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/semver-satisfies/versions/1.0.0":{"get":{"tags":["Versions & config"],"summary":"Contract: Test whether a strict version satisfies a semver range.","description":"Versioned contract (schemas, limits, examples) for semver-satisfies. Supported: semver satisfies; version satisfies range; semver range test. Not supported: loose; git urls; npm tags; latest.","operationId":"describe_semver_satisfies","security":[],"responses":{"200":{"description":"Test whether a strict version satisfies a semver range."}}}},"/v1/tools/semver-satisfies/versions/1.0.0/execute":{"post":{"tags":["Versions & config"],"summary":"Test whether a strict version satisfies a semver range.","description":"Supported: semver satisfies; version satisfies range; semver range test. Not supported: loose; git urls; npm tags; latest. Page: https://computefirst.net/tools/semver-satisfies","operationId":"execute_semver_satisfies","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["version","range"],"properties":{"version":{"type":"string","minLength":1,"maxLength":256},"range":{"type":"string","minLength":1,"maxLength":512},"include_prerelease":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["satisfies"],"properties":{"satisfies":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/semver-sort/versions/1.0.0":{"get":{"tags":["Versions & config"],"summary":"Contract: Sort strict valid Semantic Versions in ascending precedence order.","description":"Versioned contract (schemas, limits, examples) for semver-sort. Supported: semver sort; semver sort ascending; sort semantic versions; order versions by semver precedence. Not supported: semver sort descending; loose versions; version ranges; npm package lookup.","operationId":"describe_semver_sort","security":[],"responses":{"200":{"description":"Sort strict valid Semantic Versions in ascending precedence order."}}}},"/v1/tools/semver-sort/versions/1.0.0/execute":{"post":{"tags":["Versions & config"],"summary":"Sort strict valid Semantic Versions in ascending precedence order.","description":"Supported: semver sort; semver sort ascending; sort semantic versions; order versions by semver precedence. Not supported: semver sort descending; loose versions; version ranges; npm package lookup. Page: https://computefirst.net/tools/semver-sort","operationId":"execute_semver_sort","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["versions"],"properties":{"versions":{"type":"array","maxItems":5000,"items":{"type":"string","minLength":1,"maxLength":256}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","maxItems":5000,"items":{"type":"string"}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/sequence-apply-edit-script/versions/1.0.0":{"get":{"tags":["Sequences & diffs"],"summary":"Contract: Apply a keep/delete/insert edit script to a bounded sequence with exact value matching and no fuzz.","description":"Versioned contract (schemas, limits, examples) for sequence-apply-edit-script. Supported: sequence apply edit script; apply sequence edit script; apply keep delete insert ops to a sequence. Not supported: fuzzy matching; offset search; patience diff; RFC 6902 JSON Patch; locale compare; unicode normalization.","operationId":"describe_sequence_apply_edit_script","security":[],"responses":{"200":{"description":"Apply a keep/delete/insert edit script to a bounded sequence with exact value matching and no fuzz."}}}},"/v1/tools/sequence-apply-edit-script/versions/1.0.0/execute":{"post":{"tags":["Sequences & diffs"],"summary":"Apply a keep/delete/insert edit script to a bounded sequence with exact value matching and no fuzz.","description":"Supported: sequence apply edit script; apply sequence edit script; apply keep delete insert ops to a sequence. Not supported: fuzzy matching; offset search; patience diff; RFC 6902 JSON Patch; locale compare; unicode normalization. Page: https://computefirst.net/tools/sequence-apply-edit-script","operationId":"execute_sequence_apply_edit_script","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["sequence","ops"],"properties":{"sequence":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"ops":{"type":"array","maxItems":4096,"items":{"type":"object","additionalProperties":false,"required":["op","value"],"properties":{"op":{"type":"string","enum":["keep","delete","insert"]},"value":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]},"left_index":{"type":"integer","minimum":0},"right_index":{"type":"integer","minimum":0}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["sequence"],"properties":{"sequence":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/sequence-apply-hunks/versions/1.0.0":{"get":{"tags":["Sequences & diffs"],"summary":"Contract: Apply disjoint original-address sequence hunks with exact context and no fuzz.","description":"Versioned contract (schemas, limits, examples) for sequence-apply-hunks. Supported: sequence apply hunks; apply sequence diff hunks; apply exact sequence hunks. Not supported: fuzzy matching; offset search; chained coordinate rewriting; patience diff; RFC 6902 JSON Patch.","operationId":"describe_sequence_apply_hunks","security":[],"responses":{"200":{"description":"Apply disjoint original-address sequence hunks with exact context and no fuzz."}}}},"/v1/tools/sequence-apply-hunks/versions/1.0.0/execute":{"post":{"tags":["Sequences & diffs"],"summary":"Apply disjoint original-address sequence hunks with exact context and no fuzz.","description":"Supported: sequence apply hunks; apply sequence diff hunks; apply exact sequence hunks. Not supported: fuzzy matching; offset search; chained coordinate rewriting; patience diff; RFC 6902 JSON Patch. Page: https://computefirst.net/tools/sequence-apply-hunks","operationId":"execute_sequence_apply_hunks","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["sequence","hunks"],"properties":{"sequence":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"hunks":{"type":"array","maxItems":1024}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["sequence"],"properties":{"sequence":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/sequence-compose-edit-scripts/versions/1.0.0":{"get":{"tags":["Sequences & diffs"],"summary":"Contract: Compose two sequence edit scripts into one per-item keep/delete/insert script.","description":"Versioned contract (schemas, limits, examples) for sequence-compose-edit-scripts. Supported: sequence compose edit scripts; compose two sequence edit scripts; compose keep delete insert scripts. Not supported: fuzzy matching; patience diff; histogram diff; RFC 6902 JSON Patch; unicode normalization; locale compare.","operationId":"describe_sequence_compose_edit_scripts","security":[],"responses":{"200":{"description":"Compose two sequence edit scripts into one per-item keep/delete/insert script."}}}},"/v1/tools/sequence-compose-edit-scripts/versions/1.0.0/execute":{"post":{"tags":["Sequences & diffs"],"summary":"Compose two sequence edit scripts into one per-item keep/delete/insert script.","description":"Supported: sequence compose edit scripts; compose two sequence edit scripts; compose keep delete insert scripts. Not supported: fuzzy matching; patience diff; histogram diff; RFC 6902 JSON Patch; unicode normalization; locale compare. Page: https://computefirst.net/tools/sequence-compose-edit-scripts","operationId":"execute_sequence_compose_edit_scripts","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["first","second"],"properties":{"first":{"type":"array","maxItems":4096,"items":{"type":"object","additionalProperties":false,"required":["op","value"],"properties":{"op":{"type":"string","enum":["keep","delete","insert"]},"value":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]},"left_index":{"type":"integer","minimum":0},"right_index":{"type":"integer","minimum":0}}}},"second":{"type":"array","maxItems":4096,"items":{"type":"object","additionalProperties":false,"required":["op","value"],"properties":{"op":{"type":"string","enum":["keep","delete","insert"]},"value":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]},"left_index":{"type":"integer","minimum":0},"right_index":{"type":"integer","minimum":0}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["ops","keeps","deletions","insertions"],"properties":{"ops":{"type":"array","maxItems":4096,"items":{"type":"object","additionalProperties":false,"required":["op","value"],"properties":{"op":{"type":"string","enum":["keep","delete","insert"]},"value":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]},"left_index":{"type":"integer","minimum":0},"right_index":{"type":"integer","minimum":0}}}},"keeps":{"type":"integer","minimum":0},"deletions":{"type":"integer","minimum":0},"insertions":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/sequence-diff-hunks/versions/1.0.0":{"get":{"tags":["Sequences & diffs"],"summary":"Contract: Group a Myers sequence edit script into context hunks with 0-based original addresses.","description":"Versioned contract (schemas, limits, examples) for sequence-diff-hunks. Supported: sequence diff hunks; grouped sequence diff hunks; sequence context hunks. Not supported: fuzzy matching; patience diff; histogram diff; offset search; RFC 6902 JSON Patch; csv row diff.","operationId":"describe_sequence_diff_hunks","security":[],"responses":{"200":{"description":"Group a Myers sequence edit script into context hunks with 0-based original addresses."}}}},"/v1/tools/sequence-diff-hunks/versions/1.0.0/execute":{"post":{"tags":["Sequences & diffs"],"summary":"Group a Myers sequence edit script into context hunks with 0-based original addresses.","description":"Supported: sequence diff hunks; grouped sequence diff hunks; sequence context hunks. Not supported: fuzzy matching; patience diff; histogram diff; offset search; RFC 6902 JSON Patch; csv row diff. Page: https://computefirst.net/tools/sequence-diff-hunks","operationId":"execute_sequence_diff_hunks","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"right":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"context":{"type":"integer","minimum":0,"maximum":16}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["hunks","identical"],"properties":{"hunks":{"type":"array","maxItems":1024},"identical":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/sequence-edit-script/versions/1.0.0":{"get":{"tags":["Sequences & diffs"],"summary":"Contract: Compute the Myers shortest edit script between two bounded sequences, with keep/delete/insert counts.","description":"Versioned contract (schemas, limits, examples) for sequence-edit-script. Supported: sequence edit script; myers shortest edit script of two sequences; sequence shortest edit script. Not supported: patience diff; histogram diff; fuzzy matching; unicode normalization; locale compare; RFC 6902 JSON Patch.","operationId":"describe_sequence_edit_script","security":[],"responses":{"200":{"description":"Compute the Myers shortest edit script between two bounded sequences, with keep/delete/insert counts."}}}},"/v1/tools/sequence-edit-script/versions/1.0.0/execute":{"post":{"tags":["Sequences & diffs"],"summary":"Compute the Myers shortest edit script between two bounded sequences, with keep/delete/insert counts.","description":"Supported: sequence edit script; myers shortest edit script of two sequences; sequence shortest edit script. Not supported: patience diff; histogram diff; fuzzy matching; unicode normalization; locale compare; RFC 6902 JSON Patch. Page: https://computefirst.net/tools/sequence-edit-script","operationId":"execute_sequence_edit_script","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"right":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["ops","keeps","deletions","insertions"],"properties":{"ops":{"type":"array","maxItems":4096,"items":{"type":"object","additionalProperties":false,"required":["op","value"],"properties":{"op":{"type":"string","enum":["keep","delete","insert"]},"value":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]},"left_index":{"type":"integer","minimum":0},"right_index":{"type":"integer","minimum":0}}}},"keeps":{"type":"integer","minimum":0},"deletions":{"type":"integer","minimum":0},"insertions":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/sequence-index-map/versions/1.0.0":{"get":{"tags":["Sequences & diffs"],"summary":"Contract: Map each left-sequence index to a kept right index, or null if deleted, and list inserted right indices.","description":"Versioned contract (schemas, limits, examples) for sequence-index-map. Supported: sequence index map; map left indices onto a right sequence; sequence keep index map. Not supported: fuzzy matching; patience diff; histogram diff; unicode normalization; locale compare; longest common substring.","operationId":"describe_sequence_index_map","security":[],"responses":{"200":{"description":"Map each left-sequence index to a kept right index, or null if deleted, and list inserted right indices."}}}},"/v1/tools/sequence-index-map/versions/1.0.0/execute":{"post":{"tags":["Sequences & diffs"],"summary":"Map each left-sequence index to a kept right index, or null if deleted, and list inserted right indices.","description":"Supported: sequence index map; map left indices onto a right sequence; sequence keep index map. Not supported: fuzzy matching; patience diff; histogram diff; unicode normalization; locale compare; longest common substring. Page: https://computefirst.net/tools/sequence-index-map","operationId":"execute_sequence_index_map","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"right":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["map","inserted"],"properties":{"map":{"type":"array","maxItems":1024,"items":{"type":["integer","null"],"minimum":0}},"inserted":{"type":"array","items":{"type":"integer","minimum":0}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/sequence-invert-hunks/versions/1.0.0":{"get":{"tags":["Sequences & diffs"],"summary":"Contract: Invert sequence hunks by swapping delete/insert and old/new counts.","description":"Versioned contract (schemas, limits, examples) for sequence-invert-hunks. Supported: sequence invert hunks; invert sequence diff hunks; reverse sequence hunks. Not supported: fuzzy matching; offset search; unified text invert; RFC 6902 JSON Patch.","operationId":"describe_sequence_invert_hunks","security":[],"responses":{"200":{"description":"Invert sequence hunks by swapping delete/insert and old/new counts."}}}},"/v1/tools/sequence-invert-hunks/versions/1.0.0/execute":{"post":{"tags":["Sequences & diffs"],"summary":"Invert sequence hunks by swapping delete/insert and old/new counts.","description":"Supported: sequence invert hunks; invert sequence diff hunks; reverse sequence hunks. Not supported: fuzzy matching; offset search; unified text invert; RFC 6902 JSON Patch. Page: https://computefirst.net/tools/sequence-invert-hunks","operationId":"execute_sequence_invert_hunks","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["hunks"],"properties":{"hunks":{"type":"array","maxItems":1024}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["hunks"],"properties":{"hunks":{"type":"array","maxItems":1024}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/sequence-lcs/versions/1.0.0":{"get":{"tags":["Sequences & diffs"],"summary":"Contract: Compute the longest common subsequence of two bounded sequences from the Myers shortest edit script.","description":"Versioned contract (schemas, limits, examples) for sequence-lcs. Supported: sequence lcs; longest common subsequence of two sequences; sequence longest common subsequence. Not supported: longest common substring; fuzzy matching; unicode normalization; patience diff; histogram diff; locale compare.","operationId":"describe_sequence_lcs","security":[],"responses":{"200":{"description":"Compute the longest common subsequence of two bounded sequences from the Myers shortest edit script."}}}},"/v1/tools/sequence-lcs/versions/1.0.0/execute":{"post":{"tags":["Sequences & diffs"],"summary":"Compute the longest common subsequence of two bounded sequences from the Myers shortest edit script.","description":"Supported: sequence lcs; longest common subsequence of two sequences; sequence longest common subsequence. Not supported: longest common substring; fuzzy matching; unicode normalization; patience diff; histogram diff; locale compare. Page: https://computefirst.net/tools/sequence-lcs","operationId":"execute_sequence_lcs","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"right":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["items","left_indices","right_indices","length"],"properties":{"items":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"left_indices":{"type":"array","items":{"type":"integer","minimum":0}},"right_indices":{"type":"array","items":{"type":"integer","minimum":0}},"length":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/sequence-lcsubstring/versions/1.0.0":{"get":{"tags":["Sequences & diffs"],"summary":"Contract: Find the longest contiguous common subarray of two bounded sequences.","description":"Versioned contract (schemas, limits, examples) for sequence-lcsubstring. Supported: sequence lcsubstring; longest common substring of two sequences; longest contiguous common subarray. Not supported: longest common subsequence; fuzzy matching; unicode normalization; locale compare; patience unique anchors.","operationId":"describe_sequence_lcsubstring","security":[],"responses":{"200":{"description":"Find the longest contiguous common subarray of two bounded sequences."}}}},"/v1/tools/sequence-lcsubstring/versions/1.0.0/execute":{"post":{"tags":["Sequences & diffs"],"summary":"Find the longest contiguous common subarray of two bounded sequences.","description":"Supported: sequence lcsubstring; longest common substring of two sequences; longest contiguous common subarray. Not supported: longest common subsequence; fuzzy matching; unicode normalization; locale compare; patience unique anchors. Page: https://computefirst.net/tools/sequence-lcsubstring","operationId":"execute_sequence_lcsubstring","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"right":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["items","length","left_start","right_start"],"properties":{"items":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"length":{"type":"integer","minimum":0},"left_start":{"type":"integer","minimum":0},"right_start":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/sequence-three-way-merge/versions/1.0.0":{"get":{"tags":["Sequences & diffs"],"summary":"Contract: Three-way merge two sequence descendants against a shared base into clean or conflict regions.","description":"Versioned contract (schemas, limits, examples) for sequence-three-way-merge. Supported: sequence three way merge; three-way merge two sequences against a base; sequence merge regions. Not supported: fuzzy matching; text conflict markers; RFC 7396 JSON merge patch; RFC 6902 JSON Patch; csv row diff; patience merge.","operationId":"describe_sequence_three_way_merge","security":[],"responses":{"200":{"description":"Three-way merge two sequence descendants against a shared base into clean or conflict regions."}}}},"/v1/tools/sequence-three-way-merge/versions/1.0.0/execute":{"post":{"tags":["Sequences & diffs"],"summary":"Three-way merge two sequence descendants against a shared base into clean or conflict regions.","description":"Supported: sequence three way merge; three-way merge two sequences against a base; sequence merge regions. Not supported: fuzzy matching; text conflict markers; RFC 7396 JSON merge patch; RFC 6902 JSON Patch; csv row diff; patience merge. Page: https://computefirst.net/tools/sequence-three-way-merge","operationId":"execute_sequence_three_way_merge","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["base","ours","theirs"],"properties":{"base":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"ours":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}},"theirs":{"type":"array","maxItems":1024,"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["status","regions","result"],"properties":{"status":{"type":"string","enum":["clean","conflict"]},"regions":{"type":"array"},"result":{"type":["array","null"],"items":{"description":"null, boolean, UTF-8 string, or IEEE-754 safe integer","type":["null","boolean","string","integer"]}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/temperature-compare/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Compare two temperatures in C, F, or K by converting both to Kelvin rationals.","description":"Versioned contract (schemas, limits, examples) for temperature-compare. Supported: temperature compare; compare temperatures across units; order celsius fahrenheit kelvin. Not supported: average temperatures; sort a temperature list; Rankine; IEEE-754 floats.","operationId":"describe_temperature_compare","security":[],"responses":{"200":{"description":"Compare two temperatures in C, F, or K by converting both to Kelvin rationals."}}}},"/v1/tools/temperature-compare/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Compare two temperatures in C, F, or K by converting both to Kelvin rationals.","description":"Supported: temperature compare; compare temperatures across units; order celsius fahrenheit kelvin. Not supported: average temperatures; sort a temperature list; Rankine; IEEE-754 floats. Page: https://computefirst.net/tools/temperature-compare","operationId":"execute_temperature_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","maxLength":32},"unit":{"type":"string","enum":["C","F","K"]}}},"right":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"string","maxLength":32},"unit":{"type":"string","enum":["C","F","K"]}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["cmp"],"properties":{"cmp":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/temperature-convert/versions/1.0.0":{"get":{"tags":["Units & sizes"],"summary":"Contract: Convert a decimal temperature between Celsius, Fahrenheit, and Kelvin as an exact rational.","description":"Versioned contract (schemas, limits, examples) for temperature-convert. Supported: temperature convert; convert temperature between C F K; celsius fahrenheit kelvin conversion. Not supported: Rankine; Reaumur; IEEE-754 floats; weather APIs; locale formatted temperatures.","operationId":"describe_temperature_convert","security":[],"responses":{"200":{"description":"Convert a decimal temperature between Celsius, Fahrenheit, and Kelvin as an exact rational."}}}},"/v1/tools/temperature-convert/versions/1.0.0/execute":{"post":{"tags":["Units & sizes"],"summary":"Convert a decimal temperature between Celsius, Fahrenheit, and Kelvin as an exact rational.","description":"Supported: temperature convert; convert temperature between C F K; celsius fahrenheit kelvin conversion. Not supported: Rankine; Reaumur; IEEE-754 floats; weather APIs; locale formatted temperatures. Page: https://computefirst.net/tools/temperature-convert","operationId":"execute_temperature_convert","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value","from","to"],"properties":{"value":{"type":"string","maxLength":32},"from":{"type":"string","enum":["C","F","K"]},"to":{"type":"string","enum":["C","F","K"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value","unit"],"properties":{"value":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"unit":{"type":"string","enum":["C","F","K"]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-apply-unified-patch/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Apply a one-file unified patch to text at original line addresses with exact hunk matches.","description":"Versioned contract (schemas, limits, examples) for text-apply-unified-patch. Supported: text apply unified patch; apply unified diff to text; apply a unified patch exactly. Not supported: offset or fuzz patch apply; preserve original CR/LF through unified text; git diff --git headers; binary patches; fuzzy matching; filesystem access.","operationId":"describe_text_apply_unified_patch","security":[],"responses":{"200":{"description":"Apply a one-file unified patch to text at original line addresses with exact hunk matches."}}}},"/v1/tools/text-apply-unified-patch/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Apply a one-file unified patch to text at original line addresses with exact hunk matches.","description":"Supported: text apply unified patch; apply unified diff to text; apply a unified patch exactly. Not supported: offset or fuzz patch apply; preserve original CR/LF through unified text; git diff --git headers; binary patches; fuzzy matching; filesystem access. Page: https://computefirst.net/tools/text-apply-unified-patch","operationId":"execute_text_apply_unified_patch","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text","unified"],"properties":{"text":{"type":"string","maxLength":262144},"unified":{"type":"string","maxLength":262144},"strip":{"type":"integer","minimum":0,"maximum":8}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","identical"],"properties":{"text":{"type":"string","maxLength":1048576},"identical":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-conflict-parse/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Parse merge or diff3 conflict-marker text into ordered text and conflict parts.","description":"Versioned contract (schemas, limits, examples) for text-conflict-parse. Supported: text conflict parse; parse conflict marker blocks; split merge conflict text into parts. Not supported: nested conflict markers; git mergetool filesystem access; unicode normalization; fuzzy matching; RFC 6902 JSON Patch.","operationId":"describe_text_conflict_parse","security":[],"responses":{"200":{"description":"Parse merge or diff3 conflict-marker text into ordered text and conflict parts."}}}},"/v1/tools/text-conflict-parse/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Parse merge or diff3 conflict-marker text into ordered text and conflict parts.","description":"Supported: text conflict parse; parse conflict marker blocks; split merge conflict text into parts. Not supported: nested conflict markers; git mergetool filesystem access; unicode normalization; fuzzy matching; RFC 6902 JSON Patch. Page: https://computefirst.net/tools/text-conflict-parse","operationId":"execute_text_conflict_parse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":262144}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["parts","conflict_count"],"properties":{"parts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["text","conflict"]},"text":{"type":"string"},"ours":{"type":"string"},"theirs":{"type":"string"},"base":{"type":"string"}}}},"conflict_count":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-conflict-render/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Render text and conflict parts as merge or diff3 conflict-marker text.","description":"Versioned contract (schemas, limits, examples) for text-conflict-render. Supported: text conflict render; render conflict marker blocks; emit merge or diff3 conflict text. Not supported: nested conflict markers; preserve marker CR/LF; git mergetool filesystem access; unicode normalization; fuzzy matching.","operationId":"describe_text_conflict_render","security":[],"responses":{"200":{"description":"Render text and conflict parts as merge or diff3 conflict-marker text."}}}},"/v1/tools/text-conflict-render/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Render text and conflict parts as merge or diff3 conflict-marker text.","description":"Supported: text conflict render; render conflict marker blocks; emit merge or diff3 conflict text. Not supported: nested conflict markers; preserve marker CR/LF; git mergetool filesystem access; unicode normalization; fuzzy matching. Page: https://computefirst.net/tools/text-conflict-render","operationId":"execute_text_conflict_render","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["parts"],"properties":{"parts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["text","conflict"]},"text":{"type":"string","maxLength":262144},"ours":{"type":"string","maxLength":262144},"theirs":{"type":"string","maxLength":262144},"base":{"type":"string","maxLength":262144}}}},"marker_style":{"type":"string","enum":["merge","diff3"]},"ours_label":{"type":"string","minLength":1,"maxLength":256},"theirs_label":{"type":"string","minLength":1,"maxLength":256},"base_label":{"type":"string","minLength":1,"maxLength":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":1048576}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-count/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Count Unicode code points, UTF-16 code units, UTF-8 bytes, and lines.","description":"Versioned contract (schemas, limits, examples) for text-count. Supported: text count; count code points; utf8 byte length; count lines. Not supported: grapheme clusters; locale; word count; column width.","operationId":"describe_text_count","security":[],"responses":{"200":{"description":"Count Unicode code points, UTF-16 code units, UTF-8 bytes, and lines."}}}},"/v1/tools/text-count/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Count Unicode code points, UTF-16 code units, UTF-8 bytes, and lines.","description":"Supported: text count; count code points; utf8 byte length; count lines. Not supported: grapheme clusters; locale; word count; column width. Page: https://computefirst.net/tools/text-count","operationId":"execute_text_count","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["code_points","utf16_code_units","utf8_bytes","lines","trailing_terminator"],"properties":{"code_points":{"type":"integer"},"utf16_code_units":{"type":"integer"},"utf8_bytes":{"type":"integer"},"lines":{"type":"integer"},"trailing_terminator":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-diff-stats/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Summarize a line-record diff as keep, insert, delete, and hunk counts.","description":"Versioned contract (schemas, limits, examples) for text-diff-stats. Supported: text diff stats; count line diff insertions and deletions; summarize text line differences. Not supported: character-level stats; fuzzy matching; patience/histogram diff; binary patches; git diff --git headers; filesystem access.","operationId":"describe_text_diff_stats","security":[],"responses":{"200":{"description":"Summarize a line-record diff as keep, insert, delete, and hunk counts."}}}},"/v1/tools/text-diff-stats/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Summarize a line-record diff as keep, insert, delete, and hunk counts.","description":"Supported: text diff stats; count line diff insertions and deletions; summarize text line differences. Not supported: character-level stats; fuzzy matching; patience/histogram diff; binary patches; git diff --git headers; filesystem access. Page: https://computefirst.net/tools/text-diff-stats","operationId":"execute_text_diff_stats","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"string","maxLength":262144},"right":{"type":"string","maxLength":262144},"context":{"type":"integer","minimum":0,"maximum":16}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["lines_left","lines_right","keeps","insertions","deletions","hunks","identical"],"properties":{"lines_left":{"type":"integer","minimum":0},"lines_right":{"type":"integer","minimum":0},"keeps":{"type":"integer","minimum":0},"insertions":{"type":"integer","minimum":0},"deletions":{"type":"integer","minimum":0},"hunks":{"type":"integer","minimum":0},"identical":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-extract-between/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Extract exact substrings between start and end markers, left to right and non-overlapping.","description":"Versioned contract (schemas, limits, examples) for text-extract-between. Supported: text extract between; extract text between markers; substring between start and end markers. Not supported: regular expressions; nested or balanced delimiters; case-insensitive search; overlapping matches; grapheme cluster matching; read files.","operationId":"describe_text_extract_between","security":[],"responses":{"200":{"description":"Extract exact substrings between start and end markers, left to right and non-overlapping."}}}},"/v1/tools/text-extract-between/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Extract exact substrings between start and end markers, left to right and non-overlapping.","description":"Supported: text extract between; extract text between markers; substring between start and end markers. Not supported: regular expressions; nested or balanced delimiters; case-insensitive search; overlapping matches; grapheme cluster matching; read files. Page: https://computefirst.net/tools/text-extract-between","operationId":"execute_text_extract_between","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text","start","end"],"properties":{"text":{"type":"string","maxLength":256000},"start":{"type":"string","minLength":1,"maxLength":4096},"end":{"type":"string","minLength":1,"maxLength":4096},"max_matches":{"type":"integer","minimum":1,"maximum":1000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["matches","truncated"],"properties":{"matches":{"type":"array","maxItems":1000,"items":{"type":"string"}},"truncated":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-invert-unified-patch/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Invert a one-file unified patch by swapping file names and delete/insert ops.","description":"Versioned contract (schemas, limits, examples) for text-invert-unified-patch. Supported: text invert unified patch; reverse a unified diff; invert unified patch hunks. Not supported: offset or fuzz patch apply; preserve original CR/LF through unified text; git diff --git headers; binary patches; fuzzy matching; filesystem access.","operationId":"describe_text_invert_unified_patch","security":[],"responses":{"200":{"description":"Invert a one-file unified patch by swapping file names and delete/insert ops."}}}},"/v1/tools/text-invert-unified-patch/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Invert a one-file unified patch by swapping file names and delete/insert ops.","description":"Supported: text invert unified patch; reverse a unified diff; invert unified patch hunks. Not supported: offset or fuzz patch apply; preserve original CR/LF through unified text; git diff --git headers; binary patches; fuzzy matching; filesystem access. Page: https://computefirst.net/tools/text-invert-unified-patch","operationId":"execute_text_invert_unified_patch","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["unified"],"properties":{"unified":{"type":"string","maxLength":262144},"strip":{"type":"integer","minimum":0,"maximum":8}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["unified"],"properties":{"unified":{"type":"string","maxLength":1048576}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-line-diff/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Diff two texts as line records, preserving each line terminator.","description":"Versioned contract (schemas, limits, examples) for text-line-diff. Supported: text line diff; line record text diff; diff texts by lines. Not supported: fuzzy matching; patience/histogram diff; unicode normalization; locale-aware line breaking; binary patches; git diff --git headers; filesystem access.","operationId":"describe_text_line_diff","security":[],"responses":{"200":{"description":"Diff two texts as line records, preserving each line terminator."}}}},"/v1/tools/text-line-diff/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Diff two texts as line records, preserving each line terminator.","description":"Supported: text line diff; line record text diff; diff texts by lines. Not supported: fuzzy matching; patience/histogram diff; unicode normalization; locale-aware line breaking; binary patches; git diff --git headers; filesystem access. Page: https://computefirst.net/tools/text-line-diff","operationId":"execute_text_line_diff","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"string","maxLength":262144},"right":{"type":"string","maxLength":262144},"context":{"type":"integer","minimum":0,"maximum":16}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["hunks","identical","lines_left","lines_right"],"properties":{"hunks":{"type":"array","maxItems":1024,"items":{"type":"object","additionalProperties":false,"required":["old_start","old_count","new_start","new_count","ops"],"properties":{"old_start":{"type":"integer","minimum":0},"old_count":{"type":"integer","minimum":0},"new_start":{"type":"integer","minimum":0},"new_count":{"type":"integer","minimum":0},"ops":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["op","value"],"properties":{"op":{"type":"string","enum":["keep","delete","insert"]},"value":{"type":"object","additionalProperties":false,"required":["text","eol"],"properties":{"text":{"type":"string"},"eol":{"type":"string","enum":["","\n","\r","\r\n"]}}}}}}}}},"identical":{"type":"boolean"},"lines_left":{"type":"integer","minimum":0},"lines_right":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-lines-chunk/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Split parsed lines into consecutive chunks of size lines each.","description":"Versioned contract (schemas, limits, examples) for text-lines-chunk. Supported: text lines chunk; chunk lines; split lines by size. Not supported: overlap chunks; bytes chunk; stream.","operationId":"describe_text_lines_chunk","security":[],"responses":{"200":{"description":"Split parsed lines into consecutive chunks of size lines each."}}}},"/v1/tools/text-lines-chunk/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Split parsed lines into consecutive chunks of size lines each.","description":"Supported: text lines chunk; chunk lines; split lines by size. Not supported: overlap chunks; bytes chunk; stream. Page: https://computefirst.net/tools/text-lines-chunk","operationId":"execute_text_lines_chunk","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text","size"],"properties":{"text":{"type":"string","maxLength":256000},"size":{"type":"integer","minimum":1,"maximum":10000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["chunks","lines_in","chunk_count"],"properties":{"chunks":{"type":"array","maxItems":512,"items":{"type":"string"}},"lines_in":{"type":"integer"},"chunk_count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-lines-count/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Count exact line multiplicities in first-seen order.","description":"Versioned contract (schemas, limits, examples) for text-lines-count. Supported: text lines count; count lines; line histogram. Not supported: trim; case fold; sort by count; locale.","operationId":"describe_text_lines_count","security":[],"responses":{"200":{"description":"Count exact line multiplicities in first-seen order."}}}},"/v1/tools/text-lines-count/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Count exact line multiplicities in first-seen order.","description":"Supported: text lines count; count lines; line histogram. Not supported: trim; case fold; sort by count; locale. Page: https://computefirst.net/tools/text-lines-count","operationId":"execute_text_lines_count","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["items","lines_in","unique"],"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["line","count"],"properties":{"line":{"type":"string"},"count":{"type":"integer"}}}},"lines_in":{"type":"integer"},"unique":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-lines-difference/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Set difference a minus b using exact line equality.","description":"Versioned contract (schemas, limits, examples) for text-lines-difference. Supported: text lines difference; lines difference; subtract line set. Not supported: multiset subtract; symmetric difference; trim; regex.","operationId":"describe_text_lines_difference","security":[],"responses":{"200":{"description":"Set difference a minus b using exact line equality."}}}},"/v1/tools/text-lines-difference/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Set difference a minus b using exact line equality.","description":"Supported: text lines difference; lines difference; subtract line set. Not supported: multiset subtract; symmetric difference; trim; regex. Page: https://computefirst.net/tools/text-lines-difference","operationId":"execute_text_lines_difference","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","maxLength":256000},"b":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","lines_in_a","lines_in_b","lines_out"],"properties":{"text":{"type":"string"},"lines_in_a":{"type":"integer"},"lines_in_b":{"type":"integer"},"lines_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-lines-head/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Return the first n parsed lines with LF reconstruction.","description":"Versioned contract (schemas, limits, examples) for text-lines-head. Supported: text lines head; first n lines; head lines. Not supported: bytes head; negative n; follow file.","operationId":"describe_text_lines_head","security":[],"responses":{"200":{"description":"Return the first n parsed lines with LF reconstruction."}}}},"/v1/tools/text-lines-head/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Return the first n parsed lines with LF reconstruction.","description":"Supported: text lines head; first n lines; head lines. Not supported: bytes head; negative n; follow file. Page: https://computefirst.net/tools/text-lines-head","operationId":"execute_text_lines_head","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text","n"],"properties":{"text":{"type":"string","maxLength":256000},"n":{"type":"integer","minimum":0,"maximum":10000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","lines_in","lines_out"],"properties":{"text":{"type":"string"},"lines_in":{"type":"integer"},"lines_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-lines-intersection/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Set intersection of two line sequences using exact line equality.","description":"Versioned contract (schemas, limits, examples) for text-lines-intersection. Supported: text lines intersection; intersect lines; common lines. Not supported: multiset intersection; trim; case fold; regex.","operationId":"describe_text_lines_intersection","security":[],"responses":{"200":{"description":"Set intersection of two line sequences using exact line equality."}}}},"/v1/tools/text-lines-intersection/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Set intersection of two line sequences using exact line equality.","description":"Supported: text lines intersection; intersect lines; common lines. Not supported: multiset intersection; trim; case fold; regex. Page: https://computefirst.net/tools/text-lines-intersection","operationId":"execute_text_lines_intersection","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","maxLength":256000},"b":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","lines_in_a","lines_in_b","lines_out"],"properties":{"text":{"type":"string"},"lines_in_a":{"type":"integer"},"lines_in_b":{"type":"integer"},"lines_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-lines-multiset-subtract/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Multiset subtract b from a: remaining counts, first-seen order from a.","description":"Versioned contract (schemas, limits, examples) for text-lines-multiset-subtract. Supported: text lines multiset subtract; bag subtract lines; remove line copies. Not supported: set difference; trim; negative counts.","operationId":"describe_text_lines_multiset_subtract","security":[],"responses":{"200":{"description":"Multiset subtract b from a: remaining counts, first-seen order from a."}}}},"/v1/tools/text-lines-multiset-subtract/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Multiset subtract b from a: remaining counts, first-seen order from a.","description":"Supported: text lines multiset subtract; bag subtract lines; remove line copies. Not supported: set difference; trim; negative counts. Page: https://computefirst.net/tools/text-lines-multiset-subtract","operationId":"execute_text_lines_multiset_subtract","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","maxLength":256000},"b":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","lines_in_a","lines_in_b","lines_out"],"properties":{"text":{"type":"string"},"lines_in_a":{"type":"integer"},"lines_in_b":{"type":"integer"},"lines_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-lines-multiset-union/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Multiset sum of two line bags: counts add, first-seen order from a then new from b.","description":"Versioned contract (schemas, limits, examples) for text-lines-multiset-union. Supported: text lines multiset union; bag union lines; sum line counts. Not supported: max-count union; set union; trim.","operationId":"describe_text_lines_multiset_union","security":[],"responses":{"200":{"description":"Multiset sum of two line bags: counts add, first-seen order from a then new from b."}}}},"/v1/tools/text-lines-multiset-union/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Multiset sum of two line bags: counts add, first-seen order from a then new from b.","description":"Supported: text lines multiset union; bag union lines; sum line counts. Not supported: max-count union; set union; trim. Page: https://computefirst.net/tools/text-lines-multiset-union","operationId":"execute_text_lines_multiset_union","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","maxLength":256000},"b":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","lines_in_a","lines_in_b","lines_out"],"properties":{"text":{"type":"string"},"lines_in_a":{"type":"integer"},"lines_in_b":{"type":"integer"},"lines_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-lines-tail/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Return the last n parsed lines with LF reconstruction.","description":"Versioned contract (schemas, limits, examples) for text-lines-tail. Supported: text lines tail; last n lines; tail lines. Not supported: bytes tail; follow; negative n.","operationId":"describe_text_lines_tail","security":[],"responses":{"200":{"description":"Return the last n parsed lines with LF reconstruction."}}}},"/v1/tools/text-lines-tail/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Return the last n parsed lines with LF reconstruction.","description":"Supported: text lines tail; last n lines; tail lines. Not supported: bytes tail; follow; negative n. Page: https://computefirst.net/tools/text-lines-tail","operationId":"execute_text_lines_tail","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text","n"],"properties":{"text":{"type":"string","maxLength":256000},"n":{"type":"integer","minimum":0,"maximum":10000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","lines_in","lines_out"],"properties":{"text":{"type":"string"},"lines_in":{"type":"integer"},"lines_out":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-lines-unique/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Remove exact duplicate lines, keeping first-seen order.","description":"Versioned contract (schemas, limits, examples) for text-lines-unique. Supported: text lines unique; unique lines; dedupe text lines. Not supported: trim lines; case insensitive unique; unicode normalize; fuzzy match.","operationId":"describe_text_lines_unique","security":[],"responses":{"200":{"description":"Remove exact duplicate lines, keeping first-seen order."}}}},"/v1/tools/text-lines-unique/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Remove exact duplicate lines, keeping first-seen order.","description":"Supported: text lines unique; unique lines; dedupe text lines. Not supported: trim lines; case insensitive unique; unicode normalize; fuzzy match. Page: https://computefirst.net/tools/text-lines-unique","operationId":"execute_text_lines_unique","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","lines_in","lines_out","duplicates_removed"],"properties":{"text":{"type":"string"},"lines_in":{"type":"integer"},"lines_out":{"type":"integer"},"duplicates_removed":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-nfc/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Normalize Unicode text to NFC (canonical composition).","description":"Versioned contract (schemas, limits, examples) for text-nfc. Supported: text nfc; unicode nfc; canonical composition. Not supported: NFKC; NFKD; NFD; locale case fold; case folding; compatibility normalization; read files.","operationId":"describe_text_nfc","security":[],"responses":{"200":{"description":"Normalize Unicode text to NFC (canonical composition)."}}}},"/v1/tools/text-nfc/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Normalize Unicode text to NFC (canonical composition).","description":"Supported: text nfc; unicode nfc; canonical composition. Not supported: NFKC; NFKD; NFD; locale case fold; case folding; compatibility normalization; read files. Page: https://computefirst.net/tools/text-nfc","operationId":"execute_text_nfc","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-nfd/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Normalize Unicode text to NFD (canonical decomposition).","description":"Versioned contract (schemas, limits, examples) for text-nfd. Supported: text nfd; unicode nfd; canonical decomposition. Not supported: NFKD; NFKC; NFC; locale case fold; case folding; compatibility decomposition; read files.","operationId":"describe_text_nfd","security":[],"responses":{"200":{"description":"Normalize Unicode text to NFD (canonical decomposition)."}}}},"/v1/tools/text-nfd/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Normalize Unicode text to NFD (canonical decomposition).","description":"Supported: text nfd; unicode nfd; canonical decomposition. Not supported: NFKD; NFKC; NFC; locale case fold; case folding; compatibility decomposition; read files. Page: https://computefirst.net/tools/text-nfd","operationId":"execute_text_nfd","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-parse-unified-patch/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Parse a one-file unified patch into path names and 0-based hunks.","description":"Versioned contract (schemas, limits, examples) for text-parse-unified-patch. Supported: text parse unified patch; parse unified diff; parse unified patch headers and hunks. Not supported: preserve original CR/LF through unified text; git diff --git headers; index/binary markers; multi-file patches; offset/fuzz patch apply; RFC 6902; filesystem access.","operationId":"describe_text_parse_unified_patch","security":[],"responses":{"200":{"description":"Parse a one-file unified patch into path names and 0-based hunks."}}}},"/v1/tools/text-parse-unified-patch/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Parse a one-file unified patch into path names and 0-based hunks.","description":"Supported: text parse unified patch; parse unified diff; parse unified patch headers and hunks. Not supported: preserve original CR/LF through unified text; git diff --git headers; index/binary markers; multi-file patches; offset/fuzz patch apply; RFC 6902; filesystem access. Page: https://computefirst.net/tools/text-parse-unified-patch","operationId":"execute_text_parse_unified_patch","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["unified"],"properties":{"unified":{"type":"string","maxLength":262144},"strip":{"type":"integer","minimum":0,"maximum":8}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["from_name","to_name","hunks","identical"],"properties":{"from_name":{"type":"string"},"to_name":{"type":"string"},"hunks":{"type":"array","maxItems":1024,"items":{"type":"object","additionalProperties":false,"required":["old_start","old_count","new_start","new_count","ops"],"properties":{"old_start":{"type":"integer","minimum":0},"old_count":{"type":"integer","minimum":0},"new_start":{"type":"integer","minimum":0},"new_count":{"type":"integer","minimum":0},"ops":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["op","value"],"properties":{"op":{"type":"string","enum":["keep","delete","insert"]},"value":{"type":"object","additionalProperties":false,"required":["text","eol"],"properties":{"text":{"type":"string"},"eol":{"type":"string","enum":["","\n"]}}}}}}}}},"identical":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-prefix-suffix-check/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Exact prefix and/or suffix boolean checks using JS string startsWith/endsWith.","description":"Versioned contract (schemas, limits, examples) for text-prefix-suffix-check. Supported: text prefix check; text suffix check; starts with; ends with. Not supported: case insensitive; grapheme; locale; regex.","operationId":"describe_text_prefix_suffix_check","security":[],"responses":{"200":{"description":"Exact prefix and/or suffix boolean checks using JS string startsWith/endsWith."}}}},"/v1/tools/text-prefix-suffix-check/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Exact prefix and/or suffix boolean checks using JS string startsWith/endsWith.","description":"Supported: text prefix check; text suffix check; starts with; ends with. Not supported: case insensitive; grapheme; locale; regex. Page: https://computefirst.net/tools/text-prefix-suffix-check","operationId":"execute_text_prefix_suffix_check","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000},"prefix":{"type":"string","maxLength":256000},"suffix":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"properties":{"starts_with":{"type":"boolean"},"ends_with":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-replace-exact/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Replace exact UTF-16 substrings without regex, case folding, or Unicode normalization.","description":"Versioned contract (schemas, limits, examples) for text-replace-exact. Supported: text replace exact; exact substring replacement; replace exact text matches. Not supported: regex replacement; case-insensitive replace; unicode normalization; fuzzy matching; read files.","operationId":"describe_text_replace_exact","security":[],"responses":{"200":{"description":"Replace exact UTF-16 substrings without regex, case folding, or Unicode normalization."}}}},"/v1/tools/text-replace-exact/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Replace exact UTF-16 substrings without regex, case folding, or Unicode normalization.","description":"Supported: text replace exact; exact substring replacement; replace exact text matches. Not supported: regex replacement; case-insensitive replace; unicode normalization; fuzzy matching; read files. Page: https://computefirst.net/tools/text-replace-exact","operationId":"execute_text_replace_exact","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text","search","replacement"],"properties":{"text":{"type":"string","maxLength":262144},"search":{"type":"string","minLength":1,"maxLength":65536},"replacement":{"type":"string","maxLength":65536},"max_replacements":{"type":"integer","minimum":1,"maximum":1000000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","replacements"],"properties":{"text":{"type":"string","maxLength":1048576},"replacements":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-slice-codepoints/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Slice a string by Unicode code-point indexes, not UTF-16 code units.","description":"Versioned contract (schemas, limits, examples) for text-slice-codepoints. Supported: text slice codepoints; slice text by unicode code points; code point substring. Not supported: UTF-16 code-unit slicing; grapheme cluster slicing; negative indexes; python wrap-around slicing; byte-offset slicing; read files.","operationId":"describe_text_slice_codepoints","security":[],"responses":{"200":{"description":"Slice a string by Unicode code-point indexes, not UTF-16 code units."}}}},"/v1/tools/text-slice-codepoints/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Slice a string by Unicode code-point indexes, not UTF-16 code units.","description":"Supported: text slice codepoints; slice text by unicode code points; code point substring. Not supported: UTF-16 code-unit slicing; grapheme cluster slicing; negative indexes; python wrap-around slicing; byte-offset slicing; read files. Page: https://computefirst.net/tools/text-slice-codepoints","operationId":"execute_text_slice_codepoints","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text","start","length"],"properties":{"text":{"type":"string","maxLength":256000},"start":{"type":"integer","minimum":0},"length":{"type":"integer","minimum":0}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-split-exact/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Split text on an exact literal separator and reject results that exceed max_parts.","description":"Versioned contract (schemas, limits, examples) for text-split-exact. Supported: text split exact; split text on exact separator; exact substring split. Not supported: regular expression split; truncating split limits; case-insensitive split; keep-separator mode; locale-aware tokenization; read files.","operationId":"describe_text_split_exact","security":[],"responses":{"200":{"description":"Split text on an exact literal separator and reject results that exceed max_parts."}}}},"/v1/tools/text-split-exact/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Split text on an exact literal separator and reject results that exceed max_parts.","description":"Supported: text split exact; split text on exact separator; exact substring split. Not supported: regular expression split; truncating split limits; case-insensitive split; keep-separator mode; locale-aware tokenization; read files. Page: https://computefirst.net/tools/text-split-exact","operationId":"execute_text_split_exact","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text","separator","max_parts"],"properties":{"text":{"type":"string","maxLength":256000},"separator":{"type":"string","minLength":1,"maxLength":4096},"max_parts":{"type":"integer","minimum":1,"maximum":10000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["parts"],"properties":{"parts":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-strip-bom/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Remove one leading U+FEFF byte-order mark from a Unicode string.","description":"Versioned contract (schemas, limits, examples) for text-strip-bom. Supported: text strip bom; strip leading bom; remove leading feff. Not supported: strip every U+FEFF; decode files; guess encoding; utf-16 transcoding; unicode normalization; read files.","operationId":"describe_text_strip_bom","security":[],"responses":{"200":{"description":"Remove one leading U+FEFF byte-order mark from a Unicode string."}}}},"/v1/tools/text-strip-bom/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Remove one leading U+FEFF byte-order mark from a Unicode string.","description":"Supported: text strip bom; strip leading bom; remove leading feff. Not supported: strip every U+FEFF; decode files; guess encoding; utf-16 transcoding; unicode normalization; read files. Page: https://computefirst.net/tools/text-strip-bom","operationId":"execute_text_strip_bom","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","stripped"],"properties":{"text":{"type":"string","maxLength":256000},"stripped":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-three-way-merge/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Three-way merge of text line records with merge or diff3 conflict markers.","description":"Versioned contract (schemas, limits, examples) for text-three-way-merge. Supported: text three way merge; three-way merge of text; merge base ours theirs with conflict markers. Not supported: patience or histogram diff; unicode normalization; locale word break; offset or fuzz patch apply; RFC 6902 JSON Patch; filesystem access.","operationId":"describe_text_three_way_merge","security":[],"responses":{"200":{"description":"Three-way merge of text line records with merge or diff3 conflict markers."}}}},"/v1/tools/text-three-way-merge/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Three-way merge of text line records with merge or diff3 conflict markers.","description":"Supported: text three way merge; three-way merge of text; merge base ours theirs with conflict markers. Not supported: patience or histogram diff; unicode normalization; locale word break; offset or fuzz patch apply; RFC 6902 JSON Patch; filesystem access. Page: https://computefirst.net/tools/text-three-way-merge","operationId":"execute_text_three_way_merge","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["base","ours","theirs"],"properties":{"base":{"type":"string","maxLength":262144},"ours":{"type":"string","maxLength":262144},"theirs":{"type":"string","maxLength":262144},"marker_style":{"type":"string","enum":["merge","diff3"]},"ours_label":{"type":"string","minLength":1,"maxLength":256},"theirs_label":{"type":"string","minLength":1,"maxLength":256},"base_label":{"type":"string","minLength":1,"maxLength":256}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["status","text"],"properties":{"status":{"type":"string","enum":["clean","conflict"]},"text":{"type":"string","maxLength":1048576}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-unified-diff/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Emit a one-file unified diff of two texts with comma counts and LF document breaks.","description":"Versioned contract (schemas, limits, examples) for text-unified-diff. Supported: text unified diff; emit unified diff; unified format text diff. Not supported: preserve original CR/LF through unified text; git diff --git headers; index/binary markers; multi-file patches; binary patches; fuzzy matching; filesystem access.","operationId":"describe_text_unified_diff","security":[],"responses":{"200":{"description":"Emit a one-file unified diff of two texts with comma counts and LF document breaks."}}}},"/v1/tools/text-unified-diff/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Emit a one-file unified diff of two texts with comma counts and LF document breaks.","description":"Supported: text unified diff; emit unified diff; unified format text diff. Not supported: preserve original CR/LF through unified text; git diff --git headers; index/binary markers; multi-file patches; binary patches; fuzzy matching; filesystem access. Page: https://computefirst.net/tools/text-unified-diff","operationId":"execute_text_unified_diff","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"string","maxLength":262144},"right":{"type":"string","maxLength":262144},"from_name":{"type":"string","minLength":1,"maxLength":1024},"to_name":{"type":"string","minLength":1,"maxLength":1024},"context":{"type":"integer","minimum":0,"maximum":16}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["unified","identical"],"properties":{"unified":{"type":"string","maxLength":1048576},"identical":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-word-diff/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Diff two texts as whitespace versus non-whitespace word tokens.","description":"Versioned contract (schemas, limits, examples) for text-word-diff. Supported: text word diff; word token text diff; diff texts by words. Not supported: locale word break; Unicode UAX #29 word boundaries; unicode normalization; fuzzy matching; patience/histogram diff; treat U+00A0 as whitespace; filesystem access.","operationId":"describe_text_word_diff","security":[],"responses":{"200":{"description":"Diff two texts as whitespace versus non-whitespace word tokens."}}}},"/v1/tools/text-word-diff/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Diff two texts as whitespace versus non-whitespace word tokens.","description":"Supported: text word diff; word token text diff; diff texts by words. Not supported: locale word break; Unicode UAX #29 word boundaries; unicode normalization; fuzzy matching; patience/histogram diff; treat U+00A0 as whitespace; filesystem access. Page: https://computefirst.net/tools/text-word-diff","operationId":"execute_text_word_diff","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"string","maxLength":262144},"right":{"type":"string","maxLength":262144}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["ops","keeps","deletions","insertions"],"properties":{"ops":{"type":"array","maxItems":4096,"items":{"type":"object","additionalProperties":false,"required":["op","value"],"properties":{"op":{"type":"string","enum":["keep","delete","insert"]},"value":{"type":"string"},"left_index":{"type":"integer","minimum":0},"right_index":{"type":"integer","minimum":0}}}},"keeps":{"type":"integer","minimum":0},"deletions":{"type":"integer","minimum":0},"insertions":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/url-normalize/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Normalize an absolute http or https URL via WHATWG parse. No DNS, fetch, or security-equivalence claim.","description":"Versioned contract (schemas, limits, examples) for url-normalize. Supported: url normalize; canonicalize http url; normalize https url. Not supported: fetch; dns; punycode security claim; http equals https.","operationId":"describe_url_normalize","security":[],"responses":{"200":{"description":"Normalize an absolute http or https URL via WHATWG parse. No DNS, fetch, or security-equivalence claim."}}}},"/v1/tools/url-normalize/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Normalize an absolute http or https URL via WHATWG parse. No DNS, fetch, or security-equivalence claim.","description":"Supported: url normalize; canonicalize http url; normalize https url. Not supported: fetch; dns; punycode security claim; http equals https. Page: https://computefirst.net/tools/url-normalize","operationId":"execute_url_normalize","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string","minLength":1,"maxLength":8192},"strip_fragment":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/url-query-build/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Build a query string or replace an absolute URL query from ordered pairs. No fetching.","description":"Versioned contract (schemas, limits, examples) for url-query-build. Supported: url query build; build query string; encode search params. Not supported: fetch; form multipart.","operationId":"describe_url_query_build","security":[],"responses":{"200":{"description":"Build a query string or replace an absolute URL query from ordered pairs. No fetching."}}}},"/v1/tools/url-query-build/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Build a query string or replace an absolute URL query from ordered pairs. No fetching.","description":"Supported: url query build; build query string; encode search params. Not supported: fetch; form multipart. Page: https://computefirst.net/tools/url-query-build","operationId":"execute_url_query_build","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["pairs"],"properties":{"pairs":{"type":"array","maxItems":512,"items":{"type":"object","additionalProperties":false,"required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string"}}}},"url":{"type":"string","maxLength":8192},"fragment":{"type":"string","maxLength":8192}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"properties":{"query":{"type":"string"},"url":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/url-query-merge/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Merge query pairs into an absolute URL. No fetching.","description":"Versioned contract (schemas, limits, examples) for url-query-merge. Supported: url query merge; merge search params; update url query. Not supported: fetch; sort params as security.","operationId":"describe_url_query_merge","security":[],"responses":{"200":{"description":"Merge query pairs into an absolute URL. No fetching."}}}},"/v1/tools/url-query-merge/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Merge query pairs into an absolute URL. No fetching.","description":"Supported: url query merge; merge search params; update url query. Not supported: fetch; sort params as security. Page: https://computefirst.net/tools/url-query-merge","operationId":"execute_url_query_merge","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url","pairs"],"properties":{"url":{"type":"string","minLength":1,"maxLength":8192},"pairs":{"type":"array","minItems":1,"maxItems":512,"items":{"type":"object","additionalProperties":false,"required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string"}}}},"mode":{"type":"string","enum":["append","replace_names","replace_all"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/url-query-parse/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Parse query pairs and fragment from an absolute URL. Parse only; no fetching.","description":"Versioned contract (schemas, limits, examples) for url-query-parse. Supported: url query parse; parse query string; parse url search params. Not supported: fetch; decode html; relative urls without base.","operationId":"describe_url_query_parse","security":[],"responses":{"200":{"description":"Parse query pairs and fragment from an absolute URL. Parse only; no fetching."}}}},"/v1/tools/url-query-parse/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Parse query pairs and fragment from an absolute URL. Parse only; no fetching.","description":"Supported: url query parse; parse query string; parse url search params. Not supported: fetch; decode html; relative urls without base. Page: https://computefirst.net/tools/url-query-parse","operationId":"execute_url_query_parse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string","minLength":1,"maxLength":8192}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["pairs","fragment"],"properties":{"pairs":{"type":"array","maxItems":512,"items":{"type":"object","additionalProperties":false,"required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string"}}}},"fragment":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/url-resolve/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Resolve a URL against an absolute http(s) base using WHATWG. No fetching. Result must be http(s).","description":"Versioned contract (schemas, limits, examples) for url-resolve. Supported: url resolve; resolve relative url; join url against base. Not supported: fetch; dns; file urls; security equivalence.","operationId":"describe_url_resolve","security":[],"responses":{"200":{"description":"Resolve a URL against an absolute http(s) base using WHATWG. No fetching. Result must be http(s)."}}}},"/v1/tools/url-resolve/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Resolve a URL against an absolute http(s) base using WHATWG. No fetching. Result must be http(s).","description":"Supported: url resolve; resolve relative url; join url against base. Not supported: fetch; dns; file urls; security equivalence. Page: https://computefirst.net/tools/url-resolve","operationId":"execute_url_resolve","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["base","url"],"properties":{"base":{"type":"string","minLength":1,"maxLength":8192},"url":{"type":"string","minLength":1,"maxLength":8192}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/utf8-base64/versions/1.0.0":{"get":{"tags":["Encoding & checksums"],"summary":"Contract: Encode a Unicode string as standard Base64 of its UTF-8 bytes. Transformation only; no security claim.","description":"Versioned contract (schemas, limits, examples) for utf8-base64. Supported: utf8 base64; base64 encode utf8; encode text as base64. Not supported: base64url; compression; encryption; hex.","operationId":"describe_utf8_base64","security":[],"responses":{"200":{"description":"Encode a Unicode string as standard Base64 of its UTF-8 bytes. Transformation only; no security claim."}}}},"/v1/tools/utf8-base64/versions/1.0.0/execute":{"post":{"tags":["Encoding & checksums"],"summary":"Encode a Unicode string as standard Base64 of its UTF-8 bytes. Transformation only; no security claim.","description":"Supported: utf8 base64; base64 encode utf8; encode text as base64. Not supported: base64url; compression; encryption; hex. Page: https://computefirst.net/tools/utf8-base64","operationId":"execute_utf8_base64","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["base64"],"properties":{"base64":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/utf8-hex/versions/1.0.0":{"get":{"tags":["Encoding & checksums"],"summary":"Contract: Encode a Unicode string as lowercase hex of its UTF-8 bytes. Transformation only; no security claim.","description":"Versioned contract (schemas, limits, examples) for utf8-hex. Supported: utf8 hex; hex encode utf8; utf8 to hex. Not supported: decode hex; uppercase hex; 0x prefix; encryption.","operationId":"describe_utf8_hex","security":[],"responses":{"200":{"description":"Encode a Unicode string as lowercase hex of its UTF-8 bytes. Transformation only; no security claim."}}}},"/v1/tools/utf8-hex/versions/1.0.0/execute":{"post":{"tags":["Encoding & checksums"],"summary":"Encode a Unicode string as lowercase hex of its UTF-8 bytes. Transformation only; no security claim.","description":"Supported: utf8 hex; hex encode utf8; utf8 to hex. Not supported: decode hex; uppercase hex; 0x prefix; encryption. Page: https://computefirst.net/tools/utf8-hex","operationId":"execute_utf8_hex","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["hex"],"properties":{"hex":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-lexical-parse/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Decompose a file path into its lexical components without accessing the filesystem.","description":"Versioned contract (schemas, limits, examples) for path-lexical-parse. Supported: path lexical parse; parse file path; path decomposition; file path components; path stem extension. Not supported: stat file; resolve symlinks; filesystem access; real path resolution.","operationId":"describe_path_lexical_parse","security":[],"responses":{"200":{"description":"Decompose a file path into its lexical components without accessing the filesystem."}}}},"/v1/tools/path-lexical-parse/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Decompose a file path into its lexical components without accessing the filesystem.","description":"Supported: path lexical parse; parse file path; path decomposition; file path components; path stem extension. Not supported: stat file; resolve symlinks; filesystem access; real path resolution. Page: https://computefirst.net/tools/path-lexical-parse","operationId":"execute_path_lexical_parse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["path"],"properties":{"path":{"type":"string","minLength":1,"maxLength":4096},"format":{"type":"string","enum":["posix","windows","auto"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["format","root","dir","base","stem","ext","drive","is_unc","is_absolute","segments"],"properties":{"format":{"type":"string","enum":["posix","windows"]},"root":{"type":"string"},"dir":{"type":"string"},"base":{"type":"string"},"stem":{"type":"string"},"ext":{"type":"string"},"drive":{"type":["string","null"]},"is_unc":{"type":"boolean"},"is_absolute":{"type":"boolean"},"segments":{"type":"array","items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-lexical-normalize/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Normalize a path lexically: collapse redundant separators, resolve \".\" and \"..\" segments.","description":"Versioned contract (schemas, limits, examples) for path-lexical-normalize. Supported: path normalize; normalize file path; collapse dot segments; resolve dot dot. Not supported: stat file; resolve symlinks; filesystem access.","operationId":"describe_path_lexical_normalize","security":[],"responses":{"200":{"description":"Normalize a path lexically: collapse redundant separators, resolve \".\" and \"..\" segments."}}}},"/v1/tools/path-lexical-normalize/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Normalize a path lexically: collapse redundant separators, resolve \".\" and \"..\" segments.","description":"Supported: path normalize; normalize file path; collapse dot segments; resolve dot dot. Not supported: stat file; resolve symlinks; filesystem access. Page: https://computefirst.net/tools/path-lexical-normalize","operationId":"execute_path_lexical_normalize","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["path"],"properties":{"path":{"type":"string","minLength":1,"maxLength":4096},"format":{"type":"string","enum":["posix","windows","auto"]},"allow_above_root":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["normalized","format","is_absolute","changed"],"properties":{"normalized":{"type":"string"},"format":{"type":"string","enum":["posix","windows"]},"is_absolute":{"type":"boolean"},"changed":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-lexical-relative/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Compute the lexical relative path from one path to another without filesystem access.","description":"Versioned contract (schemas, limits, examples) for path-lexical-relative. Supported: path relative; relative path; compute relative path from to. Not supported: stat file; resolve symlinks; filesystem access; cross-drive relative path.","operationId":"describe_path_lexical_relative","security":[],"responses":{"200":{"description":"Compute the lexical relative path from one path to another without filesystem access."}}}},"/v1/tools/path-lexical-relative/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Compute the lexical relative path from one path to another without filesystem access.","description":"Supported: path relative; relative path; compute relative path from to. Not supported: stat file; resolve symlinks; filesystem access; cross-drive relative path. Page: https://computefirst.net/tools/path-lexical-relative","operationId":"execute_path_lexical_relative","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":4096},"to":{"type":"string","minLength":1,"maxLength":4096},"format":{"type":"string","enum":["posix","windows","auto"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["relative","format","same"],"properties":{"relative":{"type":"string"},"format":{"type":"string","enum":["posix","windows"]},"same":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-lexical-contains/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Check whether a child path is lexically inside a parent directory.","description":"Versioned contract (schemas, limits, examples) for path-lexical-contains. Supported: path contains; directory containment; path traversal check; is path inside directory. Not supported: stat file; resolve symlinks; filesystem access.","operationId":"describe_path_lexical_contains","security":[],"responses":{"200":{"description":"Check whether a child path is lexically inside a parent directory."}}}},"/v1/tools/path-lexical-contains/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Check whether a child path is lexically inside a parent directory.","description":"Supported: path contains; directory containment; path traversal check; is path inside directory. Not supported: stat file; resolve symlinks; filesystem access. Page: https://computefirst.net/tools/path-lexical-contains","operationId":"execute_path_lexical_contains","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["parent","child"],"properties":{"parent":{"type":"string","minLength":1,"maxLength":4096},"child":{"type":"string","minLength":1,"maxLength":4096},"format":{"type":"string","enum":["posix","windows","auto"]},"case_sensitive":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["contains","relative","format"],"properties":{"contains":{"type":"boolean"},"relative":{"type":["string","null"]},"format":{"type":"string","enum":["posix","windows"]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-lexical-common-ancestor/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Compute the deepest common ancestor directory of a set of paths.","description":"Versioned contract (schemas, limits, examples) for path-lexical-common-ancestor. Supported: common ancestor; longest common path prefix; shared ancestor directory. Not supported: stat file; resolve symlinks; filesystem access.","operationId":"describe_path_lexical_common_ancestor","security":[],"responses":{"200":{"description":"Compute the deepest common ancestor directory of a set of paths."}}}},"/v1/tools/path-lexical-common-ancestor/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Compute the deepest common ancestor directory of a set of paths.","description":"Supported: common ancestor; longest common path prefix; shared ancestor directory. Not supported: stat file; resolve symlinks; filesystem access. Page: https://computefirst.net/tools/path-lexical-common-ancestor","operationId":"execute_path_lexical_common_ancestor","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["paths"],"properties":{"paths":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"string","minLength":1,"maxLength":4096}},"format":{"type":"string","enum":["posix","windows","auto"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["ancestor","format","depth"],"properties":{"ancestor":{"type":["string","null"]},"format":{"type":"string","enum":["posix","windows"]},"depth":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-lexical-join/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Join an array of path segments lexically, resolving absolute reset boundaries and normalizing separators.","description":"Versioned contract (schemas, limits, examples) for path-lexical-join. Supported: path join; join path segments; concatenate path parts. Not supported: stat file; resolve symlinks; filesystem access.","operationId":"describe_path_lexical_join","security":[],"responses":{"200":{"description":"Join an array of path segments lexically, resolving absolute reset boundaries and normalizing separators."}}}},"/v1/tools/path-lexical-join/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Join an array of path segments lexically, resolving absolute reset boundaries and normalizing separators.","description":"Supported: path join; join path segments; concatenate path parts. Not supported: stat file; resolve symlinks; filesystem access. Page: https://computefirst.net/tools/path-lexical-join","operationId":"execute_path_lexical_join","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["segments"],"properties":{"segments":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string","maxLength":4096}},"format":{"type":"string","enum":["posix","windows","auto"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","required":["joined","format","is_absolute"],"properties":{"joined":{"type":"string"},"format":{"type":"string"},"is_absolute":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-format-convert/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Convert file paths between POSIX and Windows formats, handling slashes, drive letters, and roots lexically.","description":"Versioned contract (schemas, limits, examples) for path-format-convert. Supported: path format convert; posix to windows path; windows to posix path; path separator convert. Not supported: stat file; resolve symlinks; filesystem access; add drive letter.","operationId":"describe_path_format_convert","security":[],"responses":{"200":{"description":"Convert file paths between POSIX and Windows formats, handling slashes, drive letters, and roots lexically."}}}},"/v1/tools/path-format-convert/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Convert file paths between POSIX and Windows formats, handling slashes, drive letters, and roots lexically.","description":"Supported: path format convert; posix to windows path; windows to posix path; path separator convert. Not supported: stat file; resolve symlinks; filesystem access; add drive letter. Page: https://computefirst.net/tools/path-format-convert","operationId":"execute_path_format_convert","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["path","to"],"properties":{"path":{"type":"string","minLength":1,"maxLength":4096},"to":{"type":"string","enum":["posix","windows"]},"from":{"type":"string","enum":["posix","windows","auto"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","required":["converted","from","to","changed"],"properties":{"converted":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"changed":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-lexical-sanitize/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Sanitize an untrusted path to produce a safe relative path, stripping roots, drive letters, traversal segments, and illegal characters.","description":"Versioned contract (schemas, limits, examples) for path-lexical-sanitize. Supported: sanitize path; path security sanitize; safe relative path; strip path traversal; strip illegal filename characters. Not supported: stat file; resolve symlinks; filesystem access; guarantee filesystem safety on all OS versions.","operationId":"describe_path_lexical_sanitize","security":[],"responses":{"200":{"description":"Sanitize an untrusted path to produce a safe relative path, stripping roots, drive letters, traversal segments, and illegal characters."}}}},"/v1/tools/path-lexical-sanitize/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Sanitize an untrusted path to produce a safe relative path, stripping roots, drive letters, traversal segments, and illegal characters.","description":"Supported: sanitize path; path security sanitize; safe relative path; strip path traversal; strip illegal filename characters. Not supported: stat file; resolve symlinks; filesystem access; guarantee filesystem safety on all OS versions. Page: https://computefirst.net/tools/path-lexical-sanitize","operationId":"execute_path_lexical_sanitize","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["path"],"properties":{"path":{"type":"string","maxLength":4096},"replacement":{"type":"string","maxLength":64},"allow_dots":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","required":["sanitized","was_safe","changes"],"properties":{"sanitized":{"type":"string"},"was_safe":{"type":"boolean"},"changes":{"type":"array","items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-prefix-strip/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Strip a common directory prefix or base path from an array of paths lexically.","description":"Versioned contract (schemas, limits, examples) for path-set-prefix-strip. Supported: strip path prefix; remove base directory; relativize paths. Not supported: stat file; filesystem access.","operationId":"describe_path_set_prefix_strip","security":[],"responses":{"200":{"description":"Strip a common directory prefix or base path from an array of paths lexically."}}}},"/v1/tools/path-set-prefix-strip/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Strip a common directory prefix or base path from an array of paths lexically.","description":"Supported: strip path prefix; remove base directory; relativize paths. Not supported: stat file; filesystem access. Page: https://computefirst.net/tools/path-set-prefix-strip","operationId":"execute_path_set_prefix_strip","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paths","prefix"],"properties":{"paths":{"type":"array","minItems":0,"maxItems":10000,"items":{"type":"string","minLength":1,"maxLength":4096}},"prefix":{"type":"string","minLength":1,"maxLength":4096},"format":{"type":"string","enum":["posix","windows","auto"]},"skip_non_matching":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","required":["stripped","not_matched","format"],"properties":{"stripped":{"type":"array","items":{"type":"string"}},"not_matched":{"type":"integer"},"format":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-partition-directory/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Partition an array of file paths into buckets grouped by parent directory or directory at a specified depth.","description":"Versioned contract (schemas, limits, examples) for path-set-partition-directory. Supported: partition paths by directory; group files by directory; partition path set. Not supported: stat file; filesystem access.","operationId":"describe_path_set_partition_directory","security":[],"responses":{"200":{"description":"Partition an array of file paths into buckets grouped by parent directory or directory at a specified depth."}}}},"/v1/tools/path-set-partition-directory/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Partition an array of file paths into buckets grouped by parent directory or directory at a specified depth.","description":"Supported: partition paths by directory; group files by directory; partition path set. Not supported: stat file; filesystem access. Page: https://computefirst.net/tools/path-set-partition-directory","operationId":"execute_path_set_partition_directory","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paths"],"properties":{"paths":{"type":"array","minItems":0,"maxItems":10000,"items":{"type":"string","minLength":1,"maxLength":4096}},"depth":{"type":"integer","minimum":1,"maximum":32},"format":{"type":"string","enum":["posix","windows","auto"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","required":["partitions","format","total"],"properties":{"partitions":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"format":{"type":"string"},"total":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-glob-filter/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Filter an array of paths against glob patterns with inclusion and exclusion rules lexically without filesystem access.","description":"Versioned contract (schemas, limits, examples) for path-set-glob-filter. Supported: glob filter paths; filter files by glob; include exclude paths by pattern. Not supported: filesystem glob; readdir; stat file; filesystem access.","operationId":"describe_path_set_glob_filter","security":[],"responses":{"200":{"description":"Filter an array of paths against glob patterns with inclusion and exclusion rules lexically without filesystem access."}}}},"/v1/tools/path-set-glob-filter/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Filter an array of paths against glob patterns with inclusion and exclusion rules lexically without filesystem access.","description":"Supported: glob filter paths; filter files by glob; include exclude paths by pattern. Not supported: filesystem glob; readdir; stat file; filesystem access. Page: https://computefirst.net/tools/path-set-glob-filter","operationId":"execute_path_set_glob_filter","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paths","patterns"],"properties":{"paths":{"type":"array","items":{"type":"string"},"minItems":0,"maxItems":10000},"patterns":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":256},"dot":{"type":"boolean"},"case_sensitive":{"type":"boolean"},"format":{"type":"string","enum":["posix","windows","auto"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","properties":{"matched":{"type":"array","items":{"type":"string"}},"excluded":{"type":"array","items":{"type":"string"}},"format":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-glob-test/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Test a single path string against glob patterns lexically and return match disposition and matching pattern.","description":"Versioned contract (schemas, limits, examples) for path-set-glob-test. Supported: glob test; test path against glob; single path glob match. Not supported: filesystem glob; readdir; stat file.","operationId":"describe_path_set_glob_test","security":[],"responses":{"200":{"description":"Test a single path string against glob patterns lexically and return match disposition and matching pattern."}}}},"/v1/tools/path-set-glob-test/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Test a single path string against glob patterns lexically and return match disposition and matching pattern.","description":"Supported: glob test; test path against glob; single path glob match. Not supported: filesystem glob; readdir; stat file. Page: https://computefirst.net/tools/path-set-glob-test","operationId":"execute_path_set_glob_test","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["path","patterns"],"properties":{"path":{"type":"string","minLength":1,"maxLength":4096},"patterns":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":256},"dot":{"type":"boolean"},"case_sensitive":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","properties":{"matched":{"type":"boolean"},"matching_pattern":{"type":["string","null"]},"negated":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-ignore-filter/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Filter paths against gitignore-style rule lines (negation, comments, directory trailing slashes) lexically.","description":"Versioned contract (schemas, limits, examples) for path-set-ignore-filter. Supported: gitignore filter; ignore filter paths; apply gitignore rules. Not supported: read .gitignore file; filesystem access; stat file.","operationId":"describe_path_set_ignore_filter","security":[],"responses":{"200":{"description":"Filter paths against gitignore-style rule lines (negation, comments, directory trailing slashes) lexically."}}}},"/v1/tools/path-set-ignore-filter/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Filter paths against gitignore-style rule lines (negation, comments, directory trailing slashes) lexically.","description":"Supported: gitignore filter; ignore filter paths; apply gitignore rules. Not supported: read .gitignore file; filesystem access; stat file. Page: https://computefirst.net/tools/path-set-ignore-filter","operationId":"execute_path_set_ignore_filter","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paths","rules"],"properties":{"paths":{"type":"array","items":{"type":"string"},"minItems":0,"maxItems":10000},"rules":{"type":"array","items":{"type":"string"},"minItems":0,"maxItems":1024},"case_sensitive":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","properties":{"kept":{"type":"array","items":{"type":"string"}},"ignored":{"type":"array","items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-classify/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Classify an array of file paths by file extension, depth histogram, and path format.","description":"Versioned contract (schemas, limits, examples) for path-set-classify. Supported: classify paths; path set classify; file extension breakdown; path depth histogram. Not supported: stat file; filesystem access; detect file type by content.","operationId":"describe_path_set_classify","security":[],"responses":{"200":{"description":"Classify an array of file paths by file extension, depth histogram, and path format."}}}},"/v1/tools/path-set-classify/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Classify an array of file paths by file extension, depth histogram, and path format.","description":"Supported: classify paths; path set classify; file extension breakdown; path depth histogram. Not supported: stat file; filesystem access; detect file type by content. Page: https://computefirst.net/tools/path-set-classify","operationId":"execute_path_set_classify","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paths"],"properties":{"paths":{"type":"array","items":{"type":"string"},"minItems":0,"maxItems":10000},"format":{"type":"string","enum":["posix","windows","auto"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","properties":{"total":{"type":"integer"},"by_extension":{"type":"object"},"by_depth":{"type":"object"},"by_format":{"type":"object"},"no_extension":{"type":"integer"},"format":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-minimal-covering/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Find the minimal covering set of paths by collapsing child paths when an ancestor path is already in the set.","description":"Versioned contract (schemas, limits, examples) for path-set-minimal-covering. Supported: minimal covering set; collapse redundant paths; ancestor path filter. Not supported: stat file; filesystem access.","operationId":"describe_path_set_minimal_covering","security":[],"responses":{"200":{"description":"Find the minimal covering set of paths by collapsing child paths when an ancestor path is already in the set."}}}},"/v1/tools/path-set-minimal-covering/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Find the minimal covering set of paths by collapsing child paths when an ancestor path is already in the set.","description":"Supported: minimal covering set; collapse redundant paths; ancestor path filter. Not supported: stat file; filesystem access. Page: https://computefirst.net/tools/path-set-minimal-covering","operationId":"execute_path_set_minimal_covering","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paths"],"properties":{"paths":{"type":"array","items":{"type":"string"},"minItems":0,"maxItems":10000},"format":{"type":"string","enum":["posix","windows","auto"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","properties":{"covering":{"type":"array","items":{"type":"string"}},"removed":{"type":"integer"},"format":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-difference/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Compute the set difference (A \\ B) of two path collections using lexical path equivalence.","description":"Versioned contract (schemas, limits, examples) for path-set-difference. Supported: path set difference; set subtraction paths; diff path sets. Not supported: stat file; filesystem access.","operationId":"describe_path_set_difference","security":[],"responses":{"200":{"description":"Compute the set difference (A \\ B) of two path collections using lexical path equivalence."}}}},"/v1/tools/path-set-difference/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Compute the set difference (A \\ B) of two path collections using lexical path equivalence.","description":"Supported: path set difference; set subtraction paths; diff path sets. Not supported: stat file; filesystem access. Page: https://computefirst.net/tools/path-set-difference","operationId":"execute_path_set_difference","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["a","b"],"properties":{"a":{"type":"array","items":{"type":"string"},"maxItems":10000},"b":{"type":"array","items":{"type":"string"},"maxItems":10000},"format":{"type":"string","enum":["posix","windows","auto"]},"case_sensitive":{"type":"boolean"},"normalize":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","properties":{"difference":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"},"format":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-intersection/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Compute the set intersection of multiple path collections using lexical path equivalence.","description":"Versioned contract (schemas, limits, examples) for path-set-intersection. Supported: path set intersection; common paths in sets. Not supported: stat file; filesystem access.","operationId":"describe_path_set_intersection","security":[],"responses":{"200":{"description":"Compute the set intersection of multiple path collections using lexical path equivalence."}}}},"/v1/tools/path-set-intersection/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Compute the set intersection of multiple path collections using lexical path equivalence.","description":"Supported: path set intersection; common paths in sets. Not supported: stat file; filesystem access. Page: https://computefirst.net/tools/path-set-intersection","operationId":"execute_path_set_intersection","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["sets"],"properties":{"sets":{"type":"array","items":{"type":"array","items":{"type":"string"}},"minItems":2,"maxItems":10},"format":{"type":"string","enum":["posix","windows","auto"]},"case_sensitive":{"type":"boolean"},"normalize":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","properties":{"intersection":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"},"format":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-union/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Compute the set union of multiple path collections, normalized and deterministically sorted.","description":"Versioned contract (schemas, limits, examples) for path-set-union. Supported: path set union; merge path sets; combine paths. Not supported: stat file; filesystem access.","operationId":"describe_path_set_union","security":[],"responses":{"200":{"description":"Compute the set union of multiple path collections, normalized and deterministically sorted."}}}},"/v1/tools/path-set-union/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Compute the set union of multiple path collections, normalized and deterministically sorted.","description":"Supported: path set union; merge path sets; combine paths. Not supported: stat file; filesystem access. Page: https://computefirst.net/tools/path-set-union","operationId":"execute_path_set_union","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["sets"],"properties":{"sets":{"type":"array","items":{"type":"array","items":{"type":"string"}},"minItems":1,"maxItems":10},"format":{"type":"string","enum":["posix","windows","auto"]},"case_sensitive":{"type":"boolean"},"normalize":{"type":"boolean"},"sort":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","properties":{"union":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"},"format":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-dedupe/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Deduplicate an array of paths based on lexical equivalence while preserving first or last seen order.","description":"Versioned contract (schemas, limits, examples) for path-set-dedupe. Supported: deduplicate paths; path dedup; remove duplicate paths. Not supported: stat file; filesystem access.","operationId":"describe_path_set_dedupe","security":[],"responses":{"200":{"description":"Deduplicate an array of paths based on lexical equivalence while preserving first or last seen order."}}}},"/v1/tools/path-set-dedupe/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Deduplicate an array of paths based on lexical equivalence while preserving first or last seen order.","description":"Supported: deduplicate paths; path dedup; remove duplicate paths. Not supported: stat file; filesystem access. Page: https://computefirst.net/tools/path-set-dedupe","operationId":"execute_path_set_dedupe","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paths"],"properties":{"paths":{"type":"array","items":{"type":"string"},"maxItems":10000},"format":{"type":"string","enum":["posix","windows","auto"]},"case_sensitive":{"type":"boolean"},"normalize":{"type":"boolean"},"keep":{"type":"string","enum":["first","last"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","properties":{"deduped":{"type":"array","items":{"type":"string"}},"removed":{"type":"integer"},"format":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/path-set-hierarchy-tree/versions/1.0.0":{"get":{"tags":["File paths (lexical)"],"summary":"Contract: Transform a flat array of file paths into a nested deterministic directory tree structure.","description":"Versioned contract (schemas, limits, examples) for path-set-hierarchy-tree. Supported: path hierarchy tree; build directory tree from paths; path list to tree. Not supported: stat file; filesystem access; readdir.","operationId":"describe_path_set_hierarchy_tree","security":[],"responses":{"200":{"description":"Transform a flat array of file paths into a nested deterministic directory tree structure."}}}},"/v1/tools/path-set-hierarchy-tree/versions/1.0.0/execute":{"post":{"tags":["File paths (lexical)"],"summary":"Transform a flat array of file paths into a nested deterministic directory tree structure.","description":"Supported: path hierarchy tree; build directory tree from paths; path list to tree. Not supported: stat file; filesystem access; readdir. Page: https://computefirst.net/tools/path-set-hierarchy-tree","operationId":"execute_path_set_hierarchy_tree","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paths"],"properties":{"paths":{"type":"array","items":{"type":"string"},"maxItems":5000},"format":{"type":"string","enum":["posix","windows","auto"]},"sort_children":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","properties":{"tree":{"type":"array"},"format":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/interval_intersection/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the closed intersection of two numeric intervals.","description":"Versioned contract (schemas, limits, examples) for interval_intersection. Supported: interval intersection. Not supported: filesystem access; network access.","operationId":"describe_interval_intersection","security":[],"responses":{"200":{"description":"Compute the closed intersection of two numeric intervals."}}}},"/v1/tools/interval_intersection/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the closed intersection of two numeric intervals.","description":"Supported: interval intersection. Not supported: filesystem access; network access. Page: https://computefirst.net/tools/interval_intersection","operationId":"execute_interval_intersection","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["a","b"],"properties":{"a":{"type":"object","required":["start","end"],"properties":{"start":{"type":"number"},"end":{"type":"number"}}},"b":{"type":"object","required":["start","end"],"properties":{"start":{"type":"number"},"end":{"type":"number"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","required":["intersection"]},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/interval_union/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Merge overlapping or adjacent numeric intervals.","description":"Versioned contract (schemas, limits, examples) for interval_union. Supported: interval union. Not supported: filesystem access; network access.","operationId":"describe_interval_union","security":[],"responses":{"200":{"description":"Merge overlapping or adjacent numeric intervals."}}}},"/v1/tools/interval_union/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Merge overlapping or adjacent numeric intervals.","description":"Supported: interval union. Not supported: filesystem access; network access. Page: https://computefirst.net/tools/interval_union","operationId":"execute_interval_union","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["intervals"],"properties":{"intervals":{"type":"array","items":{"type":"object","required":["start","end"],"properties":{"start":{"type":"number"},"end":{"type":"number"}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","required":["union"]},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/interval_difference/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the portion of interval a outside interval b.","description":"Versioned contract (schemas, limits, examples) for interval_difference. Supported: interval difference. Not supported: filesystem access; network access.","operationId":"describe_interval_difference","security":[],"responses":{"200":{"description":"Compute the portion of interval a outside interval b."}}}},"/v1/tools/interval_difference/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the portion of interval a outside interval b.","description":"Supported: interval difference. Not supported: filesystem access; network access. Page: https://computefirst.net/tools/interval_difference","operationId":"execute_interval_difference","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["a","b"],"properties":{"a":{"type":"object","required":["start","end"],"properties":{"start":{"type":"number"},"end":{"type":"number"}}},"b":{"type":"object","required":["start","end"],"properties":{"start":{"type":"number"},"end":{"type":"number"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","required":["difference"]},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/interval_contains/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Test whether a numeric interval contains a point or interval.","description":"Versioned contract (schemas, limits, examples) for interval_contains. Supported: interval contains. Not supported: filesystem access; network access.","operationId":"describe_interval_contains","security":[],"responses":{"200":{"description":"Test whether a numeric interval contains a point or interval."}}}},"/v1/tools/interval_contains/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Test whether a numeric interval contains a point or interval.","description":"Supported: interval contains. Not supported: filesystem access; network access. Page: https://computefirst.net/tools/interval_contains","operationId":"execute_interval_contains","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["interval","target"],"properties":{"interval":{"type":"object","required":["start","end"],"properties":{"start":{"type":"number"},"end":{"type":"number"}}},"target":{}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","required":["contains"]},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/interval_overlap/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Test whether two numeric intervals overlap.","description":"Versioned contract (schemas, limits, examples) for interval_overlap. Supported: interval overlap. Not supported: filesystem access; network access.","operationId":"describe_interval_overlap","security":[],"responses":{"200":{"description":"Test whether two numeric intervals overlap."}}}},"/v1/tools/interval_overlap/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Test whether two numeric intervals overlap.","description":"Supported: interval overlap. Not supported: filesystem access; network access. Page: https://computefirst.net/tools/interval_overlap","operationId":"execute_interval_overlap","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["a","b"],"properties":{"a":{"type":"object","required":["start","end"],"properties":{"start":{"type":"number"},"end":{"type":"number"}}},"b":{"type":"object","required":["start","end"],"properties":{"start":{"type":"number"},"end":{"type":"number"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","required":["overlap"]},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-anti-join/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Anti join two JSON arrays of objects on exact keys.","description":"Versioned contract (schemas, limits, examples) for json-array-anti-join. Supported: json array anti join; anti join json arrays; subtract json arrays by keys. Not supported: fuzzy keys; numeric keys within arrays.","operationId":"describe_json_array_anti_join","security":[],"responses":{"200":{"description":"Anti join two JSON arrays of objects on exact keys."}}}},"/v1/tools/json-array-anti-join/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Anti join two JSON arrays of objects on exact keys.","description":"Supported: json array anti join; anti join json arrays; subtract json arrays by keys. Not supported: fuzzy keys; numeric keys within arrays. Page: https://computefirst.net/tools/json-array-anti-join","operationId":"execute_json_array_anti_join","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right","keys"],"properties":{"left":{"type":"array","maxItems":10000,"items":{"type":"object"}},"right":{"type":"array","maxItems":10000,"items":{"type":"object"}},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-concat/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Concatenate multiple JSON arrays of objects into one.","description":"Versioned contract (schemas, limits, examples) for json-array-concat. Supported: json array concat; concatenate json arrays; combine json arrays. Not supported: deep merging.","operationId":"describe_json_array_concat","security":[],"responses":{"200":{"description":"Concatenate multiple JSON arrays of objects into one."}}}},"/v1/tools/json-array-concat/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Concatenate multiple JSON arrays of objects into one.","description":"Supported: json array concat; concatenate json arrays; combine json arrays. Not supported: deep merging. Page: https://computefirst.net/tools/json-array-concat","operationId":"execute_json_array_concat","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["arrays"],"properties":{"arrays":{"type":"array","maxItems":32,"items":{"type":"array","maxItems":10000,"items":{"type":"object"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-distinct-by/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Deduplicate a JSON array of objects based on specific keys.","description":"Versioned contract (schemas, limits, examples) for json-array-distinct-by. Supported: json array distinct by; dedupe json array; unique json objects by key. Not supported: fuzzy deduplication; complex expression unique.","operationId":"describe_json_array_distinct_by","security":[],"responses":{"200":{"description":"Deduplicate a JSON array of objects based on specific keys."}}}},"/v1/tools/json-array-distinct-by/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Deduplicate a JSON array of objects based on specific keys.","description":"Supported: json array distinct by; dedupe json array; unique json objects by key. Not supported: fuzzy deduplication; complex expression unique. Page: https://computefirst.net/tools/json-array-distinct-by","operationId":"execute_json_array_distinct_by","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["array","keys"],"properties":{"array":{"type":"array","maxItems":10000,"items":{"type":"object"}},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-drop-keys/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Remove specific keys from each object in a JSON array.","description":"Versioned contract (schemas, limits, examples) for json-array-drop-keys. Supported: json array drop keys; remove keys from json array; omit json array fields. Not supported: deep dropping.","operationId":"describe_json_array_drop_keys","security":[],"responses":{"200":{"description":"Remove specific keys from each object in a JSON array."}}}},"/v1/tools/json-array-drop-keys/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Remove specific keys from each object in a JSON array.","description":"Supported: json array drop keys; remove keys from json array; omit json array fields. Not supported: deep dropping. Page: https://computefirst.net/tools/json-array-drop-keys","operationId":"execute_json_array_drop_keys","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["array","keys"],"properties":{"array":{"type":"array","maxItems":10000,"items":{"type":"object"}},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-filter-equals/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Filter JSON array objects where a key equals a specific value.","description":"Versioned contract (schemas, limits, examples) for json-array-filter-equals. Supported: json array filter equals; filter json array; select json objects by value. Not supported: complex expressions; greater than; regex matching.","operationId":"describe_json_array_filter_equals","security":[],"responses":{"200":{"description":"Filter JSON array objects where a key equals a specific value."}}}},"/v1/tools/json-array-filter-equals/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Filter JSON array objects where a key equals a specific value.","description":"Supported: json array filter equals; filter json array; select json objects by value. Not supported: complex expressions; greater than; regex matching. Page: https://computefirst.net/tools/json-array-filter-equals","operationId":"execute_json_array_filter_equals","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["array","key","value"],"properties":{"array":{"type":"array","maxItems":10000,"items":{"type":"object"}},"key":{"type":"string","minLength":1},"value":{}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-group-by/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Group an array of JSON objects by exact keys.","description":"Versioned contract (schemas, limits, examples) for json-array-group-by. Supported: json array group by; group json array by keys; bucket json objects. Not supported: group by expression; aggregation functions.","operationId":"describe_json_array_group_by","security":[],"responses":{"200":{"description":"Group an array of JSON objects by exact keys."}}}},"/v1/tools/json-array-group-by/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Group an array of JSON objects by exact keys.","description":"Supported: json array group by; group json array by keys; bucket json objects. Not supported: group by expression; aggregation functions. Page: https://computefirst.net/tools/json-array-group-by","operationId":"execute_json_array_group_by","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["array","keys"],"properties":{"array":{"type":"array","maxItems":10000,"items":{"type":"object"}},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}},"group_name":{"type":"string","minLength":1,"maxLength":64,"default":"group"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","groups_count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"groups_count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-group-count/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Group an array of JSON objects by exact keys and return the count.","description":"Versioned contract (schemas, limits, examples) for json-array-group-count. Supported: json array group count; count json array by keys; frequency map json array. Not supported: group by expression; other aggregations.","operationId":"describe_json_array_group_count","security":[],"responses":{"200":{"description":"Group an array of JSON objects by exact keys and return the count."}}}},"/v1/tools/json-array-group-count/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Group an array of JSON objects by exact keys and return the count.","description":"Supported: json array group count; count json array by keys; frequency map json array. Not supported: group by expression; other aggregations. Page: https://computefirst.net/tools/json-array-group-count","operationId":"execute_json_array_group_count","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["array","keys"],"properties":{"array":{"type":"array","maxItems":10000,"items":{"type":"object"}},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}},"count_name":{"type":"string","minLength":1,"maxLength":64,"default":"count"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","groups_count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"groups_count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-index-by/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Convert an array of objects into a single object indexed by a specific key.","description":"Versioned contract (schemas, limits, examples) for json-array-index-by. Supported: json array index by; index json array by key; convert array to map by key. Not supported: multiple keys; deep indexing.","operationId":"describe_json_array_index_by","security":[],"responses":{"200":{"description":"Convert an array of objects into a single object indexed by a specific key."}}}},"/v1/tools/json-array-index-by/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Convert an array of objects into a single object indexed by a specific key.","description":"Supported: json array index by; index json array by key; convert array to map by key. Not supported: multiple keys; deep indexing. Page: https://computefirst.net/tools/json-array-index-by","operationId":"execute_json_array_index_by","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["array","key"],"properties":{"array":{"type":"array","maxItems":10000,"items":{"type":"object"}},"key":{"type":"string","minLength":1},"on_duplicate":{"type":"string","enum":["last","first","throw"],"default":"last"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"object"},"count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-inner-join/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Inner join two JSON arrays of objects on exact keys.","description":"Versioned contract (schemas, limits, examples) for json-array-inner-join. Supported: json array inner join; inner join json arrays; join json objects on keys. Not supported: outer join; fuzzy keys; numeric keys within arrays.","operationId":"describe_json_array_inner_join","security":[],"responses":{"200":{"description":"Inner join two JSON arrays of objects on exact keys."}}}},"/v1/tools/json-array-inner-join/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Inner join two JSON arrays of objects on exact keys.","description":"Supported: json array inner join; inner join json arrays; join json objects on keys. Not supported: outer join; fuzzy keys; numeric keys within arrays. Page: https://computefirst.net/tools/json-array-inner-join","operationId":"execute_json_array_inner_join","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right","keys"],"properties":{"left":{"type":"array","maxItems":10000,"items":{"type":"object"}},"right":{"type":"array","maxItems":10000,"items":{"type":"object"}},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-left-join/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Left join two JSON arrays of objects on exact keys.","description":"Versioned contract (schemas, limits, examples) for json-array-left-join. Supported: json array left join; left join json arrays; left join json objects on keys. Not supported: outer join; fuzzy keys.","operationId":"describe_json_array_left_join","security":[],"responses":{"200":{"description":"Left join two JSON arrays of objects on exact keys."}}}},"/v1/tools/json-array-left-join/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Left join two JSON arrays of objects on exact keys.","description":"Supported: json array left join; left join json arrays; left join json objects on keys. Not supported: outer join; fuzzy keys. Page: https://computefirst.net/tools/json-array-left-join","operationId":"execute_json_array_left_join","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right","keys"],"properties":{"left":{"type":"array","maxItems":10000,"items":{"type":"object"}},"right":{"type":"array","maxItems":10000,"items":{"type":"object"}},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-project/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Select specific keys from each object in a JSON array.","description":"Versioned contract (schemas, limits, examples) for json-array-project. Supported: json array project; select keys from json array; pick json array fields. Not supported: deep projection; rename keys.","operationId":"describe_json_array_project","security":[],"responses":{"200":{"description":"Select specific keys from each object in a JSON array."}}}},"/v1/tools/json-array-project/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Select specific keys from each object in a JSON array.","description":"Supported: json array project; select keys from json array; pick json array fields. Not supported: deep projection; rename keys. Page: https://computefirst.net/tools/json-array-project","operationId":"execute_json_array_project","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["array","keys"],"properties":{"array":{"type":"array","maxItems":10000,"items":{"type":"object"}},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-array-rename-keys/versions/1.0.0":{"get":{"tags":["JSON & JSONL"],"summary":"Contract: Rename specific keys in each object in a JSON array.","description":"Versioned contract (schemas, limits, examples) for json-array-rename-keys. Supported: json array rename keys; remap json keys in array; rename json fields. Not supported: deep renaming.","operationId":"describe_json_array_rename_keys","security":[],"responses":{"200":{"description":"Rename specific keys in each object in a JSON array."}}}},"/v1/tools/json-array-rename-keys/versions/1.0.0/execute":{"post":{"tags":["JSON & JSONL"],"summary":"Rename specific keys in each object in a JSON array.","description":"Supported: json array rename keys; remap json keys in array; rename json fields. Not supported: deep renaming. Page: https://computefirst.net/tools/json-array-rename-keys","operationId":"execute_json_array_rename_keys","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["array","mapping"],"properties":{"array":{"type":"array","maxItems":10000,"items":{"type":"object"}},"mapping":{"type":"object","maxProperties":32,"additionalProperties":{"type":"string","minLength":1}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","count"],"properties":{"result":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/form-answer-diff/versions/1.0.0":{"get":{"tags":["Forms"],"summary":"Contract: Diff two answer maps against one shared form definition.","description":"Versioned contract (schemas, limits, examples) for form-answer-diff. Supported: diff form answers; compare form submissions. Not supported: definition diff; respondent reconciliation; fuzzy answer matching; numeric coercion.","operationId":"describe_form_answer_diff","security":[],"responses":{"200":{"description":"Diff two answer maps against one shared form definition."}}}},"/v1/tools/form-answer-diff/versions/1.0.0/execute":{"post":{"tags":["Forms"],"summary":"Diff two answer maps against one shared form definition.","description":"Supported: diff form answers; compare form submissions. Not supported: definition diff; respondent reconciliation; fuzzy answer matching; numeric coercion. Page: https://computefirst.net/tools/form-answer-diff","operationId":"execute_form_answer_diff","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["definition","left","right"],"properties":{"definition":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["id","label","type","required"],"properties":{"id":{"type":"string","minLength":1},"label":{"type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","choice","multi","json"]},"required":{"type":"boolean"},"choices":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":50}}}}}},"left":{"type":"object"},"right":{"type":"object"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["added","removed","changed","invalid","order_only","unknown","counts"],"properties":{"added":{"type":"array"},"removed":{"type":"array"},"changed":{"type":"array"},"invalid":{"type":"array"},"order_only":{"type":"array"},"unknown":{"type":"array"},"counts":{"type":"object"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/form-compare/versions/1.0.0":{"get":{"tags":["Forms"],"summary":"Contract: Compare two filled form snapshots and return compact field and answer changes.","description":"Versioned contract (schemas, limits, examples) for form-compare. Supported: compare filled forms; form snapshot diff. Not supported: fuzzy matching; html extraction; pdf or ocr; silent answer merge.","operationId":"describe_form_compare","security":[],"responses":{"200":{"description":"Compare two filled form snapshots and return compact field and answer changes."}}}},"/v1/tools/form-compare/versions/1.0.0/execute":{"post":{"tags":["Forms"],"summary":"Compare two filled form snapshots and return compact field and answer changes.","description":"Supported: compare filled forms; form snapshot diff. Not supported: fuzzy matching; html extraction; pdf or ocr; silent answer merge. Page: https://computefirst.net/tools/form-compare","operationId":"execute_form_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"object","additionalProperties":false,"required":["fields","answers"],"properties":{"fields":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["id","label","type","required"],"properties":{"id":{"type":"string","minLength":1},"label":{"type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","choice","multi","json"]},"required":{"type":"boolean"},"choices":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":50}}}},"answers":{"type":"object"}}},"right":{"type":"object","additionalProperties":false,"required":["fields","answers"],"properties":{"fields":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["id","label","type","required"],"properties":{"id":{"type":"string","minLength":1},"label":{"type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","choice","multi","json"]},"required":{"type":"boolean"},"choices":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":50}}}},"answers":{"type":"object"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["fields","answers","counts"],"properties":{"fields":{"type":"object"},"answers":{"type":"object"},"counts":{"type":"object"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/form-definition-diff/versions/1.0.0":{"get":{"tags":["Forms"],"summary":"Contract: Diff two form definitions by stable field id, including choice lists and field order.","description":"Versioned contract (schemas, limits, examples) for form-definition-diff. Supported: diff form fields; form structure diff. Not supported: filled answer diff; fuzzy field matching; html extraction; pdf or ocr.","operationId":"describe_form_definition_diff","security":[],"responses":{"200":{"description":"Diff two form definitions by stable field id, including choice lists and field order."}}}},"/v1/tools/form-definition-diff/versions/1.0.0/execute":{"post":{"tags":["Forms"],"summary":"Diff two form definitions by stable field id, including choice lists and field order.","description":"Supported: diff form fields; form structure diff. Not supported: filled answer diff; fuzzy field matching; html extraction; pdf or ocr. Page: https://computefirst.net/tools/form-definition-diff","operationId":"execute_form_definition_diff","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right"],"properties":{"left":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["id","label","type","required"],"properties":{"id":{"type":"string","minLength":1},"label":{"type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","choice","multi","json"]},"required":{"type":"boolean"},"choices":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":50}}}}}},"right":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["id","label","type","required"],"properties":{"id":{"type":"string","minLength":1},"label":{"type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","choice","multi","json"]},"required":{"type":"boolean"},"choices":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":50}}}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["added","removed","changed","order_changed","counts"],"properties":{"added":{"type":"array"},"removed":{"type":"array"},"changed":{"type":"array"},"order_changed":{"type":"boolean"},"common_order_left":{"type":"array","items":{"type":"string"}},"common_order_right":{"type":"array","items":{"type":"string"}},"counts":{"type":"object"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/form-field-map/versions/1.0.0":{"get":{"tags":["Forms"],"summary":"Contract: Rename form fields with an explicit id map and reject collisions.","description":"Versioned contract (schemas, limits, examples) for form-field-map. Supported: map form field ids; migrate form fields. Not supported: inferred renames; transitive closure; fuzzy matching; silent collision merge.","operationId":"describe_form_field_map","security":[],"responses":{"200":{"description":"Rename form fields with an explicit id map and reject collisions."}}}},"/v1/tools/form-field-map/versions/1.0.0/execute":{"post":{"tags":["Forms"],"summary":"Rename form fields with an explicit id map and reject collisions.","description":"Supported: map form field ids; migrate form fields. Not supported: inferred renames; transitive closure; fuzzy matching; silent collision merge. Page: https://computefirst.net/tools/form-field-map","operationId":"execute_form_field_map","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["definition","mapping","unmapped"],"properties":{"definition":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["id","label","type","required"],"properties":{"id":{"type":"string","minLength":1},"label":{"type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","choice","multi","json"]},"required":{"type":"boolean"},"choices":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":50}}}}}},"answers":{"type":"object"},"mapping":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1},"to":{"type":"string","minLength":1}}}},"unmapped":{"type":"string","enum":["keep","drop"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["definition","renamed","dropped","unchanged_ids","counts"],"properties":{"definition":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["id","label","type","required"],"properties":{"id":{"type":"string","minLength":1},"label":{"type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","choice","multi","json"]},"required":{"type":"boolean"},"choices":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":50}}}}}},"answers":{"type":"object"},"renamed":{"type":"array"},"dropped":{"type":"array"},"unchanged_ids":{"type":"array","items":{"type":"string"}},"counts":{"type":"object"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/form-response-check/versions/1.0.0":{"get":{"tags":["Forms"],"summary":"Contract: Report missing required answers, nulls, type failures, and choice failures.","description":"Versioned contract (schemas, limits, examples) for form-response-check. Supported: check form completeness; check form answers. Not supported: general json schema; fuzzy answers; medical or legal judgment; inferred defaults.","operationId":"describe_form_response_check","security":[],"responses":{"200":{"description":"Report missing required answers, nulls, type failures, and choice failures."}}}},"/v1/tools/form-response-check/versions/1.0.0/execute":{"post":{"tags":["Forms"],"summary":"Report missing required answers, nulls, type failures, and choice failures.","description":"Supported: check form completeness; check form answers. Not supported: general json schema; fuzzy answers; medical or legal judgment; inferred defaults. Page: https://computefirst.net/tools/form-response-check","operationId":"execute_form_response_check","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["definition"],"properties":{"definition":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["id","label","type","required"],"properties":{"id":{"type":"string","minLength":1},"label":{"type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","choice","multi","json"]},"required":{"type":"boolean"},"choices":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":50}}}}}},"answers":{"type":"object"},"responses":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["respondent_id","answers"],"properties":{"respondent_id":{"type":"string","minLength":1},"answers":{"type":"object"}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["mode","counts"],"properties":{"mode":{"type":"string","enum":["answers","responses"]},"complete":{"type":"boolean"},"issues":{"type":"array"},"unknown_fields":{"type":"array"},"respondents":{"type":"array"},"counts":{"type":"object"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/form-response-diff/versions/1.0.0":{"get":{"tags":["Forms"],"summary":"Contract: Reconcile two form response sets by exact respondent id.","description":"Versioned contract (schemas, limits, examples) for form-response-diff. Supported: diff form responses; reconcile form respondents. Not supported: fuzzy respondent matching; inferred identity; definition migration; html extraction.","operationId":"describe_form_response_diff","security":[],"responses":{"200":{"description":"Reconcile two form response sets by exact respondent id."}}}},"/v1/tools/form-response-diff/versions/1.0.0/execute":{"post":{"tags":["Forms"],"summary":"Reconcile two form response sets by exact respondent id.","description":"Supported: diff form responses; reconcile form respondents. Not supported: fuzzy respondent matching; inferred identity; definition migration; html extraction. Page: https://computefirst.net/tools/form-response-diff","operationId":"execute_form_response_diff","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["definition","left","right"],"properties":{"definition":{"type":"object","additionalProperties":false,"required":["fields"],"properties":{"fields":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["id","label","type","required"],"properties":{"id":{"type":"string","minLength":1},"label":{"type":"string"},"type":{"type":"string","enum":["string","number","integer","boolean","choice","multi","json"]},"required":{"type":"boolean"},"choices":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":50}}}}}},"left":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["respondent_id","answers"],"properties":{"respondent_id":{"type":"string","minLength":1},"answers":{"type":"object"}}}},"right":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["respondent_id","answers"],"properties":{"respondent_id":{"type":"string","minLength":1},"answers":{"type":"object"}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["added_respondents","removed_respondents","changed_respondents","unchanged_respondent_ids","counts"],"properties":{"added_respondents":{"type":"array"},"removed_respondents":{"type":"array"},"changed_respondents":{"type":"array"},"unchanged_respondent_ids":{"type":"array","items":{"type":"string"}},"counts":{"type":"object"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-line-endings-normalize/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Normalize all line endings in a text to a specific format (LF, CRLF, or CR).","description":"Versioned contract (schemas, limits, examples) for text-line-endings-normalize. Supported: text line endings normalize; normalize line endings; convert crlf to lf; convert lf to crlf. Not supported: unicode normalization; whitespace trimming; read files.","operationId":"describe_text_line_endings_normalize","security":[],"responses":{"200":{"description":"Normalize all line endings in a text to a specific format (LF, CRLF, or CR)."}}}},"/v1/tools/text-line-endings-normalize/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Normalize all line endings in a text to a specific format (LF, CRLF, or CR).","description":"Supported: text line endings normalize; normalize line endings; convert crlf to lf; convert lf to crlf. Not supported: unicode normalization; whitespace trimming; read files. Page: https://computefirst.net/tools/text-line-endings-normalize","operationId":"execute_text_line_endings_normalize","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":1048576},"format":{"type":"string","enum":["lf","crlf","cr"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","replacements"],"properties":{"text":{"type":"string","maxLength":2097152},"replacements":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-indentation-detect/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Detect whether a text uses tabs or spaces for indentation by counting lines.","description":"Versioned contract (schemas, limits, examples) for text-indentation-detect. Supported: text indentation detect; detect indentation; check if text uses tabs or spaces. Not supported: detect indentation size; fix indentation; parse code structure.","operationId":"describe_text_indentation_detect","security":[],"responses":{"200":{"description":"Detect whether a text uses tabs or spaces for indentation by counting lines."}}}},"/v1/tools/text-indentation-detect/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Detect whether a text uses tabs or spaces for indentation by counting lines.","description":"Supported: text indentation detect; detect indentation; check if text uses tabs or spaces. Not supported: detect indentation size; fix indentation; parse code structure. Page: https://computefirst.net/tools/text-indentation-detect","operationId":"execute_text_indentation_detect","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":1048576}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["tab_indented_lines","space_indented_lines","mixed_indented_lines","predominant"],"properties":{"tab_indented_lines":{"type":"integer","minimum":0},"space_indented_lines":{"type":"integer","minimum":0},"mixed_indented_lines":{"type":"integer","minimum":0},"predominant":{"type":"string","enum":["tabs","spaces","none"]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-trailing-whitespace-trim/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Remove trailing whitespace from each line in a text.","description":"Versioned contract (schemas, limits, examples) for text-trailing-whitespace-trim. Supported: text trailing whitespace trim; trim trailing whitespace; remove trailing whitespace. Not supported: trim leading whitespace; normalize line endings; read files.","operationId":"describe_text_trailing_whitespace_trim","security":[],"responses":{"200":{"description":"Remove trailing whitespace from each line in a text."}}}},"/v1/tools/text-trailing-whitespace-trim/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Remove trailing whitespace from each line in a text.","description":"Supported: text trailing whitespace trim; trim trailing whitespace; remove trailing whitespace. Not supported: trim leading whitespace; normalize line endings; read files. Page: https://computefirst.net/tools/text-trailing-whitespace-trim","operationId":"execute_text_trailing_whitespace_trim","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":1048576}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","trimmed_lines"],"properties":{"text":{"type":"string","maxLength":1048576},"trimmed_lines":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-control-characters-find/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Find non-whitespace control characters in a text string.","description":"Versioned contract (schemas, limits, examples) for text-control-characters-find. Supported: text control characters find; find control characters; detect non-printable characters. Not supported: remove control characters; check whitespace; read files.","operationId":"describe_text_control_characters_find","security":[],"responses":{"200":{"description":"Find non-whitespace control characters in a text string."}}}},"/v1/tools/text-control-characters-find/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Find non-whitespace control characters in a text string.","description":"Supported: text control characters find; find control characters; detect non-printable characters. Not supported: remove control characters; check whitespace; read files. Page: https://computefirst.net/tools/text-control-characters-find","operationId":"execute_text_control_characters_find","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":1048576}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["matches"],"properties":{"matches":{"type":"array","items":{"type":"object","required":["index","code_point"],"properties":{"index":{"type":"integer","minimum":0,"description":"0-based UTF-16 code unit offset"},"code_point":{"type":"string"}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-unicode-normalization-check/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Check if a text string is in various Unicode normalization forms (NFC, NFD, NFKC, NFKD).","description":"Versioned contract (schemas, limits, examples) for text-unicode-normalization-check. Supported: text unicode normalization check; check unicode normalization; is text nfc. Not supported: normalize text; fix encoding; detect encoding.","operationId":"describe_text_unicode_normalization_check","security":[],"responses":{"200":{"description":"Check if a text string is in various Unicode normalization forms (NFC, NFD, NFKC, NFKD)."}}}},"/v1/tools/text-unicode-normalization-check/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Check if a text string is in various Unicode normalization forms (NFC, NFD, NFKC, NFKD).","description":"Supported: text unicode normalization check; check unicode normalization; is text nfc. Not supported: normalize text; fix encoding; detect encoding. Page: https://computefirst.net/tools/text-unicode-normalization-check","operationId":"execute_text_unicode_normalization_check","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":1048576}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["is_nfc","is_nfd","is_nfkc","is_nfkd"],"properties":{"is_nfc":{"type":"boolean"},"is_nfd":{"type":"boolean"},"is_nfkc":{"type":"boolean"},"is_nfkd":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/text-tabs-to-spaces/versions/1.0.0":{"get":{"tags":["Text"],"summary":"Contract: Convert tab characters to spaces.","description":"Versioned contract (schemas, limits, examples) for text-tabs-to-spaces. Supported: text tabs to spaces; convert tabs to spaces; replace tabs with spaces. Not supported: convert spaces to tabs; unicode width alignment; read files.","operationId":"describe_text_tabs_to_spaces","security":[],"responses":{"200":{"description":"Convert tab characters to spaces."}}}},"/v1/tools/text-tabs-to-spaces/versions/1.0.0/execute":{"post":{"tags":["Text"],"summary":"Convert tab characters to spaces.","description":"Supported: text tabs to spaces; convert tabs to spaces; replace tabs with spaces. Not supported: convert spaces to tabs; unicode width alignment; read files. Page: https://computefirst.net/tools/text-tabs-to-spaces","operationId":"execute_text_tabs_to_spaces","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":1048576},"tab_width":{"type":"integer","minimum":1,"maximum":16},"leading_only":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["text","replacements"],"properties":{"text":{"type":"string","maxLength":4194304},"replacements":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/csv-reconcile/versions/1.0.0":{"get":{"tags":["CSV & tables"],"summary":"Contract: Reconcile two CSV documents by key columns, reporting full population totals and bounded samples for added, removed, changed, invalid-key, and ambiguous rows.","description":"Versioned contract (schemas, limits, examples) for csv-reconcile. Supported: csv reconcile; reconcile csv; csv reconciliation; compare csv by keys with duplicates; csv diff with duplicate keys; keyed csv reconciliation report; diagnose csv differences. Not supported: fuzzy matching; numeric type coercion; schema migration; import or patch generation; external writes; filesystem access; network access.","operationId":"describe_csv_reconcile","security":[],"responses":{"200":{"description":"Reconcile two CSV documents by key columns, reporting full population totals and bounded samples for added, removed, changed, invalid-key, and ambiguous rows."}}}},"/v1/tools/csv-reconcile/versions/1.0.0/execute":{"post":{"tags":["CSV & tables"],"summary":"Reconcile two CSV documents by key columns, reporting full population totals and bounded samples for added, removed, changed, invalid-key, and ambiguous rows.","description":"Supported: csv reconcile; reconcile csv; csv reconciliation; compare csv by keys with duplicates; csv diff with duplicate keys; keyed csv reconciliation report; diagnose csv differences. Not supported: fuzzy matching; numeric type coercion; schema migration; import or patch generation; external writes; filesystem access; network access. Page: https://computefirst.net/tools/csv-reconcile","operationId":"execute_csv_reconcile","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["left","right","keys"],"properties":{"left":{"type":"string","maxLength":102400},"right":{"type":"string","maxLength":102400},"keys":{"type":"array","minItems":1,"maxItems":16,"uniqueItems":true,"items":{"type":"string","minLength":1}},"sample_limit":{"type":"integer","minimum":0,"maximum":20,"default":5}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["totals","added","removed","changed","invalid_left","invalid_right","ambiguous_keys"],"properties":{"totals":{"type":"object","additionalProperties":false,"required":["left_rows","right_rows","invalid_left","invalid_right","ambiguous_left","ambiguous_right","ambiguous_keys","added","removed","changed","unchanged"],"properties":{"left_rows":{"type":"integer"},"right_rows":{"type":"integer"},"invalid_left":{"type":"integer"},"invalid_right":{"type":"integer"},"ambiguous_left":{"type":"integer"},"ambiguous_right":{"type":"integer"},"ambiguous_keys":{"type":"integer"},"added":{"type":"integer"},"removed":{"type":"integer"},"changed":{"type":"integer"},"unchanged":{"type":"integer"}}},"added":{"type":"object","additionalProperties":false,"required":["total","samples","truncated"],"properties":{"total":{"type":"integer"},"truncated":{"type":"boolean"},"samples":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["row","key","values"],"properties":{"row":{"type":"integer"},"key":{"type":"array","items":{"type":"string"}},"values":{"type":"object"}}}}}},"removed":{"type":"object","additionalProperties":false,"required":["total","samples","truncated"],"properties":{"total":{"type":"integer"},"truncated":{"type":"boolean"},"samples":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["row","key","values"],"properties":{"row":{"type":"integer"},"key":{"type":"array","items":{"type":"string"}},"values":{"type":"object"}}}}}},"changed":{"type":"object","additionalProperties":false,"required":["total","samples","truncated"],"properties":{"total":{"type":"integer"},"truncated":{"type":"boolean"},"samples":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["key","left_row","right_row","changed_columns","before","after"],"properties":{"key":{"type":"array","items":{"type":"string"}},"left_row":{"type":"integer"},"right_row":{"type":"integer"},"changed_columns":{"type":"array","items":{"type":"string"}},"before":{"type":"object"},"after":{"type":"object"}}}}}},"invalid_left":{"type":"object","additionalProperties":false,"required":["total","samples","truncated"],"properties":{"total":{"type":"integer"},"truncated":{"type":"boolean"},"samples":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["row","key","values"],"properties":{"row":{"type":"integer"},"key":{"type":"array","items":{"type":"string"}},"values":{"type":"object"}}}}}},"invalid_right":{"type":"object","additionalProperties":false,"required":["total","samples","truncated"],"properties":{"total":{"type":"integer"},"truncated":{"type":"boolean"},"samples":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["row","key","values"],"properties":{"row":{"type":"integer"},"key":{"type":"array","items":{"type":"string"}},"values":{"type":"object"}}}}}},"ambiguous_keys":{"type":"object","additionalProperties":false,"required":["total","samples","truncated"],"properties":{"total":{"type":"integer"},"truncated":{"type":"boolean"},"samples":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["key","tuple","left_count","right_count","left_rows","right_rows","left_truncated","right_truncated"],"properties":{"key":{"type":"array","items":{"type":"string"}},"tuple":{"type":"array","items":{"type":"string"}},"left_count":{"type":"integer"},"right_count":{"type":"integer"},"left_rows":{"type":"array","items":{"type":"integer"}},"right_rows":{"type":"array","items":{"type":"integer"}},"left_truncated":{"type":"boolean"},"right_truncated":{"type":"boolean"}}}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-add-years/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Add a signed whole-year delta to a YYYY-MM-DD date, clamping the day if 29 February has no match.","description":"Versioned contract (schemas, limits, examples) for iso-date-add-years. Supported: iso date add years; add calendar years to a date; shift date by years. Not supported: add days; add months; add seconds; time zones; fiscal years; datetime with time.","operationId":"describe_iso_date_add_years","security":[],"responses":{"200":{"description":"Add a signed whole-year delta to a YYYY-MM-DD date, clamping the day if 29 February has no match."}}}},"/v1/tools/iso-date-add-years/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Add a signed whole-year delta to a YYYY-MM-DD date, clamping the day if 29 February has no match.","description":"Supported: iso date add years; add calendar years to a date; shift date by years. Not supported: add days; add months; add seconds; time zones; fiscal years; datetime with time. Page: https://computefirst.net/tools/iso-date-add-years","operationId":"execute_iso_date_add_years","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date","years"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"years":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":6}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-age/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Compute the calendar-aware elapsed years, months, and days between a birth date and an as-of date.","description":"Versioned contract (schemas, limits, examples) for iso-date-age. Supported: iso date age; age in years months days; elapsed calendar time between dates. Not supported: negative age; total days or months as a single unit (use iso-date-difference or iso-date-add-months); timezones.","operationId":"describe_iso_date_age","security":[],"responses":{"200":{"description":"Compute the calendar-aware elapsed years, months, and days between a birth date and an as-of date."}}}},"/v1/tools/iso-date-age/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Compute the calendar-aware elapsed years, months, and days between a birth date and an as-of date.","description":"Supported: iso date age; age in years months days; elapsed calendar time between dates. Not supported: negative age; total days or months as a single unit (use iso-date-difference or iso-date-add-months); timezones. Page: https://computefirst.net/tools/iso-date-age","operationId":"execute_iso_date_age","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["birth_date","as_of_date"],"properties":{"birth_date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"as_of_date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["years","months","days"],"properties":{"years":{"type":"integer","minimum":0},"months":{"type":"integer","minimum":0,"maximum":11},"days":{"type":"integer","minimum":0,"maximum":30}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-business-day-add/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Add a signed count of business days to a date, skipping caller-supplied weekend weekdays and holidays.","description":"Versioned contract (schemas, limits, examples) for iso-date-business-day-add. Supported: iso date business day add; add working days to date; skip weekends and holidays. Not supported: built-in national holiday calendars; timezones; half-day rules; fractional business days.","operationId":"describe_iso_date_business_day_add","security":[],"responses":{"200":{"description":"Add a signed count of business days to a date, skipping caller-supplied weekend weekdays and holidays."}}}},"/v1/tools/iso-date-business-day-add/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Add a signed count of business days to a date, skipping caller-supplied weekend weekdays and holidays.","description":"Supported: iso date business day add; add working days to date; skip weekends and holidays. Not supported: built-in national holiday calendars; timezones; half-day rules; fractional business days. Page: https://computefirst.net/tools/iso-date-business-day-add","operationId":"execute_iso_date_business_day_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date","days","weekend_days","holidays"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"days":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":8},"weekend_days":{"type":"array","maxItems":6,"items":{"type":"integer","minimum":1,"maximum":7}},"holidays":{"type":"array","maxItems":366,"items":{"type":"string","minLength":10,"maxLength":10}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-business-days-count/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Count the business days in an inclusive date range, skipping caller-supplied weekend weekdays and holidays.","description":"Versioned contract (schemas, limits, examples) for iso-date-business-days-count. Supported: iso date business days count; count working days between dates; business days between two dates. Not supported: built-in national holiday calendars; timezones; half-day rules; signed/negative ranges.","operationId":"describe_iso_date_business_days_count","security":[],"responses":{"200":{"description":"Count the business days in an inclusive date range, skipping caller-supplied weekend weekdays and holidays."}}}},"/v1/tools/iso-date-business-days-count/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Count the business days in an inclusive date range, skipping caller-supplied weekend weekdays and holidays.","description":"Supported: iso date business days count; count working days between dates; business days between two dates. Not supported: built-in national holiday calendars; timezones; half-day rules; signed/negative ranges. Page: https://computefirst.net/tools/iso-date-business-days-count","operationId":"execute_iso_date_business_days_count","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["start","end","weekend_days","holidays"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"weekend_days":{"type":"array","maxItems":6,"items":{"type":"integer","minimum":1,"maximum":7}},"holidays":{"type":"array","maxItems":366,"items":{"type":"string","minLength":10,"maxLength":10}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["business_days"],"properties":{"business_days":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-clamp/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Clamp a YYYY-MM-DD calendar date into an inclusive [min, max] range.","description":"Versioned contract (schemas, limits, examples) for iso-date-clamp. Supported: iso date clamp; bound date to range; restrict date to min max. Not supported: datetime input; timezones; open ranges.","operationId":"describe_iso_date_clamp","security":[],"responses":{"200":{"description":"Clamp a YYYY-MM-DD calendar date into an inclusive [min, max] range."}}}},"/v1/tools/iso-date-clamp/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Clamp a YYYY-MM-DD calendar date into an inclusive [min, max] range.","description":"Supported: iso date clamp; bound date to range; restrict date to min max. Not supported: datetime input; timezones; open ranges. Page: https://computefirst.net/tools/iso-date-clamp","operationId":"execute_iso_date_clamp","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date","min","max"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"min":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"max":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-compare/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Compare two YYYY-MM-DD calendar dates and return -1, 0, or 1.","description":"Versioned contract (schemas, limits, examples) for iso-date-compare. Supported: iso date compare; compare two dates; date ordering. Not supported: locale collation; datetime comparison; timezones.","operationId":"describe_iso_date_compare","security":[],"responses":{"200":{"description":"Compare two YYYY-MM-DD calendar dates and return -1, 0, or 1."}}}},"/v1/tools/iso-date-compare/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Compare two YYYY-MM-DD calendar dates and return -1, 0, or 1.","description":"Supported: iso date compare; compare two dates; date ordering. Not supported: locale collation; datetime comparison; timezones. Page: https://computefirst.net/tools/iso-date-compare","operationId":"execute_iso_date_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"b":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["comparison"],"properties":{"comparison":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-day-of-year/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the ordinal day number (1-366) of a YYYY-MM-DD date within its calendar year.","description":"Versioned contract (schemas, limits, examples) for iso-date-day-of-year. Supported: iso date day of year; ordinal day of year; day number in year. Not supported: ISO ordinal date strings; timezones; fiscal year.","operationId":"describe_iso_date_day_of_year","security":[],"responses":{"200":{"description":"Return the ordinal day number (1-366) of a YYYY-MM-DD date within its calendar year."}}}},"/v1/tools/iso-date-day-of-year/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the ordinal day number (1-366) of a YYYY-MM-DD date within its calendar year.","description":"Supported: iso date day of year; ordinal day of year; day number in year. Not supported: ISO ordinal date strings; timezones; fiscal year. Page: https://computefirst.net/tools/iso-date-day-of-year","operationId":"execute_iso_date_day_of_year","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["day_of_year"],"properties":{"day_of_year":{"type":"integer","minimum":1,"maximum":366}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-days-in-month/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the number of calendar days in a given proleptic Gregorian year and month.","description":"Versioned contract (schemas, limits, examples) for iso-date-days-in-month. Supported: iso date days in month; days in a calendar month; month length. Not supported: fiscal months; Julian calendar; timezones.","operationId":"describe_iso_date_days_in_month","security":[],"responses":{"200":{"description":"Return the number of calendar days in a given proleptic Gregorian year and month."}}}},"/v1/tools/iso-date-days-in-month/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the number of calendar days in a given proleptic Gregorian year and month.","description":"Supported: iso date days in month; days in a calendar month; month length. Not supported: fiscal months; Julian calendar; timezones. Page: https://computefirst.net/tools/iso-date-days-in-month","operationId":"execute_iso_date_days_in_month","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["year","month"],"properties":{"year":{"type":"integer","minimum":1,"maximum":9999},"month":{"type":"integer","minimum":1,"maximum":12}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["days"],"properties":{"days":{"type":"integer","minimum":28,"maximum":31}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-from-day-of-year/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Convert a calendar year and ordinal day number (1-366) to a YYYY-MM-DD date.","description":"Versioned contract (schemas, limits, examples) for iso-date-from-day-of-year. Supported: iso date from day of year; date from ordinal day; nth day of year to date. Not supported: ISO ordinal date strings; timezones; fiscal year.","operationId":"describe_iso_date_from_day_of_year","security":[],"responses":{"200":{"description":"Convert a calendar year and ordinal day number (1-366) to a YYYY-MM-DD date."}}}},"/v1/tools/iso-date-from-day-of-year/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Convert a calendar year and ordinal day number (1-366) to a YYYY-MM-DD date.","description":"Supported: iso date from day of year; date from ordinal day; nth day of year to date. Not supported: ISO ordinal date strings; timezones; fiscal year. Page: https://computefirst.net/tools/iso-date-from-day-of-year","operationId":"execute_iso_date_from_day_of_year","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["year","day_of_year"],"properties":{"year":{"type":"integer","minimum":1,"maximum":9999},"day_of_year":{"type":"integer","minimum":1,"maximum":366}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-is-business-day/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Test whether a date is a business day given caller-supplied weekend weekdays and holiday dates.","description":"Versioned contract (schemas, limits, examples) for iso-date-is-business-day. Supported: iso date is business day; is date a working day; business day check with holidays. Not supported: built-in national holiday calendars; timezones; half-day rules.","operationId":"describe_iso_date_is_business_day","security":[],"responses":{"200":{"description":"Test whether a date is a business day given caller-supplied weekend weekdays and holiday dates."}}}},"/v1/tools/iso-date-is-business-day/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Test whether a date is a business day given caller-supplied weekend weekdays and holiday dates.","description":"Supported: iso date is business day; is date a working day; business day check with holidays. Not supported: built-in national holiday calendars; timezones; half-day rules. Page: https://computefirst.net/tools/iso-date-is-business-day","operationId":"execute_iso_date_is_business_day","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date","weekend_days","holidays"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"weekend_days":{"type":"array","maxItems":6,"items":{"type":"integer","minimum":1,"maximum":7}},"holidays":{"type":"array","maxItems":366,"items":{"type":"string","minLength":10,"maxLength":10}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["is_business_day"],"properties":{"is_business_day":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-is-leap-year/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Test whether a proleptic Gregorian calendar year is a leap year.","description":"Versioned contract (schemas, limits, examples) for iso-date-is-leap-year. Supported: iso date is leap year; leap year check; is year a leap year. Not supported: Julian calendar; lunar calendars; timezones.","operationId":"describe_iso_date_is_leap_year","security":[],"responses":{"200":{"description":"Test whether a proleptic Gregorian calendar year is a leap year."}}}},"/v1/tools/iso-date-is-leap-year/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Test whether a proleptic Gregorian calendar year is a leap year.","description":"Supported: iso date is leap year; leap year check; is year a leap year. Not supported: Julian calendar; lunar calendars; timezones. Page: https://computefirst.net/tools/iso-date-is-leap-year","operationId":"execute_iso_date_is_leap_year","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["year"],"properties":{"year":{"type":"integer","minimum":1,"maximum":9999}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["leap"],"properties":{"leap":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-last-weekday-of-month/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the date of the last occurrence of an ISO weekday within a calendar month.","description":"Versioned contract (schemas, limits, examples) for iso-date-last-weekday-of-month. Supported: iso date last weekday of month; last friday of month; final weekday in month. Not supported: nth from start (use iso-date-nth-weekday-of-month); timezones; locale weekday names.","operationId":"describe_iso_date_last_weekday_of_month","security":[],"responses":{"200":{"description":"Return the date of the last occurrence of an ISO weekday within a calendar month."}}}},"/v1/tools/iso-date-last-weekday-of-month/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the date of the last occurrence of an ISO weekday within a calendar month.","description":"Supported: iso date last weekday of month; last friday of month; final weekday in month. Not supported: nth from start (use iso-date-nth-weekday-of-month); timezones; locale weekday names. Page: https://computefirst.net/tools/iso-date-last-weekday-of-month","operationId":"execute_iso_date_last_weekday_of_month","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["year","month","weekday"],"properties":{"year":{"type":"integer","minimum":1,"maximum":9999},"month":{"type":"integer","minimum":1,"maximum":12},"weekday":{"type":"integer","minimum":1,"maximum":7}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-min-max/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the earliest and latest date in a non-empty array of YYYY-MM-DD calendar dates.","description":"Versioned contract (schemas, limits, examples) for iso-date-min-max. Supported: iso date min max; earliest and latest date; date array bounds. Not supported: index of min; datetime input; timezones.","operationId":"describe_iso_date_min_max","security":[],"responses":{"200":{"description":"Return the earliest and latest date in a non-empty array of YYYY-MM-DD calendar dates."}}}},"/v1/tools/iso-date-min-max/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the earliest and latest date in a non-empty array of YYYY-MM-DD calendar dates.","description":"Supported: iso date min max; earliest and latest date; date array bounds. Not supported: index of min; datetime input; timezones. Page: https://computefirst.net/tools/iso-date-min-max","operationId":"execute_iso_date_min_max","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["dates"],"properties":{"dates":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["min","max"],"properties":{"min":{"type":"string","minLength":10,"maxLength":10},"max":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-next-weekday/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the next date on or after a given date that falls on a specified ISO weekday.","description":"Versioned contract (schemas, limits, examples) for iso-date-next-weekday. Supported: iso date next weekday; next monday after date; upcoming weekday. Not supported: timezones; locale weekday names; business day skip.","operationId":"describe_iso_date_next_weekday","security":[],"responses":{"200":{"description":"Return the next date on or after a given date that falls on a specified ISO weekday."}}}},"/v1/tools/iso-date-next-weekday/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the next date on or after a given date that falls on a specified ISO weekday.","description":"Supported: iso date next weekday; next monday after date; upcoming weekday. Not supported: timezones; locale weekday names; business day skip. Page: https://computefirst.net/tools/iso-date-next-weekday","operationId":"execute_iso_date_next_weekday","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date","weekday"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"weekday":{"type":"integer","minimum":1,"maximum":7},"inclusive":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-nth-weekday-of-month/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the date of the nth occurrence of an ISO weekday within a calendar month.","description":"Versioned contract (schemas, limits, examples) for iso-date-nth-weekday-of-month. Supported: iso date nth weekday of month; third monday of month; nth weekday in month. Not supported: negative indexing (use iso-date-last-weekday-of-month); timezones; locale weekday names.","operationId":"describe_iso_date_nth_weekday_of_month","security":[],"responses":{"200":{"description":"Return the date of the nth occurrence of an ISO weekday within a calendar month."}}}},"/v1/tools/iso-date-nth-weekday-of-month/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the date of the nth occurrence of an ISO weekday within a calendar month.","description":"Supported: iso date nth weekday of month; third monday of month; nth weekday in month. Not supported: negative indexing (use iso-date-last-weekday-of-month); timezones; locale weekday names. Page: https://computefirst.net/tools/iso-date-nth-weekday-of-month","operationId":"execute_iso_date_nth_weekday_of_month","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["year","month","weekday","n"],"properties":{"year":{"type":"integer","minimum":1,"maximum":9999},"month":{"type":"integer","minimum":1,"maximum":12},"weekday":{"type":"integer","minimum":1,"maximum":7},"n":{"type":"integer","minimum":1,"maximum":5}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-observed-shift/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Shift a date forward or backward until it lands on a day that is neither a weekend nor a caller-supplied holiday.","description":"Versioned contract (schemas, limits, examples) for iso-date-observed-shift. Supported: iso date observed shift; holiday observed date; move holiday off weekend. Not supported: built-in national holiday calendars; nearest-day tie-break rules; timezones.","operationId":"describe_iso_date_observed_shift","security":[],"responses":{"200":{"description":"Shift a date forward or backward until it lands on a day that is neither a weekend nor a caller-supplied holiday."}}}},"/v1/tools/iso-date-observed-shift/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Shift a date forward or backward until it lands on a day that is neither a weekend nor a caller-supplied holiday.","description":"Supported: iso date observed shift; holiday observed date; move holiday off weekend. Not supported: built-in national holiday calendars; nearest-day tie-break rules; timezones. Page: https://computefirst.net/tools/iso-date-observed-shift","operationId":"execute_iso_date_observed_shift","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date","weekend_days","holidays","direction"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"weekend_days":{"type":"array","maxItems":6,"items":{"type":"integer","minimum":1,"maximum":7}},"holidays":{"type":"array","maxItems":366,"items":{"type":"string","minLength":10,"maxLength":10}},"direction":{"type":"string","enum":["forward","backward"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-previous-weekday/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the most recent date on or before a given date that falls on a specified ISO weekday.","description":"Versioned contract (schemas, limits, examples) for iso-date-previous-weekday. Supported: iso date previous weekday; last monday before date; preceding weekday. Not supported: timezones; locale weekday names; business day skip.","operationId":"describe_iso_date_previous_weekday","security":[],"responses":{"200":{"description":"Return the most recent date on or before a given date that falls on a specified ISO weekday."}}}},"/v1/tools/iso-date-previous-weekday/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the most recent date on or before a given date that falls on a specified ISO weekday.","description":"Supported: iso date previous weekday; last monday before date; preceding weekday. Not supported: timezones; locale weekday names; business day skip. Page: https://computefirst.net/tools/iso-date-previous-weekday","operationId":"execute_iso_date_previous_weekday","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date","weekday"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"weekday":{"type":"integer","minimum":1,"maximum":7},"inclusive":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-quarter-bounds/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the calendar quarter number and the first/last dates of the quarter containing a date.","description":"Versioned contract (schemas, limits, examples) for iso-date-quarter-bounds. Supported: iso date quarter bounds; calendar quarter of a date; quarter start and end dates. Not supported: fiscal quarters; timezones; datetime input.","operationId":"describe_iso_date_quarter_bounds","security":[],"responses":{"200":{"description":"Return the calendar quarter number and the first/last dates of the quarter containing a date."}}}},"/v1/tools/iso-date-quarter-bounds/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the calendar quarter number and the first/last dates of the quarter containing a date.","description":"Supported: iso date quarter bounds; calendar quarter of a date; quarter start and end dates. Not supported: fiscal quarters; timezones; datetime input. Page: https://computefirst.net/tools/iso-date-quarter-bounds","operationId":"execute_iso_date_quarter_bounds","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["date"],"properties":{"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["quarter","start","end"],"properties":{"quarter":{"type":"integer","minimum":1,"maximum":4},"start":{"type":"string","minLength":10,"maxLength":10},"end":{"type":"string","minLength":10,"maxLength":10}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-range-contains/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Test whether an inclusive [start, end] date range contains a given date.","description":"Versioned contract (schemas, limits, examples) for iso-date-range-contains. Supported: iso date range contains; is date within range; point in date range check. Not supported: open ranges; timezones; range-contains-range (use iso-date-range-intersect).","operationId":"describe_iso_date_range_contains","security":[],"responses":{"200":{"description":"Test whether an inclusive [start, end] date range contains a given date."}}}},"/v1/tools/iso-date-range-contains/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Test whether an inclusive [start, end] date range contains a given date.","description":"Supported: iso date range contains; is date within range; point in date range check. Not supported: open ranges; timezones; range-contains-range (use iso-date-range-intersect). Page: https://computefirst.net/tools/iso-date-range-contains","operationId":"execute_iso_date_range_contains","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["range","date"],"properties":{"range":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}},"date":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["contains"],"properties":{"contains":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-range-intersect/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Compute the intersection of two inclusive [start, end] date ranges.","description":"Versioned contract (schemas, limits, examples) for iso-date-range-intersect. Supported: iso date range intersect; overlap of two date ranges; common days between date ranges. Not supported: open ranges; timezones; datetime ranges; multi-range intersection.","operationId":"describe_iso_date_range_intersect","security":[],"responses":{"200":{"description":"Compute the intersection of two inclusive [start, end] date ranges."}}}},"/v1/tools/iso-date-range-intersect/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Compute the intersection of two inclusive [start, end] date ranges.","description":"Supported: iso date range intersect; overlap of two date ranges; common days between date ranges. Not supported: open ranges; timezones; datetime ranges; multi-range intersection. Page: https://computefirst.net/tools/iso-date-range-intersect","operationId":"execute_iso_date_range_intersect","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}},"b":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["intersection"],"properties":{"intersection":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10},"end":{"type":"string","minLength":10,"maxLength":10}}}]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-range-list/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Enumerate the dates in an inclusive [start, end] range stepped by a whole number of days.","description":"Versioned contract (schemas, limits, examples) for iso-date-range-list. Supported: iso date range list; enumerate dates between two dates; every nth day in range. Not supported: calendar-unit steps (weeks, months); timezones; descending output.","operationId":"describe_iso_date_range_list","security":[],"responses":{"200":{"description":"Enumerate the dates in an inclusive [start, end] range stepped by a whole number of days."}}}},"/v1/tools/iso-date-range-list/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Enumerate the dates in an inclusive [start, end] range stepped by a whole number of days.","description":"Supported: iso date range list; enumerate dates between two dates; every nth day in range. Not supported: calendar-unit steps (weeks, months); timezones; descending output. Page: https://computefirst.net/tools/iso-date-range-list","operationId":"execute_iso_date_range_list","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"step_days":{"type":"integer","minimum":1}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["dates"],"properties":{"dates":{"type":"array","items":{"type":"string","minLength":10,"maxLength":10}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-range-overlap/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Test whether two inclusive [start, end] date ranges share at least one day.","description":"Versioned contract (schemas, limits, examples) for iso-date-range-overlap. Supported: iso date range overlap; do two date ranges overlap; date range collision check. Not supported: open ranges; timezones; datetime ranges.","operationId":"describe_iso_date_range_overlap","security":[],"responses":{"200":{"description":"Test whether two inclusive [start, end] date ranges share at least one day."}}}},"/v1/tools/iso-date-range-overlap/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Test whether two inclusive [start, end] date ranges share at least one day.","description":"Supported: iso date range overlap; do two date ranges overlap; date range collision check. Not supported: open ranges; timezones; datetime ranges. Page: https://computefirst.net/tools/iso-date-range-overlap","operationId":"execute_iso_date_range_overlap","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}},"b":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["overlap"],"properties":{"overlap":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-range-split-by-month/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Split an inclusive [start, end] date range into per-calendar-month sub-ranges.","description":"Versioned contract (schemas, limits, examples) for iso-date-range-split-by-month. Supported: iso date range split by month; chunk date range by calendar month; monthly billing periods from range. Not supported: fiscal months; split by week or quarter; timezones.","operationId":"describe_iso_date_range_split_by_month","security":[],"responses":{"200":{"description":"Split an inclusive [start, end] date range into per-calendar-month sub-ranges."}}}},"/v1/tools/iso-date-range-split-by-month/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Split an inclusive [start, end] date range into per-calendar-month sub-ranges.","description":"Supported: iso date range split by month; chunk date range by calendar month; monthly billing periods from range. Not supported: fiscal months; split by week or quarter; timezones. Page: https://computefirst.net/tools/iso-date-range-split-by-month","operationId":"execute_iso_date_range_split_by_month","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["ranges"],"properties":{"ranges":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10},"end":{"type":"string","minLength":10,"maxLength":10}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-range-union/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Merge overlapping or day-adjacent inclusive [start, end] date ranges into the fewest equivalent ranges.","description":"Versioned contract (schemas, limits, examples) for iso-date-range-union. Supported: iso date range union; merge date ranges; combine overlapping date periods. Not supported: open ranges; timezones; datetime ranges.","operationId":"describe_iso_date_range_union","security":[],"responses":{"200":{"description":"Merge overlapping or day-adjacent inclusive [start, end] date ranges into the fewest equivalent ranges."}}}},"/v1/tools/iso-date-range-union/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Merge overlapping or day-adjacent inclusive [start, end] date ranges into the fewest equivalent ranges.","description":"Supported: iso date range union; merge date ranges; combine overlapping date periods. Not supported: open ranges; timezones; datetime ranges. Page: https://computefirst.net/tools/iso-date-range-union","operationId":"execute_iso_date_range_union","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["ranges"],"properties":{"ranges":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["union"],"properties":{"union":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["start","end"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10},"end":{"type":"string","minLength":10,"maxLength":10}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-sort/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Stable-sort an array of YYYY-MM-DD calendar dates.","description":"Versioned contract (schemas, limits, examples) for iso-date-sort. Supported: iso date sort; sort calendar dates; order dates. Not supported: locale collation; datetime sort; timezones; deduplication.","operationId":"describe_iso_date_sort","security":[],"responses":{"200":{"description":"Stable-sort an array of YYYY-MM-DD calendar dates."}}}},"/v1/tools/iso-date-sort/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Stable-sort an array of YYYY-MM-DD calendar dates.","description":"Supported: iso date sort; sort calendar dates; order dates. Not supported: locale collation; datetime sort; timezones; deduplication. Page: https://computefirst.net/tools/iso-date-sort","operationId":"execute_iso_date_sort","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["dates"],"properties":{"dates":{"type":"array","maxItems":10000,"items":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"order":{"type":"string","enum":["asc","desc"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["dates"],"properties":{"dates":{"type":"array","items":{"type":"string","minLength":10,"maxLength":10}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-week-count-in-year/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Return the number of ISO-8601 weeks (52 or 53) in an ISO week-numbering year.","description":"Versioned contract (schemas, limits, examples) for iso-date-week-count-in-year. Supported: iso date week count in year; iso weeks in year; is 53 week year. Not supported: locale week numbers; Sunday-first weeks; fiscal weeks.","operationId":"describe_iso_date_week_count_in_year","security":[],"responses":{"200":{"description":"Return the number of ISO-8601 weeks (52 or 53) in an ISO week-numbering year."}}}},"/v1/tools/iso-date-week-count-in-year/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Return the number of ISO-8601 weeks (52 or 53) in an ISO week-numbering year.","description":"Supported: iso date week count in year; iso weeks in year; is 53 week year. Not supported: locale week numbers; Sunday-first weeks; fiscal weeks. Page: https://computefirst.net/tools/iso-date-week-count-in-year","operationId":"execute_iso_date_week_count_in_year","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["year"],"properties":{"year":{"type":"integer","minimum":1,"maximum":9999}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["weeks"],"properties":{"weeks":{"type":"integer","enum":[52,53]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-date-weekday-occurrences-in-range/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: List every date within an inclusive date range that falls on a given ISO weekday.","description":"Versioned contract (schemas, limits, examples) for iso-date-weekday-occurrences-in-range. Supported: iso date weekday occurrences in range; every monday between two dates; list matching weekdays in range. Not supported: multiple weekdays per call; timezones; locale weekday names; recurring rules with exceptions.","operationId":"describe_iso_date_weekday_occurrences_in_range","security":[],"responses":{"200":{"description":"List every date within an inclusive date range that falls on a given ISO weekday."}}}},"/v1/tools/iso-date-weekday-occurrences-in-range/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"List every date within an inclusive date range that falls on a given ISO weekday.","description":"Supported: iso date weekday occurrences in range; every monday between two dates; list matching weekdays in range. Not supported: multiple weekdays per call; timezones; locale weekday names; recurring rules with exceptions. Page: https://computefirst.net/tools/iso-date-weekday-occurrences-in-range","operationId":"execute_iso_date_weekday_occurrences_in_range","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["start","end","weekday"],"properties":{"start":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"end":{"type":"string","minLength":10,"maxLength":10,"pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"weekday":{"type":"integer","minimum":1,"maximum":7}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["dates"],"properties":{"dates":{"type":"array","items":{"type":"string","minLength":10,"maxLength":10}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-datetime-clamp/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Clamp a strict UTC ISO-8601 datetime into an inclusive [min, max] range.","description":"Versioned contract (schemas, limits, examples) for iso-datetime-clamp. Supported: iso datetime clamp; bound datetime to range; restrict utc datetime to min max. Not supported: leap seconds; time zones; offsets other than Z; fractional seconds; open ranges.","operationId":"describe_iso_datetime_clamp","security":[],"responses":{"200":{"description":"Clamp a strict UTC ISO-8601 datetime into an inclusive [min, max] range."}}}},"/v1/tools/iso-datetime-clamp/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Clamp a strict UTC ISO-8601 datetime into an inclusive [min, max] range.","description":"Supported: iso datetime clamp; bound datetime to range; restrict utc datetime to min max. Not supported: leap seconds; time zones; offsets other than Z; fractional seconds; open ranges. Page: https://computefirst.net/tools/iso-datetime-clamp","operationId":"execute_iso_datetime_clamp","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["datetime","min","max"],"properties":{"datetime":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"},"min":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"},"max":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["datetime"],"properties":{"datetime":{"type":"string","minLength":20,"maxLength":20}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/iso-datetime-compare/versions/1.0.0":{"get":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Contract: Compare two strict UTC ISO-8601 datetimes and return -1, 0, or 1.","description":"Versioned contract (schemas, limits, examples) for iso-datetime-compare. Supported: iso datetime compare; compare two utc datetimes; datetime ordering. Not supported: leap seconds; time zones; offsets other than Z; fractional seconds; locale.","operationId":"describe_iso_datetime_compare","security":[],"responses":{"200":{"description":"Compare two strict UTC ISO-8601 datetimes and return -1, 0, or 1."}}}},"/v1/tools/iso-datetime-compare/versions/1.0.0/execute":{"post":{"tags":["Dates & times (UTC, ISO 8601)"],"summary":"Compare two strict UTC ISO-8601 datetimes and return -1, 0, or 1.","description":"Supported: iso datetime compare; compare two utc datetimes; datetime ordering. Not supported: leap seconds; time zones; offsets other than Z; fractional seconds; locale. Page: https://computefirst.net/tools/iso-datetime-compare","operationId":"execute_iso_datetime_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"},"b":{"type":"string","minLength":20,"maxLength":20,"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["comparison"],"properties":{"comparison":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-gcd/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the non-negative greatest common divisor of an array of canonical integer strings.","description":"Versioned contract (schemas, limits, examples) for array-integer-gcd. Supported: array integer gcd; gcd of an array of integers; greatest common divisor of a list; n-ary gcd. Not supported: least common multiple; gcd of two integers; floating-point gcd.","operationId":"describe_array_integer_gcd","security":[],"responses":{"200":{"description":"Compute the non-negative greatest common divisor of an array of canonical integer strings."}}}},"/v1/tools/array-integer-gcd/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the non-negative greatest common divisor of an array of canonical integer strings.","description":"Supported: array integer gcd; gcd of an array of integers; greatest common divisor of a list; n-ary gcd. Not supported: least common multiple; gcd of two integers; floating-point gcd. Page: https://computefirst.net/tools/array-integer-gcd","operationId":"execute_array_integer_gcd","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/array-integer-lcm/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the non-negative least common multiple of an array of canonical integer strings.","description":"Versioned contract (schemas, limits, examples) for array-integer-lcm. Supported: array integer lcm; lcm of an array of integers; least common multiple of a list; n-ary lcm. Not supported: greatest common divisor; lcm of two integers; floating-point lcm.","operationId":"describe_array_integer_lcm","security":[],"responses":{"200":{"description":"Compute the non-negative least common multiple of an array of canonical integer strings."}}}},"/v1/tools/array-integer-lcm/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the non-negative least common multiple of an array of canonical integer strings.","description":"Supported: array integer lcm; lcm of an array of integers; least common multiple of a list; n-ary lcm. Not supported: greatest common divisor; lcm of two integers; floating-point lcm. Page: https://computefirst.net/tools/array-integer-lcm","operationId":"execute_array_integer_lcm","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["values"],"properties":{"values":{"type":"array","maxItems":10000,"items":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":1001}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-binomial-coefficient/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the exact binomial coefficient C(n, k), the number of ways to choose k items from n.","description":"Versioned contract (schemas, limits, examples) for integer-binomial-coefficient. Supported: integer binomial coefficient; n choose k; combinations count. Not supported: permutations count; multinomial coefficient; negative n or k.","operationId":"describe_integer_binomial_coefficient","security":[],"responses":{"200":{"description":"Compute the exact binomial coefficient C(n, k), the number of ways to choose k items from n."}}}},"/v1/tools/integer-binomial-coefficient/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the exact binomial coefficient C(n, k), the number of ways to choose k items from n.","description":"Supported: integer binomial coefficient; n choose k; combinations count. Not supported: permutations count; multinomial coefficient; negative n or k. Page: https://computefirst.net/tools/integer-binomial-coefficient","operationId":"execute_integer_binomial_coefficient","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["n","k"],"properties":{"n":{"type":"integer","minimum":0,"maximum":100000},"k":{"type":"integer","minimum":0,"maximum":100000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-catalan-number/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the nth Catalan number exactly.","description":"Versioned contract (schemas, limits, examples) for integer-catalan-number. Supported: integer catalan number; nth catalan number; catalan sequence. Not supported: negative index; binomial coefficient; motzkin numbers.","operationId":"describe_integer_catalan_number","security":[],"responses":{"200":{"description":"Compute the nth Catalan number exactly."}}}},"/v1/tools/integer-catalan-number/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the nth Catalan number exactly.","description":"Supported: integer catalan number; nth catalan number; catalan sequence. Not supported: negative index; binomial coefficient; motzkin numbers. Page: https://computefirst.net/tools/integer-catalan-number","operationId":"execute_integer_catalan_number","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["n"],"properties":{"n":{"type":"integer","minimum":0,"maximum":100000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-crt/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Solve a system of integer congruences (x ≡ remainder mod modulus) with the Chinese Remainder Theorem.","description":"Versioned contract (schemas, limits, examples) for integer-crt. Supported: integer crt; chinese remainder theorem; solve system of congruences; combine modular congruences. Not supported: polynomial congruences; non-integer moduli; inconsistent system resolution.","operationId":"describe_integer_crt","security":[],"responses":{"200":{"description":"Solve a system of integer congruences (x ≡ remainder mod modulus) with the Chinese Remainder Theorem."}}}},"/v1/tools/integer-crt/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Solve a system of integer congruences (x ≡ remainder mod modulus) with the Chinese Remainder Theorem.","description":"Supported: integer crt; chinese remainder theorem; solve system of congruences; combine modular congruences. Not supported: polynomial congruences; non-integer moduli; inconsistent system resolution. Page: https://computefirst.net/tools/integer-crt","operationId":"execute_integer_crt","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["congruences"],"properties":{"congruences":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["remainder","modulus"],"properties":{"remainder":{"type":"string","maxLength":1001},"modulus":{"type":"string","maxLength":1001}}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["remainder","modulus"],"properties":{"remainder":{"type":"string"},"modulus":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-derangements-count/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute !n, the number of derangements (permutations with no fixed point) of n items, exactly.","description":"Versioned contract (schemas, limits, examples) for integer-derangements-count. Supported: integer derangements count; subfactorial; permutations with no fixed points. Not supported: negative index; partial derangements; floating-point approximation.","operationId":"describe_integer_derangements_count","security":[],"responses":{"200":{"description":"Compute !n, the number of derangements (permutations with no fixed point) of n items, exactly."}}}},"/v1/tools/integer-derangements-count/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute !n, the number of derangements (permutations with no fixed point) of n items, exactly.","description":"Supported: integer derangements count; subfactorial; permutations with no fixed points. Not supported: negative index; partial derangements; floating-point approximation. Page: https://computefirst.net/tools/integer-derangements-count","operationId":"execute_integer_derangements_count","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["n"],"properties":{"n":{"type":"integer","minimum":0,"maximum":100000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-digit-sum/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Sum the base-b digits of the magnitude of an integer string.","description":"Versioned contract (schemas, limits, examples) for integer-digit-sum. Supported: integer digit sum; sum of digits; digit sum in a base. Not supported: digital root; digit sum of a fraction; digit product.","operationId":"describe_integer_digit_sum","security":[],"responses":{"200":{"description":"Sum the base-b digits of the magnitude of an integer string."}}}},"/v1/tools/integer-digit-sum/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Sum the base-b digits of the magnitude of an integer string.","description":"Supported: integer digit sum; sum of digits; digit sum in a base. Not supported: digital root; digit sum of a fraction; digit product. Page: https://computefirst.net/tools/integer-digit-sum","operationId":"execute_integer_digit_sum","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","maxLength":1001},"base":{"type":"integer","minimum":2,"maximum":36,"default":10}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["digit_sum"],"properties":{"digit_sum":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-digital-root/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Repeatedly sum the base-b digits of the magnitude of an integer string until a single digit remains.","description":"Versioned contract (schemas, limits, examples) for integer-digital-root. Supported: integer digital root; repeated digit sum; digital root in a base. Not supported: single-pass digit sum; digital root of a fraction; casting out nines shortcut only.","operationId":"describe_integer_digital_root","security":[],"responses":{"200":{"description":"Repeatedly sum the base-b digits of the magnitude of an integer string until a single digit remains."}}}},"/v1/tools/integer-digital-root/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Repeatedly sum the base-b digits of the magnitude of an integer string until a single digit remains.","description":"Supported: integer digital root; repeated digit sum; digital root in a base. Not supported: single-pass digit sum; digital root of a fraction; casting out nines shortcut only. Page: https://computefirst.net/tools/integer-digital-root","operationId":"execute_integer_digital_root","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","maxLength":1001},"base":{"type":"integer","minimum":2,"maximum":36,"default":10}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["digital_root"],"properties":{"digital_root":{"type":"integer","minimum":0}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-divisors/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: List every positive divisor of a positive integer, ascending.","description":"Versioned contract (schemas, limits, examples) for integer-divisors. Supported: integer divisors; list divisors; all factors of a number. Not supported: divisors of 0 or negative integers; divisor count only; sum of divisors.","operationId":"describe_integer_divisors","security":[],"responses":{"200":{"description":"List every positive divisor of a positive integer, ascending."}}}},"/v1/tools/integer-divisors/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"List every positive divisor of a positive integer, ascending.","description":"Supported: integer divisors; list divisors; all factors of a number. Not supported: divisors of 0 or negative integers; divisor count only; sum of divisors. Page: https://computefirst.net/tools/integer-divisors","operationId":"execute_integer_divisors","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":13}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["divisors"],"properties":{"divisors":{"type":"array","items":{"type":"string"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-extended-gcd/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the extended Euclidean algorithm result: gcd(a, b) and Bezout coefficients x, y with a*x + b*y = gcd.","description":"Versioned contract (schemas, limits, examples) for integer-extended-gcd. Supported: integer extended gcd; extended euclidean algorithm; bezout coefficients; bezout identity. Not supported: plain gcd without coefficients; lcm; modular inverse of a non-coprime pair.","operationId":"describe_integer_extended_gcd","security":[],"responses":{"200":{"description":"Compute the extended Euclidean algorithm result: gcd(a, b) and Bezout coefficients x, y with a*x + b*y = gcd."}}}},"/v1/tools/integer-extended-gcd/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the extended Euclidean algorithm result: gcd(a, b) and Bezout coefficients x, y with a*x + b*y = gcd.","description":"Supported: integer extended gcd; extended euclidean algorithm; bezout coefficients; bezout identity. Not supported: plain gcd without coefficients; lcm; modular inverse of a non-coprime pair. Page: https://computefirst.net/tools/integer-extended-gcd","operationId":"execute_integer_extended_gcd","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":1,"maxLength":1001},"b":{"type":"string","minLength":1,"maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["gcd","x","y"],"properties":{"gcd":{"type":"string"},"x":{"type":"string"},"y":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-factorial/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute n! (n factorial) exactly for a bounded non-negative integer n.","description":"Versioned contract (schemas, limits, examples) for integer-factorial. Supported: integer factorial; n factorial; compute n!. Not supported: negative factorial; gamma function; double factorial.","operationId":"describe_integer_factorial","security":[],"responses":{"200":{"description":"Compute n! (n factorial) exactly for a bounded non-negative integer n."}}}},"/v1/tools/integer-factorial/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute n! (n factorial) exactly for a bounded non-negative integer n.","description":"Supported: integer factorial; n factorial; compute n!. Not supported: negative factorial; gamma function; double factorial. Page: https://computefirst.net/tools/integer-factorial","operationId":"execute_integer_factorial","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["n"],"properties":{"n":{"type":"integer","minimum":0,"maximum":100000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-is-perfect-square/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Test whether a non-negative integer string is a perfect square.","description":"Versioned contract (schemas, limits, examples) for integer-is-perfect-square. Supported: integer is perfect square; perfect square test; check if a number is a perfect square. Not supported: negative input; floating-point square root; nth power test.","operationId":"describe_integer_is_perfect_square","security":[],"responses":{"200":{"description":"Test whether a non-negative integer string is a perfect square."}}}},"/v1/tools/integer-is-perfect-square/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Test whether a non-negative integer string is a perfect square.","description":"Supported: integer is perfect square; perfect square test; check if a number is a perfect square. Not supported: negative input; floating-point square root; nth power test. Page: https://computefirst.net/tools/integer-is-perfect-square","operationId":"execute_integer_is_perfect_square","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":1000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["is_perfect_square"],"properties":{"is_perfect_square":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-is-prime/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Deterministically test whether a non-negative integer string is prime.","description":"Versioned contract (schemas, limits, examples) for integer-is-prime. Supported: integer is prime; primality test; check if a number is prime. Not supported: negative primality; probabilistic primality; prime factorization.","operationId":"describe_integer_is_prime","security":[],"responses":{"200":{"description":"Deterministically test whether a non-negative integer string is prime."}}}},"/v1/tools/integer-is-prime/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Deterministically test whether a non-negative integer string is prime.","description":"Supported: integer is prime; primality test; check if a number is prime. Not supported: negative primality; probabilistic primality; prime factorization. Page: https://computefirst.net/tools/integer-is-prime","operationId":"execute_integer_is_prime","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":24}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["is_prime"],"properties":{"is_prime":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-lcm/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the non-negative least common multiple of two canonical integer strings.","description":"Versioned contract (schemas, limits, examples) for integer-lcm. Supported: integer lcm; least common multiple of two integers; lcm of integers. Not supported: greatest common divisor; lcm of more than two integers; floating-point lcm.","operationId":"describe_integer_lcm","security":[],"responses":{"200":{"description":"Compute the non-negative least common multiple of two canonical integer strings."}}}},"/v1/tools/integer-lcm/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the non-negative least common multiple of two canonical integer strings.","description":"Supported: integer lcm; least common multiple of two integers; lcm of integers. Not supported: greatest common divisor; lcm of more than two integers; floating-point lcm. Page: https://computefirst.net/tools/integer-lcm","operationId":"execute_integer_lcm","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"string","minLength":1,"maxLength":1001},"b":{"type":"string","minLength":1,"maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","minLength":1,"maxLength":1000}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-mod-inverse/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the modular multiplicative inverse of a modulo modulus, when it exists.","description":"Versioned contract (schemas, limits, examples) for integer-mod-inverse. Supported: integer mod inverse; modular multiplicative inverse; modular inverse; inverse mod m. Not supported: modular exponentiation; extended gcd output; inverse when gcd is not 1.","operationId":"describe_integer_mod_inverse","security":[],"responses":{"200":{"description":"Compute the modular multiplicative inverse of a modulo modulus, when it exists."}}}},"/v1/tools/integer-mod-inverse/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the modular multiplicative inverse of a modulo modulus, when it exists.","description":"Supported: integer mod inverse; modular multiplicative inverse; modular inverse; inverse mod m. Not supported: modular exponentiation; extended gcd output; inverse when gcd is not 1. Page: https://computefirst.net/tools/integer-mod-inverse","operationId":"execute_integer_mod_inverse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","modulus"],"properties":{"a":{"type":"string","minLength":1,"maxLength":1001},"modulus":{"type":"string","minLength":1,"maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-mod-pow/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute base^exponent mod modulus exactly using fast modular exponentiation.","description":"Versioned contract (schemas, limits, examples) for integer-mod-pow. Supported: integer mod pow; modular exponentiation; modular power; fast exponentiation mod m. Not supported: negative exponent; modular inverse; floating-point power.","operationId":"describe_integer_mod_pow","security":[],"responses":{"200":{"description":"Compute base^exponent mod modulus exactly using fast modular exponentiation."}}}},"/v1/tools/integer-mod-pow/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute base^exponent mod modulus exactly using fast modular exponentiation.","description":"Supported: integer mod pow; modular exponentiation; modular power; fast exponentiation mod m. Not supported: negative exponent; modular inverse; floating-point power. Page: https://computefirst.net/tools/integer-mod-pow","operationId":"execute_integer_mod_pow","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["base","exponent","modulus"],"properties":{"base":{"type":"string","minLength":1,"maxLength":1001},"exponent":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":1000},"modulus":{"type":"string","minLength":1,"maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-nth-root/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the exact floor of the nth root of a non-negative integer string.","description":"Versioned contract (schemas, limits, examples) for integer-nth-root. Supported: integer nth root; nth root floor; integer root. Not supported: negative radicand; even roots of negative numbers; floating-point root.","operationId":"describe_integer_nth_root","security":[],"responses":{"200":{"description":"Compute the exact floor of the nth root of a non-negative integer string."}}}},"/v1/tools/integer-nth-root/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the exact floor of the nth root of a non-negative integer string.","description":"Supported: integer nth root; nth root floor; integer root. Not supported: negative radicand; even roots of negative numbers; floating-point root. Page: https://computefirst.net/tools/integer-nth-root","operationId":"execute_integer_nth_root","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value","degree"],"properties":{"value":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":1000},"degree":{"type":"integer","minimum":1,"maximum":1000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","is_exact"],"properties":{"result":{"type":"string"},"is_exact":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-permutations-count/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the exact number of k-permutations of n distinct items, P(n, k) = n! / (n-k)!.","description":"Versioned contract (schemas, limits, examples) for integer-permutations-count. Supported: integer permutations count; n permute k; arrangements count. Not supported: binomial coefficient; permutations with repetition; negative n or k.","operationId":"describe_integer_permutations_count","security":[],"responses":{"200":{"description":"Compute the exact number of k-permutations of n distinct items, P(n, k) = n! / (n-k)!."}}}},"/v1/tools/integer-permutations-count/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the exact number of k-permutations of n distinct items, P(n, k) = n! / (n-k)!.","description":"Supported: integer permutations count; n permute k; arrangements count. Not supported: binomial coefficient; permutations with repetition; negative n or k. Page: https://computefirst.net/tools/integer-permutations-count","operationId":"execute_integer_permutations_count","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["n","k"],"properties":{"n":{"type":"integer","minimum":0,"maximum":100000},"k":{"type":"integer","minimum":0,"maximum":100000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-prime-factors/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the prime factorization of a positive integer as a list of prime/exponent pairs.","description":"Versioned contract (schemas, limits, examples) for integer-prime-factors. Supported: integer prime factors; prime factorization; factorize integer. Not supported: factorization of 0 or negative integers; probabilistic factorization; divisor listing.","operationId":"describe_integer_prime_factors","security":[],"responses":{"200":{"description":"Compute the prime factorization of a positive integer as a list of prime/exponent pairs."}}}},"/v1/tools/integer-prime-factors/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the prime factorization of a positive integer as a list of prime/exponent pairs.","description":"Supported: integer prime factors; prime factorization; factorize integer. Not supported: factorization of 0 or negative integers; probabilistic factorization; divisor listing. Page: https://computefirst.net/tools/integer-prime-factors","operationId":"execute_integer_prime_factors","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":13}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["factors"],"properties":{"factors":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["prime","exponent"],"properties":{"prime":{"type":"string"},"exponent":{"type":"integer","minimum":1}}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-sqrt/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute the exact floor of the square root of a non-negative integer string.","description":"Versioned contract (schemas, limits, examples) for integer-sqrt. Supported: integer sqrt; integer square root; floor square root. Not supported: negative square root; floating-point square root; nth root.","operationId":"describe_integer_sqrt","security":[],"responses":{"200":{"description":"Compute the exact floor of the square root of a non-negative integer string."}}}},"/v1/tools/integer-sqrt/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute the exact floor of the square root of a non-negative integer string.","description":"Supported: integer sqrt; integer square root; floor square root. Not supported: negative square root; floating-point square root; nth root. Page: https://computefirst.net/tools/integer-sqrt","operationId":"execute_integer_sqrt","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":1000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result","is_perfect_square"],"properties":{"result":{"type":"string"},"is_perfect_square":{"type":"boolean"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/integer-totient/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compute Euler's totient function: the count of integers in [1, value] coprime to value.","description":"Versioned contract (schemas, limits, examples) for integer-totient. Supported: integer totient; euler's totient function; euler phi function; count coprime integers. Not supported: totient of 0 or negative integers; carmichael function; totient summatory function.","operationId":"describe_integer_totient","security":[],"responses":{"200":{"description":"Compute Euler's totient function: the count of integers in [1, value] coprime to value."}}}},"/v1/tools/integer-totient/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compute Euler's totient function: the count of integers in [1, value] coprime to value.","description":"Supported: integer totient; euler's totient function; euler phi function; count coprime integers. Not supported: totient of 0 or negative integers; carmichael function; totient summatory function. Page: https://computefirst.net/tools/integer-totient","operationId":"execute_integer_totient","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":13}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/mixed-number-to-rational/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Convert a mixed number (sign, whole part, proper-fraction numerator and denominator) into a single reduced rational.","description":"Versioned contract (schemas, limits, examples) for mixed-number-to-rational. Supported: mixed number to rational; convert mixed number to fraction; mixed fraction to improper fraction. Not supported: rational to mixed number; decimal conversion; negative whole or fraction fields.","operationId":"describe_mixed_number_to_rational","security":[],"responses":{"200":{"description":"Convert a mixed number (sign, whole part, proper-fraction numerator and denominator) into a single reduced rational."}}}},"/v1/tools/mixed-number-to-rational/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Convert a mixed number (sign, whole part, proper-fraction numerator and denominator) into a single reduced rational.","description":"Supported: mixed number to rational; convert mixed number to fraction; mixed fraction to improper fraction. Not supported: rational to mixed number; decimal conversion; negative whole or fraction fields. Page: https://computefirst.net/tools/mixed-number-to-rational","operationId":"execute_mixed_number_to_rational","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["negative","whole","numerator","denominator"],"properties":{"negative":{"type":"boolean"},"whole":{"type":"string","maxLength":1000},"numerator":{"type":"string","maxLength":1000},"denominator":{"type":"string","maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/rational-compare/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Compare two rational numbers given as numerator/denominator integer strings by exact value.","description":"Versioned contract (schemas, limits, examples) for rational-compare. Supported: rational compare; compare two rational numbers; compare fractions as rationals; order two rationals. Not supported: decimal compare; float comparison; mixed numbers; IEEE-754 arithmetic.","operationId":"describe_rational_compare","security":[],"responses":{"200":{"description":"Compare two rational numbers given as numerator/denominator integer strings by exact value."}}}},"/v1/tools/rational-compare/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Compare two rational numbers given as numerator/denominator integer strings by exact value.","description":"Supported: rational compare; compare two rational numbers; compare fractions as rationals; order two rationals. Not supported: decimal compare; float comparison; mixed numbers; IEEE-754 arithmetic. Page: https://computefirst.net/tools/rational-compare","operationId":"execute_rational_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}},"b":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"integer","enum":[-1,0,1]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/rational-power/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Raise a rational number to an integer exponent and return the exact reduced result.","description":"Versioned contract (schemas, limits, examples) for rational-power. Supported: rational power; rational exponentiation; raise a fraction to an integer power; integer power of a rational. Not supported: rational exponent; fractional exponent; nth root; floating-point power.","operationId":"describe_rational_power","security":[],"responses":{"200":{"description":"Raise a rational number to an integer exponent and return the exact reduced result."}}}},"/v1/tools/rational-power/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Raise a rational number to an integer exponent and return the exact reduced result.","description":"Supported: rational power; rational exponentiation; raise a fraction to an integer power; integer power of a rational. Not supported: rational exponent; fractional exponent; nth root; floating-point power. Page: https://computefirst.net/tools/rational-power","operationId":"execute_rational_power","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["base","exponent"],"properties":{"base":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}},"exponent":{"type":"integer","minimum":-1000,"maximum":1000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/rational-reciprocal/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Invert a rational number given as a numerator/denominator integer-string pair.","description":"Versioned contract (schemas, limits, examples) for rational-reciprocal. Supported: rational reciprocal; invert fraction; multiplicative inverse of a rational; flip fraction. Not supported: decimal reciprocal; reciprocal of zero; mixed numbers.","operationId":"describe_rational_reciprocal","security":[],"responses":{"200":{"description":"Invert a rational number given as a numerator/denominator integer-string pair."}}}},"/v1/tools/rational-reciprocal/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Invert a rational number given as a numerator/denominator integer-string pair.","description":"Supported: rational reciprocal; invert fraction; multiplicative inverse of a rational; flip fraction. Not supported: decimal reciprocal; reciprocal of zero; mixed numbers. Page: https://computefirst.net/tools/rational-reciprocal","operationId":"execute_rational_reciprocal","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/rational-simplify/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Reduce a numerator/denominator pair to lowest terms with the sign normalized onto the numerator.","description":"Versioned contract (schemas, limits, examples) for rational-simplify. Supported: rational simplify; simplify fraction; reduce fraction to lowest terms; normalize rational sign. Not supported: decimal simplify; continued fractions; mixed numbers.","operationId":"describe_rational_simplify","security":[],"responses":{"200":{"description":"Reduce a numerator/denominator pair to lowest terms with the sign normalized onto the numerator."}}}},"/v1/tools/rational-simplify/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Reduce a numerator/denominator pair to lowest terms with the sign normalized onto the numerator.","description":"Supported: rational simplify; simplify fraction; reduce fraction to lowest terms; normalize rational sign. Not supported: decimal simplify; continued fractions; mixed numbers. Page: https://computefirst.net/tools/rational-simplify","operationId":"execute_rational_simplify","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/rational-subtract/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Subtract one rational number from another, given as numerator/denominator integer strings, and return the reduced difference.","description":"Versioned contract (schemas, limits, examples) for rational-subtract. Supported: rational subtract; subtract two rational numbers; subtract fractions as rationals; difference of two rationals. Not supported: rational add; decimal subtract; float subtraction; mixed numbers; continued fractions; IEEE-754 arithmetic.","operationId":"describe_rational_subtract","security":[],"responses":{"200":{"description":"Subtract one rational number from another, given as numerator/denominator integer strings, and return the reduced difference."}}}},"/v1/tools/rational-subtract/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Subtract one rational number from another, given as numerator/denominator integer strings, and return the reduced difference.","description":"Supported: rational subtract; subtract two rational numbers; subtract fractions as rationals; difference of two rationals. Not supported: rational add; decimal subtract; float subtraction; mixed numbers; continued fractions; IEEE-754 arithmetic. Page: https://computefirst.net/tools/rational-subtract","operationId":"execute_rational_subtract","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}},"b":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/rational-to-mixed-number/versions/1.0.0":{"get":{"tags":["Numbers & math"],"summary":"Contract: Convert a rational number into a sign, whole part, and proper-fraction numerator/denominator.","description":"Versioned contract (schemas, limits, examples) for rational-to-mixed-number. Supported: rational to mixed number; convert fraction to mixed number; improper fraction to mixed number. Not supported: mixed number to rational; decimal conversion.","operationId":"describe_rational_to_mixed_number","security":[],"responses":{"200":{"description":"Convert a rational number into a sign, whole part, and proper-fraction numerator/denominator."}}}},"/v1/tools/rational-to-mixed-number/versions/1.0.0/execute":{"post":{"tags":["Numbers & math"],"summary":"Convert a rational number into a sign, whole part, and proper-fraction numerator/denominator.","description":"Supported: rational to mixed number; convert fraction to mixed number; improper fraction to mixed number. Not supported: mixed number to rational; decimal conversion. Page: https://computefirst.net/tools/rational-to-mixed-number","operationId":"execute_rational_to_mixed_number","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["numerator","denominator"],"properties":{"numerator":{"type":"string","maxLength":1001},"denominator":{"type":"string","maxLength":1001}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["negative","whole","numerator","denominator"],"properties":{"negative":{"type":"boolean"},"whole":{"type":"string"},"numerator":{"type":"string"},"denominator":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-address-classify/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Classify an IPv4 address against the static IANA IPv4 special-purpose address registry.","description":"Versioned contract (schemas, limits, examples) for ipv4-address-classify. Supported: ipv4 address classify; is ipv4 private; ipv4 special purpose lookup. Not supported: IPv6; routing-table-aware or organization-specific reservations; live registry lookups.","operationId":"describe_ipv4_address_classify","security":[],"responses":{"200":{"description":"Classify an IPv4 address against the static IANA IPv4 special-purpose address registry."}}}},"/v1/tools/ipv4-address-classify/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Classify an IPv4 address against the static IANA IPv4 special-purpose address registry.","description":"Supported: ipv4 address classify; is ipv4 private; ipv4 special purpose lookup. Not supported: IPv6; routing-table-aware or organization-specific reservations; live registry lookups. Page: https://computefirst.net/tools/ipv4-address-classify","operationId":"execute_ipv4_address_classify","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address"],"properties":{"address":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["classification","matched_range"],"properties":{"classification":{"type":"string","enum":["this_network","private","shared_address_space","loopback","link_local","reserved","documentation","benchmarking","multicast","broadcast","public"]},"matched_range":{"type":["string","null"],"maxLength":18}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-address-compare/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Compare two canonical IPv4 addresses by their numeric uint32 value.","description":"Versioned contract (schemas, limits, examples) for ipv4-address-compare. Supported: ipv4 address compare; compare ipv4 addresses; order ipv4 addresses. Not supported: IPv6; CIDR-aware comparison.","operationId":"describe_ipv4_address_compare","security":[],"responses":{"200":{"description":"Compare two canonical IPv4 addresses by their numeric uint32 value."}}}},"/v1/tools/ipv4-address-compare/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Compare two canonical IPv4 addresses by their numeric uint32 value.","description":"Supported: ipv4 address compare; compare ipv4 addresses; order ipv4 addresses. Not supported: IPv6; CIDR-aware comparison. Page: https://computefirst.net/tools/ipv4-address-compare","operationId":"execute_ipv4_address_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address_a","address_b"],"properties":{"address_a":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"},"address_b":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["order"],"properties":{"order":{"type":"string","enum":["less","equal","greater"]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-address-distance/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Compute the signed integer distance between two IPv4 addresses (address_b minus address_a).","description":"Versioned contract (schemas, limits, examples) for ipv4-address-distance. Supported: ipv4 address distance; ipv4 address difference; how many ipv4 addresses apart. Not supported: IPv6.","operationId":"describe_ipv4_address_distance","security":[],"responses":{"200":{"description":"Compute the signed integer distance between two IPv4 addresses (address_b minus address_a)."}}}},"/v1/tools/ipv4-address-distance/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Compute the signed integer distance between two IPv4 addresses (address_b minus address_a).","description":"Supported: ipv4 address distance; ipv4 address difference; how many ipv4 addresses apart. Not supported: IPv6. Page: https://computefirst.net/tools/ipv4-address-distance","operationId":"execute_ipv4_address_distance","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address_a","address_b"],"properties":{"address_a":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"},"address_b":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["difference"],"properties":{"difference":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":11}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-address-offset/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Add a signed integer offset to an IPv4 address, throwing if the result leaves the IPv4 address space.","description":"Versioned contract (schemas, limits, examples) for ipv4-address-offset. Supported: ipv4 address offset; add offset to ipv4 address; ipv4 address increment. Not supported: IPv6; CIDR-bounded wraparound.","operationId":"describe_ipv4_address_offset","security":[],"responses":{"200":{"description":"Add a signed integer offset to an IPv4 address, throwing if the result leaves the IPv4 address space."}}}},"/v1/tools/ipv4-address-offset/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Add a signed integer offset to an IPv4 address, throwing if the result leaves the IPv4 address space.","description":"Supported: ipv4 address offset; add offset to ipv4 address; ipv4 address increment. Not supported: IPv6; CIDR-bounded wraparound. Page: https://computefirst.net/tools/ipv4-address-offset","operationId":"execute_ipv4_address_offset","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address","offset"],"properties":{"address":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"},"offset":{"type":"integer","minimum":-4294967295,"maximum":4294967295}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"string","maxLength":15}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-cidr-aggregate/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Merge a list of IPv4 CIDR blocks into the minimal equivalent list of non-overlapping CIDR blocks.","description":"Versioned contract (schemas, limits, examples) for ipv4-cidr-aggregate. Supported: ipv4 cidr aggregate; summarize ipv4 cidr list; collapse ipv4 subnets; ipv4 cidr supernet merge. Not supported: IPv6; preserving input order or duplicate entries.","operationId":"describe_ipv4_cidr_aggregate","security":[],"responses":{"200":{"description":"Merge a list of IPv4 CIDR blocks into the minimal equivalent list of non-overlapping CIDR blocks."}}}},"/v1/tools/ipv4-cidr-aggregate/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Merge a list of IPv4 CIDR blocks into the minimal equivalent list of non-overlapping CIDR blocks.","description":"Supported: ipv4 cidr aggregate; summarize ipv4 cidr list; collapse ipv4 subnets; ipv4 cidr supernet merge. Not supported: IPv6; preserving input order or duplicate entries. Page: https://computefirst.net/tools/ipv4-cidr-aggregate","operationId":"execute_ipv4_cidr_aggregate","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cidrs"],"properties":{"cidrs":{"type":"array","minItems":1,"maxItems":512,"items":{"type":"string","maxLength":18}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["aggregated","count"],"properties":{"aggregated":{"type":"array","items":{"type":"string","maxLength":18},"maxItems":4096},"count":{"type":"integer","minimum":1,"maximum":4096}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-cidr-contains/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Test whether one IPv4 CIDR block fully contains another IPv4 CIDR block.","description":"Versioned contract (schemas, limits, examples) for ipv4-cidr-contains. Supported: ipv4 cidr contains; ipv4 subnet contains subnet; check ipv4 cidr containment. Not supported: IPv6; partial/overlap-only containment.","operationId":"describe_ipv4_cidr_contains","security":[],"responses":{"200":{"description":"Test whether one IPv4 CIDR block fully contains another IPv4 CIDR block."}}}},"/v1/tools/ipv4-cidr-contains/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Test whether one IPv4 CIDR block fully contains another IPv4 CIDR block.","description":"Supported: ipv4 cidr contains; ipv4 subnet contains subnet; check ipv4 cidr containment. Not supported: IPv6; partial/overlap-only containment. Page: https://computefirst.net/tools/ipv4-cidr-contains","operationId":"execute_ipv4_cidr_contains","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["outer","inner"],"properties":{"outer":{"type":"string","maxLength":18},"inner":{"type":"string","maxLength":18}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["contains","outer_network","inner_network"],"properties":{"contains":{"type":"boolean"},"outer_network":{"type":"string","maxLength":18},"inner_network":{"type":"string","maxLength":18}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-cidr-overlap/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Test whether two IPv4 CIDR blocks overlap (share at least one address).","description":"Versioned contract (schemas, limits, examples) for ipv4-cidr-overlap. Supported: ipv4 cidr overlap; check ipv4 subnet overlap; ipv4 cidr intersects. Not supported: IPv6.","operationId":"describe_ipv4_cidr_overlap","security":[],"responses":{"200":{"description":"Test whether two IPv4 CIDR blocks overlap (share at least one address)."}}}},"/v1/tools/ipv4-cidr-overlap/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Test whether two IPv4 CIDR blocks overlap (share at least one address).","description":"Supported: ipv4 cidr overlap; check ipv4 subnet overlap; ipv4 cidr intersects. Not supported: IPv6. Page: https://computefirst.net/tools/ipv4-cidr-overlap","operationId":"execute_ipv4_cidr_overlap","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cidr_a","cidr_b"],"properties":{"cidr_a":{"type":"string","maxLength":18},"cidr_b":{"type":"string","maxLength":18}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["overlap","network_a","network_b"],"properties":{"overlap":{"type":"boolean"},"network_a":{"type":"string","maxLength":18},"network_b":{"type":"string","maxLength":18}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-cidr-parse/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Parse an IPv4 CIDR block into its network, broadcast, netmask, wildcard mask, usable host range and address counts.","description":"Versioned contract (schemas, limits, examples) for ipv4-cidr-parse. Supported: ipv4 cidr parse; ipv4 subnet info; ipv4 cidr to network details. Not supported: IPv6; host-address CIDR notation (host bits must be zero); dotted netmask input.","operationId":"describe_ipv4_cidr_parse","security":[],"responses":{"200":{"description":"Parse an IPv4 CIDR block into its network, broadcast, netmask, wildcard mask, usable host range and address counts."}}}},"/v1/tools/ipv4-cidr-parse/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Parse an IPv4 CIDR block into its network, broadcast, netmask, wildcard mask, usable host range and address counts.","description":"Supported: ipv4 cidr parse; ipv4 subnet info; ipv4 cidr to network details. Not supported: IPv6; host-address CIDR notation (host bits must be zero); dotted netmask input. Page: https://computefirst.net/tools/ipv4-cidr-parse","operationId":"execute_ipv4_cidr_parse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cidr"],"properties":{"cidr":{"type":"string","maxLength":18}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["network","broadcast","netmask","wildcard_mask","prefix","first_usable_host","last_usable_host","usable_host_count","total_count"],"properties":{"network":{"type":"string","maxLength":15},"broadcast":{"type":"string","maxLength":15},"netmask":{"type":"string","maxLength":15},"wildcard_mask":{"type":"string","maxLength":15},"prefix":{"type":"integer","minimum":0,"maximum":32},"first_usable_host":{"type":"string","maxLength":15},"last_usable_host":{"type":"string","maxLength":15},"usable_host_count":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"total_count":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-cidr-subnets/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Split an IPv4 CIDR block into the full ordered list of equal-size subnets at a given longer prefix.","description":"Versioned contract (schemas, limits, examples) for ipv4-cidr-subnets. Supported: ipv4 cidr subnets; split ipv4 cidr into subnets; ipv4 subnetting. Not supported: IPv6; unequal (VLSM) splits; splitting into a target subnet count instead of a prefix.","operationId":"describe_ipv4_cidr_subnets","security":[],"responses":{"200":{"description":"Split an IPv4 CIDR block into the full ordered list of equal-size subnets at a given longer prefix."}}}},"/v1/tools/ipv4-cidr-subnets/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Split an IPv4 CIDR block into the full ordered list of equal-size subnets at a given longer prefix.","description":"Supported: ipv4 cidr subnets; split ipv4 cidr into subnets; ipv4 subnetting. Not supported: IPv6; unequal (VLSM) splits; splitting into a target subnet count instead of a prefix. Page: https://computefirst.net/tools/ipv4-cidr-subnets","operationId":"execute_ipv4_cidr_subnets","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cidr","new_prefix"],"properties":{"cidr":{"type":"string","maxLength":18},"new_prefix":{"type":"integer","minimum":0,"maximum":32}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["subnets","count"],"properties":{"subnets":{"type":"array","items":{"type":"string","maxLength":18},"maxItems":4096},"count":{"type":"integer","minimum":1,"maximum":4096}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-mask-convert/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Convert between an IPv4 prefix length, dotted subnet netmask, and dotted wildcard (host) mask.","description":"Versioned contract (schemas, limits, examples) for ipv4-mask-convert. Supported: ipv4 mask convert; prefix to netmask; netmask to prefix; wildcard mask convert; subnet mask calculator. Not supported: IPv6; non-contiguous masks.","operationId":"describe_ipv4_mask_convert","security":[],"responses":{"200":{"description":"Convert between an IPv4 prefix length, dotted subnet netmask, and dotted wildcard (host) mask."}}}},"/v1/tools/ipv4-mask-convert/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Convert between an IPv4 prefix length, dotted subnet netmask, and dotted wildcard (host) mask.","description":"Supported: ipv4 mask convert; prefix to netmask; netmask to prefix; wildcard mask convert; subnet mask calculator. Not supported: IPv6; non-contiguous masks. Page: https://computefirst.net/tools/ipv4-mask-convert","operationId":"execute_ipv4_mask_convert","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"oneOf":[{"required":["prefix"],"properties":{"prefix":{"type":"integer","minimum":0,"maximum":32}}},{"required":["netmask"],"properties":{"netmask":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"}}},{"required":["wildcard"],"properties":{"wildcard":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"}}}]}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["prefix","netmask","wildcard"],"properties":{"prefix":{"type":"integer","minimum":0,"maximum":32},"netmask":{"type":"string","maxLength":15},"wildcard":{"type":"string","maxLength":15}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-prefix-for-hosts/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Compute the smallest IPv4 CIDR block (largest prefix length) whose usable host capacity meets a required count.","description":"Versioned contract (schemas, limits, examples) for ipv4-prefix-for-hosts. Supported: ipv4 prefix for hosts; subnet size for host count; minimal ipv4 prefix for hosts. Not supported: IPv6; VLSM planning across multiple subnets.","operationId":"describe_ipv4_prefix_for_hosts","security":[],"responses":{"200":{"description":"Compute the smallest IPv4 CIDR block (largest prefix length) whose usable host capacity meets a required count."}}}},"/v1/tools/ipv4-prefix-for-hosts/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Compute the smallest IPv4 CIDR block (largest prefix length) whose usable host capacity meets a required count.","description":"Supported: ipv4 prefix for hosts; subnet size for host count; minimal ipv4 prefix for hosts. Not supported: IPv6; VLSM planning across multiple subnets. Page: https://computefirst.net/tools/ipv4-prefix-for-hosts","operationId":"execute_ipv4_prefix_for_hosts","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["usable_hosts"],"properties":{"usable_hosts":{"type":"integer","minimum":0,"maximum":4294967294}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["prefix","netmask","usable_host_count","total_count"],"properties":{"prefix":{"type":"integer","minimum":0,"maximum":32},"netmask":{"type":"string","maxLength":15},"usable_host_count":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"total_count":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv4-range-to-cidrs/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Convert an arbitrary IPv4 address range into the minimal list of CIDR blocks that exactly covers it.","description":"Versioned contract (schemas, limits, examples) for ipv4-range-to-cidrs. Supported: ipv4 range to cidr; convert ipv4 range to cidrs; summarize ipv4 address range. Not supported: IPv6; hyphenated single-string ranges.","operationId":"describe_ipv4_range_to_cidrs","security":[],"responses":{"200":{"description":"Convert an arbitrary IPv4 address range into the minimal list of CIDR blocks that exactly covers it."}}}},"/v1/tools/ipv4-range-to-cidrs/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Convert an arbitrary IPv4 address range into the minimal list of CIDR blocks that exactly covers it.","description":"Supported: ipv4 range to cidr; convert ipv4 range to cidrs; summarize ipv4 address range. Not supported: IPv6; hyphenated single-string ranges. Page: https://computefirst.net/tools/ipv4-range-to-cidrs","operationId":"execute_ipv4_range_to_cidrs","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["first_address","last_address"],"properties":{"first_address":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"},"last_address":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["cidrs","count"],"properties":{"cidrs":{"type":"array","items":{"type":"string","maxLength":18},"maxItems":64},"count":{"type":"integer","minimum":1,"maximum":64}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-address-classify/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Classify an IPv6 address against the static IANA IPv6 special-purpose address registry.","description":"Versioned contract (schemas, limits, examples) for ipv6-address-classify. Supported: ipv6 address classify; is ipv6 link local; ipv6 special purpose lookup. Not supported: IPv4; routing-table-aware or organization-specific reservations; live registry lookups.","operationId":"describe_ipv6_address_classify","security":[],"responses":{"200":{"description":"Classify an IPv6 address against the static IANA IPv6 special-purpose address registry."}}}},"/v1/tools/ipv6-address-classify/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Classify an IPv6 address against the static IANA IPv6 special-purpose address registry.","description":"Supported: ipv6 address classify; is ipv6 link local; ipv6 special purpose lookup. Not supported: IPv4; routing-table-aware or organization-specific reservations; live registry lookups. Page: https://computefirst.net/tools/ipv6-address-classify","operationId":"execute_ipv6_address_classify","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address"],"properties":{"address":{"type":"string","maxLength":45}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["classification","matched_range"],"properties":{"classification":{"type":"string","enum":["unspecified","loopback","ipv4_mapped","ipv4_ipv6_translation","documentation","unique_local","link_local","multicast","global_unicast"]},"matched_range":{"type":["string","null"],"maxLength":49}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-address-compare/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Compare two IPv6 addresses by their numeric 128-bit value.","description":"Versioned contract (schemas, limits, examples) for ipv6-address-compare. Supported: ipv6 address compare; compare ipv6 addresses; order ipv6 addresses. Not supported: IPv4; CIDR-aware comparison.","operationId":"describe_ipv6_address_compare","security":[],"responses":{"200":{"description":"Compare two IPv6 addresses by their numeric 128-bit value."}}}},"/v1/tools/ipv6-address-compare/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Compare two IPv6 addresses by their numeric 128-bit value.","description":"Supported: ipv6 address compare; compare ipv6 addresses; order ipv6 addresses. Not supported: IPv4; CIDR-aware comparison. Page: https://computefirst.net/tools/ipv6-address-compare","operationId":"execute_ipv6_address_compare","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address_a","address_b"],"properties":{"address_a":{"type":"string","maxLength":45},"address_b":{"type":"string","maxLength":45}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["order"],"properties":{"order":{"type":"string","enum":["less","equal","greater"]}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-address-distance/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Compute the signed integer distance between two IPv6 addresses (address_b minus address_a).","description":"Versioned contract (schemas, limits, examples) for ipv6-address-distance. Supported: ipv6 address distance; ipv6 address difference; how many ipv6 addresses apart. Not supported: IPv4.","operationId":"describe_ipv6_address_distance","security":[],"responses":{"200":{"description":"Compute the signed integer distance between two IPv6 addresses (address_b minus address_a)."}}}},"/v1/tools/ipv6-address-distance/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Compute the signed integer distance between two IPv6 addresses (address_b minus address_a).","description":"Supported: ipv6 address distance; ipv6 address difference; how many ipv6 addresses apart. Not supported: IPv4. Page: https://computefirst.net/tools/ipv6-address-distance","operationId":"execute_ipv6_address_distance","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address_a","address_b"],"properties":{"address_a":{"type":"string","maxLength":45},"address_b":{"type":"string","maxLength":45}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["difference"],"properties":{"difference":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":40}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-address-offset/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Add a signed integer offset to an IPv6 address, throwing if the result leaves the IPv6 address space.","description":"Versioned contract (schemas, limits, examples) for ipv6-address-offset. Supported: ipv6 address offset; add offset to ipv6 address; ipv6 address increment. Not supported: IPv4; CIDR-bounded wraparound.","operationId":"describe_ipv6_address_offset","security":[],"responses":{"200":{"description":"Add a signed integer offset to an IPv6 address, throwing if the result leaves the IPv6 address space."}}}},"/v1/tools/ipv6-address-offset/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Add a signed integer offset to an IPv6 address, throwing if the result leaves the IPv6 address space.","description":"Supported: ipv6 address offset; add offset to ipv6 address; ipv6 address increment. Not supported: IPv4; CIDR-bounded wraparound. Page: https://computefirst.net/tools/ipv6-address-offset","operationId":"execute_ipv6_address_offset","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address","offset"],"properties":{"address":{"type":"string","maxLength":45},"offset":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)$","maxLength":40}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"string","maxLength":45}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-cidr-aggregate/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Merge a list of IPv6 CIDR blocks into the minimal equivalent list of non-overlapping CIDR blocks.","description":"Versioned contract (schemas, limits, examples) for ipv6-cidr-aggregate. Supported: ipv6 cidr aggregate; summarize ipv6 cidr list; collapse ipv6 subnets; ipv6 cidr supernet merge. Not supported: IPv4; preserving input order or duplicate entries.","operationId":"describe_ipv6_cidr_aggregate","security":[],"responses":{"200":{"description":"Merge a list of IPv6 CIDR blocks into the minimal equivalent list of non-overlapping CIDR blocks."}}}},"/v1/tools/ipv6-cidr-aggregate/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Merge a list of IPv6 CIDR blocks into the minimal equivalent list of non-overlapping CIDR blocks.","description":"Supported: ipv6 cidr aggregate; summarize ipv6 cidr list; collapse ipv6 subnets; ipv6 cidr supernet merge. Not supported: IPv4; preserving input order or duplicate entries. Page: https://computefirst.net/tools/ipv6-cidr-aggregate","operationId":"execute_ipv6_cidr_aggregate","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cidrs"],"properties":{"cidrs":{"type":"array","minItems":1,"maxItems":512,"items":{"type":"string","maxLength":49}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["aggregated","count"],"properties":{"aggregated":{"type":"array","items":{"type":"string","maxLength":49},"maxItems":4096},"count":{"type":"integer","minimum":1,"maximum":4096}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-cidr-contains/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Test whether one IPv6 CIDR block fully contains another IPv6 CIDR block.","description":"Versioned contract (schemas, limits, examples) for ipv6-cidr-contains. Supported: ipv6 cidr contains; ipv6 subnet contains subnet; check ipv6 cidr containment. Not supported: IPv4; partial/overlap-only containment.","operationId":"describe_ipv6_cidr_contains","security":[],"responses":{"200":{"description":"Test whether one IPv6 CIDR block fully contains another IPv6 CIDR block."}}}},"/v1/tools/ipv6-cidr-contains/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Test whether one IPv6 CIDR block fully contains another IPv6 CIDR block.","description":"Supported: ipv6 cidr contains; ipv6 subnet contains subnet; check ipv6 cidr containment. Not supported: IPv4; partial/overlap-only containment. Page: https://computefirst.net/tools/ipv6-cidr-contains","operationId":"execute_ipv6_cidr_contains","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["outer","inner"],"properties":{"outer":{"type":"string","maxLength":49},"inner":{"type":"string","maxLength":49}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["contains","outer_network","inner_network"],"properties":{"contains":{"type":"boolean"},"outer_network":{"type":"string","maxLength":49},"inner_network":{"type":"string","maxLength":49}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-cidr-overlap/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Test whether two IPv6 CIDR blocks overlap (share at least one address).","description":"Versioned contract (schemas, limits, examples) for ipv6-cidr-overlap. Supported: ipv6 cidr overlap; check ipv6 subnet overlap; ipv6 cidr intersects. Not supported: IPv4.","operationId":"describe_ipv6_cidr_overlap","security":[],"responses":{"200":{"description":"Test whether two IPv6 CIDR blocks overlap (share at least one address)."}}}},"/v1/tools/ipv6-cidr-overlap/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Test whether two IPv6 CIDR blocks overlap (share at least one address).","description":"Supported: ipv6 cidr overlap; check ipv6 subnet overlap; ipv6 cidr intersects. Not supported: IPv4. Page: https://computefirst.net/tools/ipv6-cidr-overlap","operationId":"execute_ipv6_cidr_overlap","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cidr_a","cidr_b"],"properties":{"cidr_a":{"type":"string","maxLength":49},"cidr_b":{"type":"string","maxLength":49}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["overlap","network_a","network_b"],"properties":{"overlap":{"type":"boolean"},"network_a":{"type":"string","maxLength":49},"network_b":{"type":"string","maxLength":49}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-cidr-parse/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Parse an IPv6 CIDR block into its canonical network address, prefix, first/last address, and total address count.","description":"Versioned contract (schemas, limits, examples) for ipv6-cidr-parse. Supported: ipv6 cidr parse; ipv6 subnet info; ipv6 cidr to network details. Not supported: IPv4; host-address CIDR notation (host bits must be zero); subnet-router anycast/usable-host distinctions.","operationId":"describe_ipv6_cidr_parse","security":[],"responses":{"200":{"description":"Parse an IPv6 CIDR block into its canonical network address, prefix, first/last address, and total address count."}}}},"/v1/tools/ipv6-cidr-parse/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Parse an IPv6 CIDR block into its canonical network address, prefix, first/last address, and total address count.","description":"Supported: ipv6 cidr parse; ipv6 subnet info; ipv6 cidr to network details. Not supported: IPv4; host-address CIDR notation (host bits must be zero); subnet-router anycast/usable-host distinctions. Page: https://computefirst.net/tools/ipv6-cidr-parse","operationId":"execute_ipv6_cidr_parse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cidr"],"properties":{"cidr":{"type":"string","maxLength":49}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["network","prefix","first_address","last_address","total_count"],"properties":{"network":{"type":"string","maxLength":45},"prefix":{"type":"integer","minimum":0,"maximum":128},"first_address":{"type":"string","maxLength":45},"last_address":{"type":"string","maxLength":45},"total_count":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":39}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-cidr-subnets/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Split an IPv6 CIDR block into the full ordered list of equal-size subnets at a given longer prefix.","description":"Versioned contract (schemas, limits, examples) for ipv6-cidr-subnets. Supported: ipv6 cidr subnets; split ipv6 cidr into subnets; ipv6 subnetting. Not supported: IPv4; unequal (VLSM) splits; splitting into a target subnet count instead of a prefix.","operationId":"describe_ipv6_cidr_subnets","security":[],"responses":{"200":{"description":"Split an IPv6 CIDR block into the full ordered list of equal-size subnets at a given longer prefix."}}}},"/v1/tools/ipv6-cidr-subnets/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Split an IPv6 CIDR block into the full ordered list of equal-size subnets at a given longer prefix.","description":"Supported: ipv6 cidr subnets; split ipv6 cidr into subnets; ipv6 subnetting. Not supported: IPv4; unequal (VLSM) splits; splitting into a target subnet count instead of a prefix. Page: https://computefirst.net/tools/ipv6-cidr-subnets","operationId":"execute_ipv6_cidr_subnets","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cidr","new_prefix"],"properties":{"cidr":{"type":"string","maxLength":49},"new_prefix":{"type":"integer","minimum":0,"maximum":128}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["subnets","count"],"properties":{"subnets":{"type":"array","items":{"type":"string","maxLength":49},"maxItems":4096},"count":{"type":"integer","minimum":1,"maximum":4096}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-format/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Format 8 hextets or a 128-bit integer string as the RFC 5952 canonical compressed IPv6 address.","description":"Versioned contract (schemas, limits, examples) for ipv6-format. Supported: ipv6 format; format ipv6 canonical; hextets or integer to ipv6. Not supported: IPv4-embedded output form; zone/scope IDs.","operationId":"describe_ipv6_format","security":[],"responses":{"200":{"description":"Format 8 hextets or a 128-bit integer string as the RFC 5952 canonical compressed IPv6 address."}}}},"/v1/tools/ipv6-format/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Format 8 hextets or a 128-bit integer string as the RFC 5952 canonical compressed IPv6 address.","description":"Supported: ipv6 format; format ipv6 canonical; hextets or integer to ipv6. Not supported: IPv4-embedded output form; zone/scope IDs. Page: https://computefirst.net/tools/ipv6-format","operationId":"execute_ipv6_format","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"oneOf":[{"required":["hextets"],"properties":{"hextets":{"type":"array","minItems":8,"maxItems":8,"items":{"type":"integer","minimum":0,"maximum":65535}}}},{"required":["integer"],"properties":{"integer":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":39}}}]}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["address"],"properties":{"address":{"type":"string","maxLength":45}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-in-cidr/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Test whether an IPv6 address lies in a CIDR prefix whose host bits are zero.","description":"Versioned contract (schemas, limits, examples) for ipv6-in-cidr. Supported: ipv6 in cidr; check ipv6 cidr membership; ipv6 address in network prefix. Not supported: IPv4; zone/scope IDs.","operationId":"describe_ipv6_in_cidr","security":[],"responses":{"200":{"description":"Test whether an IPv6 address lies in a CIDR prefix whose host bits are zero."}}}},"/v1/tools/ipv6-in-cidr/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Test whether an IPv6 address lies in a CIDR prefix whose host bits are zero.","description":"Supported: ipv6 in cidr; check ipv6 cidr membership; ipv6 address in network prefix. Not supported: IPv4; zone/scope IDs. Page: https://computefirst.net/tools/ipv6-in-cidr","operationId":"execute_ipv6_in_cidr","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address","cidr"],"properties":{"address":{"type":"string","maxLength":45},"cidr":{"type":"string","maxLength":49}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["inside","network","prefix"],"properties":{"inside":{"type":"boolean"},"network":{"type":"string","maxLength":45},"prefix":{"type":"integer","minimum":0,"maximum":128}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-ipv4-mapped/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Convert between an IPv4 address and its IPv4-mapped IPv6 form (::ffff:0:0/96), in either direction.","description":"Versioned contract (schemas, limits, examples) for ipv6-ipv4-mapped. Supported: ipv6 ipv4 mapped; ipv4 to mapped ipv6; extract ipv4 from mapped ipv6. Not supported: IPv4-compatible (deprecated, ::a.b.c.d) form; NAT64 (64:ff9b::/96) embedding.","operationId":"describe_ipv6_ipv4_mapped","security":[],"responses":{"200":{"description":"Convert between an IPv4 address and its IPv4-mapped IPv6 form (::ffff:0:0/96), in either direction."}}}},"/v1/tools/ipv6-ipv4-mapped/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Convert between an IPv4 address and its IPv4-mapped IPv6 form (::ffff:0:0/96), in either direction.","description":"Supported: ipv6 ipv4 mapped; ipv4 to mapped ipv6; extract ipv4 from mapped ipv6. Not supported: IPv4-compatible (deprecated, ::a.b.c.d) form; NAT64 (64:ff9b::/96) embedding. Page: https://computefirst.net/tools/ipv6-ipv4-mapped","operationId":"execute_ipv6_ipv4_mapped","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"oneOf":[{"required":["ipv4"],"properties":{"ipv4":{"type":"string","maxLength":15,"pattern":"^(?:0|[1-9][0-9]{0,2})(?:\\.(?:0|[1-9][0-9]{0,2})){3}$"}}},{"required":["address"],"properties":{"address":{"type":"string","maxLength":45}}}]}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"oneOf":[{"required":["address"],"properties":{"address":{"type":"string","maxLength":45}}},{"required":["ipv4"],"properties":{"ipv4":{"type":"string","maxLength":15}}}]},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-normalize/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Normalize any valid textual IPv6 address directly into its RFC 5952 canonical compressed string.","description":"Versioned contract (schemas, limits, examples) for ipv6-normalize. Supported: ipv6 normalize; canonicalize ipv6 address; ipv6 compress. Not supported: zone/scope IDs; preserving an IPv4-embedded tail in the output (it is rendered in hex).","operationId":"describe_ipv6_normalize","security":[],"responses":{"200":{"description":"Normalize any valid textual IPv6 address directly into its RFC 5952 canonical compressed string."}}}},"/v1/tools/ipv6-normalize/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Normalize any valid textual IPv6 address directly into its RFC 5952 canonical compressed string.","description":"Supported: ipv6 normalize; canonicalize ipv6 address; ipv6 compress. Not supported: zone/scope IDs; preserving an IPv4-embedded tail in the output (it is rendered in hex). Page: https://computefirst.net/tools/ipv6-normalize","operationId":"execute_ipv6_normalize","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address"],"properties":{"address":{"type":"string","maxLength":45}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["address"],"properties":{"address":{"type":"string","maxLength":45}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-parse/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Parse an IPv6 address (any RFC 4291 textual form) into its 8 hextets and a 128-bit integer string.","description":"Versioned contract (schemas, limits, examples) for ipv6-parse. Supported: ipv6 parse; parse ipv6 address; ipv6 to hextets and integer. Not supported: CIDR prefixes; zone/scope IDs (e.g. %eth0); hostnames.","operationId":"describe_ipv6_parse","security":[],"responses":{"200":{"description":"Parse an IPv6 address (any RFC 4291 textual form) into its 8 hextets and a 128-bit integer string."}}}},"/v1/tools/ipv6-parse/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Parse an IPv6 address (any RFC 4291 textual form) into its 8 hextets and a 128-bit integer string.","description":"Supported: ipv6 parse; parse ipv6 address; ipv6 to hextets and integer. Not supported: CIDR prefixes; zone/scope IDs (e.g. %eth0); hostnames. Page: https://computefirst.net/tools/ipv6-parse","operationId":"execute_ipv6_parse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["address"],"properties":{"address":{"type":"string","maxLength":45}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["hextets","integer"],"properties":{"hextets":{"type":"array","minItems":8,"maxItems":8,"items":{"type":"integer","minimum":0,"maximum":65535}},"integer":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":39}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ipv6-range-to-cidrs/versions/1.0.0":{"get":{"tags":["URLs & IP addresses"],"summary":"Contract: Convert an arbitrary IPv6 address range into the minimal list of CIDR blocks that exactly covers it.","description":"Versioned contract (schemas, limits, examples) for ipv6-range-to-cidrs. Supported: ipv6 range to cidr; convert ipv6 range to cidrs; summarize ipv6 address range. Not supported: IPv4; hyphenated single-string ranges.","operationId":"describe_ipv6_range_to_cidrs","security":[],"responses":{"200":{"description":"Convert an arbitrary IPv6 address range into the minimal list of CIDR blocks that exactly covers it."}}}},"/v1/tools/ipv6-range-to-cidrs/versions/1.0.0/execute":{"post":{"tags":["URLs & IP addresses"],"summary":"Convert an arbitrary IPv6 address range into the minimal list of CIDR blocks that exactly covers it.","description":"Supported: ipv6 range to cidr; convert ipv6 range to cidrs; summarize ipv6 address range. Not supported: IPv4; hyphenated single-string ranges. Page: https://computefirst.net/tools/ipv6-range-to-cidrs","operationId":"execute_ipv6_range_to_cidrs","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["first_address","last_address"],"properties":{"first_address":{"type":"string","maxLength":45},"last_address":{"type":"string","maxLength":45}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["cidrs","count"],"properties":{"cidrs":{"type":"array","items":{"type":"string","maxLength":49},"maxItems":256},"count":{"type":"integer","minimum":1,"maximum":256}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-add/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Add two equal-shape finite-number matrices elementwise.","description":"Versioned contract (schemas, limits, examples) for matrix-add. Supported: matrix addition; elementwise matrix sum. Not supported: matrices of different shapes; sparse matrix representation; arbitrary-precision arithmetic.","operationId":"describe_matrix_add","security":[],"responses":{"200":{"description":"Add two equal-shape finite-number matrices elementwise."}}}},"/v1/tools/matrix-add/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Add two equal-shape finite-number matrices elementwise.","description":"Supported: matrix addition; elementwise matrix sum. Not supported: matrices of different shapes; sparse matrix representation; arbitrary-precision arithmetic. Page: https://computefirst.net/tools/matrix-add","operationId":"execute_matrix_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}},"b":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-determinant/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the determinant of a small square finite-number matrix.","description":"Versioned contract (schemas, limits, examples) for matrix-determinant. Supported: matrix determinant; det of a square matrix. Not supported: non-square matrices; matrices larger than 12x12; symbolic/exact-rational determinant.","operationId":"describe_matrix_determinant","security":[],"responses":{"200":{"description":"Compute the determinant of a small square finite-number matrix."}}}},"/v1/tools/matrix-determinant/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the determinant of a small square finite-number matrix.","description":"Supported: matrix determinant; det of a square matrix. Not supported: non-square matrices; matrices larger than 12x12; symbolic/exact-rational determinant. Page: https://computefirst.net/tools/matrix-determinant","operationId":"execute_matrix_determinant","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matrix"],"properties":{"matrix":{"type":"array","minItems":1,"maxItems":12,"items":{"type":"array","items":{"type":"number"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"number"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-hadamard/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Multiply two equal-shape finite-number matrices elementwise (Hadamard product).","description":"Versioned contract (schemas, limits, examples) for matrix-hadamard. Supported: matrix hadamard product; elementwise matrix multiplication; pointwise matrix product. Not supported: matrices of different shapes; standard matrix multiplication (use matrix-multiply); arbitrary-precision arithmetic.","operationId":"describe_matrix_hadamard","security":[],"responses":{"200":{"description":"Multiply two equal-shape finite-number matrices elementwise (Hadamard product)."}}}},"/v1/tools/matrix-hadamard/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Multiply two equal-shape finite-number matrices elementwise (Hadamard product).","description":"Supported: matrix hadamard product; elementwise matrix multiplication; pointwise matrix product. Not supported: matrices of different shapes; standard matrix multiplication (use matrix-multiply); arbitrary-precision arithmetic. Page: https://computefirst.net/tools/matrix-hadamard","operationId":"execute_matrix_hadamard","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}},"b":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-identity/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Construct the NxN identity matrix for a given size.","description":"Versioned contract (schemas, limits, examples) for matrix-identity. Supported: identity matrix; construct an identity matrix. Not supported: non-square diagonal matrices with custom diagonal values; matrices larger than 20x20.","operationId":"describe_matrix_identity","security":[],"responses":{"200":{"description":"Construct the NxN identity matrix for a given size."}}}},"/v1/tools/matrix-identity/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Construct the NxN identity matrix for a given size.","description":"Supported: identity matrix; construct an identity matrix. Not supported: non-square diagonal matrices with custom diagonal values; matrices larger than 20x20. Page: https://computefirst.net/tools/matrix-identity","operationId":"execute_matrix_identity","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["size"],"properties":{"size":{"type":"integer","minimum":1,"maximum":20}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-inverse/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the inverse of a small square finite-number matrix.","description":"Versioned contract (schemas, limits, examples) for matrix-inverse. Supported: matrix inverse; invert a square matrix. Not supported: non-square matrices; matrices larger than 12x12; pseudo-inverse of a singular or non-square matrix.","operationId":"describe_matrix_inverse","security":[],"responses":{"200":{"description":"Compute the inverse of a small square finite-number matrix."}}}},"/v1/tools/matrix-inverse/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the inverse of a small square finite-number matrix.","description":"Supported: matrix inverse; invert a square matrix. Not supported: non-square matrices; matrices larger than 12x12; pseudo-inverse of a singular or non-square matrix. Page: https://computefirst.net/tools/matrix-inverse","operationId":"execute_matrix_inverse","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matrix"],"properties":{"matrix":{"type":"array","minItems":1,"maxItems":12,"items":{"type":"array","items":{"type":"number"}}},"tolerance":{"type":"number","minimum":0,"maximum":1}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-multiply/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Multiply an MxK finite-number matrix by a KxN finite-number matrix, producing an MxN matrix.","description":"Versioned contract (schemas, limits, examples) for matrix-multiply. Supported: matrix multiplication; matrix product; multiply two matrices. Not supported: elementwise multiplication (use matrix-hadamard); incompatible inner dimensions; sparse matrix representation.","operationId":"describe_matrix_multiply","security":[],"responses":{"200":{"description":"Multiply an MxK finite-number matrix by a KxN finite-number matrix, producing an MxN matrix."}}}},"/v1/tools/matrix-multiply/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Multiply an MxK finite-number matrix by a KxN finite-number matrix, producing an MxN matrix.","description":"Supported: matrix multiplication; matrix product; multiply two matrices. Not supported: elementwise multiplication (use matrix-hadamard); incompatible inner dimensions; sparse matrix representation. Page: https://computefirst.net/tools/matrix-multiply","operationId":"execute_matrix_multiply","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}},"b":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-rank/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the numerical rank of a finite-number matrix (square or rectangular).","description":"Versioned contract (schemas, limits, examples) for matrix-rank. Supported: matrix rank; row rank; numerical rank. Not supported: exact symbolic rank over the rationals; nullspace basis computation.","operationId":"describe_matrix_rank","security":[],"responses":{"200":{"description":"Compute the numerical rank of a finite-number matrix (square or rectangular)."}}}},"/v1/tools/matrix-rank/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the numerical rank of a finite-number matrix (square or rectangular).","description":"Supported: matrix rank; row rank; numerical rank. Not supported: exact symbolic rank over the rationals; nullspace basis computation. Page: https://computefirst.net/tools/matrix-rank","operationId":"execute_matrix_rank","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matrix"],"properties":{"matrix":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}},"tolerance":{"type":"number","minimum":0,"maximum":1}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"integer"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-scale/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Multiply every entry of a finite-number matrix by a scalar.","description":"Versioned contract (schemas, limits, examples) for matrix-scale. Supported: matrix scalar multiplication; scale a matrix. Not supported: complex-valued scalars; arbitrary-precision arithmetic.","operationId":"describe_matrix_scale","security":[],"responses":{"200":{"description":"Multiply every entry of a finite-number matrix by a scalar."}}}},"/v1/tools/matrix-scale/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Multiply every entry of a finite-number matrix by a scalar.","description":"Supported: matrix scalar multiplication; scale a matrix. Not supported: complex-valued scalars; arbitrary-precision arithmetic. Page: https://computefirst.net/tools/matrix-scale","operationId":"execute_matrix_scale","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matrix","scalar"],"properties":{"matrix":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}},"scalar":{"type":"number"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-solve-linear/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Solve the small square linear system A x = b for x using Gaussian elimination.","description":"Versioned contract (schemas, limits, examples) for matrix-solve-linear. Supported: solve linear system; solve Ax=b; linear equation solver. Not supported: non-square or rank-deficient (singular) systems; systems larger than 12x12; least-squares solutions for overdetermined systems.","operationId":"describe_matrix_solve_linear","security":[],"responses":{"200":{"description":"Solve the small square linear system A x = b for x using Gaussian elimination."}}}},"/v1/tools/matrix-solve-linear/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Solve the small square linear system A x = b for x using Gaussian elimination.","description":"Supported: solve linear system; solve Ax=b; linear equation solver. Not supported: non-square or rank-deficient (singular) systems; systems larger than 12x12; least-squares solutions for overdetermined systems. Page: https://computefirst.net/tools/matrix-solve-linear","operationId":"execute_matrix_solve_linear","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":12,"items":{"type":"array","items":{"type":"number"}}},"b":{"type":"array","minItems":1,"maxItems":12,"items":{"type":"number"}},"tolerance":{"type":"number","minimum":0,"maximum":1}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"number"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-subtract/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Subtract two equal-shape finite-number matrices elementwise (a minus b).","description":"Versioned contract (schemas, limits, examples) for matrix-subtract. Supported: matrix subtraction; elementwise matrix difference. Not supported: matrices of different shapes; sparse matrix representation; arbitrary-precision arithmetic.","operationId":"describe_matrix_subtract","security":[],"responses":{"200":{"description":"Subtract two equal-shape finite-number matrices elementwise (a minus b)."}}}},"/v1/tools/matrix-subtract/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Subtract two equal-shape finite-number matrices elementwise (a minus b).","description":"Supported: matrix subtraction; elementwise matrix difference. Not supported: matrices of different shapes; sparse matrix representation; arbitrary-precision arithmetic. Page: https://computefirst.net/tools/matrix-subtract","operationId":"execute_matrix_subtract","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}},"b":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-trace/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the trace (sum of diagonal entries) of a square finite-number matrix.","description":"Versioned contract (schemas, limits, examples) for matrix-trace. Supported: matrix trace; sum of diagonal entries. Not supported: non-square matrices; generalized trace over a sub-diagonal.","operationId":"describe_matrix_trace","security":[],"responses":{"200":{"description":"Compute the trace (sum of diagonal entries) of a square finite-number matrix."}}}},"/v1/tools/matrix-trace/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the trace (sum of diagonal entries) of a square finite-number matrix.","description":"Supported: matrix trace; sum of diagonal entries. Not supported: non-square matrices; generalized trace over a sub-diagonal. Page: https://computefirst.net/tools/matrix-trace","operationId":"execute_matrix_trace","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matrix"],"properties":{"matrix":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"number"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-transpose/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Transpose an MxN finite-number matrix into an NxM matrix.","description":"Versioned contract (schemas, limits, examples) for matrix-transpose. Supported: matrix transpose; flip rows and columns. Not supported: conjugate transpose for complex numbers; sparse matrix representation.","operationId":"describe_matrix_transpose","security":[],"responses":{"200":{"description":"Transpose an MxN finite-number matrix into an NxM matrix."}}}},"/v1/tools/matrix-transpose/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Transpose an MxN finite-number matrix into an NxM matrix.","description":"Supported: matrix transpose; flip rows and columns. Not supported: conjugate transpose for complex numbers; sparse matrix representation. Page: https://computefirst.net/tools/matrix-transpose","operationId":"execute_matrix_transpose","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matrix"],"properties":{"matrix":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/matrix-vector-multiply/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Multiply an MxN finite-number matrix by a length-N finite-number vector, producing a length-M vector.","description":"Versioned contract (schemas, limits, examples) for matrix-vector-multiply. Supported: matrix-vector multiplication; apply a matrix to a vector; linear transformation. Not supported: vector-matrix multiplication on the left (transpose the matrix first); mismatched dimensions.","operationId":"describe_matrix_vector_multiply","security":[],"responses":{"200":{"description":"Multiply an MxN finite-number matrix by a length-N finite-number vector, producing a length-M vector."}}}},"/v1/tools/matrix-vector-multiply/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Multiply an MxN finite-number matrix by a length-N finite-number vector, producing a length-M vector.","description":"Supported: matrix-vector multiplication; apply a matrix to a vector; linear transformation. Not supported: vector-matrix multiplication on the left (transpose the matrix first); mismatched dimensions. Page: https://computefirst.net/tools/matrix-vector-multiply","operationId":"execute_matrix_vector_multiply","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["matrix","vector"],"properties":{"matrix":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"array","items":{"type":"number"}}},"vector":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"number"}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"number"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-add/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Add two equal-length finite-number vectors elementwise.","description":"Versioned contract (schemas, limits, examples) for vector-add. Supported: vector addition; elementwise vector sum; add two vectors. Not supported: vectors of different lengths; complex-valued vectors; arbitrary-precision arithmetic; sparse vector representation.","operationId":"describe_vector_add","security":[],"responses":{"200":{"description":"Add two equal-length finite-number vectors elementwise."}}}},"/v1/tools/vector-add/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Add two equal-length finite-number vectors elementwise.","description":"Supported: vector addition; elementwise vector sum; add two vectors. Not supported: vectors of different lengths; complex-valued vectors; arbitrary-precision arithmetic; sparse vector representation. Page: https://computefirst.net/tools/vector-add","operationId":"execute_vector_add","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"b":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"number"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-angle/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the angle in radians between two equal-length finite-number vectors.","description":"Versioned contract (schemas, limits, examples) for vector-angle. Supported: angle between vectors; vector angle radians. Not supported: angle in degrees (convert the radian result separately); angle for a zero-magnitude vector.","operationId":"describe_vector_angle","security":[],"responses":{"200":{"description":"Compute the angle in radians between two equal-length finite-number vectors."}}}},"/v1/tools/vector-angle/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the angle in radians between two equal-length finite-number vectors.","description":"Supported: angle between vectors; vector angle radians. Not supported: angle in degrees (convert the radian result separately); angle for a zero-magnitude vector. Page: https://computefirst.net/tools/vector-angle","operationId":"execute_vector_angle","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"b":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"number"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-approx-equal/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compare two equal-length finite-number vectors for approximate equality within an absolute tolerance.","description":"Versioned contract (schemas, limits, examples) for vector-approx-equal. Supported: vector approximate equality; compare vectors within tolerance; floating-point vector equality. Not supported: vectors of different lengths; relative (percentage) tolerance; exact bitwise equality.","operationId":"describe_vector_approx_equal","security":[],"responses":{"200":{"description":"Compare two equal-length finite-number vectors for approximate equality within an absolute tolerance."}}}},"/v1/tools/vector-approx-equal/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compare two equal-length finite-number vectors for approximate equality within an absolute tolerance.","description":"Supported: vector approximate equality; compare vectors within tolerance; floating-point vector equality. Not supported: vectors of different lengths; relative (percentage) tolerance; exact bitwise equality. Page: https://computefirst.net/tools/vector-approx-equal","operationId":"execute_vector_approx_equal","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"b":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"tolerance":{"type":"number","minimum":0,"maximum":1}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["equal","max_absolute_difference"],"properties":{"equal":{"type":"boolean"},"max_absolute_difference":{"type":"number"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-cross/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the 3-dimensional cross product of two finite-number vectors.","description":"Versioned contract (schemas, limits, examples) for vector-cross. Supported: vector cross product; 3d cross product; vector product. Not supported: vectors of dimension other than 3; 7-dimensional cross product; arbitrary-precision arithmetic.","operationId":"describe_vector_cross","security":[],"responses":{"200":{"description":"Compute the 3-dimensional cross product of two finite-number vectors."}}}},"/v1/tools/vector-cross/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the 3-dimensional cross product of two finite-number vectors.","description":"Supported: vector cross product; 3d cross product; vector product. Not supported: vectors of dimension other than 3; 7-dimensional cross product; arbitrary-precision arithmetic. Page: https://computefirst.net/tools/vector-cross","operationId":"execute_vector_cross","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":3,"maxItems":3,"items":{"type":"number"}},"b":{"type":"array","minItems":3,"maxItems":3,"items":{"type":"number"}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","minItems":3,"maxItems":3,"items":{"type":"number"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-distance/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the Euclidean, Manhattan, or Chebyshev distance between two equal-length finite-number vectors.","description":"Versioned contract (schemas, limits, examples) for vector-distance. Supported: vector distance; euclidean distance; manhattan distance; chebyshev distance. Not supported: vectors of different lengths; Minkowski distance with arbitrary p; geographic/geodesic distance.","operationId":"describe_vector_distance","security":[],"responses":{"200":{"description":"Compute the Euclidean, Manhattan, or Chebyshev distance between two equal-length finite-number vectors."}}}},"/v1/tools/vector-distance/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the Euclidean, Manhattan, or Chebyshev distance between two equal-length finite-number vectors.","description":"Supported: vector distance; euclidean distance; manhattan distance; chebyshev distance. Not supported: vectors of different lengths; Minkowski distance with arbitrary p; geographic/geodesic distance. Page: https://computefirst.net/tools/vector-distance","operationId":"execute_vector_distance","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"b":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"metric":{"type":"string","enum":["euclidean","manhattan","chebyshev"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"number"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-dot/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the dot (scalar) product of two equal-length finite-number vectors.","description":"Versioned contract (schemas, limits, examples) for vector-dot. Supported: vector dot product; scalar product of two vectors; inner product. Not supported: vectors of different lengths; complex-valued inner product; arbitrary-precision arithmetic.","operationId":"describe_vector_dot","security":[],"responses":{"200":{"description":"Compute the dot (scalar) product of two equal-length finite-number vectors."}}}},"/v1/tools/vector-dot/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the dot (scalar) product of two equal-length finite-number vectors.","description":"Supported: vector dot product; scalar product of two vectors; inner product. Not supported: vectors of different lengths; complex-valued inner product; arbitrary-precision arithmetic. Page: https://computefirst.net/tools/vector-dot","operationId":"execute_vector_dot","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"b":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"number"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-hadamard/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Multiply two equal-length finite-number vectors elementwise (Hadamard product).","description":"Versioned contract (schemas, limits, examples) for vector-hadamard. Supported: vector hadamard product; elementwise vector multiplication; pointwise vector product. Not supported: vectors of different lengths; dot product (use vector-dot); arbitrary-precision arithmetic.","operationId":"describe_vector_hadamard","security":[],"responses":{"200":{"description":"Multiply two equal-length finite-number vectors elementwise (Hadamard product)."}}}},"/v1/tools/vector-hadamard/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Multiply two equal-length finite-number vectors elementwise (Hadamard product).","description":"Supported: vector hadamard product; elementwise vector multiplication; pointwise vector product. Not supported: vectors of different lengths; dot product (use vector-dot); arbitrary-precision arithmetic. Page: https://computefirst.net/tools/vector-hadamard","operationId":"execute_vector_hadamard","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"b":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"number"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-lerp/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Linearly interpolate (or extrapolate) between two equal-length finite-number vectors.","description":"Versioned contract (schemas, limits, examples) for vector-lerp. Supported: vector linear interpolation; lerp between two vectors; vector extrapolation. Not supported: vectors of different lengths; spherical (slerp) interpolation; non-linear interpolation curves.","operationId":"describe_vector_lerp","security":[],"responses":{"200":{"description":"Linearly interpolate (or extrapolate) between two equal-length finite-number vectors."}}}},"/v1/tools/vector-lerp/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Linearly interpolate (or extrapolate) between two equal-length finite-number vectors.","description":"Supported: vector linear interpolation; lerp between two vectors; vector extrapolation. Not supported: vectors of different lengths; spherical (slerp) interpolation; non-linear interpolation curves. Page: https://computefirst.net/tools/vector-lerp","operationId":"execute_vector_lerp","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b","t"],"properties":{"a":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"b":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"t":{"type":"number"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"number"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-norm/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the L1, L2 (Euclidean), or L-infinity (Chebyshev) norm of a finite-number vector.","description":"Versioned contract (schemas, limits, examples) for vector-norm. Supported: vector norm; vector magnitude; euclidean length; L1 norm; L2 norm; infinity norm. Not supported: general p-norms for non-integer or fractional p; matrix norms (use matrix-frobenius-norm-style tools).","operationId":"describe_vector_norm","security":[],"responses":{"200":{"description":"Compute the L1, L2 (Euclidean), or L-infinity (Chebyshev) norm of a finite-number vector."}}}},"/v1/tools/vector-norm/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the L1, L2 (Euclidean), or L-infinity (Chebyshev) norm of a finite-number vector.","description":"Supported: vector norm; vector magnitude; euclidean length; L1 norm; L2 norm; infinity norm. Not supported: general p-norms for non-integer or fractional p; matrix norms (use matrix-frobenius-norm-style tools). Page: https://computefirst.net/tools/vector-norm","operationId":"execute_vector_norm","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["vector"],"properties":{"vector":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"p":{"anyOf":[{"type":"integer","enum":[1,2]},{"type":"string","enum":["inf"]}]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"number"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-normalize/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Scale a finite-number vector to unit Euclidean length.","description":"Versioned contract (schemas, limits, examples) for vector-normalize. Supported: vector normalization; unit vector; make vector unit length. Not supported: normalizing the zero vector (undefined direction); normalization by a norm other than L2.","operationId":"describe_vector_normalize","security":[],"responses":{"200":{"description":"Scale a finite-number vector to unit Euclidean length."}}}},"/v1/tools/vector-normalize/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Scale a finite-number vector to unit Euclidean length.","description":"Supported: vector normalization; unit vector; make vector unit length. Not supported: normalizing the zero vector (undefined direction); normalization by a norm other than L2. Page: https://computefirst.net/tools/vector-normalize","operationId":"execute_vector_normalize","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["vector"],"properties":{"vector":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"tolerance":{"type":"number","minimum":0,"maximum":1}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"number"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-outer-product/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the outer product of two finite-number vectors, producing a matrix.","description":"Versioned contract (schemas, limits, examples) for vector-outer-product. Supported: vector outer product; tensor product of two vectors; rank-1 matrix from two vectors. Not supported: inner/dot product (use vector-dot); outer product of more than two vectors.","operationId":"describe_vector_outer_product","security":[],"responses":{"200":{"description":"Compute the outer product of two finite-number vectors, producing a matrix."}}}},"/v1/tools/vector-outer-product/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the outer product of two finite-number vectors, producing a matrix.","description":"Supported: vector outer product; tensor product of two vectors; rank-1 matrix from two vectors. Not supported: inner/dot product (use vector-dot); outer product of more than two vectors. Page: https://computefirst.net/tools/vector-outer-product","operationId":"execute_vector_outer_product","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"b":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-projection/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Compute the vector projection of a finite-number vector onto another.","description":"Versioned contract (schemas, limits, examples) for vector-projection. Supported: vector projection; project a vector onto another vector. Not supported: scalar projection only (this returns the full vector projection); projecting onto a zero vector.","operationId":"describe_vector_projection","security":[],"responses":{"200":{"description":"Compute the vector projection of a finite-number vector onto another."}}}},"/v1/tools/vector-projection/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Compute the vector projection of a finite-number vector onto another.","description":"Supported: vector projection; project a vector onto another vector. Not supported: scalar projection only (this returns the full vector projection); projecting onto a zero vector. Page: https://computefirst.net/tools/vector-projection","operationId":"execute_vector_projection","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","onto"],"properties":{"a":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"onto":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"tolerance":{"type":"number","minimum":0,"maximum":1}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"number"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-scale/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Multiply every entry of a finite-number vector by a scalar.","description":"Versioned contract (schemas, limits, examples) for vector-scale. Supported: vector scalar multiplication; scale a vector; multiply vector by number. Not supported: complex-valued scalars; arbitrary-precision arithmetic.","operationId":"describe_vector_scale","security":[],"responses":{"200":{"description":"Multiply every entry of a finite-number vector by a scalar."}}}},"/v1/tools/vector-scale/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Multiply every entry of a finite-number vector by a scalar.","description":"Supported: vector scalar multiplication; scale a vector; multiply vector by number. Not supported: complex-valued scalars; arbitrary-precision arithmetic. Page: https://computefirst.net/tools/vector-scale","operationId":"execute_vector_scale","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["vector","scalar"],"properties":{"vector":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"scalar":{"type":"number"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"number"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/vector-subtract/versions/1.0.0":{"get":{"tags":["Vectors & matrices"],"summary":"Contract: Subtract two equal-length finite-number vectors elementwise (a minus b).","description":"Versioned contract (schemas, limits, examples) for vector-subtract. Supported: vector subtraction; elementwise vector difference; a minus b. Not supported: vectors of different lengths; complex-valued vectors; arbitrary-precision arithmetic.","operationId":"describe_vector_subtract","security":[],"responses":{"200":{"description":"Subtract two equal-length finite-number vectors elementwise (a minus b)."}}}},"/v1/tools/vector-subtract/versions/1.0.0/execute":{"post":{"tags":["Vectors & matrices"],"summary":"Subtract two equal-length finite-number vectors elementwise (a minus b).","description":"Supported: vector subtraction; elementwise vector difference; a minus b. Not supported: vectors of different lengths; complex-valued vectors; arbitrary-precision arithmetic. Page: https://computefirst.net/tools/vector-subtract","operationId":"execute_vector_subtract","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["a","b"],"properties":{"a":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}},"b":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"number"}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","items":{"type":"number"}}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/ini-to-json/versions/1.0.0":{"get":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Contract: Convert an INI string to a JSON object.","description":"Versioned contract (schemas, limits, examples) for ini-to-json. Supported: ini to json; parse ini; convert ini to json. Not supported: json to ini; read files; fetch urls.","operationId":"describe_ini_to_json","security":[],"responses":{"200":{"description":"Convert an INI string to a JSON object."}}}},"/v1/tools/ini-to-json/versions/1.0.0/execute":{"post":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Convert an INI string to a JSON object.","description":"Supported: ini to json; parse ini; convert ini to json. Not supported: json to ini; read files; fetch urls. Page: https://computefirst.net/tools/ini-to-json","operationId":"execute_ini_to_json","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["ini"],"properties":{"ini":{"type":"string","maxLength":262144}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object"},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-to-ini/versions/1.0.0":{"get":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Contract: Convert JSON data to an INI string.","description":"Versioned contract (schemas, limits, examples) for json-to-ini. Supported: json to ini; stringify ini; convert json to ini. Not supported: ini to json; read files; write files.","operationId":"describe_json_to_ini","security":[],"responses":{"200":{"description":"Convert JSON data to an INI string."}}}},"/v1/tools/json-to-ini/versions/1.0.0/execute":{"post":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Convert JSON data to an INI string.","description":"Supported: json to ini; stringify ini; convert json to ini. Not supported: ini to json; read files; write files. Page: https://computefirst.net/tools/json-to-ini","operationId":"execute_json_to_ini","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"object"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["ini"],"properties":{"ini":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-to-toml/versions/1.0.0":{"get":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Contract: Convert JSON data to a TOML string.","description":"Versioned contract (schemas, limits, examples) for json-to-toml. Supported: json to toml; stringify toml; convert json to toml. Not supported: toml to json; read files; write files.","operationId":"describe_json_to_toml","security":[],"responses":{"200":{"description":"Convert JSON data to a TOML string."}}}},"/v1/tools/json-to-toml/versions/1.0.0/execute":{"post":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Convert JSON data to a TOML string.","description":"Supported: json to toml; stringify toml; convert json to toml. Not supported: toml to json; read files; write files. Page: https://computefirst.net/tools/json-to-toml","operationId":"execute_json_to_toml","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"object"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["toml"],"properties":{"toml":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-to-tsv/versions/1.0.0":{"get":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Contract: Convert a JSON array of objects to a TSV string.","description":"Versioned contract (schemas, limits, examples) for json-to-tsv. Supported: json to tsv; stringify tsv; convert json to tsv. Not supported: tsv to json; read files; write files.","operationId":"describe_json_to_tsv","security":[],"responses":{"200":{"description":"Convert a JSON array of objects to a TSV string."}}}},"/v1/tools/json-to-tsv/versions/1.0.0/execute":{"post":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Convert a JSON array of objects to a TSV string.","description":"Supported: json to tsv; stringify tsv; convert json to tsv. Not supported: tsv to json; read files; write files. Page: https://computefirst.net/tools/json-to-tsv","operationId":"execute_json_to_tsv","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"array","maxItems":5000,"items":{"type":"object"}}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["tsv"],"properties":{"tsv":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-to-xml/versions/1.0.0":{"get":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Contract: Convert JSON data to an XML string.","description":"Versioned contract (schemas, limits, examples) for json-to-xml. Supported: json to xml; stringify xml; convert json to xml. Not supported: xml to json; read files; write files.","operationId":"describe_json_to_xml","security":[],"responses":{"200":{"description":"Convert JSON data to an XML string."}}}},"/v1/tools/json-to-xml/versions/1.0.0/execute":{"post":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Convert JSON data to an XML string.","description":"Supported: json to xml; stringify xml; convert json to xml. Not supported: xml to json; read files; write files. Page: https://computefirst.net/tools/json-to-xml","operationId":"execute_json_to_xml","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"object"}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["xml"],"properties":{"xml":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/json-to-yaml/versions/1.0.0":{"get":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Contract: Convert JSON data to a YAML string.","description":"Versioned contract (schemas, limits, examples) for json-to-yaml. Supported: json to yaml; stringify yaml; convert json to yaml. Not supported: yaml to json; read files; write files.","operationId":"describe_json_to_yaml","security":[],"responses":{"200":{"description":"Convert JSON data to a YAML string."}}}},"/v1/tools/json-to-yaml/versions/1.0.0/execute":{"post":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Convert JSON data to a YAML string.","description":"Supported: json to yaml; stringify yaml; convert json to yaml. Not supported: yaml to json; read files; write files. Page: https://computefirst.net/tools/json-to-yaml","operationId":"execute_json_to_yaml","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":["object","array","string","number","boolean","null"]}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object","additionalProperties":false,"required":["yaml"],"properties":{"yaml":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/toml-to-json/versions/1.0.0":{"get":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Contract: Convert a TOML string to a JSON object.","description":"Versioned contract (schemas, limits, examples) for toml-to-json. Supported: toml to json; parse toml; convert toml to json. Not supported: json to toml; read files; fetch urls.","operationId":"describe_toml_to_json","security":[],"responses":{"200":{"description":"Convert a TOML string to a JSON object."}}}},"/v1/tools/toml-to-json/versions/1.0.0/execute":{"post":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Convert a TOML string to a JSON object.","description":"Supported: toml to json; parse toml; convert toml to json. Not supported: json to toml; read files; fetch urls. Page: https://computefirst.net/tools/toml-to-json","operationId":"execute_toml_to_json","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["toml"],"properties":{"toml":{"type":"string","maxLength":262144}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object"},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/tsv-to-json/versions/1.0.0":{"get":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Contract: Convert a complete TSV document into an array of string-valued objects.","description":"Versioned contract (schemas, limits, examples) for tsv-to-json. Supported: tsv to json; convert tsv to json; parse tsv rows. Not supported: infer types; stream rows; read files; fetch urls; json to tsv.","operationId":"describe_tsv_to_json","security":[],"responses":{"200":{"description":"Convert a complete TSV document into an array of string-valued objects."}}}},"/v1/tools/tsv-to-json/versions/1.0.0/execute":{"post":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Convert a complete TSV document into an array of string-valued objects.","description":"Supported: tsv to json; convert tsv to json; parse tsv rows. Not supported: infer types; stream rows; read files; fetch urls; json to tsv. Page: https://computefirst.net/tools/tsv-to-json","operationId":"execute_tsv_to_json","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["tsv"],"properties":{"tsv":{"type":"string","maxLength":256000}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"array","maxItems":5000,"items":{"type":"object","additionalProperties":{"type":"string"}}},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/xml-to-json/versions/1.0.0":{"get":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Contract: Convert an XML string to a JSON object.","description":"Versioned contract (schemas, limits, examples) for xml-to-json. Supported: xml to json; parse xml; convert xml to json. Not supported: json to xml; read files; fetch urls; execute xml external entities (XXE).","operationId":"describe_xml_to_json","security":[],"responses":{"200":{"description":"Convert an XML string to a JSON object."}}}},"/v1/tools/xml-to-json/versions/1.0.0/execute":{"post":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Convert an XML string to a JSON object.","description":"Supported: xml to json; parse xml; convert xml to json. Not supported: json to xml; read files; fetch urls; execute xml external entities (XXE). Page: https://computefirst.net/tools/xml-to-json","operationId":"execute_xml_to_json","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["xml"],"properties":{"xml":{"type":"string","maxLength":262144}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":"object"},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}},"/v1/tools/yaml-to-json/versions/1.0.0":{"get":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Contract: Convert a YAML string to a JSON object or array.","description":"Versioned contract (schemas, limits, examples) for yaml-to-json. Supported: yaml to json; parse yaml; convert yaml to json. Not supported: json to yaml; read files; fetch urls; execute yaml code.","operationId":"describe_yaml_to_json","security":[],"responses":{"200":{"description":"Convert a YAML string to a JSON object or array."}}}},"/v1/tools/yaml-to-json/versions/1.0.0/execute":{"post":{"tags":["YAML, TOML, INI, XML & TSV"],"summary":"Convert a YAML string to a JSON object or array.","description":"Supported: yaml to json; parse yaml; convert yaml to json. Not supported: json to yaml; read files; fetch urls; execute yaml code. Page: https://computefirst.net/tools/yaml-to-json","operationId":"execute_yaml_to_json","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["yaml"],"properties":{"yaml":{"type":"string","maxLength":262144}}}}}},"responses":{"200":{"description":"Deterministic result","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["result"],"properties":{"result":{"type":["object","array","string","number","boolean","null"]},"savings":{"type":"object","description":"Opt in with Prefer: return=savings. Null tokens means unmeasured."}}}}}},"400":{"description":"Invalid input"},"401":{"description":"A key was sent but is invalid or expired"},"429":{"description":"Daily or short-window limit reached; see retry_after"}}}}}}