Notte Sessions API

Start, status, and stop remote cloud browser sessions with stealth, proxies, and CAPTCHA solving. Manage cookies, network logs, replay, debug info, and CDP/viewer connection URLs for Playwright, Puppeteer, Selenium, or browser-use.

OpenAPI Specification

notte-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Notte API
  description: >-
    Notte is a REST API for web browser and agent infrastructure for AI. It
    creates cloud browser sessions, runs autonomous web agents from
    natural-language tasks, exposes a perception layer to observe / step /
    scrape live pages, performs one-shot scraping and AI web search, and manages
    personas, vaults, profiles, secrets, file storage, and serverless functions.
    The core framework is open source (SSPL-1.0). This document models the
    primary documented surface; see https://api.notte.cc/openapi.json for the
    full machine-generated specification.
  termsOfService: https://notte.cc/terms
  contact:
    name: Notte
    url: https://notte.cc
  license:
    name: Server Side Public License v1 (SSPL-1.0)
    url: https://www.mongodb.com/licensing/server-side-public-license
  version: 1.4.40
servers:
  - url: https://api.notte.cc
security:
  - BearerAuth: []
tags:
  - name: Sessions
    description: Create and manage remote cloud browser sessions.
  - name: Page
    description: Perception layer - observe, step (execute), and scrape a live session page.
  - name: Agents
    description: Run autonomous web agents from natural-language tasks.
  - name: Scraping
    description: One-shot scraping of a URL or raw HTML, plus AI web search.
  - name: Personas
    description: Disposable digital identities with email, phone, and 2FA.
  - name: Vaults
    description: Secure credential and credit-card storage injected into runs.
  - name: Health
    description: Service health check.
