Skip to content
Developers

Your clients’ data, on tap.

A scoped REST API over the CRM, booking, and store data your agency already runs — read it, and write where you allow — plus signed webhooks for 104 events across 9 modules, and an MCP server for AI clients. One site per key, a catalog that documents itself.

Read the APIEvents & webhooks
GET /api/v1/contacts
$ curl -sS 'https://app.dramac.io/api/v1/contacts?limit=2' \
    -H 'Authorization: Bearer dmc_live_…'

{
  "data": [
    {
      "id": "8f14e45f-ceea-467a-9e9a-1b2c3d4e5f60",
      "first_name": "Amara",
      "email": "[email protected]",
      "lead_status": "qualified",
      … every whitelisted field
    }
  ],
  "pagination": { "limit": 2, "offset": 0,
    "count": 128, "has_more": true }
}
The REST API

Read-only, scoped, site-isolated.

One versioned surface at app.dramac.io/api/v1. It is derived from the same module contracts the platform runs on, so the catalog and the code can’t drift apart.

Scoped keys

A dmc_live_… key on Authorization: Bearer or X-API-Key. Each key pins exactly one site and carries only the read scopes you grant it.

Site-isolated by construction

Every query is filtered to the key's site and projects a per-resource column whitelist — never SELECT *, so internal columns can't leak.

Write, where you allow it

Scoped write endpoints create and update records through each module's own validated, gated logic — the site is taken from the key, never the request, so a key can only ever write to its own site.

Predictable limits

120 requests a minute per key. Pagination via limit (max 100) and offset, with a count and has_more on every list.

GET/api/v1/openapi.jsonThe full OpenAPI 3.1 spec — public and derived. Generate a typed client from it.
GET/api/v1/metaIndex — every resource and trigger this key can reach.
GET/api/v1/{resource}List records — paginated, filtered to the key's site.
GET/api/v1/{resource}/{id}A single record by id.
POST/api/v1/{resource}Create a record — validated by the module's own schema.
PATCH/api/v1/{resource}/{id}Update a record by id.
DELETE/api/v1/{resource}/{id}Delete a record by id.

Reads and writes derive from the same module contracts, so the reference below is always the live surface. Writes need a write scope on the key.

Reference

What you can read today.

49 resources, live right now. This table is generated from the platform’s module contracts at build time — the same source /api/v1/meta answers from. As modules expose more, it grows here on its own.

