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
/v1/api/toolsA 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
/v1/api/tools/{name}A Bupple API key (bmcp_…).
In: header
Path Parameters
A tool name from GET /v1/api/tools.
Header Parameters
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
/v1/api/jobsA Bupple API key (bmcp_…).
In: header
Header Parameters
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).
"video" | "design"{}Empty Object
1 <= lengthResponse 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)
/v1/api/jobs/{id}A Bupple API key (bmcp_…).
In: header
Path Parameters
The job id start_job answered.
Header Parameters
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)
/v1/api/jobs/{id}/resultA Bupple API key (bmcp_…).
In: header
Path Parameters
The job id start_job answered.
Header Parameters
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
/v1/api/automationsA Bupple API key (bmcp_…).
In: header
Header Parameters
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
/v1/api/automations/{id}/runsA Bupple API key (bmcp_…).
In: header
Path Parameters
An automation id from GET /v1/api/automations.
Header Parameters
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).
The same key again answers the same run — a retry never starts a second one.
length <= 200Empty 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
/v1/api/runs/{id}A Bupple API key (bmcp_…).
In: header
Path Parameters
The run id start_run answered.
Header Parameters
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"
}This document — with a key, each of the key's tools as its own path
/v1/api/openapi.jsonResponse Body
curl -X GET "https://api.bupple.io/v1/api/openapi.json"{}Webhooks
Every event you can send from Bupple to your own URL, what each call carries, and how to check that a call really came from Bupple.
Personalised video per lead
From a lead list to an email with a video made for each lead — Clay, HubSpot or HeyReach in, Bupple's Video Editor in the middle, a public link out to your email tool.