Hyperbrowser Extract API

Structured data extraction jobs that pull typed records from one or more pages using prompts and JSON schemas.

Operations 3

POST /api/extract Start an extract job #
GET /api/extract/{id} Get extract job status and results #
GET /api/extract/{id}/status Get extract job status #

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/hyperbrowser:extract-api"
All apis
curl "https://apis.io/api/v1/apis?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.

OpenAPI Specification

hyperbrowser-extract-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Hyperbrowser Extract API
  version: 1.0.0
servers:
- url: https://api.hyperbrowser.ai
  description: Production server
tags:
- name: Extract
paths:
  /api/extract:
    post:
      summary: Start an extract job
      security:
      - ApiKeyAuth: []
      x-codeSamples:
      - lang: javascript
        label: Start extract job
        source: "import { Hyperbrowser } from '@hyperbrowser/sdk';\n\nconst client = new Hyperbrowser({ apiKey: 'your-api-key' });\n\nawait client.extract.start({\n  urls: ['https://example.com'],\n  prompt: 'Extract the main headline and author'\n});"
      - lang: python
        label: Start extract job
        source: "from hyperbrowser import Hyperbrowser\n\nclient = Hyperbrowser(api_key='your-api-key')\n\nclient.extract.start({\n  \"urls\": [\"https://example.com\"],\n  \"prompt\": \"Extract the main headline and author\"\n})"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartExtractJobParams'
      responses:
        '200':
          description: Extract job started successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartExtractJobResponse'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Extract
      operationId: postApiExtract
      x-operation-id-source: derived
  /api/extract/{id}:
    get:
      summary: Get extract job status and results
      security:
      - ApiKeyAuth: []
      x-codeSamples:
      - lang: javascript
        label: Get extract job
        source: 'import { Hyperbrowser } from ''@hyperbrowser/sdk'';


          const client = new Hyperbrowser({ apiKey: ''your-api-key'' });


          await client.extract.get(''job-id'');'
      - lang: python
        label: Get extract job
        source: 'from hyperbrowser import Hyperbrowser


          client = Hyperbrowser(api_key=''your-api-key'')


          client.extract.get(''job-id'')'
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Extract job details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExtractJobResponse'
        '404':
          description: Extract job not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Extract
      operationId: getApiExtractById
      x-operation-id-source: derived
  /api/extract/{id}/status:
    get:
      summary: Get extract job status
      security:
      - ApiKeyAuth: []
      x-codeSamples:
      - lang: javascript
        label: Get extract job status
        source: 'import { Hyperbrowser } from ''@hyperbrowser/sdk'';


          const client = new Hyperbrowser({ apiKey: ''your-api-key'' });


          await client.extract.getStatus(''job-id'');'
      - lang: python
        label: Get extract job status
        source: 'from hyperbrowser import Hyperbrowser


          client = Hyperbrowser(api_key=''your-api-key'')


          client.extract.get_status(''job-id'')'
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Extract job status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobStatusResponse'
        '404':
          description: Extract job not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Extract
      operationId: getApiExtractByIdStatus
      x-operation-id-source: derived
