The MyAgentFace API.
Every MyAgentFace coach β the directory, the categories, the prompts your account owns, embed cards and the Find Your Face quiz matcher β behind one API key. Build a coach picker into your app, embed a coach card on your site, or run our quiz matching in your own product.
Try it right now
This demo runs on a shared demo key with a small monthly cap β the same call your own key makes. It fetches the free coaches, live:
// the raw JSON will appear here
Get a key (2 minutes, free)
- Create a free MyAgentFace account.
- Open your account page and find the Developers panel.
- Tap Create a key. The full key is shown once β copy it then. Only a scrambled hash of it is ever stored, so a lost key can't be recovered; revoke it and make a new one.
Every key starts on the free plan: 1,000 calls a month per key, counted across all endpoints. Send the key on every call:
Authorization: Bearer maf_your_key_here
Base URL: https://myagentface.com/v1. Everything returns JSON. Keep your key secret β treat it like a password. (The demo key on this page is the one exception: it is public on purpose, capped low, and can only read public data.)
The endpoints
GET /v1/coaches β the whole directory
All coaches currently live on the site. Optional filters: category, rarity, free=true|false, and q (matches the coach's name and the plain phrases people search for it by).
curl "https://myagentface.com/v1/coaches?category=Money" \
-H "Authorization: Bearer maf_your_key_here"
{
"ok": true,
"count": 6,
"coaches": [
{
"slug": "money-coach",
"name": "Money Coach",
"category": "Money",
"rarity": "Legendary",
"price_coins": 150,
"free": false,
"blurb": "Calm, clear money guidance. No jargon, no panic.",
"kw": "AI money coach to get out of debt",
"avatar_url": "https://myagentface.com/assets/avatars/money-coach-ai-agent-avatar.webp",
"page_url": "https://myagentface.com/prompts/money-coach/"
}
]
}
GET /v1/categories β categories with coach counts
curl "https://myagentface.com/v1/categories" \
-H "Authorization: Bearer maf_your_key_here"
{
"ok": true,
"categories": [
{ "name": "Business", "coaches": 7 },
{ "name": "Health", "coaches": 9 },
{ "name": "Love", "coaches": 4 },
{ "name": "Life Admin", "coaches": 13 },
{ "name": "Money", "coaches": 6 },
{ "name": "Learning", "coaches": 4 },
{ "name": "Creativity", "coaches": 8 }
]
}
GET /v1/coaches/:slug β one coach, in full
The directory fields, plus the coach's public search phrases, what it does, its weekly rhythm, and its real first message.
curl "https://myagentface.com/v1/coaches/cofounder" \
-H "Authorization: Bearer maf_your_key_here"
GET /v1/coaches/:slug/prompt β the full prompt
The ownership rule, in plain words: a free coach's prompt is open to every key. A premium coach's prompt is the product people buy β so this endpoint serves it only to a key whose MyAgentFace account owns that face (bought with coins or money, or via an active Prompt Pass). If the account doesn't own it, you get 403 not_owned and a link to the coach's page. There is no key β paid tiers included β that unlocks other people's premium prompts.
curl "https://myagentface.com/v1/coaches/gym-buddy/prompt" \
-H "Authorization: Bearer maf_your_key_here"
{
"ok": true,
"slug": "gym-buddy",
"access": "free",
"prompt": "You are my Gym Buddy β energetic, funny, and impossible to argue with. Your job: get me moving, consistently. β¦"
}
POST /v1/ask β a coach's starter answer Builder plan
Send a coach slug and a question (up to 500 characters). You get back that coach's starter kit: its real first message in its own voice, the first steps it would start with, its starter questions and its weekly rhythm β all composed from the coach's public page material. Be clear-eyed about what this is: there is no live AI behind it and it is not a conversation. The coach's full prompt is what owners paste into their own AI chat; this endpoint gives your users a true taste of the coach's voice and method, with a link to continue on its page.
curl -X POST "https://myagentface.com/v1/ask" \
-H "Authorization: Bearer maf_your_key_here" \
-H "Content-Type: application/json" \
-d '{"coach": "boss-mode", "question": "I end every day busy but nothing important got done. Where do I start?"}'
{
"ok": true,
"coach": { "slug": "boss-mode", "name": "Boss Mode", "...": "..." },
"answer": "Let's skip the motivation speech. What are the three things that actually move the needle today?\n\nYou asked: \"I end every day busy but nothing important got done. Where do I start?\"\n\nHere's my starter kit for that:\nFirst step: Sets your top 3 priorities every morning β no 20-item lists\nThen: Calls out procrastination, kindly but directly\nβ¦\n\nMy rhythm: Daily 7:30 β Top 3 priorities Β· Fri β Scorecard.",
"starter_questions": ["What are the three things that actually move the needle today?"],
"first_step": "Sets your top 3 priorities every morning β no 20-item lists",
"kind": "starter_kit",
"continue_url": "https://myagentface.com/prompts/boss-mode/"
}
GET /v1/embed/:slug β card data for embeds
Everything a coach card needs: name, avatar, one-liner, the Free/coins badge, the coach's page, and the quiz URL β render it in your own design.
curl "https://myagentface.com/v1/embed/cofounder" \
-H "Authorization: Bearer maf_your_key_here"
{
"ok": true,
"slug": "cofounder",
"name": "Startup Cofounder",
"avatar_url": "https://myagentface.com/assets/avatars/startup-cofounder-ai-agent-avatar.webp",
"one_liner": "Turns your idea into one clear step, every single day.",
"rarity": "Mythic",
"price_coins": 200,
"free": false,
"badge": "200 coins",
"page_url": "https://myagentface.com/prompts/cofounder/",
"quiz_url": "https://myagentface.com/quiz/"
}
POST /v1/quiz β Find Your Face matching
The exact matcher the site's own quiz runs β same questions, same weights. Send the five answers as option indexes (0-based) keyed by question id, or as a plain array of five indexes. You get the match and up to two alternates.
curl -X POST "https://myagentface.com/v1/quiz" \
-H "Authorization: Bearer maf_your_key_here" \
-H "Content-Type: application/json" \
-d '{"answers": {"q1": 2, "q2": 2, "q3": 0, "q4": 1, "q5": 0}}'
{
"ok": true,
"match": { "slug": "salary-negotiation-coach", "name": "Salary Negotiation Coach", "category": "Business", "page_url": "https://myagentface.com/prompts/salary-negotiation-coach/", "result_url": "https://myagentface.com/quiz/result/salary-negotiation-coach/" },
"alternates": [
{ "slug": "boss-mode", "name": "Boss Mode", "category": "Business", "page_url": "https://myagentface.com/prompts/boss-mode/", "result_url": "https://myagentface.com/quiz/result/boss-mode/" },
{ "slug": "etsy-seller-coach", "name": "Etsy Seller Coach", "category": "Business", "page_url": "https://myagentface.com/prompts/etsy-seller-coach/", "result_url": "https://myagentface.com/quiz/result/etsy-seller-coach/" }
]
}
Limits & errors
| Thing | Free plan | Builder plan |
|---|---|---|
| Calls per month (per key) | 1,000 | 50,000 |
| Burst limit | 60 calls per minute per key (best effort) | |
| POST /v1/ask | Not included (403 plan_required) | Included |
| Directory, categories, embed, quiz | Included | |
| Premium prompts | Only for faces your account owns β on every plan | |
Errors are plain JSON with a stable error code:
{ "ok": false, "error": "quota_exceeded", "plan": "free", "cap": 1000,
"used": 1000, "month": "2026-10", "resets_on": "2026-11-01",
"message": "Monthly call cap reached for this key..." }
| Status | error | Means |
|---|---|---|
| 401 | key_required / key_invalid / key_revoked | No key sent, the key doesn't exist, or it was revoked. |
| 403 | not_owned | Premium prompt, and your account doesn't own that face. |
| 403 | plan_required | That endpoint needs the Builder plan. |
| 429 | quota_exceeded / rate_limited | Monthly cap reached, or more than 60 calls in a minute. |
| 400 / 404 | invalid_question, invalid_answers, unknown_coach | Bad input β the body says what to fix. |
Builder β $19/month
One paid tier, and it applies to your account, so every key you own gets it:
- 50,000 calls a month per key (free is 1,000).
- The ask endpoint (POST /v1/ask) turns on.
- Everything else stays exactly as the free plan β including the ownership rule for premium prompts. Builder never unlocks prompts your account doesn't own.
Upgrade: account page β Developers panel β βUpgrade to Builder β $19/monthβ β secure Stripe checkout. The plan flips on the moment Stripe confirms payment (your account page notices on its own). Manage or cancel: the same panel opens the Stripe billing portal. Cancelling keeps Builder until the paid period ends, then your keys return to the free cap of 1,000 calls a month β stated plainly: if a key already used more than 1,000 calls that month, it pauses until the 1st and tells you the plan dropped to free.
Get your key β or upgrade β in your account
The fine print
Keys are per-account and revocable any time from the account page; a revoked key stops working immediately. Usage is counted per key, per day, per endpoint, in the America/Chicago timezone, and the month resets on the 1st. The API serves the same public catalog the website shows β coaches in an unreleased drop appear when the drop opens, for everyone at once. Questions about the API: contact us.
MyAgentFace