Skip to content
Start hereOverview

Start here

On this page

Guides & API reference

Build from the source.

Turn one accessible public page into structured data. Describe what you need, or supply a supported JSON Schema when every field matters. Inspect the returned evidence and limitations before acting on the result.

Choose your starting point

Quickstart

Start with one page and one question. A recorded example demonstrates the response; your own authenticated request exercises live extraction.

  1. Sign up and get an API key

    See recorded examples run on the home page, or replay one yourself with the keyless requests in Examples, with no signup. For live extraction, create an account and generate an API key in the dashboard. Copy the complete key when it is shown and keep it in your agent's secret store. Never put it in a URL or a shared prompt.

    Before starting, check your dashboard or call GET /api/v1/account/status with that key. The check shows used and reserved credits, the next UTC reset and current restrictions. It costs zero extraction credits and reserves no capacity.

  2. Read a product name and price

    Put your key in CONTRIE_API_KEY, then run this request as printed. Contrie has answered this question on this page before: the Track a price recipe replays that recorded answer with no key. For your own product, change url to a public page showing one product, a price and its currency.

    curl
    curl -X POST https://www.contrie.com/api/v1/scrape \
      -H "Authorization: Bearer $CONTRIE_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
      "extract": "The product name and its current price",
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "offers": {
            "type": "object",
            "properties": {
              "price": {
                "type": "number"
              },
              "priceCurrency": {
                "type": "string"
              }
            },
            "required": [
              "price",
              "priceCurrency"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "name",
          "offers"
        ],
        "additionalProperties": false
      }
    }'

    With your key the request runs live: it fetches the page as it is now and may use credits. Credit allowances and service capacity are separate limits; remaining credits do not guarantee availability.

  3. Get structured JSON back

    Recorded run of this request, 2026-09-24, abridged
    {
      "success": true,
      "data": {
        "name": "A Light in the Attic",
        "offers": {
          "price": 51.77,
          "priceCurrency": "GBP"
        }
      },
      "metadata": {
        "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
        "qualityScoreKind": "structural_and_textual",
        "valid": true,
        "requestedFields": {
          "total": 3,
          "returned": 3,
          "missing": []
        },
        "qualityScore": 100,
        "grounding": 1,
        "groundingCoverage": {
          "total": 3,
          "checkable": 3,
          "grounded": 3
        },
        "cached": false,
        "credits": 1,
        "source": {
          "mode": "fetched",
          "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
          "fetchedAt": "2026-09-24T22:43:23.316Z"
        }
      }
    }

    Check success before using data. A refusal contains a reason and charges 0 credits. Quality and matching source text do not prove field attribution or factual truth. When a signed receipt is available, it proves response integrity; verify it independently.

Guides

Recover, then repeat intentionally

Recovery needs an Idempotency-Key sent with the original request, and the quickstart request sends none: repeating it starts new work, which may use credits. When recovery matters, send a fresh key such as $(uuidgen) up front (see Safe retries). If the connection then drops, repeat the identical JSON request with that same key. A completed response can be recovered for 24 hours without another extraction or charge. If it is still running, wait before checking again. An unknown or expired outcome needs review; do not silently replace the key.

A new question or a fresh check needs a new key. Set options.maxAge to zero (the default) to fetch the page anew, or opt into an account-private copy up to a chosen age in seconds. Reuse still performs an extraction and uses credits. Compare the returned source time with your job's freshness needs.

For your agent, connect the hosted Model Context Protocol (MCP) endpoint. The agent tools accept an optional idempotencyKey argument for the same recovery behavior. Streaming calls do not accept the REST replay header. For repeated price checks, monitor one validated question after confirming the first result. Each scheduled run needs available credits and service capacity.

Base URL

REST API
https://www.contrie.com/api/v1

Endpoints

MethodEndpointDescription
GET/api/v1/account/statusCredits, next UTC reset and current restrictions; uses no extraction credits
POST/api/v1/scrapeFetch a URL and extract data
POST/api/v1/extractExtract data from raw HTML
POST/api/v1/verifyCheck data against its source page
POST/api/v1/monitorsWatch a page for one question; before/after on change, signed when the run's answer was accepted
GET/api/v1/monitorsList your active monitors
GET/api/v1/monitors/:idOne monitor with its latest events
DELETE/api/v1/monitors/:idStop a monitor and its charges
POST/api/v1/evidence/verifyVerify a signed response (free, no key)
GET/api/v1/evidence/keysThe public key evidence is signed with (no key)
GET/api/healthHealth check