Busymate DevTools core API

Busymate DevTools core API as documented publicly: 20 operations. Contract generated from the documentation by API Evangelist (2026-11-03); not the provider's own document.

Operations 20

GET / GET / #
POST / POST / #
POST /allocate Allocate a port #
GET /api/roadmap Reading the register elsewhere #
GET /ca.pem GET /ca.pem #
GET /ca/bundle Get the CA #
GET /entries Read captured traffic entries #
POST /first-party-token The in-app dashboard consoles obtain the identical token type by exchanging the logged-in session at POST /first-party-token. #
POST /functions/v1/ask POST /functions/v1/ask #
GET /install.sh GET /install.sh #
POST /login POST /login #
PATCH /rest/v1/Auth PATCH /rest/v1/Auth #
GET /rest/v1/devices List your devices #
GET /rest/v1/entries GET /rest/v1/entries #
POST /rest/v1/rpc Callable RPCs #
POST /rest/v1/rpc/effective_settings_for_device POST /rest/v1/rpc/effective_settings_for_device #
POST /rest/v1/rpc/get_stats POST /rest/v1/rpc/get_stats #
GET /rest/v1/service_stats Stats — read the cached snapshot (cheaper than the RPC; refreshed by the 60s cron) #
GET /rest/v1/service_status Status — read the cached snapshot (cheap; updated every ~10s by the VPS status service) #
POST /v1/checkout/confirm Set a breakpoint on a mobile request #

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/busymate-dev:core-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

busymate-dev-core-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: Busymate DevTools core API
  version: '2026-11-03'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-03: 20 operation(s) read from 11 public documentation page(s) (each
    operation names its page in x-source). This is not the provider''s published contract; Busymate DevTools has published no machine-readable
    contract that the pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 14
    documentation: 13
    pages-with-code: 21
    pages-read: 24
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-03'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://busymate.dev/guides/set-a-breakpoint-on-a-mobile-request
  - https://busymate.dev/rest
  - https://docs.busymate.dev/api/busybro-api
  - https://docs.busymate.dev/api/mcp
  - https://docs.busymate.dev/api/rest
  - https://docs.busymate.dev/api/stats-status
  - https://docs.busymate.dev/dashboard/roadmap
  - https://docs.busymate.dev/dashboard/settings
  - https://docs.busymate.dev/proxy/certificate
  - https://docs.busymate.dev/proxy/connect
  - https://docs.busymate.dev/quickstart
  x-docs-section: core