paths:
  /health:
    get:
      operationId: healthCheck
      tags:
        - Health
      summary: Health check
      description: Returns the health status of the Notte API.
      security: []
      responses:
        '200':
          description: Service is healthy.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: ok
  /sessions/start:
    post:
      operationId: sessionStart
      tags:
        - Sessions
      summary: Session Start
      description: Starts a remote cloud browser session.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SessionStartRequest'
      responses:
        '200':
          description: The started session.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionResponse'
  /sessions:
    get:
      operationId: listSessions
      tags:
        - Sessions
      summary: List Sessions
      description: Lists sessions for the authenticated account.
      parameters:
        - name: only_active
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: page
          in: query
          required: false
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            default: 10
      responses:
        '200':
          description: A paginated list of sessions.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SessionResponse'
  /sessions/{session_id}:
    get:
      operationId: sessionStatus
      tags:
        - Sessions
      summary: Session Status
      description: Returns the current status of a session.
      parameters:
        - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: The session status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionResponse'
  /sessions/{session_id}/stop:
    delete:
      operationId: sessionStop
      tags:
        - Sessions
      summary: Session Stop
      description: Stops and closes a running session.
      parameters:
        - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: The closed session.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionResponse'
  /sessions/{session_id}/debug:
    get:
      operationId: sessionDebugInfo
      tags:
        - Sessions
      summary: Session Debug Info
      description: Returns debug information including the live viewer and CDP URLs.
      parameters:
        - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: Debug information for the session.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ws_url:
                    type: string
                  cdp_url:
                    type: string
                  viewer_url:
                    type: string
  /sessions/{session_id}/replay:
    get:
      operationId: sessionReplay
      tags:
        - Sessions
      summary: Session Replay
      description: Returns a replay (WEBP) of the session.
      parameters:
        - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: Session replay binary.
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
  /sessions/{session_id}/cookies:
    get:
      operationId: sessionCookiesGet
      tags:
        - Sessions
      summary: Session Cookies Get
      description: Returns the cookies for a session.
      parameters:
        - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: The session cookies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CookiesResponse'
    post:
      operationId: sessionCookiesSet
      tags:
        - Sessions
      summary: Session Cookies Set
      description: Sets cookies on a session.
      parameters:
        - $ref: '#/components/parameters/SessionId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetCookiesRequest'
      responses:
        '200':
          description: Cookies set.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CookiesResponse'
  /sessions/{session_id}/page/observe:
    post:
      operationId: pageObserve
      tags:
        - Page
      summary: Page Observe
      description: >-
        Runs Notte's perception layer on the current page and returns the set of
        available actions a model or human can take next.
      parameters:
        - $ref: '#/components/parameters/SessionId'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ObserveRequest'
      responses:
        '200':
          description: The observation including available actions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObserveResponse'
  /sessions/{session_id}/page/execute:
    post:
      operationId: pageExecute
      tags:
        - Page
      summary: Page Execute (Step)
      description: >-
        Executes a single action (a step) on the current page, such as click,
        fill, scroll, navigate, select, upload, or wait.
      parameters:
        - $ref: '#/components/parameters/SessionId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StepRequest'
      responses:
        '200':
          description: The result of the executed action.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StepResponse'
  /sessions/{session_id}/page/scrape:
    post:
      operationId: pageScrape
      tags:
        - Page
      summary: Page Scrape
      description: Scrapes structured content from the current page of a session.
      parameters:
        - $ref: '#/components/parameters/SessionId'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScrapeRequest'
      responses:
        '200':
          description: The scraped content.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScrapeResponse'
  /sessions/{session_id}/page/screenshot:
    post:
      operationId: pageScreenshot
      tags:
        - Page
      summary: Page Screenshot
      description: Captures a screenshot of the current page.
      parameters:
        - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: The screenshot image.
          content:
            image/png:
              schema:
                type: string
                format: binary
  /agents/start:
    post:
      operationId: agentStart
      tags:
        - Agents
      summary: Agent Start
      description: >-
        Starts an autonomous web agent that performs a natural-language task on a
        browser session.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AgentStartRequest'
      responses:
        '200':
          description: The started agent.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentResponse'
  /agents:
    get:
      operationId: listAgents
      tags:
        - Agents
      summary: List Agents
      description: Lists agents for the authenticated account.
      parameters:
        - name: only_active
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: page
          in: query
          required: false
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            default: 10
      responses:
        '200':
          description: A list of agents.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AgentResponse'
  /agents/{agent_id}:
    get:
      operationId: agentStatus
      tags:
        - Agents
      summary: Agent Status
      description: Returns the status and result of an agent run.
      parameters:
        - $ref: '#/components/parameters/AgentId'
      responses:
        '200':
          description: The agent status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentStatusResponse'
  /agents/{agent_id}/stop:
    delete:
      operationId: agentStop
      tags:
        - Agents
      summary: Agent Stop
      description: Stops a running agent.
      parameters:
        - $ref: '#/components/parameters/AgentId'
      responses:
        '200':
          description: The stopped agent.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentResponse'
  /agents/{agent_id}/workflow/code:
    get:
      operationId: getScript
      tags:
        - Agents
      summary: Get Script
      description: Returns the reproducible workflow script generated from an agent run.
      parameters:
        - $ref: '#/components/parameters/AgentId'
      responses:
        '200':
          description: The generated workflow code.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: string
  /scrape:
    post:
      operationId: scrapeWebpage
      tags:
        - Scraping
      summary: Scrape Webpage
      description: >-
        One-shot scrape of a URL. Returns main content, links, images, or
        AI-extracted structured data against an optional response format.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GlobalScrapeRequest'
      responses:
        '200':
          description: The scraped content.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScrapeResponse'
  /scrape_from_html:
    post:
      operationId: scrapeFromHtml
      tags:
        - Scraping
      summary: Scrape From HTML
      description: Scrapes structured content from a supplied raw HTML payload.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScrapeFromHtmlRequest'
      responses:
        '200':
          description: The scraped content.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScrapeResponse'
  /search:
    post:
      operationId: searchWeb
      tags:
        - Scraping
      summary: Search Web
      description: Runs an AI web search and returns results.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
      responses:
        '200':
          description: The search results.
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      type: object
  /personas/create:
    post:
      operationId: personaCreate
      tags:
        - Personas
      summary: Persona Create
      description: >-
        Creates a disposable digital identity, optionally with a phone number
        and a dedicated vault, for account-creation and authentication workflows.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonaCreateRequest'
      responses:
        '200':
          description: The created persona.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonaResponse'
  /personas:
    get:
      operationId: listPersonas
      tags:
        - Personas
      summary: List Personas
      description: Lists personas for the authenticated account.
      responses:
        '200':
          description: A paginated list of personas.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PersonaResponse'
  /personas/{persona_id}:
    get:
      operationId: personaGet
      tags:
        - Personas
      summary: Persona Get
      description: Returns a persona by ID.
      parameters:
        - $ref: '#/components/parameters/PersonaId'
      responses:
        '200':
          description: The persona.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonaResponse'
    delete:
      operationId: personaDelete
      tags:
        - Personas
      summary: Persona Delete
      description: Deletes a persona.
      parameters:
        - $ref: '#/components/parameters/PersonaId'
      responses:
        '200':
          description: The deleted persona.
          content:
            application/json:
              schema:
                type: object
                properties:
                  persona_id:
                    type: string
                  status:
                    type: string
  /personas/{persona_id}/emails:
    get:
      operationId: personaEmailsList
      tags:
        - Personas
      summary: Persona Emails List
      description: Lists emails received by the persona inbox.
      parameters:
        - $ref: '#/components/parameters/PersonaId'
      responses:
        '200':
          description: A list of emails.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
  /personas/{persona_id}/sms:
    get:
      operationId: personaSmsList
      tags:
        - Personas
      summary: Persona SMS List
      description: Lists SMS messages received by the persona phone number.
      parameters:
        - $ref: '#/components/parameters/PersonaId'
      responses:
        '200':
          description: A list of SMS messages.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
  /vaults/create:
    post:
      operationId: vaultCreate
      tags:
        - Vaults
      summary: Vault Create
      description: Creates a secure vault for storing credentials and credit cards.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VaultCreateRequest'
      responses:
        '200':
          description: The created vault.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Vault'
  /vaults:
    get:
      operationId: listVaults
      tags:
        - Vaults
      summary: List Vaults
      description: Lists vaults for the authenticated account.
      responses:
        '200':
          description: A paginated list of vaults.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Vault'
  /vaults/{vault_id}:
    delete:
      operationId: vaultDelete
      tags:
        - Vaults
      summary: Vault Delete
      description: Deletes a vault.
      parameters:
        - $ref: '#/components/parameters/VaultId'
      responses:
        '200':
          description: The deleted vault.
          content:
            application/json:
              schema:
                type: object
                properties:
                  vault_id:
                    type: string
                  status:
                    type: string
  /vaults/{vault_id}/credentials:
    get:
      operationId: vaultCredentialsGet
      tags:
        - Vaults
      summary: Vault Credentials Get
      description: Returns stored credentials for a vault.
      parameters:
        - $ref: '#/components/parameters/VaultId'
        - name: url
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: The credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Credential'
    post:
      operationId: vaultCredentialsAdd
      tags:
        - Vaults
      summary: Vault Credentials Add
      description: Adds credentials to a vault.
      parameters:
        - $ref: '#/components/parameters/VaultId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Credential'
      responses:
        '200':
          description: The added credential.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Credential'
    delete:
      operationId: vaultCredentialsDelete
      tags:
        - Vaults
      summary: Vault Credentials Delete
      description: Deletes credentials from a vault.
      parameters:
        - $ref: '#/components/parameters/VaultId'
        - name: url
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Deletion result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Notte API key obtained from the Notte Console (https://console.notte.cc),
        passed as a Bearer token in the Authorization header. The SDK reads the
        NOTTE_API_KEY environment variable automatically.
  parameters:
    SessionId:
      name: session_id
      in: path
      required: true
      schema:
        type: string
    AgentId:
      name: agent_id
      in: path
      required: true
      schema:
        type: string
    PersonaId:
      name: persona_id
      in: path
      required: true
      schema:
        type: string
    VaultId:
      name: vault_id
      in: path
      required: true
      schema:
        type: string
  schemas:
    SessionStartRequest:
      type: object
      properties:
        headless:
          type: boolean
          default: true
          description: Whether to run the session in headless mode.
        solve_captchas:
          type: boolean
          default: false
          description: Whether to automatically attempt to solve captchas.
        max_duration_minutes:
          type: integer
          default: 15
          maximum: 1440
          description: Maximum session lifetime in minutes.
        idle_timeout_minutes:
          type: integer
          default: 3
          maximum: 15
          description: Inactivity timeout in minutes.
        proxies:
          description: Proxy configuration (boolean to enable defaults or an array of proxy objects).
          oneOf:
            - type: boolean
            - type: array
              items:
                type: object
        browser_type:
          type: string
          default: chromium
          enum: [chromium, chrome, firefox, chrome-nightly, chrome-turbo]
        user_agent:
          type: string
          nullable: true
        chrome_args:
          type: array
          items:
            type: string
        viewport_width:
          type: integer
          nullable: true
        viewport_height:
          type: integer
          nullable: true
        aspect_ratio:
          type: string
          enum: ['5:4', '16:9']
          nullable: true
        use_file_storage:
          type: boolean
          default: true
        screenshot_type:
          type: string
          default: last_action
          enum: [raw, full, last_action]
        web_bot_auth:
          type: boolean
          default: false
        extra_http_headers:
          type: object
          additionalProperties:
            type: string
          nullable: true
        vault_id:
          type: string
          nullable: true
    SessionResponse:
      type: object
      properties:
        session_id:
          type: string
        status:
          type: string
          enum: [active, closed, error, timed_out]
        created_at:
          type: string
          format: date-time
        last_accessed_at:
          type: string
          format: date-time
        idle_timeout_minutes:
          type: integer
        max_duration_minutes:
          type: integer
        browser_type:
          type: string
        user_agent:
          type: string
          nullable: true
        viewport_width:
          type: integer
          nullable: true
        viewport_height:
          type: integer
          nullable: true
        network_request_bytes:
          type: integer
        network_response_bytes:
          type: integer
        viewer_url:
          type: string
          nullable: true
        cdp_url:
          type: string
          nullable: true
    ObserveRequest:
      type: object
      properties:
        min_nb_actions:
          type: integer
          nullable: true
          description: Minimum number of actions to surface.
        max_nb_actions:
          type: integer
          nullable: true
          description: Maximum number of actions to surface.
        instructions:
          type: string
          nullable: true
          description: Natural-language guidance for what to look for on the page.
        perception_type:
          type: string
          nullable: true
          description: Perception strategy to apply.
    ObserveResponse:
      type: object
      properties:
        session_id:
          type: string
        title:
          type: string
        url:
          type: string
        screenshot:
          type: string
          nullable: true
        space:
          type: object
          description: The action space - the set of available actions on the page.
          properties:
            actions:
              type: array
              items:
                $ref: '#/components/schemas/Action'
    StepRequest:
      type: object
      required:
        - action
      properties:
        action:
          $ref: '#/components/schemas/Action'
    Action:
      type: object
      description: >-
        A single browser action. Examples include click, fill, check, scroll,
        goto, go_back, go_forward, reload, wait, press_key, select_dropdown_option,
        upload_file, download_file, scrape, and captcha_solve.
      required:
        - type
      properties:
        type:
          type: string
          example: click
        id:
          type: string
          description: The action identifier returned by observe.
          nullable: true
        value:
          type: string
          description: The value for fill / select / press_key style actions.
          nullable: true
        url:
          type: string
          description: The target URL for a goto action.
          nullable: true
    StepResponse:
      type: object
      properties:
        session_id:
          type: string
        success:
          type: boolean
        message:
          type: string
          nullable: true
    ScrapeRequest:
      type: object
      properties:
        selector:
          type: string
          nullable: true
          description: Optional CSS selector to scope extraction.
        scrape_links:
          type: boolean
          default: false
        scrape_images:
          type: boolean
          default: false
        ignored_tags:
          type: array
          items:
            type: string
          nullable: true
        only_main_content:
          type: boolean
          default: true
        only_images:
          type: boolean
          default: false
        response_format:
          type: object
          nullable: true
          description: A JSON schema (e.g. derived from a Pydantic model) for AI-structured extraction.
        instructions:
          type: string
          nullable: true
          description: Natural-language extraction instructions.
        use_link_placeholders:
          type: boolean
          default: false
    GlobalScrapeRequest:
      allOf:
        - $ref: '#/components/schemas/ScrapeRequest'
        - type: object
          required:
            - url
          properties:
            url:
              type: string
              description: The URL to scrape.
            headless:
              type: boolean
              default: true
            solve_captchas:
              type: boolean
              default: false
            proxies:
              oneOf:
                - type: boolean
                - type: array
                  items:
                    type: object
            browser_type:
              type: string
              default: chromium
    ScrapeFromHtmlRequest:
      allOf:
        - $ref: '#/components/schemas/ScrapeRequest'
        - type: object
          properties:
            frames:
              type: array
              description: One or more HTML frames to scrape.
              items:
                type: object
                properties:
                  html:
                    type: string
                  url:
                    type: string
    ScrapeResponse:
      type: object
      properties:
        success:
          type: boolean
        content:
          type: string
          nullable: true
          description: The extracted main content (markdown).
        structured:
          type: object
          nullable: true
          description: AI-extracted structured data matching the response_format.
        links:
          type: array
          items:
            type: string
          nullable: true
        images:
          type: array
          items:
            type: string
          nullable: true
    SearchRequest:
      type: object
      required:
        - q
      properties:
        q:
          type: string
          description: The search query.
        depth:
          type: string
          description: Search depth.
        outputType:
          type: string
          description: Desired output type.
    AgentStartRequest:
      type: object
      required:
        - task
        - session_id
      properties:
        task:
          type: string
          description: The task that the agent should perform.
        session_id:
          type: string
          description: The ID of the session to run the agent on.
        url:
          type: string
          nullable: true
          description: Optional starting URL for the agent.
        response_format:
          type: object
          nullable: true
          description: Desired response schema for structured agent output.
        session_offset:
          type: integer
          nullable: true
          description: Step from which to gather information.
        reasoning_model:
          type: string
          default: vertex_ai/gemini-2.5-flash
          description: The reasoning model to use.
        use_vision:
          type: boolean
          default: true
        max_steps:
          type: integer
          default: 20
          minimum: 1
          maximum: 150
        vault_id:
          type: string
          nullable: true
        persona_id:
          type: string
          nullable: true
        notifier_config:
          type: object
          nullable: true
    AgentResponse:
      type: object
      properties:
        agent_id:
          type: string
        created_at:
          type: string
          format: date-time
        session_id:
          type: string
        status:
          type: string
          enum: [active, closed]
        closed_at:
          type: string
          format: date-time
          nullable: true
        saved:
          type: boolean
          default: false
    AgentStatusResponse:
      allOf:
        - $ref: '#/components/schemas/AgentResponse'
        - type: object
          properties:
            task:
              type: string
            success:
              type: boolean
              nullable: true
            answer:
              type: string
              nullable: true
            steps:
              type: array
              items:
                type: object
    PersonaCreateRequest:
      type: object
      properties:
        create_vault:
          type: boolean
          default: false
          description: Whether to create a dedicated vault for the persona.
        create_phone_number:
          type: boolean
          default: false
          description: Whether to provision a phone number for the persona.
    PersonaResponse:
      type: object
      properties:
        persona_id:
          type: string
        email:
          type: string
          nullable: true
        phone_number:
          type: string
          nullable: true
        vault_id:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
    VaultCreateRequest:
      type: object
      properties:
        name:
          type: string
          description: The vault name.
    Vault:
      type: object
      properties:
        vault_id:
          type: string
        name:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
    Credential:
      type: object


# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/notte/refs/heads/main/openapi/notte-openapi.yml