Live Direct Marketing Phantom Browser API

The Phantom Browser API from Live Direct Marketing — 28 operation(s) for phantom browser.

Operations 38

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /api/phantom-browser/profiles List Phantom browser profiles · List all Phantom browser profiles #
Ask an LLM
“Which Phantom browser profiles do I have set up?”
“Can I see every browser profile configured for the Phantom desktop client?”
Tell an agent
List all my Phantom browser profiles.
Show every Phantom profile in this workspace.
POST /api/phantom-browser/profiles Create a Phantom browser profile · Create a new Phantom browser profile #
Ask an LLM
“How do I add a new browser profile for the Phantom client?”
“Can I create another Phantom browser profile for a separate identity?”
Tell an agent
Create a new Phantom browser profile.
Add a fresh Phantom profile to my workspace.
POST /api/phantom-browser/profiles/sync Resync profiles to the Phantom client · Re-send the profiles list to the connected Phantom client #
Ask an LLM
“My Phantom desktop client is missing profiles, can I push the list to it again?”
“Is there a way to resend the profile list to the connected Phantom client?”
Tell an agent
Re-send my profile list to the connected Phantom client.
Sync Phantom profiles down to the desktop client now.
GET /api/phantom-browser/profiles/{id} Get one Phantom browser profile · Get a single Phantom browser profile by id #
Ask an LLM
“What settings does a specific Phantom browser profile have?”
“Can I look up the details of a single Phantom profile by its id?”
Tell an agent
Show the details of Phantom profile {id}.
Fetch the configuration of browser profile {id}.
PUT /api/phantom-browser/profiles/{id} Update a Phantom browser profile · Update a Phantom browser profile #
Ask an LLM
“Can I edit the settings of an existing Phantom browser profile?”
“How do I change a Phantom profile I already created?”
Tell an agent
Update the settings of Phantom profile {id}.
Save my changes to browser profile {id}.
DELETE /api/phantom-browser/profiles/{id} Delete a Phantom browser profile · Delete a Phantom browser profile #
Ask an LLM
“How do I remove a Phantom browser profile I no longer use?”
“Can I permanently get rid of one Phantom profile?”
Tell an agent destructive · confirm first
Delete Phantom browser profile {id}.
Remove profile {id} from my Phantom profiles.
GET /api/phantom-browser/client/status Check Phantom desktop client connection · Get the Phantom desktop client connection status #
Ask an LLM
“Is my Phantom desktop client connected right now?”
“What is the connection status of the Phantom client app?”
Tell an agent
Check whether the Phantom desktop client is online.
Show the Phantom client connection status.
POST /api/phantom-browser/client/token/regenerate Regenerate the Phantom client token · Regenerate the Phantom client auth token #
Ask an LLM
“How do I rotate the auth token my Phantom desktop client uses?”
“Can I issue a new Phantom client token if the old one leaked?”
Tell an agent destructive · confirm first
Regenerate the Phantom client auth token.
Rotate my Phantom desktop client token now.
POST /api/phantom-browser/profiles/{id}/launch Launch a Phantom profile on desktop · Launch a profile on the user's Phantom desktop client #
Ask an LLM
“How do I start a Phantom browser profile on my desktop client remotely?”
“Can I open a profile in the Phantom app from the API?”
Tell an agent
Launch Phantom profile {id} on my desktop client.
Start browser profile {id} in Phantom.
POST /api/phantom-browser/profiles/{id}/stop Stop a running Phantom profile · Stop a running profile on the Phantom desktop client #
Ask an LLM
“Can I shut down a Phantom profile that is currently running?”
“What stops a running browser profile on the Phantom desktop client?”
Tell an agent
Stop running Phantom profile {id}.
Close the browser for profile {id} on the desktop client.
POST /api/phantom-browser/profiles/{id}/navigate Navigate a Phantom browser to a URL · Navigate the Phantom browser profile to a URL #
Ask an LLM
“Can I tell a Phantom browser profile to open a specific web page?”
“How do I send the Phantom browser to a new URL?”
Tell an agent
Navigate Phantom profile {id} to the page I give you.
Open a new URL in browser profile {id}.
POST /api/phantom-browser/profiles/{id}/screenshot Capture a Phantom browser screenshot · Take a screenshot in the Phantom browser profile (base64 JPEG) #
Ask an LLM
“Can I take a fresh screenshot of what a Phantom profile is showing?”
“Is a new screenshot returned as base64 JPEG data?”
Tell an agent
Take a new screenshot in Phantom profile {id}.
Capture the screen of browser profile {id} as base64 JPEG.
GET /api/phantom-browser/profiles/{id}/screenshot.jpg Download latest Phantom screenshot image · Get the latest Phantom browser screenshot as a JPEG image #
Ask an LLM
“Where can I get the most recent Phantom screenshot as a JPEG file?”
“Can I view the last captured screenshot image without taking a new one?”
Tell an agent
Download the latest screenshot JPEG for profile {id}.
Get the last captured image from Phantom profile {id}.
GET /api/phantom-browser/profiles/{id}/html Get the current page HTML · Get the current Phantom browser page's HTML #
Ask an LLM
“Can I read the HTML source of the page a Phantom profile has open?”
“What markup is the Phantom browser currently showing?”
Tell an agent
Get the HTML of the current page in profile {id}.
Dump the page source from Phantom profile {id}.
GET /api/phantom-browser/profiles/{id}/page-info Get the current page URL and title · Get the current Phantom browser page URL and title #
Ask an LLM
“Which page is a Phantom browser profile on right now?”
“Can I get just the URL and title of the open Phantom page?”
Tell an agent
Tell me the URL and title open in profile {id}.
Show the current page info for Phantom profile {id}.
POST /api/phantom-browser/profiles/{id}/execute Run JavaScript in the Phantom page · Execute JavaScript in the Phantom browser page context #
Ask an LLM
“Can I execute my own JavaScript inside the page a Phantom profile has open?”
“How do I run a script in the Phantom browser page context?”
Tell an agent
Execute a JavaScript snippet in Phantom profile {id}.
Run custom JS on the open page of profile {id}.
POST /api/phantom-browser/profiles/{id}/click Click an element in the Phantom browser · Click an element in the Phantom browser by CSS selector #
Ask an LLM
“Can I click a button on the Phantom page using a CSS selector?”
“How do I make the Phantom browser click an element?”
Tell an agent
Click the element matching my CSS selector in profile {id}.
Press a button on the page open in Phantom profile {id}.
POST /api/phantom-browser/profiles/{id}/type Type text into the Phantom browser · Type text into a focused element or selector in the Phantom browser #
Ask an LLM
“Can I fill in a form field in the Phantom browser?”
“How do I type text into a selector or the focused input?”
Tell an agent
Type text into the input field in Phantom profile {id}.
Enter my text into the focused element of profile {id}.
GET /api/phantom-browser/profiles/{id}/cookies Read cookies from the Phantom page · Get cookies for the current Phantom browser page #
Ask an LLM
“What cookies does the current Phantom browser page have?”
“Can I export the cookies a Phantom profile is holding?”
Tell an agent
Get the cookies for the current page in profile {id}.
List cookies stored on Phantom profile {id}'s open site.
POST /api/phantom-browser/profiles/{id}/cookies Load cookies into the Phantom browser · Set cookies on the current Phantom browser page — lets the worker browse a site… #
Ask an LLM
“Can I import cookies so the Phantom worker browses a site already logged in?”
“Does setting cookies accept a Cookie-Editor or EditThisCookie export?”
Tell an agent
Set my exported cookies on Phantom profile {id}.
Log profile {id} into the site by loading these cookies.
POST /api/phantom-browser/profiles/{id}/scroll Scroll the Phantom browser page · Scroll the current Phantom browser page #
Ask an LLM
“Can I scroll down the page open in a Phantom profile?”
“How do I make the Phantom browser scroll to load more content?”
Tell an agent
Scroll the current page in Phantom profile {id}.
Scroll down on browser profile {id}.
POST /api/phantom-browser/profiles/{id}/wait Wait for a selector on the Phantom page · Wait for a selector to appear in the Phantom browser page #
Ask an LLM
“Can I pause until an element shows up on the Phantom page?”
“How do I wait for a selector to appear before the next browser step?”
Tell an agent
Wait for my selector to appear in Phantom profile {id}.
Hold until the element loads on profile {id}'s page.
POST /api/phantom-browser/profiles/{id}/solve-captcha Solve a captcha on the Phantom page · Solve a captcha on the current Phantom browser page (via RuCaptcha) #
Ask an LLM
“Can the Phantom browser solve a captcha blocking the current page?”
“Which service does Phantom use to solve captchas?”
Tell an agent
Solve the captcha on the page in Phantom profile {id}.
Get past the captcha blocking browser profile {id}.
PUT /api/phantom-browser/profiles/{id}/proxy Set a proxy on a Phantom profile · Set the proxy configuration on a Phantom browser profile #
Ask an LLM
“Can I route a Phantom browser profile through a proxy?”
“How do I configure proxy settings for one Phantom profile?”
Tell an agent
Set the proxy configuration on Phantom profile {id}.
Route browser profile {id} through my proxy.
DELETE /api/phantom-browser/profiles/{id}/proxy Remove a Phantom profile's proxy · Remove the proxy configuration from a Phantom browser profile #
Ask an LLM
“How do I stop a Phantom profile from using its proxy?”
“Can I clear the proxy settings from a browser profile?”
Tell an agent destructive · confirm first
Remove the proxy from Phantom profile {id}.
Clear proxy settings on browser profile {id}.
POST /api/phantom-browser/profiles/{id}/proxy/test Test a Phantom profile's proxy · Test a Phantom browser profile proxy (launch and report IP) #
Ask an LLM
“Is the proxy on my Phantom profile actually working?”
“What IP address does a Phantom profile show through its proxy?”
Tell an agent
Test the proxy on Phantom profile {id} and report the IP.
Check which IP browser profile {id} exits from.
GET /api/phantom-browser/launches List launches of a Phantom profile · List Phantom browser profile launches #
Ask an LLM
“When was a Phantom profile last launched?”
“Can I see the launch history for one browser profile?”
Tell an agent
List the last {limit} launches of Phantom profile {profileId}.
Show launch history for profile {profileId}.
GET /api/phantom-browser/scenarios List Phantom browser scenarios · List Phantom browser scenarios #
Ask an LLM
“Which automation scenarios have I built for the Phantom browser?”
“Can I see all saved Phantom scenarios?”
Tell an agent
List all my Phantom browser scenarios.
Show every saved Phantom automation scenario.
POST /api/phantom-browser/scenarios Create a Phantom browser scenario · Create a new Phantom browser scenario #
Ask an LLM
“How do I save a new automation scenario for the Phantom browser?”
“Can I define a reusable Phantom scenario?”
Tell an agent
Create a new Phantom browser scenario.
Add an automation scenario for the Phantom browser.
GET /api/phantom-browser/scenarios/{id} Get one Phantom browser scenario · Get a single Phantom browser scenario by id #
Ask an LLM
“What steps does a particular Phantom scenario contain?”
“Can I open a single Phantom scenario by id?”
Tell an agent
Show Phantom scenario {id}.
Fetch the definition of browser scenario {id}.
PUT /api/phantom-browser/scenarios/{id} Update a Phantom browser scenario · Update a Phantom browser scenario #
Ask an LLM
“Can I edit an existing Phantom automation scenario?”
“How do I change the steps of a saved Phantom scenario?”
Tell an agent
Update Phantom scenario {id} with my changes.
Edit browser scenario {id}.
DELETE /api/phantom-browser/scenarios/{id} Delete a Phantom browser scenario · Delete a Phantom browser scenario #
Ask an LLM
“How do I remove a Phantom scenario I no longer need?”
“Can I delete one saved automation scenario?”
Tell an agent destructive · confirm first
Delete Phantom scenario {id}.
Remove browser scenario {id} for good.
GET /api/phantom-browser/schedules List Phantom browser schedules · List Phantom browser schedules #
Ask an LLM
“What Phantom browser runs are scheduled?”
“Can I see all Phantom schedules in my workspace?”
Tell an agent
List all my Phantom browser schedules.
Show the scheduled Phantom runs.
POST /api/phantom-browser/schedules Create a Phantom browser schedule · Create a new Phantom browser schedule #
Ask an LLM
“How do I schedule a Phantom browser run to happen automatically?”
“Can I set up a recurring Phantom schedule?”
Tell an agent
Create a new Phantom browser schedule.
Schedule an automatic Phantom browser run.
PUT /api/phantom-browser/schedules/{id} Update a Phantom browser schedule · Update a Phantom browser schedule #
Ask an LLM
“Can I change the timing of an existing Phantom schedule?”
“How do I edit a scheduled Phantom run?”
Tell an agent
Update Phantom schedule {id}.
Change the settings of browser schedule {id}.
DELETE /api/phantom-browser/schedules/{id} Delete a Phantom browser schedule · Delete a Phantom browser schedule #
Ask an LLM
“How do I cancel a Phantom schedule permanently?”
“Can I remove a scheduled Phantom run?”
Tell an agent destructive · confirm first
Delete Phantom schedule {id}.
Remove browser schedule {id}.
GET /api/phantom-browser/admin/stats View Phantom browser admin stats · Get Phantom browser admin stats (SUPER only) #
Ask an LLM
“What usage stats are there for the Phantom browser across the platform?”
“Can a super admin see overall Phantom browser statistics?”
Tell an agent
Show the Phantom browser admin stats.
Get platform-wide Phantom usage statistics.
GET /api/phantom-browser/download/config Download the Phantom client config · Download the Phantom desktop client config.json with the user's token #
Ask an LLM
“Where do I get the config.json for setting up the Phantom desktop client?”
“Can I download a Phantom config file with my token already in it?”
Tell an agent
Download my Phantom desktop client config.json.
Get the Phantom client config file with my token.

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/live-direct-marketing-online:live-direct-marketing-online-phantom-browser-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

