> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zenrows.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> The Zenrows API (Fetch, Extract, Crawl and Batch) is described in OpenAPI 3.1 at https://www.zenrows.com/openapi.json and listed in the RFC 9727 API catalog at https://www.zenrows.com/.well-known/api-catalog. Every endpoint also has its own page under /api-reference with its schema. Use the spec for exact parameter names and types. To call Zenrows from an agent, connect the MCP server at https://mcp.zenrows.com/mcp. To search these docs from an agent, connect the docs MCP server at https://docs.zenrows.com/mcp. Agent skills for Zenrows are published at https://github.com/ZenRows/cli and install with `npx skills add ZenRows/cli`.

# Get an API key for your agent, no signup required

> Start using Zenrows from your agent without signing up. This call returns a working API key straight away: no account setup, no login, no payment details. The key works right away on the free plan. The account is on the Free plan from signup: 5,000 credits per month, renewed monthly. A person who wants to own it opens `claimUrl` and claims it; the same key keeps working.

Contract published at https://app.zenrows.com/agent-onboarding/auth.md, and advertised as `agent_auth.signup_endpoint` in https://app.zenrows.com/.well-known/oauth-protected-resource.



## OpenAPI

````yaml /api-reference/openapi.json post /api/agent/signup
openapi: 3.1.0
info:
  title: Zenrows API
  version: 1.0.0
  summary: >-
    Reach any page, including the protected web, and return it as HTML,
    Markdown, plaintext, PDF or structured JSON.
  description: >-
    Zenrows is web data infrastructure for agents and applications. Three HTTP
    surfaces are described here:


    - **Fetch and Extract**: one synchronous request per page, at
    `https://api.zenrows.com/v1/`. Authentication is the `apikey` query
    parameter.

    - **Crawl**: collect the URLs behind one start page, at
    `https://api.zenrows.com/v1/crawls`. Authentication is the `X-API-Key`
    header or the `apikey` query parameter.

    - **Batch**: asynchronous jobs of up to 100,000 URLs, at
    `https://async.api.zenrows.com/v1`. Authentication is the `X-API-Key`
    header.


    **Browser** is not described here because it is not HTTP: you connect
    Puppeteer or Playwright to a WebSocket endpoint. See
    https://docs.zenrows.com/browser-sessions/introduction.


    **Cost.** A request costs 1 credit, 5 with JavaScript rendering, 10 with
    premium proxies, 25 with both, and 1 to 25 under `mode=auto`. Failed
    requests are never charged. The free tier is 5,000 credits a month, no card.


    **Versioning and deprecation.** The version is in the URL path (`/v1`, the
    only version so far). Inside a version Zenrows only adds: new endpoints,
    optional parameters, response fields and headers. Nothing is removed or
    changed. Retiring a version is announced at least twelve months ahead, and
    every response from a deprecated version carries the `Deprecation` (RFC
    9745) and `Sunset` (RFC 8594) headers. Policy:
    https://docs.zenrows.com/api-versioning.


    **Getting a key without a human.** `POST
    https://app.zenrows.com/api/agent/signup` returns a usable key; the spec is
    at https://www.zenrows.com/auth.md and a setup playbook at
    https://www.zenrows.com/SKILL.md.
  termsOfService: https://www.zenrows.com/legal/terms-of-use
  contact:
    name: Zenrows support
    email: support@zenrows.com
    url: https://www.zenrows.com/contact
  license:
    name: Proprietary
    url: https://www.zenrows.com/legal/terms-of-use
servers:
  - url: https://api.zenrows.com/v1
    description: Fetch and Extract (synchronous)
security:
  - apiKeyQuery: []
tags:
  - name: Fetch
    description: Retrieve one page, optionally rendered, proxied, converted or extracted.
  - name: Extract
    description: Which domains Extract serves, and getting a new one prepared.
  - name: Crawl
    description: Collect the URLs behind one start page, and each page's HTML when asked.
  - name: Batch
    description: Submit many URLs as one job and collect the results.
  - name: Account
    description: Plan, credits and concurrency for the calling key.
  - name: Onboarding
    description: Get a working key with no human in the loop.
externalDocs:
  description: Zenrows documentation
  url: https://docs.zenrows.com
