OpenAPI required-params extractor

FREE with proof-of-work · or $0.002 in USDC · POST /api/openapi-required-params

For one operation, return the minimum set of inputs an agent must provide to make a successful call. Send POST /api/openapi-required-params with the required field spec and pay $0.002 per call over x402 or MPP, or call it free by solving a proof-of-work challenge. It returns a JSON object with method, path, operationId, required, hasBody and 1 more.

Locate the op by `operationId` (preferred) or by `method`+`path`. Output is a single flat array tagged by `in`: `path` (always required), `query` / `header` / `cookie` (only when `required: true`), and `body.field` entries naming the top-level required fields of a required JSON request body. `hasBody` and `bodyContentType` are included separately so callers can decide whether to serialize a payload at all. Merges path-item-level shared parameters with operation-level ones (operation wins on collision), matching openapi-to-curl behavior. Does NOT recurse into nested object schemas - top-level required fields only. Pure CPU.

Category: Data conversion · Tags: openapi swagger required params api

TRY IN PLAYGROUND →

Parameters

NameTypeRequiredDescription
specanyyesOpenAPI/Swagger document (object or JSON string) Also accepted as openapi, schema, document, doc, definition.
operationIdanynoLocate by operationId (preferred)
methodanynoIf no operationId, HTTP method (e.g. GET)
pathanynoIf no operationId, exact path (e.g. /users/{id})

Example request

curl -i -X POST https://agent402.tools/api/openapi-required-params \
  -H "Content-Type: application/json" \
  -d '{"spec":{"openapi":"3.0.0","paths":{"/users/{id}":{"get":{"operationId":"getUser","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"verbose","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"X-Trace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{}}}},"/users":{"post":{"operationId":"createUser","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string"},"password":{"type":"string"},"nickname":{"type":"string"}}}}}},"responses":{"201":{}}}}}},"operationId":"createUser"}'

Without payment this returns HTTP 402 Payment Required with the exact price for openapi-required-params; any x402 v2 or MPP client pays it and retries.

Example response

{
  "method": "POST",
  "path": "/users",
  "operationId": "createUser",
  "required": [
    {
      "in": "body.field",
      "name": "email",
      "type": "string"
    },
    {
      "in": "body.field",
      "name": "password",
      "type": "string"
    }
  ],
  "hasBody": true,
  "bodyContentType": "application/json"
}
FieldTypeAlways presentIn the example
methodstringyesPOST
pathstringyes/users
operationIdstringyescreateUser
requiredarray of objectsyes2 items in the example
hasBodybooleanyestrue
bodyContentTypestringyesapplication/json

From an MCP client