live-direct-marketing-online-phantom-browser-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: LDM v3 Phantom Browser API
  description: 'Multi-tenant B2B outreach automation platform. Auth: JWT Bearer (15-min) or tenant API key (ldm_*) managed in CRM Settings → API Keys. All tenant-scoped endpoints require the X-Tenant-Id header.'
  version: 1.0.0
  contact: {}
servers:
- url: https://api.live-direct-marketing.online
  description: Production
- url: https://api.dev.live-direct-marketing.online
  description: Development
- url: http://127.0.0.1:3000
  description: Local
tags:
- name: Phantom Browser
paths:
  /api/phantom-browser/profiles:
    get:
      operationId: PhantomBrowserController_listProfiles
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: List all Phantom browser profiles
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:read
    post:
      operationId: PhantomBrowserController_createProfile
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Create a new Phantom browser profile
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:write
  /api/phantom-browser/profiles/sync:
    post:
      operationId: PhantomBrowserController_syncProfiles
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Re-send the profiles list to the connected Phantom client
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:write
  /api/phantom-browser/profiles/{id}:
    get:
      operationId: PhantomBrowserController_getProfile
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get a single Phantom browser profile by id
      tags:
      - Phantom Browser
    put:
      operationId: PhantomBrowserController_updateProfile
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Update a Phantom browser profile
      tags:
      - Phantom Browser
    delete:
      operationId: PhantomBrowserController_deleteProfile
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Delete a Phantom browser profile
      tags:
      - Phantom Browser
  /api/phantom-browser/client/status:
    get:
      operationId: PhantomBrowserController_getClientStatus
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get the Phantom desktop client connection status
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:read
  /api/phantom-browser/client/token/regenerate:
    post:
      operationId: PhantomBrowserController_regenerateToken
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Regenerate the Phantom client auth token
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:write
  /api/phantom-browser/profiles/{id}/launch:
    post:
      operationId: PhantomBrowserController_launchProfile
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Launch a profile on the user's Phantom desktop client
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/stop:
    post:
      operationId: PhantomBrowserController_stopProfile
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Stop a running profile on the Phantom desktop client
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/navigate:
    post:
      operationId: PhantomBrowserController_navigate
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Navigate the Phantom browser profile to a URL
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/screenshot:
    post:
      operationId: PhantomBrowserController_screenshot
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Take a screenshot in the Phantom browser profile (base64 JPEG)
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/screenshot.jpg:
    get:
      operationId: PhantomBrowserController_screenshotImage
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get the latest Phantom browser screenshot as a JPEG image
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/html:
    get:
      operationId: PhantomBrowserController_getHtml
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get the current Phantom browser page's HTML
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/page-info:
    get:
      operationId: PhantomBrowserController_getPageInfo
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get the current Phantom browser page URL and title
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/execute:
    post:
      operationId: PhantomBrowserController_executeJs
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Execute JavaScript in the Phantom browser page context
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/click:
    post:
      operationId: PhantomBrowserController_click
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Click an element in the Phantom browser by CSS selector
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/type:
    post:
      operationId: PhantomBrowserController_typeText
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Type text into a focused element or selector in the Phantom browser
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/cookies:
    get:
      operationId: PhantomBrowserController_getCookies
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get cookies for the current Phantom browser page
      tags:
      - Phantom Browser
    post:
      operationId: PhantomBrowserController_setCookies
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Set cookies on the current Phantom browser page — lets the worker browse a site…
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/scroll:
    post:
      operationId: PhantomBrowserController_scroll
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Scroll the current Phantom browser page
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/wait:
    post:
      operationId: PhantomBrowserController_waitFor
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Wait for a selector to appear in the Phantom browser page
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/solve-captcha:
    post:
      operationId: PhantomBrowserController_solveCaptcha
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Solve a captcha on the current Phantom browser page (via RuCaptcha)
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/proxy:
    put:
      operationId: PhantomBrowserController_setProxy
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Set the proxy configuration on a Phantom browser profile
      tags:
      - Phantom Browser
    delete:
      operationId: PhantomBrowserController_removeProxy
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Remove the proxy configuration from a Phantom browser profile
      tags:
      - Phantom Browser
  /api/phantom-browser/profiles/{id}/proxy/test:
    post:
      operationId: PhantomBrowserController_testProxy
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Test a Phantom browser profile proxy (launch and report IP)
      tags:
      - Phantom Browser
  /api/phantom-browser/launches:
    get:
      operationId: PhantomBrowserController_listLaunches
      parameters:
      - name: profileId
        required: true
        in: query
        schema:
          type: string
      - name: limit
        required: true
        in: query
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: List Phantom browser profile launches
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:read
  /api/phantom-browser/scenarios:
    get:
      operationId: PhantomBrowserController_listScenarios
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: List Phantom browser scenarios
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:read
    post:
      operationId: PhantomBrowserController_createScenario
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Create a new Phantom browser scenario
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:write
  /api/phantom-browser/scenarios/{id}:
    get:
      operationId: PhantomBrowserController_getScenario
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get a single Phantom browser scenario by id
      tags:
      - Phantom Browser
    put:
      operationId: PhantomBrowserController_updateScenario
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Update a Phantom browser scenario
      tags:
      - Phantom Browser
    delete:
      operationId: PhantomBrowserController_deleteScenario
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Delete a Phantom browser scenario
      tags:
      - Phantom Browser
  /api/phantom-browser/schedules:
    get:
      operationId: PhantomBrowserController_listSchedules
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: List Phantom browser schedules
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:read
    post:
      operationId: PhantomBrowserController_createSchedule
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Create a new Phantom browser schedule
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:write
  /api/phantom-browser/schedules/{id}:
    put:
      operationId: PhantomBrowserController_updateSchedule
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Update a Phantom browser schedule
      tags:
      - Phantom Browser
    delete:
      operationId: PhantomBrowserController_deleteSchedule
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Delete a Phantom browser schedule
      tags:
      - Phantom Browser
  /api/phantom-browser/admin/stats:
    get:
      operationId: PhantomBrowserController_getAdminStats
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get Phantom browser admin stats (SUPER only)
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:read
  /api/phantom-browser/download/config:
    get:
      operationId: PhantomBrowserController_downloadConfig
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Download the Phantom desktop client config.json with the user's token
      tags:
      - Phantom Browser
      x-required-scope:
      - admin:read
components:
  securitySchemes:
    jwt:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: JWT access token from /auth/login (Bearer <token>)
    tenant-api-key:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Tenant API key (Bearer ldm_*) for MCP/A2A clients. Issued via CRM Settings → API Keys.
    rpa-service:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Dedicated RPA service key. No tenant API-key or query-key authentication.