DRIP Apex API

DRIP Apex API as documented publicly: 20 operations. Contract generated from the documentation by API Evangelist (2026-11-06); not the provider's own document.

Operations 20

POST /_drip/events Use this endpoint for analytics event ingest. #
GET /api/exp GET /api/exp #
GET /api/preview Preview routes run on the preview host and proxy a signed preview session. #
POST /api/v1/admin/client-links Admin POST Create a personal managed-client join link #
POST /api/v1/assign POST /api/v1/assign #
GET /api/v1/experiments/{id}/results Call GET /api/v1/experiments/{id}/results?segment=device:mobile for mobile or ?segment=device:desktop for desktop; omit both slice parameters for All. #
PATCH /api/v1/flags/{id}/code PATCH /api/v1/flags/{id}/code requires flags:write and sends custom_js and/or custom_css, plus expected_updated_at from GET /flags/{id}. #
PATCH /api/v1/org/members/{id} Owners and admins can use PATCH /api/v1/org/members/{id} with { "suspended": true, "reason": "Offboarded" } to suspend a member, or { "suspended": false } to reinstate them. #
GET /api/v1/qa/schema GET /api/v1/qa/schema returns the shared QA registry, schemas, IDs and exit codes for any valid user or shop API key, without resource scopes or shop context. #
GET /api/v1/test-results GET /api/v1/test-results lists past results for the selected shop with source=import|native|all, limit (1–200, default 50), and cursor pagination. #
POST /api/v1/test-results/import/confirm POST /api/v1/test-results/import/confirm accepts JSON {rows} in batches of at most 500 and writes imported test results. #
POST /api/v1/test-results/import/inspect POST /api/v1/test-results/import/inspect accepts multipart files and returns detected columns and values. #
POST /api/v1/test-results/import/preview POST /api/v1/test-results/import/preview accepts the same files plus a JSON mapping part and returns mapped rows, row errors, and warnings without writing. #
DELETE /api/v1/test-results/{id} DELETE /api/v1/test-results/{id} permanently removes one imported result with experiments:write and JSON { "confirm": true }, returning the removed row in {data}. #
GET /api/v1/test-results/{id} GET /api/v1/test-results/{id} reads a result by UUID, legacy ID, or test key; missing or foreign‑shop results return 404. #
POST /events Use this endpoint for analytics event ingest. #
GET /flags/{id} GET /flags/{id} returns the flag with its audience results and provides expected_updated_at for code updates. #
GET /health The health endpoint returns Worker status on control hosts. #
GET /s/{shopId}.js The short snippet endpoint serves a synchronous JavaScript install script. #
POST /sos SOS POST Create SOS ticket #

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/drip-apex-com:drip-apex-com-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

drip-apex-com-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: DRIP Apex API
  version: '2026-11-06'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-06: 20 operation(s) read from 4 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; DRIP Apex has published no machine-readable contract that the
    pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 1
    documentation: 19
    pages-with-code: 2
    pages-read: 4
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-06'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://docs.drip-apex.com/api/reference
  - https://docs.drip-apex.com/docs/api/reference
  - https://docs.drip-apex.com/docs/developers/api/overview
  - https://docs.drip-apex.com/docs/developers/worker-endpoints
