{
  "url": "https://telipot.com/catalog/tasks/exa.web.page.text",
  "id": "exa.web.page.text",
  "name": "Web page text and title from URLs, with fetch status",
  "provider": {
    "slug": "exa",
    "name": "Exa"
  },
  "capability": "web.page.text",
  "platform": "web",
  "kind": "data",
  "tier": "core",
  "identity": "key",
  "identityLabel": "Your plan",
  "price": {
    "type": "per_result",
    "confidence": "documented",
    "source": "docs",
    "sourceUrl": "https://exa.ai/docs/admin/pricing",
    "checked": "2026-10-05",
    "note": "$1 per 1,000 pages for each content type; a page returned with text and with highlights counts twice, and AI page summaries add $1 per 1,000 pages.",
    "settles": "The charge Exa reports in costDollars.total",
    "state": "paid",
    "label": "$0.001 / page",
    "amount": "$0.001",
    "unit": "page",
    "usdPerUnit": {
      "floor": 0.001,
      "ceiling": 0.001
    },
    "native": {
      "text": "$1 per 1,000 pages",
      "figure": "$1",
      "per": "1,000 pages",
      "currency": "USDs"
    },
    "detail": "Exa docs · 2026-10-05"
  },
  "providers": 3,
  "retention": "standard",
  "runsOn": "byoc",
  "live": true,
  "summary": "Get the full page contents, summaries, and metadata for a list of URLs.",
  "method": "POST",
  "path": "/contents",
  "host": "https://api.exa.ai",
  "docsUrl": "https://exa.ai/docs/reference/get-contents",
  "auth": {
    "scheme": "api_key",
    "label": "api_key · in header as x-api-key",
    "short": "api_key · x-api-key"
  },
  "scope": "any_account",
  "principal": "organization",
  "requiredScopes": [],
  "verification": {
    "state": "verified",
    "label": "Verified on 2026-10-05",
    "detail": "We ran a real request and checked the answer. This is a spot check, not a success rate."
  },
  "input": [
    {
      "name": "urls",
      "location": "body",
      "type": "array",
      "required": true,
      "constraints": [
        "1 to 100"
      ],
      "note": "URLs to crawl. Up to 100 per request."
    },
    {
      "name": "text",
      "location": "body",
      "type": "object",
      "required": true,
      "constraints": [],
      "note": "Options for the text returned for each URL, such as { maxCharacters: 2000 } to limit the text per page; includeHtmlTags, verbosity (compact, standard or full), includeSections and excludeSections are also accepted. The vendor's schema also accepts true for the default settings, which this typed field cannot express, so pass an options object. Text is billed at $1 per 1,000 pages."
    },
    {
      "name": "maxAgeHours",
      "location": "body",
      "type": "integer",
      "required": false,
      "constraints": [
        "-1 to 720"
      ],
      "note": "Maximum age of cached content in hours. Positive values use cached content if it is less than this many hours old; 0 fetches fresh content; -1 always uses the cache; omitted uses fallback fetching when cached content is unavailable."
    },
    {
      "name": "livecrawlTimeout",
      "location": "body",
      "type": "integer",
      "required": false,
      "constraints": [
        "1 to 90000",
        "default 10000"
      ],
      "note": "The timeout for livecrawling in milliseconds."
    }
  ],
  "sampleInput": {
    "urls": [
      "https://example.com"
    ],
    "text": {
      "maxCharacters": 1000
    }
  },
  "inputSchema": {
    "type": "object",
    "properties": {
      "urls": {
        "type": "array",
        "description": "URLs to crawl. Up to 100 per request.",
        "examples": [
          [
            "https://example.com"
          ]
        ],
        "minItems": 1,
        "maxItems": 100
      },
      "text": {
        "type": "object",
        "description": "Options for the text returned for each URL, such as { maxCharacters: 2000 } to limit the text per page; includeHtmlTags, verbosity (compact, standard or full), includeSections and excludeSections are also accepted. The vendor's schema also accepts true for the default settings, which this typed field cannot express, so pass an options object. Text is billed at $1 per 1,000 pages.",
        "examples": [
          {
            "maxCharacters": 2000
          }
        ]
      },
      "maxAgeHours": {
        "type": "integer",
        "description": "Maximum age of cached content in hours. Positive values use cached content if it is less than this many hours old; 0 fetches fresh content; -1 always uses the cache; omitted uses fallback fetching when cached content is unavailable.",
        "minimum": -1,
        "maximum": 720
      },
      "livecrawlTimeout": {
        "type": "integer",
        "description": "The timeout for livecrawling in milliseconds.",
        "default": 10000,
        "minimum": 1,
        "maximum": 90000
      }
    },
    "required": [
      "urls",
      "text"
    ],
    "additionalProperties": false
  },
  "output": [
    {
      "name": "requestId",
      "type": "string"
    },
    {
      "name": "results",
      "type": "object[]"
    },
    {
      "name": "statuses",
      "type": "object[]",
      "description": "One entry per requested URL; a URL that failed is reported here, in a 200 response"
    },
    {
      "name": "searchTime",
      "type": "number"
    },
    {
      "name": "costDollars",
      "type": "object",
      "description": "Estimated dollar cost of the completed request; billing is computed from usage counters, not from this object."
    }
  ],
  "outputSchema": {
    "type": "object",
    "properties": {
      "requestId": {
        "type": "string"
      },
      "results": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "title",
            "url"
          ],
          "properties": {
            "title": {
              "type": "string"
            },
            "url": {
              "type": "string"
            },
            "id": {
              "type": "string",
              "description": "Temporary document id, accepted by the contents route"
            },
            "publishedDate": {
              "type": "string",
              "description": "Estimated creation date parsed from the page"
            },
            "author": {
              "type": [
                "string",
                "null"
              ]
            },
            "image": {
              "type": "string"
            },
            "favicon": {
              "type": "string"
            },
            "text": {
              "type": "string",
              "description": "Full page text, present only when requested"
            },
            "highlights": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "summary": {
              "type": "string"
            },
            "subpages": {
              "type": "array",
              "items": {
                "type": "object"
              }
            },
            "entities": {
              "type": "array",
              "items": {
                "type": "object"
              }
            },
            "extras": {
              "type": "object"
            }
          }
        }
      },
      "statuses": {
        "type": "array",
        "description": "One entry per requested URL; a URL that failed is reported here, in a 200 response",
        "items": {
          "type": "object",
          "required": [
            "id",
            "status"
          ],
          "properties": {
            "id": {
              "type": "string",
              "description": "The URL or document id that was requested"
            },
            "status": {
              "type": "string",
              "enum": [
                "success",
                "error"
              ]
            },
            "source": {
              "type": "string",
              "enum": [
                "cached",
                "crawled"
              ]
            },
            "error": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tag": {
                      "type": "string",
                      "description": "Specific error type, such as CRAWL_NOT_FOUND"
                    },
                    "httpStatusCode": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "The status the target page returned"
                    }
                  }
                },
                {
                  "type": "null"
                }
              ]
            }
          }
        }
      },
      "searchTime": {
        "type": "number"
      },
      "costDollars": {
        "type": "object",
        "description": "Estimated dollar cost of the completed request; billing is computed from usage counters, not from this object.",
        "properties": {
          "total": {
            "type": "number"
          },
          "search": {
            "type": "object",
            "properties": {
              "neural": {
                "type": "number"
              },
              "keyword": {
                "type": "number"
              }
            }
          },
          "summary": {
            "type": "number"
          },
          "contents": {
            "type": "object",
            "properties": {
              "text": {
                "type": "number"
              },
              "highlights": {
                "type": "number"
              },
              "summary": {
                "type": "number"
              }
            }
          }
        }
      }
    }
  },
  "example": {
    "file": "examples/exa.web.page.text.json",
    "json": {
      "requestId": "ec0c917e43b5c249b30a1839ea761835",
      "results": [
        {
          "id": "https://example.com",
          "title": "Example Domain",
          "url": "https://example.com",
          "author": null,
          "text": "Example Domain\n\nThis domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.\n\nهذا النطاق مُخصص للاستخدام…",
          "entities": [
            {}
          ]
        }
      ],
      "statuses": [
        {
          "id": "https://example.com",
          "status": "success",
          "source": "cached"
        }
      ],
      "costDollars": {
        "total": 0.001,
        "contents": {
          "text": 0.001
        }
      },
      "searchTime": 6.0309359999373555
    }
  },
  "commands": {
    "mode": "run",
    "cli": "telipot run exa.web.page.text \\\n  --input-json '{\"urls\":[\"https://example.com\"],\"text\":{\"maxCharacters\":1000}}'",
    "http": "curl https://api.telipot.com/v1/tasks/exa.web.page.text/run \\\n  -H \"Authorization: Bearer $TELIPOT_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"urls\":[\"https://example.com\"],\"text\":{\"maxCharacters\":1000}}'",
    "quote": "telipot run exa.web.page.text \\\n  --input-json '{\"urls\":[\"https://example.com\"],\"text\":{\"maxCharacters\":1000}}' \\\n  --quote"
  },
  "siblings": [
    {
      "id": "jina-reader.web.page.text",
      "name": "Page title and text by URL",
      "provider": {
        "slug": "jina-reader",
        "name": "Jina Reader"
      },
      "capability": "web.page.text",
      "platform": "web",
      "kind": "data",
      "tier": "core",
      "identity": "public",
      "identityLabel": "No account",
      "price": {
        "amount": "Free",
        "state": "free",
        "label": "Free",
        "detail": "Free · no account needed",
        "type": "free"
      },
      "providers": 3,
      "retention": "standard",
      "runsOn": "free",
      "live": true
    },
    {
      "id": "firecrawl.web.page.text",
      "name": "Page text as markdown with title and status code by URL",
      "provider": {
        "slug": "firecrawl",
        "name": "Firecrawl"
      },
      "capability": "web.page.text",
      "platform": "web",
      "kind": "data",
      "tier": "core",
      "identity": "key",
      "identityLabel": "Your plan",
      "price": {
        "type": "per_success",
        "confidence": "documented",
        "source": "docs",
        "sourceUrl": "https://docs.firecrawl.dev/billing",
        "checked": "2026-10-05",
        "note": "1 credit per page Firecrawl returns, including a page whose own status is 403 or 404; no document returned costs 0. A PDF costs 1 credit per PDF page. The JSON, question, highlights and other formats that add credits are not offered by this task.",
        "state": "paid",
        "label": "$0.0038 / page",
        "amount": "$0.0038",
        "unit": "page",
        "usdPerUnit": {
          "floor": 0.0038,
          "ceiling": 0.0038
        },
        "native": {
          "text": "1 credit per page",
          "figure": "1 credit",
          "per": "page",
          "currency": "credits"
        },
        "detail": "1 credit · docs"
      },
      "providers": 3,
      "retention": "standard",
      "runsOn": "byoc",
      "live": true
    }
  ]
}
