API reference
Find every public resource, method, required scope, pagination rule, and mutation contract.
Find every public resource, method, required scope, pagination rule, and mutation contract.
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/v1The 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-keyContent-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#
| Method | Path | Scope | Purpose |
|---|---|---|---|
GET | /me | account:read | Read account, plan, entitlement, and wallet summary |
GET | /sites | sites:read | List owned sites |
POST | /sites | sites:write | Create a site and its default agent |
GET | /sites/{site_id} | sites:read | Retrieve one owned site |
PATCH | /sites/{site_id} | sites:write | Update safe site fields |
DELETE | /sites/{site_id} | sites:write | Delete the site and dependent resources |
POST | /sites/{site_id}/publish | sites:write | Publish or unpublish with { "published": boolean } |
GET | /sites/{site_id}/agent | agents:read | Read agent settings |
PATCH | /sites/{site_id}/agent | agents:write | Update 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#
| Method | Path | Scope | Purpose |
|---|---|---|---|
GET | /sites/{site_id}/knowledge | knowledge:read | List knowledge sources |
POST | /sites/{site_id}/knowledge | knowledge:write | Ingest { "name", "text" }; text must be 5–200,000 characters |
DELETE | /sites/{site_id}/knowledge/{source_id} | knowledge:write | Delete one source from future retrieval |
GET | /sites/{site_id}/faqs | knowledge:read | List structured FAQs |
POST | /sites/{site_id}/faqs | knowledge:write | Create { "question", "answer", "approved" } |
PATCH | /sites/{site_id}/faqs/{faq_id} | knowledge:write | Update question, answer, or approval state |
DELETE | /sites/{site_id}/faqs/{faq_id} | knowledge:write | Delete 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#
| Method | Path | Scope | Purpose |
|---|---|---|---|
GET | /sites/{site_id}/conversations | conversations:read | List conversation threads |
GET | /sites/{site_id}/conversations/{conversation_id} | conversations:read | Retrieve a thread and paginated messages |
GET | /sites/{site_id}/leads | leads:read | List captured leads |
GET | /sites/{site_id}/analytics | analytics:read | List analytics events |
GET | /sites/{site_id}/usage | usage:read | List 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#
| Method | Path | Scope | Purpose |
|---|---|---|---|
GET | /sites/{site_id}/connectors | connectors:read | List connector state without secrets |
POST | /sites/{site_id}/connectors | connectors:write | Create or replace a channel connector and provision its webhook |
PATCH | /sites/{site_id}/connectors/{connector_id} | connectors:write | Set status or reply_with_voice |
DELETE | /sites/{site_id}/connectors/{connector_id} | connectors:write | Deprovision and remove a connector |
GET | /sites/{site_id}/domains | domains:read | Read custom-domain state and DNS requirements |
POST | /sites/{site_id}/domains | domains:write | Connect { "domain", "primary_host" } |
PATCH | /sites/{site_id}/domains/{domain_id} | domains:write | Change primary_host between apex and www |
POST | /sites/{site_id}/domains/{domain_id}/verify | domains:write | Check ownership DNS or refresh provider activation |
DELETE | /sites/{site_id}/domains/{domain_id} | domains:write | Detach 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#
| Method | Path | Scope | Purpose |
|---|---|---|---|
GET | /sites/{site_id}/broadcasts | broadcasts:read | List broadcasts |
POST | /sites/{site_id}/broadcasts | broadcasts:write | Create a Kakao broadcast draft |
POST | /sites/{site_id}/broadcasts/{broadcast_id}/send | broadcasts:write | Queue an existing draft; returns 202 |
GET | /sites/{site_id}/notifications | notifications:read | List owner notifications |
PATCH | /sites/{site_id}/notifications/{notification_id} | notifications:write | Mark read or unread with { "read": boolean } |
GET | /sites/{site_id}/monetization/products | monetization:read | List site products |
POST | /sites/{site_id}/monetization/products | monetization:write | Create an access, consultation, tip, or digital product |
PATCH | /sites/{site_id}/monetization/products/{product_id} | monetization:write | Update product fields and active state |
DELETE | /sites/{site_id}/monetization/products/{product_id} | monetization:write | Delete 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#
| Method | Path | Scope | Purpose |
|---|---|---|---|
GET | /webhook-endpoints | webhooks:read | List endpoint state without signing secrets |
POST | /webhook-endpoints | webhooks:write | Register a public HTTPS URL and reveal its signing secret once |
DELETE | /webhook-endpoints/{endpoint_id} | webhooks:write | Delete 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 conflictandRetry-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.