{"openapi":"3.1.0","info":{"title":"mxAURA Public API","version":"1.4.0","description":"Composition and orchestration on top of HubSpot: reusable components compose into messages, messages into pools, pools into campaigns and flows, with cascade logic governing per-contact sequencing. Authenticate with an API key (create in the app under Account > API) or an OAuth 2.1 access token from https://auth.mxaura.ai. Rate limits: 120 req/min + 25/10s burst per key; 600 req/min per account, always. 429 responses include Retry-After."},"servers":[{"url":"https://api.mxaura.ai/v1"}],"security":[{"apiKey":[]},{"bearerAuth":[]}],"paths":{"/me":{"get":{"tags":["identity"],"summary":"Identify the authenticated credential","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Returns account, scopes, and rate tier. Use as the auth test endpoint in Zapier/Make.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/pools/{id}":{"get":{"tags":["pools"],"summary":"Get one pool","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope pools.read. Returns a single pool. A pool belonging to another account is reported as 404, identical to one that does not exist — the API does not confirm the existence of resources outside your account.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/pools/{id}/messages":{"get":{"tags":["pools"],"summary":"List the ordered messages composed into a pool","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope pools.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]},"post":{"tags":["pools"],"summary":"Compose a message into a pool","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope pools.write. THIS is where components associate. A header, summary, signature, branding and template are bound to a message AT COMPOSITION TIME, not on the message itself — which is why the same message can appear in two pools with different branding. Position is assigned at the end and renumbers on every add, delete and reorder.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["message_id"],"properties":{"message_id":{"type":"string","format":"uuid"},"template_id":{"type":["string","null"],"format":"uuid","description":"Overrides the message template_default for this placement."},"header_id":{"type":["string","null"],"format":"uuid"},"summary_id":{"type":["string","null"],"format":"uuid"},"summary_ids":{"type":["array","null"],"items":{"type":"string","format":"uuid"},"description":"Multiple summaries expand into cascade variants."},"signature_id":{"type":["string","null"],"format":"uuid"},"branding_id":{"type":["string","null"],"format":"uuid"},"field_values":{"type":["object","null"],"description":"Per-placement field overrides."}}}}}},"responses":{"200":{"description":"Composed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/campaigns/{id}":{"get":{"tags":["campaigns"],"summary":"Get one campaign","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope campaigns.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/flows/{id}":{"get":{"tags":["flows"],"summary":"Get one flow with enrollment counts","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope flows.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/flows/{id}/enroll":{"post":{"tags":["enrollments"],"summary":"Enroll a HubSpot contact in a flow","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope enrollments.write. Causes real dispatches (HubSpot property writes, real email). Subject to the per-account hourly enrollment cap; a 429 with code enrollment_cap affects enrollment endpoints only.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["hs_contact_id"],"properties":{"hs_contact_id":{"type":"string","description":"HubSpot contact id"}}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/flows/{id}/unenroll":{"post":{"tags":["enrollments"],"summary":"Exit a contact from a flow","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope enrollments.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/preview/simulate-campaign":{"post":{"tags":["campaigns"],"summary":"Simulate the full contact journey a campaign’s cascade would produce","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Read-only by contract: writes nothing, sends nothing. The source of truth for cascade behavior. Requires scope campaigns.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["campaignId"],"properties":{"campaignId":{"type":"string","format":"uuid"},"contactId":{"type":"string","description":"Optional HubSpot contact id — honors real pool progress"},"ignoreScheduleWindows":{"type":"boolean"}}}}}}}},"/activity/dispatches":{"get":{"tags":["dispatch"],"summary":"Dispatch log entries (newest first)","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope dispatch.read. Poll newest-first with limit for trigger-style integrations (Zapier/Make): dedupe on id.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"status","in":"query","schema":{"type":"string"},"description":"dispatch_status filter"}]}},"/activity/feed":{"get":{"tags":["dispatch"],"summary":"Recent account activity feed","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope dispatch.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/media/files":{"get":{"tags":["media"],"summary":"List uploaded files","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.read. Files stored in this account. Third-party provider routes (/media/providers) are internal only.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["media"],"summary":"Upload a file","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.write. multipart/form-data. The response carries a public_url on media.mxaura.ai — put that URL into a header or message image field. Files are served immutably and cached at the edge, so a URL never changes once issued.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"},"folder_id":{"type":"string","format":"uuid"}}}}}},"responses":{"200":{"description":"Uploaded","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"filename":{"type":"string"},"public_url":{"type":"string","description":"Use this in image fields."},"content_type":{"type":"string"},"size_bytes":{"type":"integer"}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/campaigns/{id}/pools":{"get":{"tags":["campaigns"],"summary":"List the pools attached to a campaign","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope campaigns.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]},"post":{"tags":["campaigns"],"summary":"Attach a pool to a campaign","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope campaigns.write. Both the campaign and the pool must exist in your account — a pool belonging to another account returns 404. Attaching the same pool twice returns 409: cascade evaluates every attached pool, so a duplicate could send the same contact two messages.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["pool_id"],"properties":{"pool_id":{"type":"string","format":"uuid"},"pool_type":{"type":"string","enum":["alert","scheduled","nurture"],"default":"nurture"},"pool_order":{"type":"integer","description":"Evaluation order within its type."},"nurture_mode":{"type":["string","null"],"enum":["recurring","limited",null]},"schedule_start":{"type":["string","null"],"format":"date-time"},"schedule_end":{"type":["string","null"],"format":"date-time"}}}}}},"responses":{"200":{"description":"Attached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"400":{"$ref":"#/components/responses/NotFound"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"That pool is already attached to this campaign","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/hubs":{"get":{"tags":["hubs"],"summary":"List hubs","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope hubs.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["hubs"],"summary":"Compose a hub","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope hubs.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/hubs/types":{"get":{"tags":["hubs"],"summary":"List content types","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope hubs.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["hubs"],"summary":"Create a content type","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope hubs.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/hubs/articles":{"get":{"tags":["hubs"],"summary":"List articles in the content library","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope articles.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["hubs"],"summary":"Create an article","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope articles.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/hubs/articles/{id}":{"get":{"tags":["hubs"],"summary":"Fetch one article","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope articles.read. Returns the article plus its content type fields and hub placements.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]},"put":{"tags":["hubs"],"summary":"Update an article","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope articles.write. Field values go in data as an object keyed by field_key.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/hubs/authors":{"get":{"tags":["hubs"],"summary":"List authors","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope articles.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["hubs"],"summary":"Create an author","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope articles.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/hubs/{id}/entries":{"get":{"tags":["hubs"],"summary":"List the articles placed in a hub","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope articles.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]},"post":{"tags":["hubs"],"summary":"Place an article in a hub","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope publishing.write. Placement is what makes an article live on a subscriber site, which is why it is a separate scope from editing the article itself.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/hubs/articles/{id}/ai/seo":{"post":{"tags":["hubs"],"summary":"Draft search metadata for an article","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope ai.write. Returns suggestions; it does not write them. Consumes model budget on this account, which is why ai.write is separate from articles.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/hubs/articles/{id}/ai/hero-spec":{"post":{"tags":["hubs"],"summary":"Generate a hero image spec for an article","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope ai.write. Returns a layout choice, its display copy, and the hub brand tokens to render it with. The image itself is drawn by the client from those tokens.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/hubs/{id}/subscriptions":{"get":{"tags":["hubs"],"summary":"List the subscriptions on a hub","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope subscribers.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]},"post":{"tags":["hubs"],"summary":"Mint a subscription (embed key) on a hub","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope subscribers.write. An embed key grants a site read access to this hub, so this is deliberately not covered by articles.write. Site-key rotation is not available on the public API at all.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/messages":{"get":{"tags":["messages"],"summary":"List messages","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["messages"],"summary":"Create a message (metadata only)","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.write. Step 1 of 2. Only name, description, template_default and folder_id are persisted; field content sent here is silently dropped. Follow with PUT /messages/{id} to fill the template slots.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreate"}}}},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}}}}}}}},"400":{"$ref":"#/components/responses/NotFound"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/headers":{"get":{"tags":["headers"],"summary":"List headers","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["headers"],"summary":"Create a header","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/summaries":{"get":{"tags":["summaries"],"summary":"List summaries","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["summaries"],"summary":"Create a summarie","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/signatures":{"get":{"tags":["signatures"],"summary":"List signatures","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["signatures"],"summary":"Create a signature","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/senders":{"get":{"tags":["senders"],"summary":"List senders","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["senders"],"summary":"Create a sender","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/templates":{"get":{"tags":["templates"],"summary":"List templates","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["templates"],"summary":"Create a template","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/brandings":{"get":{"tags":["brandings"],"summary":"List brandings","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope brandings.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["brandings"],"summary":"Create a branding","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope brandings.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/pools":{"get":{"tags":["pools"],"summary":"List pools","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope pools.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["pools"],"summary":"Create a pool","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope pools.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/campaigns":{"get":{"tags":["campaigns"],"summary":"List campaigns","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope campaigns.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["campaigns"],"summary":"Create a campaign","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope campaigns.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/flows":{"get":{"tags":["flows"],"summary":"List flows","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope flows.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["flows"],"summary":"Create a flow","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope flows.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/media":{"get":{"tags":["media"],"summary":"List media","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope media.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["media"],"summary":"Create a media","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope media.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/identity":{"get":{"tags":["identity"],"summary":"List identity","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope identity.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["identity"],"summary":"Create a identity","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope identity.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/folders":{"get":{"tags":["folders"],"summary":"List folders","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope folders.read.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["folders"],"summary":"Create a folder","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope folders.write.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}}}},"/messages/{id}":{"get":{"tags":["messages"],"summary":"Get one message","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.read. A message in another account returns 404, identical to one that does not exist.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Message"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"put":{"tags":["messages"],"summary":"Update a message / fill its template slots","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.write. Step 2 of 2. Fetch GET /templates/{template_default} first to learn what each fieldN means for this message — field3 is \"Button Label\" on one template and unused on another.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageUpdate"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/templates/{id}":{"get":{"tags":["templates"],"summary":"Get one template, including its field definitions","security":[{"apiKey":[]},{"bearerAuth":[]}],"description":"Requires scope components.read. This is the introspection call: fieldN_desc gives the human label for slot N, fieldN_type the expected content, fieldN_enabled whether the slot is used at all. Read this before composing a message so you know which fields to populate and what belongs in them.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Template"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Authorization: Bearer mxa_live_... or an OAuth access token"},"apiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Alternative header for the same API key"}},"responses":{"Unauthorized":{"description":"Missing, invalid, expired, or revoked credential","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"Credential lacks the required scope, or is suspended","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"RateLimited":{"description":"Rate limit or enrollment cap exceeded; see Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"NotFound":{"description":"No such resource in this account. Resources owned by other accounts return 404, not 403.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"Template":{"type":"object","description":"The SHAPE a message is composed into. Fetch this to discover what each field slot means before filling a message.","properties":{"id":{"type":"string","format":"uuid"},"account_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":["string","null"]},"hs_template_id":{"type":["integer","null"],"description":"The HubSpot template this renders through. HubSpot performs the send."},"field1_desc":{"type":["string","null"],"description":"Human label for slot 1, e.g. \"Button Label\". Null when the slot is unused."},"field1_enabled":{"type":"boolean","description":"Whether slot 1 is part of this template."},"field1_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 1."},"field2_desc":{"type":["string","null"],"description":"Human label for slot 2, e.g. \"Button Label\". Null when the slot is unused."},"field2_enabled":{"type":"boolean","description":"Whether slot 2 is part of this template."},"field2_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 2."},"field3_desc":{"type":["string","null"],"description":"Human label for slot 3, e.g. \"Button Label\". Null when the slot is unused."},"field3_enabled":{"type":"boolean","description":"Whether slot 3 is part of this template."},"field3_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 3."},"field4_desc":{"type":["string","null"],"description":"Human label for slot 4, e.g. \"Button Label\". Null when the slot is unused."},"field4_enabled":{"type":"boolean","description":"Whether slot 4 is part of this template."},"field4_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 4."},"field5_desc":{"type":["string","null"],"description":"Human label for slot 5, e.g. \"Button Label\". Null when the slot is unused."},"field5_enabled":{"type":"boolean","description":"Whether slot 5 is part of this template."},"field5_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 5."},"field6_desc":{"type":["string","null"],"description":"Human label for slot 6, e.g. \"Button Label\". Null when the slot is unused."},"field6_enabled":{"type":"boolean","description":"Whether slot 6 is part of this template."},"field6_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 6."},"field7_desc":{"type":["string","null"],"description":"Human label for slot 7, e.g. \"Button Label\". Null when the slot is unused."},"field7_enabled":{"type":"boolean","description":"Whether slot 7 is part of this template."},"field7_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 7."},"field8_desc":{"type":["string","null"],"description":"Human label for slot 8, e.g. \"Button Label\". Null when the slot is unused."},"field8_enabled":{"type":"boolean","description":"Whether slot 8 is part of this template."},"field8_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 8."},"field9_desc":{"type":["string","null"],"description":"Human label for slot 9, e.g. \"Button Label\". Null when the slot is unused."},"field9_enabled":{"type":"boolean","description":"Whether slot 9 is part of this template."},"field9_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 9."},"field10_desc":{"type":["string","null"],"description":"Human label for slot 10, e.g. \"Button Label\". Null when the slot is unused."},"field10_enabled":{"type":"boolean","description":"Whether slot 10 is part of this template."},"field10_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 10."},"field11_desc":{"type":["string","null"],"description":"Human label for slot 11, e.g. \"Button Label\". Null when the slot is unused."},"field11_enabled":{"type":"boolean","description":"Whether slot 11 is part of this template."},"field11_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 11."},"field12_desc":{"type":["string","null"],"description":"Human label for slot 12, e.g. \"Button Label\". Null when the slot is unused."},"field12_enabled":{"type":"boolean","description":"Whether slot 12 is part of this template."},"field12_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 12."},"field13_desc":{"type":["string","null"],"description":"Human label for slot 13, e.g. \"Button Label\". Null when the slot is unused."},"field13_enabled":{"type":"boolean","description":"Whether slot 13 is part of this template."},"field13_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 13."},"field14_desc":{"type":["string","null"],"description":"Human label for slot 14, e.g. \"Button Label\". Null when the slot is unused."},"field14_enabled":{"type":"boolean","description":"Whether slot 14 is part of this template."},"field14_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 14."},"field15_desc":{"type":["string","null"],"description":"Human label for slot 15, e.g. \"Button Label\". Null when the slot is unused."},"field15_enabled":{"type":"boolean","description":"Whether slot 15 is part of this template."},"field15_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 15."},"field16_desc":{"type":["string","null"],"description":"Human label for slot 16, e.g. \"Button Label\". Null when the slot is unused."},"field16_enabled":{"type":"boolean","description":"Whether slot 16 is part of this template."},"field16_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 16."},"field17_desc":{"type":["string","null"],"description":"Human label for slot 17, e.g. \"Button Label\". Null when the slot is unused."},"field17_enabled":{"type":"boolean","description":"Whether slot 17 is part of this template."},"field17_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 17."},"field18_desc":{"type":["string","null"],"description":"Human label for slot 18, e.g. \"Button Label\". Null when the slot is unused."},"field18_enabled":{"type":"boolean","description":"Whether slot 18 is part of this template."},"field18_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 18."},"field19_desc":{"type":["string","null"],"description":"Human label for slot 19, e.g. \"Button Label\". Null when the slot is unused."},"field19_enabled":{"type":"boolean","description":"Whether slot 19 is part of this template."},"field19_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 19."},"field20_desc":{"type":["string","null"],"description":"Human label for slot 20, e.g. \"Button Label\". Null when the slot is unused."},"field20_enabled":{"type":"boolean","description":"Whether slot 20 is part of this template."},"field20_type":{"type":"string","enum":["text","link","image"],"description":"Content type expected in slot 20."}}},"Message":{"type":"object","description":"A composed message: content filling the slots its template defines.","properties":{"id":{"type":"string","format":"uuid"},"account_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":["string","null"]},"template_default":{"type":["string","null"],"format":"uuid","description":"Template this message composes into. Determines what each fieldN means."},"subject":{"type":["string","null"]},"preview":{"type":["string","null"],"description":"Inbox preview text."},"comp_close":{"type":["string","null"]},"folder_id":{"type":["string","null"],"format":"uuid"},"template_name":{"type":["string","null"],"description":"Resolved on read. Not settable."},"hs_template_id":{"type":["integer","null"],"description":"Resolved from the template on read. Not settable."},"field1":{"type":["string","null"],"description":"Content for slot 1. Its meaning is defined by field1_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field1_enabled":{"type":"boolean","description":"Include slot 1 when rendering."},"field2":{"type":["string","null"],"description":"Content for slot 2. Its meaning is defined by field2_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field2_enabled":{"type":"boolean","description":"Include slot 2 when rendering."},"field3":{"type":["string","null"],"description":"Content for slot 3. Its meaning is defined by field3_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field3_enabled":{"type":"boolean","description":"Include slot 3 when rendering."},"field4":{"type":["string","null"],"description":"Content for slot 4. Its meaning is defined by field4_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field4_enabled":{"type":"boolean","description":"Include slot 4 when rendering."},"field5":{"type":["string","null"],"description":"Content for slot 5. Its meaning is defined by field5_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field5_enabled":{"type":"boolean","description":"Include slot 5 when rendering."},"field6":{"type":["string","null"],"description":"Content for slot 6. Its meaning is defined by field6_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field6_enabled":{"type":"boolean","description":"Include slot 6 when rendering."},"field7":{"type":["string","null"],"description":"Content for slot 7. Its meaning is defined by field7_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field7_enabled":{"type":"boolean","description":"Include slot 7 when rendering."},"field8":{"type":["string","null"],"description":"Content for slot 8. Its meaning is defined by field8_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field8_enabled":{"type":"boolean","description":"Include slot 8 when rendering."},"field9":{"type":["string","null"],"description":"Content for slot 9. Its meaning is defined by field9_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field9_enabled":{"type":"boolean","description":"Include slot 9 when rendering."},"field10":{"type":["string","null"],"description":"Content for slot 10. Its meaning is defined by field10_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field10_enabled":{"type":"boolean","description":"Include slot 10 when rendering."},"field11":{"type":["string","null"],"description":"Content for slot 11. Its meaning is defined by field11_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field11_enabled":{"type":"boolean","description":"Include slot 11 when rendering."},"field12":{"type":["string","null"],"description":"Content for slot 12. Its meaning is defined by field12_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field12_enabled":{"type":"boolean","description":"Include slot 12 when rendering."},"field13":{"type":["string","null"],"description":"Content for slot 13. Its meaning is defined by field13_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field13_enabled":{"type":"boolean","description":"Include slot 13 when rendering."},"field14":{"type":["string","null"],"description":"Content for slot 14. Its meaning is defined by field14_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field14_enabled":{"type":"boolean","description":"Include slot 14 when rendering."},"field15":{"type":["string","null"],"description":"Content for slot 15. Its meaning is defined by field15_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field15_enabled":{"type":"boolean","description":"Include slot 15 when rendering."},"field16":{"type":["string","null"],"description":"Content for slot 16. Its meaning is defined by field16_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field16_enabled":{"type":"boolean","description":"Include slot 16 when rendering."},"field17":{"type":["string","null"],"description":"Content for slot 17. Its meaning is defined by field17_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field17_enabled":{"type":"boolean","description":"Include slot 17 when rendering."},"field18":{"type":["string","null"],"description":"Content for slot 18. Its meaning is defined by field18_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field18_enabled":{"type":"boolean","description":"Include slot 18 when rendering."},"field19":{"type":["string","null"],"description":"Content for slot 19. Its meaning is defined by field19_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field19_enabled":{"type":"boolean","description":"Include slot 19 when rendering."},"field20":{"type":["string","null"],"description":"Content for slot 20. Its meaning is defined by field20_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field20_enabled":{"type":"boolean","description":"Include slot 20 when rendering."}}},"MessageCreate":{"type":"object","required":["name"],"description":"CREATE ACCEPTS METADATA ONLY. fieldN, subject, preview and comp_close sent here are IGNORED — they are set with a follow-up PUT /messages/{id}. Composing a message is therefore always two calls.","properties":{"name":{"type":"string"},"description":{"type":"string"},"template_default":{"type":"string","format":"uuid","description":"Bind to a template at create time so the slot meanings are fixed."},"folder_id":{"type":"string","format":"uuid"}}},"MessageUpdate":{"type":"object","description":"Every property is optional; only those present are written. This is where field content is set.","properties":{"name":{"type":"string"},"description":{"type":"string"},"template_default":{"type":"string","format":"uuid"},"subject":{"type":"string"},"preview":{"type":"string"},"comp_close":{"type":"string"},"folder_id":{"type":"string","format":"uuid"},"field1":{"type":["string","null"],"description":"Content for slot 1. Its meaning is defined by field1_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field1_enabled":{"type":"boolean","description":"Include slot 1 when rendering."},"field2":{"type":["string","null"],"description":"Content for slot 2. Its meaning is defined by field2_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field2_enabled":{"type":"boolean","description":"Include slot 2 when rendering."},"field3":{"type":["string","null"],"description":"Content for slot 3. Its meaning is defined by field3_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field3_enabled":{"type":"boolean","description":"Include slot 3 when rendering."},"field4":{"type":["string","null"],"description":"Content for slot 4. Its meaning is defined by field4_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field4_enabled":{"type":"boolean","description":"Include slot 4 when rendering."},"field5":{"type":["string","null"],"description":"Content for slot 5. Its meaning is defined by field5_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field5_enabled":{"type":"boolean","description":"Include slot 5 when rendering."},"field6":{"type":["string","null"],"description":"Content for slot 6. Its meaning is defined by field6_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field6_enabled":{"type":"boolean","description":"Include slot 6 when rendering."},"field7":{"type":["string","null"],"description":"Content for slot 7. Its meaning is defined by field7_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field7_enabled":{"type":"boolean","description":"Include slot 7 when rendering."},"field8":{"type":["string","null"],"description":"Content for slot 8. Its meaning is defined by field8_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field8_enabled":{"type":"boolean","description":"Include slot 8 when rendering."},"field9":{"type":["string","null"],"description":"Content for slot 9. Its meaning is defined by field9_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field9_enabled":{"type":"boolean","description":"Include slot 9 when rendering."},"field10":{"type":["string","null"],"description":"Content for slot 10. Its meaning is defined by field10_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field10_enabled":{"type":"boolean","description":"Include slot 10 when rendering."},"field11":{"type":["string","null"],"description":"Content for slot 11. Its meaning is defined by field11_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field11_enabled":{"type":"boolean","description":"Include slot 11 when rendering."},"field12":{"type":["string","null"],"description":"Content for slot 12. Its meaning is defined by field12_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field12_enabled":{"type":"boolean","description":"Include slot 12 when rendering."},"field13":{"type":["string","null"],"description":"Content for slot 13. Its meaning is defined by field13_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field13_enabled":{"type":"boolean","description":"Include slot 13 when rendering."},"field14":{"type":["string","null"],"description":"Content for slot 14. Its meaning is defined by field14_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field14_enabled":{"type":"boolean","description":"Include slot 14 when rendering."},"field15":{"type":["string","null"],"description":"Content for slot 15. Its meaning is defined by field15_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field15_enabled":{"type":"boolean","description":"Include slot 15 when rendering."},"field16":{"type":["string","null"],"description":"Content for slot 16. Its meaning is defined by field16_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field16_enabled":{"type":"boolean","description":"Include slot 16 when rendering."},"field17":{"type":["string","null"],"description":"Content for slot 17. Its meaning is defined by field17_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field17_enabled":{"type":"boolean","description":"Include slot 17 when rendering."},"field18":{"type":["string","null"],"description":"Content for slot 18. Its meaning is defined by field18_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field18_enabled":{"type":"boolean","description":"Include slot 18 when rendering."},"field19":{"type":["string","null"],"description":"Content for slot 19. Its meaning is defined by field19_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field19_enabled":{"type":"boolean","description":"Include slot 19 when rendering."},"field20":{"type":["string","null"],"description":"Content for slot 20. Its meaning is defined by field20_desc on the bound template — fetch GET /templates/{template_default} to discover it."},"field20_enabled":{"type":"boolean","description":"Include slot 20 when rendering."}}},"DataResponse":{"type":"object","properties":{"data":{"description":"Resource payload — object or array"},"meta":{"type":"object"}}},"ErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","key_expired","key_suspended","key_revoked","account_suspended","forbidden_scope","rate_limited","enrollment_cap","not_found","conflict","upstream_error","bad_request"]},"message":{"type":"string"}}}}},"Me":{"type":"object","properties":{"data":{"type":"object","properties":{"key_id":{"type":"string"},"key_name":{"type":"string"},"account_id":{"type":"string","format":"uuid"},"account_type":{"type":"string","enum":["agency","company"]},"scopes":{"type":"array","items":{"type":"string"}},"rate_limit_per_min":{"type":["integer","null"]},"key_status":{"type":"string"}}}}}}}}