servers:
- url: https://api.busymate.net
paths:
  /:
    get:
      operationId: get
      tags:
      - Api
      summary: GET /
      x-source: https://docs.busymate.dev/proxy/connect
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl \n bash curl -x http://proxy.busymate.net:8888 https://example.com/ "
    post:
      operationId: post
      tags:
      - Api
      summary: POST /
      x-source: https://docs.busymate.dev/proxy/connect
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -x http://localhost:8888 https://example.com/ \n macOS — System Settings → Network → your connection → Details → Proxies.\
          \ Turn on both \"Web Proxy (HTTP)\" and \"Secure Web Proxy (HTTPS)\", set each to the proxy host and port 8888 . \n Firefox — Settings\
          \ → Network Settings → Manual proxy configuration. Set HTTP Proxy to the host, port 8888 , and tick \"Also use this proxy for HTTPS\"\
          . \n Android — Wi-"
  /allocate:
    post:
      operationId: post_allocate
      tags:
      - Allocate
      summary: Allocate a port
      description: Ask the proxy for a port for a device UUID. The port is stable per UUID and allocation spins up the listener immediately.
      x-source: https://docs.busymate.dev/proxy/connect
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostAllocateRequest'
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostAllocateResponse'
      x-evidence:
        kind: documentation
  /api/roadmap:
    get:
      operationId: get_api_roadmap
      tags:
      - Api
      summary: Reading the register elsewhere
      description: Returns the same register as JSON — the pipeline, and every program with its epic, document, and phases (id, title, issue,
        issue_url, floor_status).
      x-source: https://docs.busymate.dev/dashboard/roadmap
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /ca.pem:
    get:
      operationId: get_ca_pem
      tags:
      - Ca
      summary: GET /ca.pem
      x-source: https://docs.busymate.dev/proxy/certificate
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -o busymate-ca.pem https://busymate.net/ca.pem \n security add-trusted-cert -d -r trustRoot  -k ~/Library/Keychains/login.keychain-db\
          \ busymate-ca.pem \n If you're running a local instance, the proxy logs at boot whether its CA is already trusted on the Mac and prints\
          \ the command to run if not. \n Android \n Download the PEM from https://busymate.net/ca.pem . \n Settings → Security → Encryption &\
          \ c"
  /ca/bundle:
    get:
      operationId: get_ca_bundle
      tags:
      - Ca
      summary: Get the CA
      description: Returns the CA certificate and private key as JSON. The endpoint is password‑protected.
      x-source: https://docs.busymate.dev/proxy/certificate
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCaBundleResponse'
      x-evidence:
        kind: documentation
  /entries:
    get:
      operationId: get_entries
      tags:
      - Entries
      summary: Read captured traffic entries
      x-source: https://docs.busymate.dev/api/rest
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /first-party-token:
    post:
      operationId: post_first_party_token
      tags:
      - First Party Token
      summary: The in-app dashboard consoles obtain the identical token type by exchanging the logged-in session at POST /first-party-token.
      description: No further details are provided on this page.
      x-source: https://docs.busymate.dev/api/mcp
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /functions/v1/ask:
    post:
      operationId: post_functions_v1_ask
      tags:
      - Functions
      summary: POST /functions/v1/ask
      x-source: https://docs.busymate.dev/api/busybro-api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostFunctionsV1AskRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -sN -X POST https://api.busymate.net/functions/v1/ask  -H \"Authorization: Bearer $TOKEN \"  -H \"content-type: application/json\"\
          \  -H \"accept: text/event-stream\"  -d '{ \"question\": \"what is the busiest domain in the last hour?\" }' \n Blocking response (JSON)\
          \ \n Omit Accept: text/event-stream and you get a single JSON object once the answer is complete: \n bash curl -s -X POST https://api.busymate.n"
  /install.sh:
    get:
      operationId: get_install_sh
      tags:
      - Install
      summary: GET /install.sh
      x-source: https://docs.busymate.dev/quickstart
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -fsSL https://cdp.busymate.net/install.sh | sh '
  /login:
    post:
      operationId: post_login
      tags:
      - Login
      summary: POST /login
      x-source: https://docs.busymate.dev/dashboard/settings
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: httpie
        snippet: 'http POST https://{{API_HOST}}/login '
  /rest/v1/Auth:
    patch:
      operationId: patch_rest_v1_Auth
      tags:
      - Rest
      summary: PATCH /rest/v1/Auth
      x-source: https://docs.busymate.dev/api/rest
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchRestV1AuthRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl . \n TL;DR \n Base URL https://api.busymate.net/rest/v1/Auth An OAuth access token as both Authorization: Bearer <token>\
          \ and apikey: <token> . Reads GET /rest/v1/<table>?select=… with PostgREST filters ( ?col=eq.value ). Writes POST / PATCH / DELETE on\
          \ /rest/v1/<table> . RPCs POST /rest/v1/rpc/<name> with a JSON body of named args. Access control Postgres RLS + has_capability(section,\
          \ action) —"
  /rest/v1/devices:
    get:
      operationId: get_rest_v1_devices
      tags:
      - Rest
      summary: List your devices
      x-source: https://docs.busymate.dev/api/rest
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /rest/v1/entries:
    get:
      operationId: get_rest_v1_entries
      tags:
      - Rest
      summary: GET /rest/v1/entries
      x-source: https://busymate.dev/rest
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: string
      - name: order
        in: query
        required: false
        schema:
          type: string
      - name: select
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl on day one — no SDK required. Read the docs Query your latest entries — curl bash curl ''https://api.busymate.net/rest/v1/entries?select=id,ts,host,path&order=id.desc&limit=20''  -H
          ''Authorization: Bearer <OAUTH_ACCESS_TOKEN>''  -H ''apikey: <OAUTH_ACCESS_TOKEN>'' Why REST No SDK, no surprises PostgREST over a Bearer
          token — the same identity as dashboard, MCP, and Realtime. No SDK, ever It''s Post'
  /rest/v1/rpc:
    post:
      operationId: post_rest_v1_rpc
      tags:
      - Rest
      summary: Callable RPCs
      x-source: https://docs.busymate.dev/api/rest
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /rest/v1/rpc/effective_settings_for_device:
    post:
      operationId: post_rest_v1_rpc_effective_settings_for_device
      tags:
      - Rest
      summary: POST /rest/v1/rpc/effective_settings_for_device
      x-source: https://busymate.dev/rest
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostRestV1RpcEffectiveSettingsForDeviceRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -X POST ''https://api.busymate.net/rest/v1/rpc/effective_settings_for_device''  -H ''Authorization: Bearer <OAUTH_ACCESS_TOKEN>''  -H
          ''apikey: <OAUTH_ACCESS_TOKEN>''  -H ''Content-Type: application/json''  -d ''{"target_uuid":"<device-uuid>"}'' What teams build From
          capture to pipeline Assert traffic in CI Fail a pipeline when a test run''s captured traffic contains server errors, an unexpected host,
          o'
  /rest/v1/rpc/get_stats:
    post:
      operationId: post_rest_v1_rpc_get_stats
      tags:
      - Rest
      summary: POST /rest/v1/rpc/get_stats
      x-source: https://docs.busymate.dev/api/stats-status
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -s -X POST https://api.busymate.net/rest/v1/rpc/get_stats  -H \"Authorization: Bearer $TOKEN \"  -H \"apikey: $TOKEN \"\
          \  -H \"content-type: application/json\"  -d '{}' \n Status — read the cached snapshot (cheap; updated every ~10s by the VPS status\
          \ service): \n sh curl -s \"https://api.busymate.net/rest/v1/service_status?id=eq.1&select=snapshot\"  -H \"Authorization: Bearer $TOKEN\
          \ \"  -H \"apikey: $TOKEN"
  /rest/v1/service_stats:
    get:
      operationId: get_rest_v1_service_stats
      tags:
      - Rest
      summary: Stats — read the cached snapshot (cheaper than the RPC; refreshed by the 60s cron)
      description: 'Reads the cached service_stats snapshot table. Returns a one‑element array; the payload is in [0].snapshot. Requires Authorization:
        Bearer token and apikey header.'
      x-source: https://docs.busymate.dev/api/stats-status
      parameters:
      - name: id
        in: query
        required: true
        schema:
          type: string
        description: Filter to the single snapshot row, must be eq.1
      - name: select
        in: query
        required: true
        schema:
          type: string
        description: Select the snapshot column
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetRestV1ServiceStatsResponse'
      x-evidence:
        kind: documentation
  /rest/v1/service_status:
    get:
      operationId: get_rest_v1_service_status
      tags:
      - Rest
      summary: Status — read the cached snapshot (cheap; updated every ~10s by the VPS status service)
      description: 'Reads the cached service_status snapshot table. Returns a one‑element array; the payload is in [0].snapshot. Requires Authorization:
        Bearer token and apikey header.'
      x-source: https://docs.busymate.dev/api/stats-status
      parameters:
      - name: id
        in: query
        required: true
        schema:
          type: string
        description: Filter to the single snapshot row, must be eq.1
      - name: select
        in: query
        required: true
        schema:
          type: string
        description: Select the snapshot column
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetRestV1ServiceStatusResponse'
      x-evidence:
        kind: documentation
  /v1/checkout/confirm:
    post:
      operationId: post_v1_checkout_confirm
      tags:
      - Checkout
      summary: Set a breakpoint on a mobile request
      x-source: https://busymate.dev/guides/set-a-breakpoint-on-a-mobile-request
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1CheckoutConfirmRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
security:
- bearer: []
components:
  schemas:
    PostRequest:
      type: object
      properties:
        uuid:
          type: string
        deviceName:
          type: string
        country:
          type: string
    PostAllocateRequest:
      type: object
      properties:
        uuid:
          type: string
          description: Device UUID
        deviceName:
          type: string
          description: Human‑readable name of the device
        country:
          type: string
          description: Two‑letter country code
      required:
      - uuid
      - deviceName
      - country
    PostAllocateResponse:
      type: object
      properties:
        port:
          type: integer
          description: Allocated port number
        baseDomain:
          type: string
          description: Base domain for the PAC URL
        uuid:
          type: string
          description: Device UUID (echoed back)
        deviceName:
          type: string
          description: Device name (echoed back)
    GetCaBundleResponse:
      type: object
      properties:
        certPem:
          type: string
          description: PEM‑encoded CA certificate
        keyPem:
          type: string
          description: PEM‑encoded private key of the CA
    PostFunctionsV1AskRequest:
      type: object
      properties:
        question:
          type: string
    PatchRestV1AuthRequest:
      type: object
      properties:
        name:
          type: string
    PostRestV1RpcEffectiveSettingsForDeviceRequest:
      type: object
      properties:
        target_uuid:
          type: string
    GetRestV1ServiceStatsResponse:
      type: object
      properties:
        snapshot:
          type: object
          description: Stats snapshot JSON as described in the documentation
    GetRestV1ServiceStatusResponse:
      type: object
      properties:
        snapshot:
          type: object
          description: Status snapshot JSON as described in the documentation
    PostV1CheckoutConfirmRequest:
      type: object
      properties:
        amount:
          type: integer
        currency:
          type: string
        coupon:
          type: string
      required:
      - amount
      - currency
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
tags:
- name: Allocate
- name: Api
- name: Ca
- name: Checkout
- name: Entries
- name: First Party Token
- name: Functions
- name: Install
- name: Login
- name: Rest