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-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.
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.
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.
| Resource | Module | Scope | Fields |
|---|---|---|---|
/appointmentsBooking appointments. | Booking | read:appointments | 14 |
/audiencesAudience segments (filter rules + evaluated counts). | Marketing | read:audiences | 13 |
/availabilityStaff / business availability rules (recurring + date-specific). | Booking | read:availability | 14 |
/blog-categoriesBlog categories. | Blog AI | read:blog_categories | 7 |
/blog-postsBlog posts (rendered content_html; raw editor blob + author PII withheld). | Blog AI | read:blog_posts | 23 |
/bundlesProduct bundles / kits. | E-Commerce | read:bundles | 21 |
/campaignsSocial campaigns (content organization + goals). | Social Media | read:campaigns | 14 |
/canned-responsesLive-chat canned responses (quick-reply templates). | Live Chat | read:canned_responses | 12 |
/categoriesStorefront product categories. | E-Commerce | read:categories | 12 |
/companiesCRM companies / accounts. | CRM | read:companies | 14 |
/competitorsTracked competitor accounts (public profiles + benchmark metrics). | Social Media | read:competitors | 17 |
/contactsCRM contacts (leads and customers). | CRM | read:contacts | 15 |
/content-pillarsContent pillars (the brand's content themes + target mix). | Social Media | read:content_pillars | 12 |
/dealsCRM deals / opportunities. | CRM | read:deals | 14 |
/departmentsLive-chat routing departments. | Live Chat | read:departments | 10 |
/discountsDiscount codes and cart rules. | E-Commerce | read:discounts | 16 |
/document-templatesInvoice / quotation / receipt document templates (layout config). | Invoicing | read:document_templates | 19 |
/email-campaignsEmail/SMS campaigns (config + delivery stats). | Marketing | read:email_campaigns | 31 |
/email-templatesReusable email templates. | Marketing | read:email_templates | 16 |
/expense-categoriesExpense categories (config; monthly budget withheld). | Invoicing | read:expense_categories | 9 |
/flash-salesTime-boxed flash sales. | E-Commerce | read:flash_sales | 18 |
/formsOpt-in forms (design + conversion stats; submissions withheld). | Marketing | read:forms | 26 |
/funnelsMarketing funnels (steps + conversion stats). | Marketing | read:funnels | 12 |
/hashtag-groupsReusable hashtag groups. | Social Media | read:hashtag_groups | 9 |
/inventory-locationsInventory / fulfillment locations (contact PII excluded). | E-Commerce | read:inventory_locations | 15 |
/itemsReusable item / service catalog (standalone config; unit_price in cents). | Invoicing | read:items | 13 |
/knowledge-baseLive-chat knowledge-base articles (used by the AI responder). | Live Chat | read:knowledge_base | 10 |
/landing-pagesLanding pages (content + stats; custom_scripts + submissions withheld). | Marketing | read:landing_pages | 34 |
/listsMailing lists. | Marketing | read:lists | 11 |
/message-templatesProactive chat message templates (per booking/order/quote event). | Live Chat | read:message_templates | 6 |
/ordersStorefront orders. | E-Commerce | read:orders | 17 |
/pipeline-stagesStages within a CRM deal pipeline. | CRM | read:pipeline_stages | 9 |
/pipelinesCRM deal pipelines. | CRM | read:pipelines | 7 |
/postsSocial posts (drafts, scheduled, and published) with their content. | Social Media | read:posts | 19 |
/product-optionsOption axes (e.g. Size, Color) of a product. | E-Commerce | read:product_options | 5 |
/product-variantsVariants (SKU/price/stock) of a product. | E-Commerce | read:product_variants | 11 |
/productsStorefront products / catalog. | E-Commerce | read:products | 15 |
/reviewsProduct reviews (reviewer email/identity excluded). | E-Commerce | read:reviews | 13 |
/saved-repliesSaved replies (canned responses for the social inbox). | Social Media | read:saved_replies | 10 |
/scripted-flowsScripted conversation flows (guided chat playbooks). | Live Chat | read:scripted_flows | 16 |
/sending-statsDaily email/SMS sending statistics. | Marketing | read:sending_stats | 9 |
/sequencesDrip/automation sequences (steps + enrollment stats). | Marketing | read:sequences | 16 |
/servicesBookable services. | Booking | read:services | 11 |
/settingsBooking module settings (config; notification email excluded). | Booking | read:settings | 21 |
/staffBooking staff members (config; contact email/phone excluded). | Booking | read:staff | 10 |
/tagsCRM tags for organizing contacts, companies and deals. | CRM | read:tags | 5 |
/tax-ratesReusable tax rates (config; rate is a percentage). | Invoicing | read:tax_rates | 11 |
/workflow-executionsAutomation workflow runs — metadata only (status, trigger TYPE, progress, timings). Excludes context/output/trigger_data/error_details Json and the free-text error body. | Automation | read:workflow_executions | 14 |
/workflowsAutomation workflows — metadata only (name, trigger TYPE, active state, run counts, run/retry policy, timings). Excludes trigger_config and every Json/credential/identity column. | Automation | read:workflows | 26 |
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.
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.
| Method | Endpoint | Module | Scope |
|---|---|---|---|
| DELETE | /audiences/{id}Delete an audience segment. | Marketing | write:audiences |
| PATCH | /audiences/{id}Update an audience segment. | Marketing | write:audiences |
| POST | /audiencesCreate an audience segment. | Marketing | write:audiences |
| DELETE | /availability/{id}Delete an availability rule. | Booking | write:availability |
| PATCH | /availability/{id}Update an availability rule. | Booking | write:availability |
| POST | /availabilityCreate an availability rule. | Booking | write:availability |
| DELETE | /blog-categories/{id}Delete a blog category (refused if posts reference it). | Blog AI | write:blog_categories |
| PATCH | /blog-categories/{id}Update a blog category. | Blog AI | write:blog_categories |
| POST | /blog-categoriesCreate a blog category. | Blog AI | write:blog_categories |
| DELETE | /blog-posts/{id}Delete a blog post. | Blog AI | write:blog_posts |
| PATCH | /blog-posts/{id}Update a blog post's content (cannot publish or schedule it). | Blog AI | write:blog_posts |
| POST | /blog-postsCreate a blog post as an unpublished DRAFT (publishing is a separate action). | Blog AI | write:blog_posts |
| DELETE | /campaigns/{id}Delete a social campaign (posts are unlinked, not deleted). | Social Media | write:campaigns |
| PATCH | /campaigns/{id}Update a social campaign. | Social Media | write:campaigns |
| POST | /campaignsCreate a social campaign. | Social Media | write:campaigns |
| DELETE | /canned-responses/{id}Delete a canned response. | Live Chat | write:canned_responses |
| PATCH | /canned-responses/{id}Update a canned response. | Live Chat | write:canned_responses |
| POST | /canned-responsesCreate a canned response. | Live Chat | write:canned_responses |
| DELETE | /categories/{id}Delete a product category. | E-Commerce | write:categories |
| PATCH | /categories/{id}Update a product category. | E-Commerce | write:categories |
| POST | /categoriesCreate a product category. | E-Commerce | write:categories |
| DELETE | /companies/{id}Delete a CRM company / account. | CRM | write:companies |
| PATCH | /companies/{id}Update a CRM company / account. | CRM | write:companies |
| POST | /companiesCreate a CRM company / account. | CRM | write:companies |
| DELETE | /competitors/{id}Stop tracking a competitor (soft delete). | Social Media | write:competitors |
| PATCH | /competitors/{id}Update a tracked competitor. | Social Media | write:competitors |
| POST | /competitorsTrack a competitor account. | Social Media | write:competitors |
| DELETE | /contacts/{id}Delete a CRM contact. | CRM | write:contacts |
| PATCH | /contacts/{id}Update a CRM contact. | CRM | write:contacts |
| POST | /contactsCreate a CRM contact (lead or customer). | CRM | write:contacts |
| DELETE | /content-pillars/{id}Delete a content pillar. | Social Media | write:content_pillars |
| PATCH | /content-pillars/{id}Update a content pillar. | Social Media | write:content_pillars |
| POST | /content-pillarsCreate a content pillar. | Social Media | write:content_pillars |
| DELETE | /deals/{id}Delete a CRM deal / opportunity. | CRM | write:deals |
| PATCH | /deals/{id}Update a CRM deal / opportunity. | CRM | write:deals |
| POST | /dealsCreate a CRM deal / opportunity. | CRM | write:deals |
| POST | /deals/{id}/move-stageMove a deal to a pipeline stage — fires crm.deal.stage_changed (plus crm.deal.won / crm.deal.lost for terminal stages). | CRM | write:deals |
| DELETE | /departments/{id}Delete a routing department (default department is protected). | Live Chat | write:departments |
| PATCH | /departments/{id}Update a routing department. | Live Chat | write:departments |
| POST | /departmentsCreate a routing department. | Live Chat | write:departments |
| DELETE | /document-templates/{id}Delete a document template. | Invoicing | write:document_templates |
| PATCH | /document-templates/{id}Update a document template. | Invoicing | write:document_templates |
| POST | /document-templatesCreate a document template. | Invoicing | write:document_templates |
| DELETE | /email-campaigns/{id}Delete a draft/cancelled campaign. | Marketing | write:email_campaigns |
| PATCH | /email-campaigns/{id}Update a campaign's content (cannot send or schedule it). | Marketing | write:email_campaigns |
| POST | /email-campaignsCreate an email/SMS campaign as an unscheduled DRAFT (sending is a separate action). | Marketing | write:email_campaigns |
| DELETE | /email-templates/{id}Delete an email template (system templates are protected). | Marketing | write:email_templates |
| PATCH | /email-templates/{id}Update an email template (system templates are protected). | Marketing | write:email_templates |
| POST | /email-templatesCreate an email template. | Marketing | write:email_templates |
| DELETE | /expense-categories/{id}Delete an expense category (refused if expenses reference it). | Invoicing | write:expense_categories |
| PATCH | /expense-categories/{id}Update an expense category. | Invoicing | write:expense_categories |
| POST | /expense-categoriesCreate an expense category. | Invoicing | write:expense_categories |
| DELETE | /forms/{id}Delete an opt-in form. | Marketing | write:forms |
| PATCH | /forms/{id}Update an opt-in form (cannot publish it live). | Marketing | write:forms |
| POST | /formsCreate an opt-in form as a DRAFT (going live on the site is a separate action). | Marketing | write:forms |
| DELETE | /items/{id}Deactivate a catalog item (soft delete). | Invoicing | write:items |
| PATCH | /items/{id}Update a catalog item (unit_price in cents). | Invoicing | write:items |
| POST | /itemsCreate a catalog item (unit_price in cents). | Invoicing | write:items |
| DELETE | /knowledge-base/{id}Delete a knowledge-base article. | Live Chat | write:knowledge_base |
| PATCH | /knowledge-base/{id}Update a knowledge-base article. | Live Chat | write:knowledge_base |
| POST | /knowledge-baseCreate a knowledge-base article. | Live Chat | write:knowledge_base |
| DELETE | /landing-pages/{id}Delete a landing page. | Marketing | write:landing_pages |
| PATCH | /landing-pages/{id}Update a landing page's content (cannot publish it or set custom scripts). | Marketing | write:landing_pages |
| POST | /landing-pagesCreate a landing page as a DRAFT (publishing is a separate action; no custom scripts). | Marketing | write:landing_pages |
| DELETE | /lists/{id}Delete a mailing list. | Marketing | write:lists |
| PATCH | /lists/{id}Update a mailing list. | Marketing | write:lists |
| POST | /listsCreate a mailing list. | Marketing | write:lists |
| DELETE | /message-templates/{id}Delete a proactive message template. | Live Chat | write:message_templates |
| PATCH | /message-templates/{id}Update a proactive message template. | Live Chat | write:message_templates |
| POST | /message-templatesCreate a proactive message template for a chat event. | Live Chat | write:message_templates |
| DELETE | /pipelines/{id}Deactivate a deal pipeline (soft delete). | CRM | write:pipelines |
| PATCH | /pipelines/{id}Update a deal pipeline. | CRM | write:pipelines |
| POST | /pipelinesCreate a deal pipeline (seeds six default stages). | CRM | write:pipelines |
| DELETE | /posts/{id}Delete a social post. | Social Media | write:posts |
| PATCH | /posts/{id}Update a social post's content/config (cannot publish or schedule). | Social Media | write:posts |
| POST | /postsCreate a DRAFT social post (never publishes or schedules). | Social Media | write:posts |
| DELETE | /product-options/{id}Delete a product option axis. | E-Commerce | write:product_options |
| PATCH | /product-options/{id}Update a product option axis. | E-Commerce | write:product_options |
| POST | /product-optionsCreate a product option axis (product_id must belong to the key's site). | E-Commerce | write:product_options |
| DELETE | /product-variants/{id}Delete a product variant. | E-Commerce | write:product_variants |
| PATCH | /product-variants/{id}Update a product variant. | E-Commerce | write:product_variants |
| POST | /product-variantsCreate a product variant (product_id must belong to the key's site). | E-Commerce | write:product_variants |
| DELETE | /products/{id}Delete a catalog product. | E-Commerce | write:products |
| PATCH | /products/{id}Update a catalog product. | E-Commerce | write:products |
| POST | /productsCreate a catalog product. | E-Commerce | write:products |
| PATCH | /reviews/{id}/moderateModerate a review — approve or reject it (with an optional owner reply). | E-Commerce | write:reviews |
| DELETE | /saved-replies/{id}Delete a saved reply. | Social Media | write:saved_replies |
| PATCH | /saved-replies/{id}Update a saved reply. | Social Media | write:saved_replies |
| POST | /saved-repliesCreate a saved reply. | Social Media | write:saved_replies |
| DELETE | /sequences/{id}Delete a draft sequence. | Marketing | write:sequences |
| PATCH | /sequences/{id}Update a draft/paused sequence (cannot activate it). | Marketing | write:sequences |
| POST | /sequencesCreate a drip sequence as a DRAFT (activation, which sends, is a separate action). | Marketing | write:sequences |
| DELETE | /services/{id}Delete a bookable service. | Booking | write:services |
| PATCH | /services/{id}Update a bookable service. | Booking | write:services |
| POST | /servicesCreate a bookable service. | Booking | write:services |
| PATCH | /settingsUpdate the booking module settings (config; no notification email). | Booking | write:settings |
| DELETE | /staff/{id}Delete a staff member. | Booking | write:staff |
| PATCH | /staff/{id}Update a staff member (config only; no contact email/phone). | Booking | write:staff |
| POST | /staffCreate a staff member (config only; no contact email/phone). | Booking | write:staff |
| DELETE | /tags/{id}Delete a CRM tag. | CRM | write:tags |
| PATCH | /tags/{id}Update a CRM tag. | CRM | write:tags |
| POST | /tagsCreate a CRM tag. | CRM | write:tags |
| DELETE | /tax-rates/{id}Deactivate a tax rate (soft delete). | Invoicing | write:tax_rates |
| PATCH | /tax-rates/{id}Update a tax rate. | Invoicing | write:tax_rates |
| POST | /tax-ratesCreate a tax rate. | Invoicing | write: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.
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.
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.
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.
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.
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.
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.