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