Bupple
Automate with Bupple

Automate with Bupple

API reference

Every route of the Bupple API — its parameters, its body and its answers — drawn from the same OpenAPI document Zapier, n8n and Make import.

The Bupple API describes itself in an OpenAPI 3.1 document at https://api.bupple.io/v1/api/openapi.json. Import that address into a tool that reads OpenAPI — n8n, Make, Postman, your code generator — and it knows every route below.

With your key, the document lists your tools too

Asked without a key, the document has the fixed routes on this page. Asked with your key (Authorization: Bearer bmcp_…), it also lists every tool that key may run as its own POST /v1/api/tools/<name>, with that tool's arguments. GET /v1/api/tools answers the same list as JSON.

Every route needs Authorization: Bearer <your key> (the document itself excepted), and every route but list_brands names a brand with x-brand-id. Refusals are { "error", "message" } — the table is on API keys.

Every tool this key may run, with its arguments' JSON schema

GET/v1/api/tools
AuthorizationBearer <token>

A Bupple API key (bmcp_…).

In: header

Response Body

curl -X GET "https://api.bupple.io/v1/api/tools"
{
  "tools": [
    {
      "name": "string",
      "description": "string",
      "input_schema": {
        "property1": null,
        "property2": null
      },
      "paid": true,
      "needs_brand": true
    }
  ]
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}

Run one tool

POST/v1/api/tools/{name}
AuthorizationBearer <token>

A Bupple API key (bmcp_…).

In: header

Path Parameters

namestring

A tool name from GET /v1/api/tools.

Header Parameters

x-brand-id?string

The brand this call is for — an id from list_brands. Needed by every call but list_brands (or send brand_id in the body).

Empty Object

Response Body

curl -X POST "https://api.bupple.io/v1/api/tools/string" \  -H "x-brand-id: string" \  -H "Content-Type: application/json" \  -d '{}'
{
  "tool": "string",
  "needs_confirm": false,
  "price": null,
  "result": null
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}

Start a video or a design (start_video / start_design) — without confirm it answers the estimate and starts nothing

POST/v1/api/jobs
AuthorizationBearer <token>

A Bupple API key (bmcp_…).

In: header

Header Parameters

x-brand-id?string

The brand this call is for — an id from list_brands. Needed by every call but list_brands (or send brand_id in the body).

kindstring
Value in"video" | "design"
arguments?object
Default{}

Empty Object

confirm?boolean
brand_id?string
Length1 <= length

Response Body

curl -X POST "https://api.bupple.io/v1/api/jobs" \  -H "x-brand-id: string" \  -H "Content-Type: application/json" \  -d '{    "kind": "video"  }'
{
  "tool": "string",
  "needs_confirm": false,
  "price": null,
  "result": null
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}

Where a job is (check_job)

GET/v1/api/jobs/{id}
AuthorizationBearer <token>

A Bupple API key (bmcp_…).

In: header

Path Parameters

idstring

The job id start_job answered.

Header Parameters

x-brand-id?string

The brand this call is for — an id from list_brands. Needed by every call but list_brands (or send brand_id in the body).

Response Body

curl -X GET "https://api.bupple.io/v1/api/jobs/string" \  -H "x-brand-id: string"
{
  "tool": "string",
  "needs_confirm": false,
  "price": null,
  "result": null
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}

A finished job's files (collect_job)

GET/v1/api/jobs/{id}/result
AuthorizationBearer <token>

A Bupple API key (bmcp_…).

In: header

Path Parameters

idstring

The job id start_job answered.

Header Parameters

x-brand-id?string

The brand this call is for — an id from list_brands. Needed by every call but list_brands (or send brand_id in the body).

Response Body

curl -X GET "https://api.bupple.io/v1/api/jobs/string/result" \  -H "x-brand-id: string"
{
  "tool": "string",
  "needs_confirm": false,
  "price": null,
  "result": null
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}

The brand's automations

GET/v1/api/automations
AuthorizationBearer <token>

A Bupple API key (bmcp_…).

In: header

Header Parameters

x-brand-id?string

The brand this call is for — an id from list_brands. Needed by every call but list_brands (or send brand_id in the body).

Response Body

curl -X GET "https://api.bupple.io/v1/api/automations" \  -H "x-brand-id: string"
{
  "automations": [
    {
      "id": "string",
      "name": "string",
      "brand_id": "string",
      "status": "string",
      "trigger": "string"
    }
  ]
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}

Start one run of an automation now, with data for its steps

POST/v1/api/automations/{id}/runs
AuthorizationBearer <token>

A Bupple API key (bmcp_…).

In: header

Path Parameters

idstring

An automation id from GET /v1/api/automations.

Header Parameters

x-brand-id?string

The brand this call is for — an id from list_brands. Needed by every call but list_brands (or send brand_id in the body).

Idempotency-Key?string

The same key again answers the same run — a retry never starts a second one.

Lengthlength <= 200
input?object

Empty Object

Response Body

curl -X POST "https://api.bupple.io/v1/api/automations/string/runs" \  -H "x-brand-id: string" \  -H "Idempotency-Key: string" \  -H "Content-Type: application/json" \  -d '{}'
{
  "run": {
    "id": "string",
    "automation_id": "string",
    "automation_name": "string",
    "status": "running",
    "finished": true,
    "reason": "string",
    "started_at": "string",
    "finished_at": "string",
    "credits_used": 0,
    "drafts": [
      "string"
    ],
    "results": [
      {
        "kind": "string",
        "words": "string",
        "id": "string",
        "url": "string",
        "detail": "string",
        "step": -9007199254740991,
        "finishing": false,
        "job_id": null
      }
    ],
    "input": {
      "property1": null,
      "property2": null
    }
  }
}
{
  "run": {
    "id": "string",
    "automation_id": "string",
    "automation_name": "string",
    "status": "running",
    "finished": true,
    "reason": "string",
    "started_at": "string",
    "finished_at": "string",
    "credits_used": 0,
    "drafts": [
      "string"
    ],
    "results": [
      {
        "kind": "string",
        "words": "string",
        "id": "string",
        "url": "string",
        "detail": "string",
        "step": -9007199254740991,
        "finishing": false,
        "job_id": null
      }
    ],
    "input": {
      "property1": null,
      "property2": null
    }
  }
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}

One run — its status and, once finished, what it made

GET/v1/api/runs/{id}
AuthorizationBearer <token>

A Bupple API key (bmcp_…).

In: header

Path Parameters

idstring

The run id start_run answered.

Header Parameters

x-brand-id?string

The brand this call is for — an id from list_brands. Needed by every call but list_brands (or send brand_id in the body).

Response Body

curl -X GET "https://api.bupple.io/v1/api/runs/string" \  -H "x-brand-id: string"
{
  "run": {
    "id": "string",
    "automation_id": "string",
    "automation_name": "string",
    "status": "running",
    "finished": true,
    "reason": "string",
    "started_at": "string",
    "finished_at": "string",
    "credits_used": 0,
    "drafts": [
      "string"
    ],
    "results": [
      {
        "kind": "string",
        "words": "string",
        "id": "string",
        "url": "string",
        "detail": "string",
        "step": -9007199254740991,
        "finishing": false,
        "job_id": null
      }
    ],
    "input": {
      "property1": null,
      "property2": null
    }
  }
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
{
  "error": "string",
  "message": "string"
}
curl -X GET "https://api.bupple.io/v1/api/openapi.json"
{}