ResourceModuleScopeFields
/appointments
Booking appointments.
Bookingread:appointments14
/audiences
Audience segments (filter rules + evaluated counts).
Marketingread:audiences13
/availability
Staff / business availability rules (recurring + date-specific).
Bookingread:availability14
/blog-categories
Blog categories.
Blog AIread:blog_categories7
/blog-posts
Blog posts (rendered content_html; raw editor blob + author PII withheld).
Blog AIread:blog_posts23
/bundles
Product bundles / kits.
E-Commerceread:bundles21
/campaigns
Social campaigns (content organization + goals).
Social Mediaread:campaigns14
/canned-responses
Live-chat canned responses (quick-reply templates).
Live Chatread:canned_responses12
/categories
Storefront product categories.
E-Commerceread:categories12
/companies
CRM companies / accounts.
CRMread:companies14
/competitors
Tracked competitor accounts (public profiles + benchmark metrics).
Social Mediaread:competitors17
/contacts
CRM contacts (leads and customers).
CRMread:contacts15
/content-pillars
Content pillars (the brand's content themes + target mix).
Social Mediaread:content_pillars12
/deals
CRM deals / opportunities.
CRMread:deals14
/departments
Live-chat routing departments.
Live Chatread:departments10
/discounts
Discount codes and cart rules.
E-Commerceread:discounts16
/document-templates
Invoice / quotation / receipt document templates (layout config).
Invoicingread:document_templates19
/email-campaigns
Email/SMS campaigns (config + delivery stats).
Marketingread:email_campaigns31
/email-templates
Reusable email templates.
Marketingread:email_templates16
/expense-categories
Expense categories (config; monthly budget withheld).
Invoicingread:expense_categories9
/flash-sales
Time-boxed flash sales.
E-Commerceread:flash_sales18
/forms
Opt-in forms (design + conversion stats; submissions withheld).
Marketingread:forms26
/funnels
Marketing funnels (steps + conversion stats).
Marketingread:funnels12
/hashtag-groups
Reusable hashtag groups.
Social Mediaread:hashtag_groups9
/inventory-locations
Inventory / fulfillment locations (contact PII excluded).
E-Commerceread:inventory_locations15
/items
Reusable item / service catalog (standalone config; unit_price in cents).
Invoicingread:items13
/knowledge-base
Live-chat knowledge-base articles (used by the AI responder).
Live Chatread:knowledge_base10
/landing-pages
Landing pages (content + stats; custom_scripts + submissions withheld).
Marketingread:landing_pages34
/lists
Mailing lists.
Marketingread:lists11
/message-templates
Proactive chat message templates (per booking/order/quote event).
Live Chatread:message_templates6
/orders
Storefront orders.
E-Commerceread:orders17
/pipeline-stages
Stages within a CRM deal pipeline.
CRMread:pipeline_stages9
/pipelines
CRM deal pipelines.
CRMread:pipelines7
/posts
Social posts (drafts, scheduled, and published) with their content.
Social Mediaread:posts19
/product-options
Option axes (e.g. Size, Color) of a product.
E-Commerceread:product_options5
/product-variants
Variants (SKU/price/stock) of a product.
E-Commerceread:product_variants11
/products
Storefront products / catalog.
E-Commerceread:products15
/reviews
Product reviews (reviewer email/identity excluded).
E-Commerceread:reviews13
/saved-replies
Saved replies (canned responses for the social inbox).
Social Mediaread:saved_replies10
/scripted-flows
Scripted conversation flows (guided chat playbooks).
Live Chatread:scripted_flows16
/sending-stats
Daily email/SMS sending statistics.
Marketingread:sending_stats9
/sequences
Drip/automation sequences (steps + enrollment stats).
Marketingread:sequences16
/services
Bookable services.
Bookingread:services11
/settings
Booking module settings (config; notification email excluded).
Bookingread:settings21
/staff
Booking staff members (config; contact email/phone excluded).
Bookingread:staff10
/tags
CRM tags for organizing contacts, companies and deals.
CRMread:tags5
/tax-rates
Reusable tax rates (config; rate is a percentage).
Invoicingread:tax_rates11
/workflow-executions
Automation workflow runs — metadata only (status, trigger TYPE, progress, timings). Excludes context/output/trigger_data/error_details Json and the free-text error body.
Automationread:workflow_executions14
/workflows
Automation workflows — metadata only (name, trigger TYPE, active state, run counts, run/retry policy, timings). Excludes trigger_config and every Json/credential/identity column.
Automationread:workflows26

A key granted read:* reaches every resource above; a narrower key reaches only the scopes you list. Keys are created per site in the dashboard, under Settings → Integrations.

Writes

What you can write today.

105 write actions, each routed through its module’s own validated, gated logic. The site is taken from the key — a request can never write to another tenant.

MethodEndpointModuleScope
DELETE/audiences/{id}
Delete an audience segment.
Marketingwrite:audiences
PATCH/audiences/{id}
Update an audience segment.
Marketingwrite:audiences
POST/audiences
Create an audience segment.
Marketingwrite:audiences
DELETE/availability/{id}
Delete an availability rule.
Bookingwrite:availability
PATCH/availability/{id}
Update an availability rule.
Bookingwrite:availability
POST/availability
Create an availability rule.
Bookingwrite:availability
DELETE/blog-categories/{id}
Delete a blog category (refused if posts reference it).
Blog AIwrite:blog_categories
PATCH/blog-categories/{id}
Update a blog category.
Blog AIwrite:blog_categories
POST/blog-categories
Create a blog category.
Blog AIwrite:blog_categories
DELETE/blog-posts/{id}
Delete a blog post.
Blog AIwrite:blog_posts
PATCH/blog-posts/{id}
Update a blog post's content (cannot publish or schedule it).
Blog AIwrite:blog_posts
POST/blog-posts
Create a blog post as an unpublished DRAFT (publishing is a separate action).
Blog AIwrite:blog_posts
DELETE/campaigns/{id}
Delete a social campaign (posts are unlinked, not deleted).
Social Mediawrite:campaigns
PATCH/campaigns/{id}
Update a social campaign.
Social Mediawrite:campaigns
POST/campaigns
Create a social campaign.
Social Mediawrite:campaigns
DELETE/canned-responses/{id}
Delete a canned response.
Live Chatwrite:canned_responses
PATCH/canned-responses/{id}
Update a canned response.
Live Chatwrite:canned_responses
POST/canned-responses
Create a canned response.
Live Chatwrite:canned_responses
DELETE/categories/{id}
Delete a product category.
E-Commercewrite:categories
PATCH/categories/{id}
Update a product category.
E-Commercewrite:categories
POST/categories
Create a product category.
E-Commercewrite:categories
DELETE/companies/{id}
Delete a CRM company / account.
CRMwrite:companies
PATCH/companies/{id}
Update a CRM company / account.
CRMwrite:companies
POST/companies
Create a CRM company / account.
CRMwrite:companies
DELETE/competitors/{id}
Stop tracking a competitor (soft delete).
Social Mediawrite:competitors
PATCH/competitors/{id}
Update a tracked competitor.
Social Mediawrite:competitors
POST/competitors
Track a competitor account.
Social Mediawrite:competitors
DELETE/contacts/{id}
Delete a CRM contact.
CRMwrite:contacts
PATCH/contacts/{id}
Update a CRM contact.
CRMwrite:contacts
POST/contacts
Create a CRM contact (lead or customer).
CRMwrite:contacts
DELETE/content-pillars/{id}
Delete a content pillar.
Social Mediawrite:content_pillars
PATCH/content-pillars/{id}
Update a content pillar.
Social Mediawrite:content_pillars
POST/content-pillars
Create a content pillar.
Social Mediawrite:content_pillars
DELETE/deals/{id}
Delete a CRM deal / opportunity.
CRMwrite:deals
PATCH/deals/{id}
Update a CRM deal / opportunity.
CRMwrite:deals
POST/deals
Create a CRM deal / opportunity.
CRMwrite:deals
POST/deals/{id}/move-stage
Move a deal to a pipeline stage — fires crm.deal.stage_changed (plus crm.deal.won / crm.deal.lost for terminal stages).
CRMwrite:deals
DELETE/departments/{id}
Delete a routing department (default department is protected).
Live Chatwrite:departments
PATCH/departments/{id}
Update a routing department.
Live Chatwrite:departments
POST/departments
Create a routing department.
Live Chatwrite:departments
DELETE/document-templates/{id}
Delete a document template.
Invoicingwrite:document_templates
PATCH/document-templates/{id}
Update a document template.
Invoicingwrite:document_templates
POST/document-templates
Create a document template.
Invoicingwrite:document_templates
DELETE/email-campaigns/{id}
Delete a draft/cancelled campaign.
Marketingwrite:email_campaigns
PATCH/email-campaigns/{id}
Update a campaign's content (cannot send or schedule it).
Marketingwrite:email_campaigns
POST/email-campaigns
Create an email/SMS campaign as an unscheduled DRAFT (sending is a separate action).
Marketingwrite:email_campaigns
DELETE/email-templates/{id}
Delete an email template (system templates are protected).
Marketingwrite:email_templates
PATCH/email-templates/{id}
Update an email template (system templates are protected).
Marketingwrite:email_templates
POST/email-templates
Create an email template.
Marketingwrite:email_templates
DELETE/expense-categories/{id}
Delete an expense category (refused if expenses reference it).
Invoicingwrite:expense_categories
PATCH/expense-categories/{id}
Update an expense category.
Invoicingwrite:expense_categories
POST/expense-categories
Create an expense category.
Invoicingwrite:expense_categories
DELETE/forms/{id}
Delete an opt-in form.
Marketingwrite:forms
PATCH/forms/{id}
Update an opt-in form (cannot publish it live).
Marketingwrite:forms
POST/forms
Create an opt-in form as a DRAFT (going live on the site is a separate action).
Marketingwrite:forms
DELETE/items/{id}
Deactivate a catalog item (soft delete).
Invoicingwrite:items
PATCH/items/{id}
Update a catalog item (unit_price in cents).
Invoicingwrite:items
POST/items
Create a catalog item (unit_price in cents).
Invoicingwrite:items
DELETE/knowledge-base/{id}
Delete a knowledge-base article.
Live Chatwrite:knowledge_base
PATCH/knowledge-base/{id}
Update a knowledge-base article.
Live Chatwrite:knowledge_base
POST/knowledge-base
Create a knowledge-base article.
Live Chatwrite:knowledge_base
DELETE/landing-pages/{id}
Delete a landing page.
Marketingwrite:landing_pages
PATCH/landing-pages/{id}
Update a landing page's content (cannot publish it or set custom scripts).
Marketingwrite:landing_pages
POST/landing-pages
Create a landing page as a DRAFT (publishing is a separate action; no custom scripts).
Marketingwrite:landing_pages
DELETE/lists/{id}
Delete a mailing list.
Marketingwrite:lists
PATCH/lists/{id}
Update a mailing list.
Marketingwrite:lists
POST/lists
Create a mailing list.
Marketingwrite:lists
DELETE/message-templates/{id}
Delete a proactive message template.
Live Chatwrite:message_templates
PATCH/message-templates/{id}
Update a proactive message template.
Live Chatwrite:message_templates
POST/message-templates
Create a proactive message template for a chat event.
Live Chatwrite:message_templates
DELETE/pipelines/{id}
Deactivate a deal pipeline (soft delete).
CRMwrite:pipelines
PATCH/pipelines/{id}
Update a deal pipeline.
CRMwrite:pipelines
POST/pipelines
Create a deal pipeline (seeds six default stages).
CRMwrite:pipelines
DELETE/posts/{id}
Delete a social post.
Social Mediawrite:posts
PATCH/posts/{id}
Update a social post's content/config (cannot publish or schedule).
Social Mediawrite:posts
POST/posts
Create a DRAFT social post (never publishes or schedules).
Social Mediawrite:posts
DELETE/product-options/{id}
Delete a product option axis.
E-Commercewrite:product_options
PATCH/product-options/{id}
Update a product option axis.
E-Commercewrite:product_options
POST/product-options
Create a product option axis (product_id must belong to the key's site).
E-Commercewrite:product_options
DELETE/product-variants/{id}
Delete a product variant.
E-Commercewrite:product_variants
PATCH/product-variants/{id}
Update a product variant.
E-Commercewrite:product_variants
POST/product-variants
Create a product variant (product_id must belong to the key's site).
E-Commercewrite:product_variants
DELETE/products/{id}
Delete a catalog product.
E-Commercewrite:products
PATCH/products/{id}
Update a catalog product.
E-Commercewrite:products
POST/products
Create a catalog product.
E-Commercewrite:products
PATCH/reviews/{id}/moderate
Moderate a review — approve or reject it (with an optional owner reply).
E-Commercewrite:reviews
DELETE/saved-replies/{id}
Delete a saved reply.
Social Mediawrite:saved_replies
PATCH/saved-replies/{id}
Update a saved reply.
Social Mediawrite:saved_replies
POST/saved-replies
Create a saved reply.
Social Mediawrite:saved_replies
DELETE/sequences/{id}
Delete a draft sequence.
Marketingwrite:sequences
PATCH/sequences/{id}
Update a draft/paused sequence (cannot activate it).
Marketingwrite:sequences
POST/sequences
Create a drip sequence as a DRAFT (activation, which sends, is a separate action).
Marketingwrite:sequences
DELETE/services/{id}
Delete a bookable service.
Bookingwrite:services
PATCH/services/{id}
Update a bookable service.
Bookingwrite:services
POST/services
Create a bookable service.
Bookingwrite:services
PATCH/settings
Update the booking module settings (config; no notification email).
Bookingwrite:settings
DELETE/staff/{id}
Delete a staff member.
Bookingwrite:staff
PATCH/staff/{id}
Update a staff member (config only; no contact email/phone).
Bookingwrite:staff
POST/staff
Create a staff member (config only; no contact email/phone).
Bookingwrite:staff
DELETE/tags/{id}
Delete a CRM tag.
CRMwrite:tags
PATCH/tags/{id}
Update a CRM tag.
CRMwrite:tags
POST/tags
Create a CRM tag.
CRMwrite:tags
DELETE/tax-rates/{id}
Deactivate a tax rate (soft delete).
Invoicingwrite:tax_rates
PATCH/tax-rates/{id}
Update a tax rate.
Invoicingwrite:tax_rates
POST/tax-rates
Create a tax rate.
Invoicingwrite:tax_rates

Money- and identity-adjacent writes (orders, checkout, appointments) are deliberately withheld from v1 — those changes flow through the platform’s own automation, not an external key.

Access levels

Three key levels, one boundary.

A key’s prefix encodes its blast radius. The level — not the request — decides what it can reach.

dmc_live_

Site

Pinned to one site. Reads and writes that site's exposed resources — the everyday integration key, self-served under Settings → Integrations.

dmc_agy_

Agency

Your whole account. Read the agency's sites, usage, subscription and installed modules across every site it owns.

dmc_plt_

Platform

Super-admin. Platform-ops and module authoring over the API — minted only by Dramac, IP-allowlistable, every call audited.

Events & webhooks

104 triggers, signed and retried.

Every module publishes its events to one bus. Point a subscription at your endpoint, pick the events, and the platform delivers them — signed, retried, and replayable when your side has a bad day.

Signed, with zero-downtime rotation — every POST carries X-DRAMAC-Signature, an HMAC-SHA256 over the timestamp and body. Rotate the secret and, for a 24-hour grace window, deliveries carry both the old and new signature so nothing drops.
Retried with backoff — up to six attempts over roughly nine hours. Anything that never lands is dead-lettered, and you can replay it by hand.
Hardened — HTTPS-only, re-validated against SSRF immediately before each request, redirects never followed, every attempt timeout-bounded.
Observable — the last deliveries per subscription, with response codes and bodies, are in the dashboard next to the replay button.
POST https://your-app.com/hooks
X-DRAMAC-Event: ecommerce.order.created
X-DRAMAC-Delivery-Id: 3f7c…a91
X-DRAMAC-Timestamp: 1784908324117
X-DRAMAC-Signature: sha256=9b1c…

{
  "event": "ecommerce.order.created",
  "created_at": "2026-07-17T08:12:04.117Z",
  "data": { "order_number": "ORD-1042", "total": 250,
           "customer_email": "amara@…" }
}

// verify: HMAC-SHA256(secret, `${timestamp}.${body}`)
MCP

Connect an AI, not just a script.

Point Claude, Cursor, or any MCP client at Dramac and it works your data through the same scoped key — every tool is derived from the API above, so there’s nothing new to learn and nothing it can do that the key can’t.

Two transports — a hosted endpoint at /api/mcp for remote clients, and a local stdio server for your terminal. Same tools, same key.
Key-scoped — the tools an AI sees match the key's level, and every call is enforced by the API's own scopes. The MCP invents no capability of its own.
Dry-run by default — the platform Doctor's fix tools default to a dry run, so an AI must ask for a change explicitly before anything is applied.
add the Dramac MCP server
# Claude Code — the hosted (remote) MCP endpoint
$ claude mcp add --transport http dramac \
    'https://app.dramac.io/api/mcp' \
    --header 'Authorization: Bearer dmc_plt_…'

# then, from the client:
> whoami
> platform_diagnose
> doctor_execute actionKey=deliver_webhooks dryRun=true
On the roadmap

Honest about what’s next.

These aren’t first-party, supported products yet. When one is, it moves up this page — with real endpoints and a real reference, not before.

Planned

First-party client SDKs

The OpenAPI spec at /api/v1/openapi.json is public today, so you can generate a typed client in any language right now. Published, supported first-party SDKs are a later step.

Planned

Open third-party marketplace publishing

Modules can be authored over the API with a platform key today, and agencies install from the marketplace — but opening publishing to outside developers stays approval-gated, a deliberate later step.

Start with a key.

Keys and webhook subscriptions live in the dashboard, under Settings → Integrations. Point /api/v1/meta at one and it will tell you everything it can reach.

Talk to our teamExplore the platform