Developers
Build onthe Mateflow API.
One key, one community. Read posts, feeds, spaces and members, publish on behalf of your people, and receive every event over webhooks — all from a single JSON API.
Capabilities
Everything you need to integrate
Scoped API keys
Create keys in your community's admin console and grant each one only the scopes it needs. Authenticate with an X-API-Key header — there is no session to manage.
Growth and up
JSON API
Read and write your community through one consistent envelope. Every endpoint lives under /site_open_api/v1, takes POST with a JSON body, and derives the community from your key.
Growth and up
Webhooks
Register endpoints to receive events as they happen. Deliveries carry a stable event_id so you can de-duplicate retries, and the same id reaches Slack, Discord and Zapier.
Growth and up
Integrations
Connect Slack, Discord and Zapier from the integrations hub, browse the app catalogue, and manage every connected app in one place.
Single sign-on
Centralize authentication for your team and your members instead of maintaining a second set of credentials.
Business and up
Delivery logs
Every webhook attempt is logged with its payload and response. Inspect a failed delivery, see what you sent back, and retry from the console.
Growth and up
24 endpoints, one envelope
Everything lives under https://api.mateflow.com/site_open_api/v1 and uses POST with a JSON body. Here are the ones most integrations start with — the reference has the full list.
- POST/capabilities/getno scopeCheck your key, scopes and remaining quota
- POST/site/getsite.readRead community profile and settings
- POST/feed/listcontent.readPage through the community feed
- POST/post/searchcontent.readSearch posts
- POST/post/createcontent.writePublish a post as a member
- POST/space/listspaces.readList spaces the viewer can see
- POST/member/lookupmembers.readResolve an email to a member
- POST/media/get_tokenmedia.writeGet a media upload token
Quick start
Get started in three steps
Turn on API access
API access is a plan feature the community owner enables. Without it every call returns 22203, and no key can be created — so start here, not in your code.
Create a scoped key
Community admin → Integrations → API Keys. Pick only the scopes you need; they are fixed once the key exists. The full key is shown exactly once.
Call /capabilities/get first
It reports your scopes, whether API access is on, and how much quota is left — and it is the one endpoint that still answers when the plan gate or the quota is blocking everything else. It costs no quota.
Usage and limits
What each plan allows
Daily quota counts every request that passes authentication and resets at 00:00 UTC. A quota of zero is a closed door, not an unset default — it returns 22204 on every call.
| Plan | Open API | Requests per day | Webhook endpoints |
|---|---|---|---|
| Starter | Not included | — | — |
| Growth | Included | 5,000 | 5 |
| Business | Included | 10,000 | 20 |
| Enterprise | Included | Unlimited | Unlimited |
Burst limits apply on top of the daily quota and are enforced per key — see rate limits in the reference.
Your first call, three ways
The same request in each language: confirm the key works before you write anything else. Replace mfk_xxx with a real key from your admin console.
curl -X POST \
https://api.mateflow.com/site_open_api/v1/capabilities/get \
-H "X-API-Key: mfk_xxx" \
-H "Content-Type: application/json" \
-d '{}'const res = await fetch(
"https://api.mateflow.com/site_open_api/v1/capabilities/get",
{
method: "POST",
headers: {
"X-API-Key": process.env.MATEFLOW_API_KEY,
"Content-Type": "application/json",
},
// Endpoints that take no parameters still want a JSON body.
body: "{}",
},
);
const { code, data } = await res.json();
// Branch on `code`, never on the HTTP status:
// 22203 and 22204 are 403, and only 10202 is throttling.
if (code !== 0) throw new Error(`Mateflow API error ${code}`);
console.log(data.scopes, data.quota_used, data.quota_limit);import os, requests
res = requests.post(
"https://api.mateflow.com/site_open_api/v1/capabilities/get",
headers={"X-API-Key": os.environ["MATEFLOW_API_KEY"]},
json={},
)
body = res.json()
if body["code"] != 0:
raise RuntimeError(f"Mateflow API error {body['code']}")
print(body["data"]["scopes"], body["data"]["api_access"])OpenAPI contract
The machine-readable contract covers every path and every request and response schema, and feeds any client generator. Official SDKs are on the roadmap; until then, generate one.
Reference
The full API reference
Scopes, pagination, idempotency, error codes, rate limits, webhook de-duplication — and the handful of exceptions that only bite after you ship.
Ready to build?
Create an account, generate your API keys, and start integrating Mateflow into your workflows.
14-day free trial · No credit card required