Skip to page content
Docs
Make Agent Fast documentation

API reference

Find every public resource, method, required scope, pagination rule, and mutation contract.

At a glance

Find every public resource, method, required scope, pagination rule, and mutation contract.

API request pathScoped key → versioned resource → signed response
App / SDKBearer keymaf_live_…/api/v1/…ResourceJSON
v141 operationsJSON

The canonical machine-readable contract is OpenAPI JSON. This page is the human-readable operation index and explains rules shared by every endpoint.

Base URL and version#

https://makeagent.fast/api/v1

The major version is part of the path. Additive fields can appear without a major-version change, so ignore unknown response fields. All management requests use HTTPS and a bearer API key or OAuth access token.

Common headers#

Authorization: Bearer maf_live_...
Accept: application/json
Content-Type: application/json
Idempotency-Key: your-stable-operation-key

Content-Type is required for POST and PATCH JSON bodies, including {}. Idempotency-Key is optional but strongly recommended for every POST, PATCH, and DELETE.

Account and sites#

MethodPathScopePurpose
GET/meaccount:readRead account, plan, entitlement, and wallet summary
GET/sitessites:readList owned sites
POST/sitessites:writeCreate a site and its default agent
GET/sites/{site_id}sites:readRetrieve one owned site
PATCH/sites/{site_id}sites:writeUpdate safe site fields
DELETE/sites/{site_id}sites:writeDelete the site and dependent resources
POST/sites/{site_id}/publishsites:writePublish or unpublish with { "published": boolean }
GET/sites/{site_id}/agentagents:readRead agent settings
PATCH/sites/{site_id}/agentagents:writeUpdate persona, instructions, voice, languages, embed state, or origins

Creating a site requires title and content.headline. Optional fields include slug, type, template, additional content, persona_mode, and one to four languages from en, ko, uz, and ru.

Knowledge and FAQs#

MethodPathScopePurpose
GET/sites/{site_id}/knowledgeknowledge:readList knowledge sources
POST/sites/{site_id}/knowledgeknowledge:writeIngest { "name", "text" }; text must be 5–200,000 characters
DELETE/sites/{site_id}/knowledge/{source_id}knowledge:writeDelete one source from future retrieval
GET/sites/{site_id}/faqsknowledge:readList structured FAQs
POST/sites/{site_id}/faqsknowledge:writeCreate { "question", "answer", "approved" }
PATCH/sites/{site_id}/faqs/{faq_id}knowledge:writeUpdate question, answer, or approval state
DELETE/sites/{site_id}/faqs/{faq_id}knowledge:writeDelete an FAQ

The public API ingests pasted text. Use the dashboard for URL crawling, file upload, YouTube, podcast, and feed workflows.

Conversations, leads, analytics, and usage#

MethodPathScopePurpose
GET/sites/{site_id}/conversationsconversations:readList conversation threads
GET/sites/{site_id}/conversations/{conversation_id}conversations:readRetrieve a thread and paginated messages
GET/sites/{site_id}/leadsleads:readList captured leads
GET/sites/{site_id}/analyticsanalytics:readList analytics events
GET/sites/{site_id}/usageusage:readList metered usage events

These event and activity collections accept limit and cursor. Returned records can contain personal data; store and export them according to your privacy obligations.

Conversation and lead resources are read-only in v1. Sending visitor messages, posting owner replies, and creating leads are not public API operations.

Connectors and domains#

MethodPathScopePurpose
GET/sites/{site_id}/connectorsconnectors:readList connector state without secrets
POST/sites/{site_id}/connectorsconnectors:writeCreate or replace a channel connector and provision its webhook
PATCH/sites/{site_id}/connectors/{connector_id}connectors:writeSet status or reply_with_voice
DELETE/sites/{site_id}/connectors/{connector_id}connectors:writeDeprovision and remove a connector
GET/sites/{site_id}/domainsdomains:readRead custom-domain state and DNS requirements
POST/sites/{site_id}/domainsdomains:writeConnect { "domain", "primary_host" }
PATCH/sites/{site_id}/domains/{domain_id}domains:writeChange primary_host between apex and www
POST/sites/{site_id}/domains/{domain_id}/verifydomains:writeCheck ownership DNS or refresh provider activation
DELETE/sites/{site_id}/domains/{domain_id}domains:writeDetach the domain and cancel associated add-on billing

Connector creation uses a channel-discriminated body. Credential fields differ for telegram, whatsapp, messenger, discord, and kakao; use the matching connector guide before sending secrets.

Broadcasts, notifications, and monetization#

MethodPathScopePurpose
GET/sites/{site_id}/broadcastsbroadcasts:readList broadcasts
POST/sites/{site_id}/broadcastsbroadcasts:writeCreate a Kakao broadcast draft
POST/sites/{site_id}/broadcasts/{broadcast_id}/sendbroadcasts:writeQueue an existing draft; returns 202
GET/sites/{site_id}/notificationsnotifications:readList owner notifications
PATCH/sites/{site_id}/notifications/{notification_id}notifications:writeMark read or unread with { "read": boolean }
GET/sites/{site_id}/monetization/productsmonetization:readList site products
POST/sites/{site_id}/monetization/productsmonetization:writeCreate an access, consultation, tip, or digital product
PATCH/sites/{site_id}/monetization/products/{product_id}monetization:writeUpdate product fields and active state
DELETE/sites/{site_id}/monetization/products/{product_id}monetization:writeDelete a product

Broadcast creation currently accepts only the kakao channel. Queueing fails with 409 conflict when there are no reachable recipients or the broadcast is no longer a draft.

Developer webhooks#

MethodPathScopePurpose
GET/webhook-endpointswebhooks:readList endpoint state without signing secrets
POST/webhook-endpointswebhooks:writeRegister a public HTTPS URL and reveal its signing secret once
DELETE/webhook-endpoints/{endpoint_id}webhooks:writeDelete an endpoint and stop future delivery

Webhook URLs must use HTTPS, cannot include credentials or a custom port, and must resolve only to public IP addresses.

Pagination#

Paginated collections accept limit from 1 to 100; the default is 50. Use the returned opaque next_cursor only with the same collection and filters.

{
  "data": [],
  "has_more": false,
  "next_cursor": null
}

Some small configuration collections return the same envelope with has_more: false and do not need a cursor.

Idempotency#

An idempotency key must contain 8–200 characters from letters, numbers, ., _, :, and -. Results are retained for 24 hours and scoped to the credential owner.

  • Same key and same method, path, query, and body: returns the stored response with x-idempotent-replayed: true.
  • Same key with different input: returns 409 conflict.
  • Same key while the first request is processing: returns 409 conflict and Retry-After: 2.

Persist the key before sending the mutation and reuse it only for retries of that logical operation.

Responses and errors#

Success responses wrap their resource in data. Create operations normally return 201; queued broadcast sends return 202; other successful operations return 200. Every response includes x-request-id and uses Cache-Control: no-store for API data.

See Scopes and errors for the complete error-code table and API recipes for copyable workflows.