catalog.call {
  "slug": "openapi-required-params",
  "params": {
    "spec": {
      "openapi": "3.0.0",
      "paths": {
        "/users/{id}": {
          "get": {
            "operationId": "getUser",
            "parameters": [
              {
                "name": "id",
                "in": "path",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              {
                "name": "verbose",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "boolean"
                }
              },
              {
                "name": "X-Trace-Id",
                "in": "header",
                "required": true,
                "schema": {
                  "type": "string"
                }
              }
            ],
            "responses": {
              "200": {}
            }
          }
        },
        "/users": {
          "post": {
            "operationId": "createUser",
            "requestBody": {
              "required": true,
              "content": {
                "application/json": {
                  "schema": {
                    "type": "object",
                    "required": [
                      "email",
                      "password"
                    ],
                    "properties": {
                      "email": {
                        "type": "string"
                      },
                      "password": {
                        "type": "string"
                      },
                      "nickname": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            },
            "responses": {
              "201": {}
            }
          }
        }
      }
    },
    "operationId": "createUser"
  }
}

On the hosted connector at https://agent402.tools/mcp, catalog.call runs openapi-required-params free (rate-limited, no wallet). Local install: npx -y agent402-mcp.

Errors and behavior

Paid call (JavaScript agent)

import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const client = new x402Client();
client.setSpendControls?.(false); // keep your own spending ceiling in code
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);

const res = await payFetch("https://agent402.tools/api/openapi-required-params", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    "spec": {
      "openapi": "3.0.0",
      "paths": {
        "/users/{id}": {
          "get": {
            "operationId": "getUser",
            "parameters": [
              {
                "name": "id",
                "in": "path",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              {
                "name": "verbose",
                "in": "query",
                "required": false,
                "schema": {
                  "type": "boolean"
                }
              },
              {
                "name": "X-Trace-Id",
                "in": "header",
                "required": true,
                "schema": {
                  "type": "string"
                }
              }
            ],
            "responses": {
              "200": {}
            }
          }
        },
        "/users": {
          "post": {
            "operationId": "createUser",
            "requestBody": {
              "required": true,
              "content": {
                "application/json": {
                  "schema": {
                    "type": "object",
                    "required": [
                      "email",
                      "password"
                    ],
                    "properties": {
                      "email": {
                        "type": "string"
                      },
                      "password": {
                        "type": "string"
                      },
                      "nickname": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            },
            "responses": {
              "201": {}
            }
          }
        }
      }
    },
    "operationId": "createUser"
  }),
});

No wallet? Pay with compute

Fetch a challenge, solve the sha256 puzzle (16 leading zero bits, a fraction of a second of CPU), and resend with the X-Pow-Solution header:

import { createHash } from "node:crypto";
const lz = (b) => { let t = 0; for (const x of b) { if (!x) { t += 8; continue; } t += Math.clz32(x) - 24; break; } return t; };
const c = await (await fetch("https://agent402.tools/api/pow/challenge?slug=openapi-required-params")).json();
let n = 0;
while (lz(createHash("sha256").update(c.challenge + ":" + n).digest()) < c.difficulty) n++;
await fetch("https://agent402.tools/api/openapi-required-params", { method: "POST", headers: { "X-Pow-Solution": c.token + ":" + n, "Content-Type": "application/json" }, body: JSON.stringify({"spec":{"openapi":"3.0.0","paths":{"/users/{id}":{"get":{"operationId":"getUser","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"verbose","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"X-Trace-Id","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{}}}},"/users":{"post":{"operationId":"createUser","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string"},"password":{"type":"string"},"nickname":{"type":"string"}}}}}},"responses":{"201":{}}}}}},"operationId":"createUser"}) });

Part of these workflows

OpenAPI required-params extractor is one step in this skill pack, each sold as a single call:

Related tools

OpenAPI / Swagger diff

FREE w/ compute · or $0.001 · POST /api/openapi-diff

Compare two OpenAPI 3.x or Swagger 2.x documents and return a structured diff: added / removed / changed endpoints, with…

OpenAPI endpoint extractor

FREE w/ compute · or $0.001 · POST /api/openapi-extract

Flatten an OpenAPI 3.x or Swagger 2.x spec into a structured list of callable endpoints - one row per operation with met…

OpenAPI mock response generator

FREE w/ compute · or $0.001 · POST /api/openapi-mock-response

Synthesize a JSON response body for one operation + status code in an OpenAPI 3.x or Swagger 2.x spec. Locate the operat…

OpenAPI spec redactor

FREE w/ compute · or $0.001 · POST /api/openapi-redact

Shrink an OpenAPI 3.x or Swagger 2.x document for LLM context by stripping verbose meta-fields (examples, descriptions, …

OpenAPI $ref resolver

FREE w/ compute · or $0.001 · POST /api/openapi-resolve-refs

Inline every local `$ref` in an OpenAPI 3.x or Swagger 2.x document so downstream tools see a self-contained spec. Resol…

OpenAPI operation search

FREE w/ compute · or $0.001 · POST /api/openapi-search

Search operations in an OpenAPI 3.x or Swagger 2.x spec against a free-text query. Tokenizes the query (lowercase, alpha…