Management API
Provision workspaces, projects, sending domains, and project keys programmatically — for agents and CLIs.
View as Markdown ↗Overview
The Management API provisions your account structure programmatically: create workspaces (each comes with a starter project), add more projects, seed automated flows, add and verify sending domains, and mint project API keys. It's designed for agents and CLIs that onboard new projects without a person clicking through the dashboard.
Management calls appear under Developers → API Keys → Account API calls for you, and in the admin console cross-tenant. Each row shows the token name, path, status, and latency.
Authentication
Authenticate with an all-access key — a key created with the "all access" scope (via emailbump login or Developers → API Keys → All-access keys). A project-scoped key can't reach these endpoints. See Authentication.
Authorization: Bearer ebk_all_access_keyWorkspaces
/v1/workspaces/v1/workspacesA workspace is the billing boundary. Creating one also creates a same-named starter project inside it (on the free plan) and returns both — so you can start sending right away. Use Projects to add more projects to a workspace.
Create — body parameters
namestringrequiredDisplay name for the new workspace.
curl -X POST https://emailbump.com/api/v1/workspaces \
-H "Authorization: Bearer ebk_all_access_key" \
-H "Content-Type: application/json" \
-d '{ "name": "Acme Agency" }'{
"workspace": { "id": "b1c2…", "name": "Acme Agency", "slug": "acme-agency-3f9a2b" },
"project": { "id": "7a10…", "workspace_id": "b1c2…", "name": "Acme Agency", "slug": "acme-agency-3f9a2b" }
}GET /v1/workspaces lists your workspaces, each with its projects:
{ "data": [ { "workspace": { … }, "projects": [ { … } ] } ] }Projects
/v1/projectsA project is a sending unit inside a workspace (its own contacts, campaigns, domains, and keys). Every workspace starts with one project; use this to add more projects to a workspace. Creating a project just creates the project — add automated flows separately with the Flows endpoint.
Body parameters
workspace_idstringrequiredThe workspace to create the project in.
namestringrequiredProject name.
curl -X POST https://emailbump.com/api/v1/projects \
-H "Authorization: Bearer ebk_all_access_key" \
-H "Content-Type: application/json" \
-d '{
"workspace_id": "b1c2…",
"name": "Acme Newsletter"
}'{
"project": {
"id": "7a10…",
"workspace_id": "b1c2…",
"name": "Acme Newsletter",
"slug": "acme-newsletter-3f9a2b"
}
}Flows
/v1/projects/{project_id}/flowsCreate an automated flow for a project. Today this creates a new contact → send one email flow (active immediately). Use the built-in welcome template, or supply your own subject and html for a custom greeting.
Body parameters
templatestringoptionalUse "welcome" to seed the built-in welcome email. Currently the only template.
namestringoptionalFlow name shown in the dashboard. Defaults to "Welcome".
subjectstringoptionalSubject line for the sent email. Required if you don't pass a template.
htmlstringoptionalSimple HTML/text for the email body (wrapped in MJML). Required if you don't pass a template.
Send either template: "welcome" or a subject + html pair. A request with neither returns 400.
curl -X POST https://emailbump.com/api/v1/projects/7a10…/flows \
-H "Authorization: Bearer ebk_all_access_key" \
-H "Content-Type: application/json" \
-d '{ "template": "welcome" }'curl -X POST https://emailbump.com/api/v1/projects/7a10…/flows \
-H "Authorization: Bearer ebk_all_access_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Onboarding",
"subject": "Welcome to Acme",
"html": "<b>Thanks for joining!</b> Here's how to get started…"
}'{ "flow_id": "c4d5…" }Project keys
/v1/projects/{project_id}/api-keysMint a project-scoped ebk_ key so the new project can send email and use the rest of the API. The secret is returned once.
Body parameters
namestringrequiredA name for the key (shown in the project's activity log).
curl -X POST https://emailbump.com/api/v1/projects/7a10…/api-keys \
-H "Authorization: Bearer ebk_all_access_key" \
-H "Content-Type: application/json" \
-d '{ "name": "server" }'Domains
/v1/projects/{project_id}/domains/v1/projects/{project_id}/domains/{domain_id}Add a sending domain to a project and get back the DNS records to publish. Poll the GET endpoint to check verification status.
Add — body parameters
domainstringrequiredThe domain to send from, e.g. mail.acme.com.
curl -X POST https://emailbump.com/api/v1/projects/7a10…/domains \
-H "Authorization: Bearer ebk_all_access_key" \
-H "Content-Type: application/json" \
-d '{ "domain": "mail.acme.com" }'End-to-end example
A typical agent onboarding: a workspace (with its starter project), a welcome flow, a sending domain, and a project key.
TOKEN=ebk_all_access_key
BASE=https://emailbump.com/api/v1
# 1. Create a workspace — the response includes its starter project
RESP=$(curl -s -X POST $BASE/workspaces -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" -d '{"name":"Acme Agency"}')
PROJ=$(echo "$RESP" | jq -r .project.id)
# (need more than one project? POST $BASE/projects with the workspace id.)
# 2. Seed a welcome flow (new contact → send)
curl -s -X POST $BASE/projects/$PROJ/flows -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" -d '{"template":"welcome"}'
# 3. Add a sending domain (returns DNS records to publish)
curl -s -X POST $BASE/projects/$PROJ/domains -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" -d '{"domain":"mail.acme.com"}'
# 4. Mint a project key for the app to send with
curl -s -X POST $BASE/projects/$PROJ/api-keys -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" -d '{"name":"server"}' | jq -r .key