servers:
- url: https://app.drip-apex.com
paths:
  /_drip/events:
    post:
      operationId: post_drip_events
      tags:
      - Drip
      summary: Use this endpoint for analytics event ingest.
      description: Edge event path for custom‑domain traffic. Same behavior as POST /events.
      x-source: https://docs.drip-apex.com/docs/developers/worker-endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostDripEventsRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostDripEventsResponse'
      x-evidence:
        kind: documentation
  /api/exp:
    get:
      operationId: get_api_exp
      tags:
      - Api
      summary: GET /api/exp
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/preview:
    get:
      operationId: get_api_preview
      tags:
      - Api
      summary: Preview routes run on the preview host and proxy a signed preview session.
      description: Missing pst returns 401. Only GET/HEAD/POST/PUT/PATCH/DELETE/OPTIONS accepted. No‑store caching.
      x-source: https://docs.drip-apex.com/docs/developers/worker-endpoints
      parameters:
      - name: pst
        in: query
        required: true
        schema:
          type: string
        description: Signed preview session token.
      - name: url
        in: query
        required: true
        schema:
          type: string
        description: Target page URL to fetch and rewrite.
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiPreviewResponse'
      x-evidence:
        kind: documentation
  /api/v1/admin/client-links:
    post:
      operationId: post_api_v1_admin_client_links
      tags:
      - Api
      summary: Admin POST Create a personal managed-client join link
      x-source: https://docs.drip-apex.com/api/reference
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1AdminClientLinksRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiV1AdminClientLinksResponse'
      x-evidence:
        kind: documentation
  /api/v1/assign:
    post:
      operationId: post_api_v1_assign
      tags:
      - Api
      summary: POST /api/v1/assign
      x-source: https://docs.drip-apex.com/api/reference
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl Copy curl  https://app.drip-apex.com/api/v1/assign  -H \"Authorization: Bearer <apex-secret-key>\" POST Get deterministic\
          \ assignments with commerce proof inputs /assign Request body {\n shop_id: string\n user_id?: string\n logged_in_customer_id?: string\n\
          \ customer_id?: string\n decision_use?: \"aggregate\" | \"individual\"\n url?: string (uri)\n environment?: string\n experiments?: string[]\n\
          \ cart_token?: s"
  /api/v1/experiments/{id}/results:
    get:
      operationId: get_api_v1_experiments_id_results
      tags:
      - Api
      summary: Call GET /api/v1/experiments/{id}/results?segment=device:mobile for mobile or ?segment=device:desktop for desktop; omit both slice
        parameters for All.
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: segment
        in: query
        required: false
        schema:
          type: string
        description: Segment filter, e.g., device:mobile
      - name: exclude_segment
        in: query
        required: false
        schema:
          type: string
        description: Exclude segment filter
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/flags/{id}/code:
    patch:
      operationId: patch_api_v1_flags_id_code
      tags:
      - Api
      summary: PATCH /api/v1/flags/{id}/code requires flags:write and sends custom_js and/or custom_css, plus expected_updated_at from GET /flags/{id}.
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchApiV1FlagsIdCodeRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/org/members/{id}:
    patch:
      operationId: patch_api_v1_org_members_id
      tags:
      - Api
      summary: 'Owners and admins can use PATCH /api/v1/org/members/{id} with { "suspended": true, "reason": "Offboarded" } to suspend a member,
        or { "suspended": false } to reinstate them.'
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchApiV1OrgMembersIdRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/qa/schema:
    get:
      operationId: get_api_v1_qa_schema
      tags:
      - Api
      summary: GET /api/v1/qa/schema returns the shared QA registry, schemas, IDs and exit codes for any valid user or shop API key, without resource
        scopes or shop context.
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/test-results:
    get:
      operationId: get_api_v1_test_results
      tags:
      - Api
      summary: GET /api/v1/test-results lists past results for the selected shop with source=import|native|all, limit (1–200, default 50), and
        cursor pagination.
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      parameters:
      - name: source
        in: query
        required: false
        schema:
          type: string
        description: Result source filter
      - name: limit
        in: query
        required: false
        schema:
          type: string
        description: Page size (1–200, default 50)
      - name: cursor
        in: query
        required: false
        schema:
          type: string
        description: Pagination cursor
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/test-results/import/confirm:
    post:
      operationId: post_api_v1_test_results_import_confirm
      tags:
      - Api
      summary: POST /api/v1/test-results/import/confirm accepts JSON {rows} in batches of at most 500 and writes imported test results.
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1TestResultsImportConfirmRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/test-results/import/inspect:
    post:
      operationId: post_api_v1_test_results_import_inspect
      tags:
      - Api
      summary: POST /api/v1/test-results/import/inspect accepts multipart files and returns detected columns and values.
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1TestResultsImportInspectRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/test-results/import/preview:
    post:
      operationId: post_api_v1_test_results_import_preview
      tags:
      - Api
      summary: POST /api/v1/test-results/import/preview accepts the same files plus a JSON mapping part and returns mapped rows, row errors, and
        warnings without writing.
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiV1TestResultsImportPreviewRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/v1/test-results/{id}:
    delete:
      operationId: delete_api_v1_test_results_id
      tags:
      - Api
      summary: 'DELETE /api/v1/test-results/{id} permanently removes one imported result with experiments:write and JSON { "confirm": true },
        returning the removed row in {data}.'
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    get:
      operationId: get_api_v1_test_results_id
      tags:
      - Api
      summary: GET /api/v1/test-results/{id} reads a result by UUID, legacy ID, or test key; missing or foreign‑shop results return 404.
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /events:
    post:
      operationId: post_events
      tags:
      - Events
      summary: Use this endpoint for analytics event ingest.
      description: POST only; other methods return 405. Auth via x-drip-shop and x-drip-signature headers, body _shopId/_signature, or tracking
        source key. Empty batches return 400, >200 events return 413, rate limits may return 429.
      x-source: https://docs.drip-apex.com/docs/developers/worker-endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostEventsRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostEventsResponse'
      x-evidence:
        kind: documentation
  /flags/{id}:
    get:
      operationId: get_flags_id
      tags:
      - Flags
      summary: GET /flags/{id} returns the flag with its audience results and provides expected_updated_at for code updates.
      x-source: https://docs.drip-apex.com/docs/developers/api/overview
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /health:
    get:
      operationId: get_health
      tags:
      - Health
      summary: The health endpoint returns Worker status on control hosts.
      description: 'Response always includes Cache-Control: no-store.'
      x-source: https://docs.drip-apex.com/docs/developers/worker-endpoints
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetHealthResponse'
      x-evidence:
        kind: documentation
  /s/{shopId}.js:
    get:
      operationId: get_s_shopId_js
      tags:
      - S
      summary: The short snippet endpoint serves a synchronous JavaScript install script.
      description: Invalid shop IDs return JavaScript comments with 400 status. Rate limits may return 429.
      x-source: https://docs.drip-apex.com/docs/developers/worker-endpoints
      parameters:
      - name: shopId
        in: path
        required: true
        schema:
          type: string
      - name: apex_refresh_token
        in: query
        required: false
        schema:
          type: string
        description: Token to bypass snippet cache.
      - name: drip_qa
        in: query
        required: false
        schema:
          type: string
        description: QA preview flag.
      - name: drip_force
        in: query
        required: false
        schema:
          type: string
        description: Force assignment for forced snippet.
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSShopidJsResponse'
      x-evidence:
        kind: documentation
  /sos:
    post:
      operationId: post_sos
      tags:
      - Sos
      summary: SOS POST Create SOS ticket
      x-source: https://docs.drip-apex.com/api/reference
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostSosRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostSosResponse'
      x-evidence:
        kind: documentation
components:
  schemas:
    PostDripEventsRequest:
      type: object
      properties:
        events:
          type: array
          description: Array of event objects.
        _shopId:
          type: string
          description: Shop identifier.
        _signature:
          type: string
          description: Ingest signing token.
      required:
      - events
      - _shopId
      - _signature
    PostDripEventsResponse:
      type: object
      properties:
        ingested:
          type: integer
          description: Number of events successfully ingested.
    GetApiPreviewResponse:
      type: object
      properties:
        html:
          type: string
          description: Rewritten HTML with preview bridge injected.
    PostApiV1AdminClientLinksRequest:
      type: object
      properties:
        kind:
          type: string
          description: '"invite"'
        plan:
          type: string
          description: '"self_managed" | "apex_managed" | "drip_managed"'
        client_name:
          type: string
        client_type:
          type: string
          description: '"company" | "agency"'
        email:
          type: string
          description: (email)
        consultant_user_id:
          type: string
          description: (uuid) | null
        consultant_title:
          type: string
          description: 'null'
        payment:
          type: string
          description: '"card" | "invoice"'
        discount_pct:
          type: integer
          description: 'null'
        discount_months:
          type: integer
          description: 'null'
        free_days:
          type: integer
        store_url:
          type: string
          description: (uri) | null
        expires_at:
          type: string
          description: 'null'
        internal_note:
          type: string
          description: 'null'
        teammates:
          type: array
          description: object[]
      required:
      - kind
      - plan
      - client_name
      - client_type
      - email
    PostApiV1AdminClientLinksResponse:
      type: object
      properties:
        '201':
          type: string
          description: Created link and join URL
        '400':
          type: string
          description: Bad request
        '401':
          type: string
          description: Unauthorized
        '403':
          type: string
          description: Forbidden
        '409':
          type: string
          description: Conflict
        '429':
          type: string
          description: Rate limit exceeded
        '503':
          type: string
          description: Service unavailable
    PatchApiV1FlagsIdCodeRequest:
      type: object
      properties:
        custom_js:
          type: string
          description: JavaScript code for the On variant (null clears)
        custom_css:
          type: string
          description: CSS code for the On variant (null clears)
        expected_updated_at:
          type: string
          description: Timestamp from GET /flags/{id} to ensure version consistency
      required:
      - expected_updated_at
    PatchApiV1OrgMembersIdRequest:
      type: object
      properties:
        suspended:
          type: boolean
          description: Whether the member is suspended
        reason:
          type: string
          description: Reason for suspension (required when suspending)
      required:
      - suspended
    PostApiV1TestResultsImportConfirmRequest:
      type: object
      properties:
        rows:
          type: array
          description: Rows to import, up to 500 per request
      required:
      - rows
    PostApiV1TestResultsImportInspectRequest:
      type: object
      properties:
        files:
          type: string
          description: Files to inspect
      required:
      - files
    PostApiV1TestResultsImportPreviewRequest:
      type: object
      properties:
        files:
          type: string
          description: Files to preview
        mapping:
          type: string
          description: Mapping definition
      required:
      - files
      - mapping
    PostEventsRequest:
      type: object
      properties:
        events:
          type: array
          description: Array of event objects.
        _shopId:
          type: string
          description: Shop identifier.
        _signature:
          type: string
          description: Ingest signing token.
      required:
      - events
      - _shopId
      - _signature
    PostEventsResponse:
      type: object
      properties:
        ingested:
          type: integer
          description: Number of events successfully ingested.
    GetHealthResponse:
      type: object
      properties:
        ok:
          type: boolean
          description: Overall health.
        service:
          type: string
          description: Service name.
        environment:
          type: string
          description: Deployment environment.
        release:
          type: string
          description: Release identifier.
        queue_enabled:
          type: boolean
          description: Whether event queue is enabled.
        queue_name:
          type: string
          description: Name of the event queue.
        distributed_rate_limits:
          type: object
          description: Rate‑limit flags.
        dead_letter_queue.ok:
          type: boolean
          description: DLQ health.
        checked_at:
          type: string
          description: Timestamp of health check.
    GetSShopidJsResponse:
      type: object
      properties:
        script:
          type: string
          description: JavaScript install script containing anti‑flicker setup, SDK code, and inlined experiment config.
    PostSosRequest:
      type: object
      properties:
        affected_url:
          type: string
          description: (uri) | null
        attachment_paths:
          type: array
          description: string[]
        backlog_item_id:
          type: string
          description: (uuid) | null
        description:
          type: string
        expected_behavior:
          type: string
        experiment_id:
          type: string
          description: (uuid) | null
        idempotency_key:
          type: string
        loom_url:
          type: string
          description: (uri) | null
        reproduction_steps:
          type: string
        sub_class:
          type: string
        type:
          type: string
          description: '"full_handover" | "design" | "development" | "qa" | "config" | "bug" | "help"'
      required:
      - description
      - type
    PostSosResponse:
      type: object
      properties:
        '200':
          type: string
          description: Reused internal SOS ticket or deduplicated customer ticket receipt
        '201':
          type: string
          description: Internal SOS ticket or customer ticket created
        '401':
          type: string
          description: Unauthorized
        '403':
          type: string
          description: Forbidden – missing permission or internal SOS type not allowed
        '429':
          type: string
          description: Rate limit exceeded
        '502':
          type: string
          description: Jira create failed or unconfirmed
        '503':
          type: string
          description: SOS is disabled
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
security:
- bearer: []
tags:
- name: Api
- name: Drip
- name: Events
- name: Flags
- name: Health
- name: S
- name: Sos