components:
  schemas:
    WebBotAuthParams:
      type: object
      additionalProperties: false
      description: Limits Web Bot Auth signing to some hosts.
      properties:
        onlyDomains:
          type: array
          items:
            type: string
          minItems: 1
          maxItems: 50
          description: Sign only requests to these hostnames (for example `example.com`) and their subdomains. No scheme, port, or path.
    OperatingSystem:
      type: string
      enum:
      - windows
      - android
      - macos
      - linux
      - ios
    JobStatusResponse:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/JobStatus'
      required:
      - status
    ProxyState:
      type:
      - string
      - 'null'
      enum:
      - AL
      - AK
      - AZ
      - AR
      - CA
      - CO
      - CT
      - DE
      - FL
      - GA
      - HI
      - ID
      - IL
      - IN
      - IA
      - KS
      - KY
      - LA
      - ME
      - MD
      - MA
      - MI
      - MN
      - MS
      - MO
      - MT
      - NE
      - NV
      - NH
      - NJ
      - NM
      - NY
      - NC
      - ND
      - OH
      - OK
      - OR
      - PA
      - RI
      - SC
      - SD
      - TN
      - TX
      - UT
      - VT
      - VA
      - WA
      - WV
      - WI
      - WY
      - al
      - ak
      - az
      - ar
      - ca
      - co
      - ct
      - de
      - fl
      - ga
      - hi
      - id
      - il
      - in
      - ia
      - ks
      - ky
      - la
      - me
      - md
      - ma
      - mi
      - mn
      - ms
      - mo
      - mt
      - ne
      - nv
      - nh
      - nj
      - nm
      - ny
      - nc
      - nd
      - oh
      - ok
      - or
      - pa
      - ri
      - sc
      - sd
      - tn
      - tx
      - ut
      - vt
      - va
      - wa
      - wv
      - wi
      - wy
      description: Optional state code for proxies to US states. Is mutually exclusive with proxyCity. Takes in two letter state code.
    CreateSessionParams:
      type: object
      properties:
        useUltraStealth:
          type: boolean
          default: false
        useStealth:
          type: boolean
          default: false
        useProxy:
          type: boolean
          default: false
        proxyServer:
          type: string
          description: Custom proxy server host.
        proxyServerPassword:
          type: string
          description: Password for authenticating with the custom proxy server.
        proxyServerUsername:
          type: string
          description: Username for authenticating with the custom proxy server.
        proxyCountry:
          $ref: '#/components/schemas/ProxyCountry'
        proxyState:
          $ref: '#/components/schemas/ProxyState'
        proxyCity:
          type:
          - string
          - 'null'
          example: new york
          description: Desired Country. Is mutually exclusive with proxyState. Some cities might not be supported, so before using a new city, we recommend trying it out
        region:
          $ref: '#/components/schemas/SessionRegion'
        operatingSystems:
          type: array
          items:
            $ref: '#/components/schemas/OperatingSystem'
        device:
          type: array
          items:
            $ref: '#/components/schemas/Device'
        platform:
          type: array
          items:
            $ref: '#/components/schemas/Platform'
        locales:
          type: array
          items:
            $ref: '#/components/schemas/ISO639_1'
          default:
          - en
        screen:
          $ref: '#/components/schemas/ScreenConfig'
        solveCaptchas:
          type: boolean
          default: false
        solverType:
          type: string
          enum:
          - visual
          description: Optional CAPTCHA solver mode. Set to visual to use the visual reCAPTCHA solver.
        adblock:
          type: boolean
          default: false
        trackers:
          type: boolean
          default: false
        annoyances:
          type: boolean
          default: false
        enableWebRecording:
          type: boolean
        enableVideoWebRecording:
          type: boolean
          default: false
          description: enableWebRecording must also be true for this to work
        profile:
          $ref: '#/components/schemas/CreateSessionProfile'
        acceptCookies:
          type: boolean
        staticIpId:
          type: string
          format: uuid
        saveDownloads:
          type: boolean
          default: false
        extensionIds:
          type: array
          items:
            type: string
            format: uuid
          default: []
        urlBlocklist:
          type: array
          items:
            type: string
          default: []
        browserArgs:
          type: array
          items:
            type: string
          default: []
        imageCaptchaParams:
          type:
          - array
          - 'null'
          items:
            type: object
            properties:
              imageSelector:
                type: string
              inputSelector:
                type: string
        timeoutMinutes:
          type: number
          minimum: 1
          maximum: 720
        enableWindowManager:
          type: boolean
          default: false
        enableWindowManagerTaskbar:
          type: boolean
          default: false
        viewOnlyLiveView:
          type: boolean
          default: false
        disablePasswordManager:
          type: boolean
          default: false
        enableAlwaysOpenPdfExternally:
          type: boolean
          default: false
        disablePostQuantumKeyAgreement:
          type: boolean
          default: false
        enableWebMcp:
          type: boolean
          default: false
          description: Enable discovery and invocation of WebMCP tools exposed by pages in this browser session. Must be set when creating the session; disabled by default.
        credentials:
          type: array
          maxItems: 20
          items:
            oneOf:
            - type: string
              pattern: ^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$
              description: A secret's name.
            - type: object
              properties:
                secret:
                  type: string
                  pattern: ^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$
                  description: A secret's name.
              required:
              - secret
              additionalProperties: false
            - type: object
              properties:
                vault:
                  type: string
                  pattern: ^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$
                  description: 'A vault''s name: attaches the secrets its entries point at now.'
              required:
              - vault
              additionalProperties: false
            - type: object
              properties:
                onePassword:
                  type: string
                  pattern: ^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$
                  description: 'An `op_token` secret''s name: 1Password fills in this session may read with it. The token itself is never typed.'
              required:
              - onePassword
              additionalProperties: false
          description: 'Secrets the session may fill with POST /api/session/{id}/credentials/fill: a secret''s name, `{"secret": name}`, `{"vault": name}` for the secrets a vault''s entries point at, or `{"onePassword": name}` for an `op_token` secret that 1Password fills read with. You can only attach them when you create the session; an empty list is the same as none. Only `secret` and `totp` secrets can be attached as a name, `secret` or vault entry, and only an `op_token` as `onePassword`. Requires secrets to be enabled for your team; please contact support to enable them (otherwise 403 SECRETS_FEATURE_DISABLED), and, for restricted API keys, the secrets.use scope. The session runs on a Firecracker browser and Chrome''s password manager is turned off. An unknown name returns 404 SECRET_NOT_FOUND or VAULT_NOT_FOUND, an `op_token` secret named as a credential, or a `onePassword` that isn''t an `op_token`, 409 SECRET_TYPE_MISMATCH and a vault without entries 400 SECRET_SOURCES_INVALID. If the session can''t run on Firecracker, you get 400 CREDENTIALS_UNSUPPORTED_RUNTIME, or 429 when no Firecracker host is free (retry shortly). Restoring a browser snapshot taken with the password manager on returns 400 CREDENTIALS_SNAPSHOT_PASSWORD_MANAGER_ENABLED.'
        webBotAuth:
          oneOf:
          - type: boolean
          - $ref: '#/components/schemas/WebBotAuthParams'
          description: 'Sign the session''s requests with [Web Bot Auth](/sessions/web-bot-auth) so websites can verify that they come from Hyperbrowser. Pass `{"onlyDomains": [...]}` to sign only for those hosts. Available on request: contact info@hyperbrowser.ai to get access. Supported when creating a session and for agent tasks; scrape, crawl, and extract reject it. Cannot be combined with `useUltraStealth` or `startFromSnapshot`.'
        proxyRoutes:
          type: array
          maxItems: 32
          items:
            $ref: '#/components/schemas/ProxyRoute'
          description: 'Choose, per host, whether traffic goes through the session''s proxy or straight out. The first route that matches a host decides; hosts that no route matches use the proxy. At most 128 patterns across all routes. Requires `useProxy`. Available on request: contact info@hyperbrowser.ai to get access. See [proxy routes](/sessions/proxy-routes). Only supported when creating a session; cannot be combined with `allowInternetAccess: false`, `allowOut`, or `denyOut`.'
      default:
        useStealth: false
        useProxy: false
        acceptCookies: false
    ErrorResponse:
      type: object
      properties:
        message:
          type: string
    StartExtractJobResponse:
      type: object
      properties:
        jobId:
          type: string
      required:
      - jobId
    StartExtractJobParams:
      type: object
      properties:
        urls:
          type: array
          items:
            type: string
        systemPrompt:
          type: string
        maxLinks:
          type: number
        prompt:
          type: string
        schema:
          type: object
        sessionOptions:
          $ref: '#/components/schemas/CreateSessionParams'
        waitFor:
          default: 0
          type: number
      additionalProperties: false
      required:
      - urls
    ProxyCountry:
      type: string
      enum:
      - AD
      - AE
      - AF
      - AL
      - AM
      - AO
      - AR
      - AT
      - AU
      - AW
      - AZ
      - BA
      - BD
      - BE
      - BG
      - BH
      - BJ
      - BO
      - BR
      - BS
      - BT
      - BY
      - BZ
      - CA
      - CF
      - CH
      - CI
      - CL
      - CM
      - CN
      - CO
      - CR
      - CU
      - CY
      - CZ
      - DE
      - DJ
      - DK
      - DM
      - EC
      - EE
      - EG
      - ES
      - ET
      - EU
      - FI
      - FJ
      - FR
      - GB
      - GE
      - GH
      - GM
      - GR
      - HK
      - HN
      - HR
      - HT
      - HU
      - ID
      - IE
      - IL
      - IN
      - IQ
      - IR
      - IS
      - IT
      - JM
      - JO
      - JP
      - KE
      - KH
      - KR
      - KW
      - KZ
      - LB
      - LI
      - LR
      - LT
      - LU
      - LV
      - MA
      - MC
      - MD
      - ME
      - MG
      - MK
      - ML
      - MM
      - MN
      - MR
      - MT
      - MU
      - MV
      - MX
      - MY
      - MZ
      - NG
      - NL
      - 'NO'
      - NZ
      - OM
      - PA
      - PE
      - PH
      - PK
      - PL
      - PR
      - PT
      - PY
      - QA
      - RANDOM_COUNTRY
      - RO
      - RS
      - RU
      - SA
      - SC
      - SD
      - SE
      - SG
      - SI
      - SK
      - SN
      - SS
      - TD
      - TG
      - TH
      - TM
      - TN
      - TR
      - TT
      - TW
      - UA
      - UG
      - US
      - UY
      - UZ
      - VE
      - VG
      - VN
      - YE
      - ZA
      - ZM
      - ZW
      - ad
      - ae
      - af
      - al
      - am
      - ao
      - ar
      - at
      - au
      - aw
      - az
      - ba
      - bd
      - be
      - bg
      - bh
      - bj
      - bo
      - br
      - bs
      - bt
      - by
      - bz
      - ca
      - cf
      - ch
      - ci
      - cl
      - cm
      - cn
      - co
      - cr
      - cu
      - cy
      - cz
      - de
      - dj
      - dk
      - dm
      - ec
      - ee
      - eg
      - es
      - et
      - eu
      - fi
      - fj
      - fr
      - gb
      - ge
      - gh
      - gm
      - gr
      - hk
      - hn
      - hr
      - ht
      - hu
      - id
      - ie
      - il
      - in
      - iq
      - ir
      - is
      - it
      - jm
      - jo
      - jp
      - ke
      - kh
      - kr
      - kw
      - kz
      - lb
      - li
      - lr
      - lt
      - lu
      - lv
      - ma
      - mc
      - md
      - me
      - mg
      - mk
      - ml
      - mm
      - mn
      - mr
      - mt
      - mu
      - mv
      - mx
      - my
      - mz
      - ng
      - nl
      - 'no'
      - nz
      - om
      - pa
      - pe
      - ph
      - pk
      - pl
      - pr
      - pt
      - py
      - qa
      - ro
      - rs
      - ru
      - sa
      - sc
      - sd
      - se
      - sg
      - si
      - sk
      - sn
      - ss
      - td
      - tg
      - th
      - tm
      - tn
      - tr
      - tt
      - tw
      - ua
      - ug
      - us
      - uy
      - uz
      - ve
      - vg
      - vn
      - ye
      - za
      - zm
      - zw
    Device:
      type: string
      enum:
      - desktop
      - mobile
    SessionRegion:
      type: string
      description: Region to run the session in. The asia-south region is only available on Enterprise and Select plans. Get in touch at https://calendly.com/shri-hyperbrowser/demo.
      enum:
      - us
      - us-central
      - us-west
      - us-east
      - asia-south
      - europe-west
    ExtractJobResponse:
      type: object
      properties:
        jobId:
          type: string
        status:
          $ref: '#/components/schemas/JobStatus'
        data:
          type: object
        error:
          type: string
      additionalProperties: false
      required:
      - jobId
      - status
    JobStatus:
      type: string
      enum:
      - pending
      - running
      - completed
      - failed
      - stopped
    Platform:
      type: string
      enum:
      - chrome
      - firefox
      - safari
      - edge
    ScreenConfig:
      type: object
      properties:
        width:
          type: number
          default: 1280
        height:
          type: number
          default: 720
    ISO639_1:
      type: string
      enum:
      - aa
      - ab
      - ae
      - af
      - ak
      - am
      - an
      - ar
      - as
      - av
      - ay
      - az
      - ba
      - be
      - bg
      - bh
      - bi
      - bm
      - bn
      - bo
      - br
      - bs
      - ca
      - ce
      - ch
      - co
      - cr
      - cs
      - cu
      - cv
      - cy
      - da
      - de
      - dv
      - dz
      - ee
      - el
      - en
      - eo
      - es
      - et
      - eu
      - fa
      - ff
      - fi
      - fj
      - fo
      - fr
      - fy
      - ga
      - gd
      - gl
      - gn
      - gu
      - gv
      - ha
      - he
      - hi
      - ho
      - hr
      - ht
      - hu
      - hy
      - hz
      - ia
      - id
      - ie
      - ig
      - ii
      - ik
      - io
      - is
      - it
      - iu
      - ja
      - jv
      - ka
      - kg
      - ki
      - kj
      - kk
      - kl
      - km
      - kn
      - ko
      - kr
      - ks
      - ku
      - kv
      - kw
      - ky
      - la
      - lb
      - lg
      - li
      - ln
      - lo
      - lt
      - lu
      - lv
      - mg
      - mh
      - mi
      - mk
      - ml
      - mn
      - mo
      - mr
      - ms
      - mt
      - my
      - na
      - nb
      - nd
      - ne
      - ng
      - nl
      - nn
      - 'no'
      - nr
      - nv
      - ny
      - oc
      - oj
      - om
      - or
      - os
      - pa
      - pi
      - pl
      - ps
      - pt
      - qu
      - rm
      - rn
      - ro
      - ru
      - rw
      - sa
      - sc
      - sd
      - se
      - sg
      - si
      - sk
      - sl
      - sm
      - sn
      - so
      - sq
      - sr
      - ss
      - st
      - su
      - sv
      - sw
      - ta
      - te
      - tg
      - th
      - ti
      - tk
      - tl
      - tn
      - to
      - tr
      - ts
      - tt
      - tw
      - ty
      - ug
      - uk
      - ur
      - uz
      - ve
      - vi
      - vo
      - wa
      - wo
      - xh
      - yi
      - yo
      - za
      - zh
      - zu
    ProxyRoute:
      type: object
      additionalProperties: false
      required:
      - match
      - proxy
      description: Sends traffic for matching hosts through the session's proxy or straight out.
      properties:
        match:
          oneOf:
          - type: string
          - type: array
            items:
              type: string
            minItems: 1
          description: A hostname, `*.example.com` (subdomains, not `example.com` itself), or `*` (every host), or a list of them. Ports, URLs, and IP addresses are not accepted.
        proxy:
          type: string
          enum:
          - direct
          - default
          description: '`direct` sends the traffic straight out of the browser''s machine; `default` sends it through the session''s proxy.'
    CreateSessionProfile:
      type: object
      properties:
        id:
          type: string
        persistChanges:
          type: boolean
        persistNetworkCache:
          type: boolean
          description: When persisting profile changes, also persist the browser's network cache (HTTP cache).
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
    X402SessionManagement:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: The managementToken from the X402 session purchase response. Valid for 24 hours and scoped to that session; no API key or further payment is required.
x-provenance:
  method: harvested
  publisher: Hyperbrowser
  source: https://www.hyperbrowser.ai/docs/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)