paths:
  /api/agent/signup:
    post:
      tags:
        - Onboarding
      summary: Get an API key for your agent, no signup required
      description: >-
        Start using Zenrows from your agent without signing up. This call
        returns a working API key straight away: no account setup, no login, no
        payment details. The key works right away on the free plan. The account
        is on the Free plan from signup: 5,000 credits per month, renewed
        monthly. A person who wants to own it opens `claimUrl` and claims it;
        the same key keeps working.


        Contract published at https://app.zenrows.com/agent-onboarding/auth.md,
        and advertised as `agent_auth.signup_endpoint` in
        https://app.zenrows.com/.well-known/oauth-protected-resource.
      operationId: createAgentAccount
      parameters:
        - name: X-ZR-Agent-Id
          in: header
          required: false
          description: Optional provenance, anonymous and free of personal data.
          schema:
            type: string
        - name: X-ZR-Client
          in: header
          required: false
          description: Optional name of the calling client.
          schema:
            type: string
        - name: X-ZR-Source
          in: header
          required: false
          description: Optional origin of the signup.
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              description: No fields are required. An empty body is the normal call.
              additionalProperties: false
      responses:
        '201':
          description: The account exists and the key works immediately.
          headers:
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
          content:
            application/json:
              schema:
                type: object
                required:
                  - apiKey
                  - accountId
                  - claimUrl
                  - trialEndsAt
                properties:
                  apiKey:
                    type: string
                    description: >-
                      Pass it as the `apikey` query parameter to Fetch, or as
                      `X-API-Key` to Batch.
                  accountId:
                    type: string
                    format: uuid
                  claimUrl:
                    type: string
                    format: uri
                    description: >-
                      Where a person claims the account to own it. Show this
                      link to a human; do not sit on it.
                  trialEndsAt:
                    type: string
                    format: date-time
                    description: >-
                      End of the first monthly period (signup + 1 month). The
                      Free plan renews monthly; this value is not refreshed.
              example:
                apiKey: 8d1c2e9f0a7b4c3d5e6f7a8b9c0d1e2f3a4b5c6d
                accountId: 3f2b8c1e-5a4d-4e7f-9b6a-1c2d3e4f5a6b
                claimUrl: https://app.zenrows.com/claim/q7Rk2LmX9pTz?utm_source=agent
                trialEndsAt: '2026-11-15T10:00:00+00:00'
        '429':
          description: >-
            Error `rate_limited`: three signups per client IP per 24 hours.
            Wait; do not go looking for another signup URL.
          headers:
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimitPolicy'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            Retry-After:
              $ref: '#/components/headers/RetryAfter'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignupError'
        '500':
          description: >-
            Error `signup_failed`. Retry once with backoff, then hand it to a
            human.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignupError'
        '503':
          description: >-
            Error `signup_disabled`: the kill switch is on. Retry later, and do
            not invent another signup URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignupError'
      security: []
      servers:
        - url: https://app.zenrows.com
          description: Dashboard host, which serves the agent onboarding surface
components:
  headers:
    RateLimitPolicy:
      description: >-
        The standing rule, as a structured field: `"signup";q=3;w=86400` is
        three signups per client IP per 24 hours. Admin-editable, so read it
        rather than assuming three.
      schema:
        type: string
        example: '"signup";q=3;w=86400'
    RateLimit:
      description: >-
        Where this caller stands: `r` is signups left, `t` is seconds until one
        frees. `t` counts from the oldest signup still inside the window, so it
        is a real wait, not the window length restated.
      schema:
        type: string
        example: '"signup";r=1;t=52341'
    RetryAfter:
      description: >-
        Seconds to wait before signing up again. Present only when nothing is
        left.
      schema:
        type: integer
        example: 52341
  schemas:
    SignupError:
      type: object
      description: >-
        The onboarding surface has its own error shape, flatter than the API's
        envelope. Branch on `error`.
      properties:
        error:
          type: string
          examples:
            - rate_limited
            - signup_disabled
            - signup_failed
            - invalid_key
        message:
          type: string
  securitySchemes:
    apiKeyQuery:
      type: apiKey
      in: query
      name: apikey
      description: >-
        Fetch, Extract, Crawl and the account endpoint accept the key as the
        `apikey` query parameter. Keys are per account and self-serve: create
        one in the Zenrows dashboard (app.zenrows.com), or, for an agent with no
        human present, `POST https://app.zenrows.com/api/agent/signup`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.