Documents & Structured Data · x402 V1 + V2

PDF Extract

Use this service when you need this capability: fetches one bounded public HTTPS PDF and extracts text and metadata without OCR or executing embedded content.

Price and endpoint

LivePOSTBase USDC

0.03 USDC per call

x402 V1 + V2 exact payment on Base mainnet (base in V1; eip155:8453 in V2) using USDC. One HTTP 402 response carries the canonical V2 PAYMENT-REQUIRED header and equivalent V1 JSON body.

POST https://signalharness.ai/api/agent/services/pdf_extract/invoke

Purpose

Fetches one bounded public HTTPS PDF and extracts text and metadata without OCR or executing embedded content.

Documented public-source retrieval is bounded by the URL, byte, redirect, and timeout limits below. Source availability can affect execution; review the input schema and returned source metadata.

Inputs

Request fields and validation limits
FieldTypeRequiredLimits
urlstringRequiredPattern: ^https://; Minimum length 9; Maximum length 2048

Example request body

{
  "url": "https://example.com/document.pdf"
}
View complete input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "minProperties": 1,
  "maxProperties": 1,
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "pattern": "^https://",
      "minLength": 9,
      "maxLength": 2048
    }
  }
}

Realistic output shape

Illustrative output from the canonical adapter fixture and schema. It is not a completed paid execution or a current live observation.

{
  "status": "OK",
  "text": "Example caller-supplied content.",
  "markdown": "# Example\n\nNormalized caller-supplied content.",
  "pageCount": 0,
  "metadata": {},
  "sourceUrl": "example00",
  "contentType": "Example caller-supplied content.",
  "byteCount": 0,
  "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
  "warnings": [
    "Verify the caller-supplied data before relying on this result."
  ]
}
View complete output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "minProperties": 10,
  "maxProperties": 10,
  "required": [
    "status",
    "text",
    "markdown",
    "pageCount",
    "metadata",
    "sourceUrl",
    "contentType",
    "byteCount",
    "sha256",
    "warnings"
  ],
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "OK",
        "OCR_REQUIRED"
      ],
      "minLength": 2,
      "maxLength": 12
    },
    "text": {
      "type": "string",
      "minLength": 0,
      "maxLength": 65536
    },
    "markdown": {
      "type": "string",
      "minLength": 0,
      "maxLength": 65536
    },
    "pageCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "metadata": {
      "type": "object",
      "additionalProperties": false,
      "minProperties": 0,
      "maxProperties": 8,
      "required": [],
      "properties": {
        "title": {
          "type": "string",
          "minLength": 0,
          "maxLength": 1024
        },
        "author": {
          "type": "string",
          "minLength": 0,
          "maxLength": 1024
        },
        "subject": {
          "type": "string",
          "minLength": 0,
          "maxLength": 2048
        },
        "keywords": {
          "type": "string",
          "minLength": 0,
          "maxLength": 4096
        },
        "creator": {
          "type": "string",
          "minLength": 0,
          "maxLength": 1024
        },
        "producer": {
          "type": "string",
          "minLength": 0,
          "maxLength": 1024
        },
        "creationDate": {
          "type": "string",
          "minLength": 0,
          "maxLength": 128
        },
        "modificationDate": {
          "type": "string",
          "minLength": 0,
          "maxLength": 128
        }
      }
    },
    "sourceUrl": {
      "type": "string",
      "minLength": 9,
      "maxLength": 2048
    },
    "contentType": {
      "type": "string",
      "minLength": 1,
      "maxLength": 256
    },
    "byteCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10485760
    },
    "sha256": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "minLength": 64,
      "maxLength": 64
    },
    "warnings": {
      "type": "array",
      "minItems": 0,
      "maxItems": 32,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 1024
      }
    }
  }
}

Execution limits

  • MaxInputBytes: 4096
  • MaxOutputBytes: 1048576
  • MaxConcurrentExecutions: 1
  • MaxArtifacts: 0
  • MaxArtifactBytes: 0
  • RateLimitPerMinute: 10
  • MaxFetchBytes: 10485760
  • MaxDecodedBytes: 10485760
  • FetchTimeoutMs: 20000
  • MaxRedirects: 3
  • MaxPages: 100

Timeout: 30000 ms. Full schemas are in OpenAPI.

Copyable unpaid request

This schema-valid request returns the canonical HTTP 402 challenge without executing the service. A payment-capable client validates the challenge, signs only with prior authority and budget, and retries the identical body.

curl -i -X POST https://signalharness.ai/api/agent/services/pdf_extract/invoke \
  -H "Content-Type: application/json" \
  --data '{"url":"https://example.com/document.pdf"}'

Continue with the paid-call walkthrough →