usestring-ai · Schema

Fetch JSON envelope

The `format: json` response body. Also the envelope for `screenshot`/`actions` requests (whatever `format`), and the `jsonSchema` fallback envelope (`extracted: false`). A destination `304 Not Modified` is still an HTTP 200 here, with `statusCode: 304`.

Web ScrapingData ExtractionMarkdownJSON

Properties

Name Type Description
statusCode integer The destination's HTTP status code.
headers object The destination's response headers, filtered. Values can be arrays of strings.
data object The response body. Parsed JSON when the destination returned JSON, otherwise text. With `screenshot`/`actions`: the final page as HTML, or Markdown with `format: markdown`; when the sequence succeeded
finalUrl string The URL the response was served from after any redirects (or after all actions ran), or the requested URL if there was no redirect.
screenshot object Present only if a screenshot was taken.
matchedResponse object Present only when the action sequence succeeded and its `asResult` action matched. Describes the response now in `data`.
xhr array Present only with `captureXHR`: the captured requests, in the order the page sent them. Empty when nothing qualified.
xhrTruncated boolean `true` when a capture limit left requests or bodies out of `xhr`. Absent otherwise.
error string Present if the browser action sequence failed (the response is still HTTP 200), for example `Browser action sequence failed`.
failedActionIndex integer 0-based index into `actions` of the action that failed.
extracted boolean `false` on a `jsonSchema` fallback: extraction did not satisfy the schema and `data` holds the unextracted page.
reason string `jsonSchema` fallback reason. `schema_mismatch`: a required field was not found; retrying will not help. `unparseable_output` and `llm_error`: usually transient, worth a retry. `body_too_large`: extra
View JSON Schema on GitHub

JSON Schema

usestring-ai-fetch-response-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/usestring-ai/json-schema/usestring-ai-fetch-response-schema.json",
  "title": "Fetch JSON envelope",
  "description": "The `format: json` response body. Also the envelope for `screenshot`/`actions` requests (whatever `format`), and the `jsonSchema` fallback envelope (`extracted: false`). A destination `304 Not Modified` is still an HTTP 200 here, with `statusCode: 304`.",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/usestring-ai-openapi.json#/components/schemas/FetchResponse",
  "type": "object",
  "properties": {
    "statusCode": {
      "type": "integer",
      "description": "The destination's HTTP status code."
    },
    "headers": {
      "type": "object",
      "description": "The destination's response headers, filtered. Values can be arrays of strings.",
      "additionalProperties": {
        "type": [
          "string",
          "array"
        ],
        "items": {
          "type": "string"
        }
      }
    },
    "data": {
      "description": "The response body. Parsed JSON when the destination returned JSON, otherwise text. With `screenshot`/`actions`: the final page as HTML, or Markdown with `format: markdown`; when the sequence succeeded and a `waitForResponse` action with `asResult` matched, the matched response's body as a string instead."
    },
    "finalUrl": {
      "type": "string",
      "description": "The URL the response was served from after any redirects (or after all actions ran), or the requested URL if there was no redirect."
    },
    "screenshot": {
      "type": "object",
      "description": "Present only if a screenshot was taken.",
      "properties": {
        "format": {
          "type": "string",
          "description": "Image format, for example `png`."
        },
        "base64": {
          "type": "string",
          "description": "The image, base64-encoded."
        }
      }
    },
    "matchedResponse": {
      "type": "object",
      "description": "Present only when the action sequence succeeded and its `asResult` action matched. Describes the response now in `data`.",
      "properties": {
        "url": {
          "type": "string"
        },
        "method": {
          "type": "string"
        },
        "statusCode": {
          "type": "integer"
        },
        "headers": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "bodyEncoding": {
          "type": "string",
          "enum": [
            "utf8",
            "base64"
          ],
          "description": "When `base64`, decode `data` first."
        }
      }
    },
    "xhr": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/XhrEntry"
      },
      "description": "Present only with `captureXHR`: the captured requests, in the order the page sent them. Empty when nothing qualified."
    },
    "xhrTruncated": {
      "type": "boolean",
      "description": "`true` when a capture limit left requests or bodies out of `xhr`. Absent otherwise."
    },
    "error": {
      "type": "string",
      "description": "Present if the browser action sequence failed (the response is still HTTP 200), for example `Browser action sequence failed`."
    },
    "failedActionIndex": {
      "type": "integer",
      "description": "0-based index into `actions` of the action that failed."
    },
    "extracted": {
      "type": "boolean",
      "description": "`false` on a `jsonSchema` fallback: extraction did not satisfy the schema and `data` holds the unextracted page."
    },
    "reason": {
      "type": "string",
      "enum": [
        "schema_mismatch",
        "unparseable_output",
        "llm_error",
        "body_too_large",
        "empty_body"
      ],
      "description": "`jsonSchema` fallback reason. `schema_mismatch`: a required field was not found; retrying will not help. `unparseable_output` and `llm_error`: usually transient, worth a retry. `body_too_large`: extraction skipped. `empty_body`: nothing to extract."
    }
  },
  "$defs": {
    "XhrEntry": {
      "type": "object",
      "description": "One captured XHR or fetch() request. See https://portal.usestring.ai/docs/fetch/xhr-capture#the-xhr-entry",
      "properties": {
        "resourceType": {
          "type": "string",
          "enum": [
            "xhr",
            "fetch"
          ],
          "description": "Whether the page used XMLHttpRequest or fetch()."
        },
        "request": {
          "type": "object",
          "properties": {
            "url": {
              "type": "string",
              "description": "The full request URL, query string included."
            },
            "method": {
              "type": "string",
              "description": "The request method, such as GET or POST."
            },
            "headers": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "The request headers, each value a single string."
            },
            "body": {
              "type": "string",
              "description": "The body the page sent, encoded as `bodyEncoding` says. Absent when there was no body or it was omitted."
            },
            "bodyEncoding": {
              "type": "string",
              "enum": [
                "utf8",
                "base64"
              ],
              "description": "`utf8` for valid UTF-8 text, `base64` for anything else."
            },
            "bodyOmitted": {
              "type": "string",
              "enum": [
                "too_large",
                "budget_exhausted",
                "unavailable"
              ],
              "description": "Why `body` is absent."
            }
          }
        },
        "response": {
          "type": "object",
          "description": "Absent when no response arrived.",
          "properties": {
            "statusCode": {
              "type": "number",
              "description": "The response status."
            },
            "headers": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "The response headers, each value a single string."
            },
            "body": {
              "type": "string",
              "description": "The response body, decoded from any content-encoding and encoded as `bodyEncoding` says."
            },
            "bodyEncoding": {
              "type": "string",
              "enum": [
                "utf8",
                "base64"
              ],
              "description": "`utf8` for valid UTF-8 text, `base64` for anything else."
            },
            "bodyOmitted": {
              "type": "string",
              "enum": [
                "too_large",
                "budget_exhausted",
                "unavailable"
              ],
              "description": "Why `body` is absent."
            }
          }
        },
        "error": {
          "type": "string",
          "description": "The network error, when the request failed."
        },
        "matchedFilter": {
          "type": "number",
          "description": "With `captureXHR.include`: the 0-based index of the first filter this request matched."
        },
        "timing": {
          "type": "object",
          "properties": {
            "startedAt": {
              "type": "number",
              "description": "When the page sent the request, in milliseconds since the Unix epoch."
            },
            "durationMs": {
              "type": "number",
              "description": "Milliseconds until the response finished loading or the request failed. Absent while in flight."
            }
          }
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/usestring-ai-fetch-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.