API Documentation
Everything you need to run MyFast AI Answer Engine Optimization reports programmatically for your clients. Don't have a key yet? Create an enterprise account.
Overview
The Enterprise API lets agencies and platforms run AEO reports for any number of clients from their own systems. You send one authenticated request per client; we queue it, run the full analysis across every AI engine, and deliver a PDF report plus a companion transcript file. You can optionally request a developer bundle of ready-to-publish fix files. All endpoints are rooted at:
https://aeo.myfast.ai/api/enterprise/v1Requests and responses are JSON. Reports are processed through a fair first-in, first-out queue and never run inline, so a report request returns immediately with a 202 Accepted and a job you can poll.
Authentication
Every request must carry your secret API key. You received it once when your account was activated. Send it in an Authorization header using the Bearer scheme (an x-api-key header is also accepted):
Authorization: Bearer ent_live_your_key_hereKeys are secret. Store them server-side in a secret manager and never expose them in browser code. If a key is lost or compromised, rotate it — the old key is revoked immediately and a new one issued.
Create a report
/api/enterprise/v1/reportsQueues a new AEO report for one client. Returns immediately with a job you can track. Reports run strictly in the order received.
Request body
| Field | Type | Description |
|---|---|---|
| domain | string (required) | The client website domain, e.g. "acmeplumbing.com". |
| businessName | string (required) | The client business name as it should appear in searches. |
| category | string (required) | The business category or type, e.g. "Plumber", "SaaS CRM". |
| keywordCount | number (optional, default 100) | How many buyer keywords to test. 100–1000, rounded to the nearest 100. Report price scales at $19 per 100. |
| clientTag | string (optional) | Your own label for the client this report belongs to — any value you like, e.g. "acme-plumbing" or "client2175". Echoed back on the job, printed on delivery emails, tagged onto delivered files, and used to group deliveries by client in your back office so you always know whose report is whose. |
| wantDevBundle | boolean (optional, default false) | Also generate a developer bundle for this report. Billed $99 the first time you buy the pack for a given business — every later report for that same business gets the pack free (no charge). |
| deliverEmail | string (optional) | Email address to send the finished report and companion file to (in addition to the status URL). |
| targetAudience | string (optional) | Describe the ideal customer to sharpen keyword generation. |
| location | string (optional) | City / region for local businesses. |
| radiusMiles | number (optional) | Service radius for local businesses. |
| competitors | string[] (optional) | Known competitors to factor into the analysis. |
| contactName / contactEmail / contactPhone | string (optional) | Client contact details stored with the report. |
Example request
curl -X POST https://aeo.myfast.ai/api/enterprise/v1/reports \
-H "Authorization: Bearer ent_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"domain": "acmeplumbing.com",
"businessName": "Acme Plumbing",
"category": "Plumber",
"keywordCount": 100,
"clientTag": "acme-plumbing",
"wantDevBundle": false,
"deliverEmail": "[email protected]"
}'Example response (202)
{
"jobId": "clx...",
"status": "queued",
"type": "report",
"keywordCount": 100,
"clientTag": "acme-plumbing",
"wantDevBundle": false,
"devBundleAlreadyOwned": false,
"devBundleCharge": "$0",
"estimatedCharge": "$19",
"statusUrl": "/api/enterprise/v1/reports/clx...",
"message": "Report queued. It will be processed in request order and delivered by email and via this status URL."
}When wantDevBundle is true, the response also returns devBundleAlreadyOwned and devBundleCharge. If you already bought the developer pack for this business, devBundleAlreadyOwned is true, devBundleCharge is $0, and estimatedCharge covers only the report — the pack is regenerated and delivered free.
Check job status
/api/enterprise/v1/reports/:jobIdPoll this endpoint (or use the statusUrl returned at creation) to track a job. Status moves through queued → processing → completed (or failed). When complete, result holds the delivery links.
Example response (completed)
{
"jobId": "clx...",
"type": "report",
"status": "completed",
"domain": "acmeplumbing.com",
"businessName": "Acme Plumbing",
"clientTag": "acme-plumbing",
"wantDevBundle": false,
"reportId": "rep_...",
"result": {
"pdfUrl": "https://.../report.pdf",
"companionUrl": "https://.../what-ai-said.html",
"bundleUrl": null
},
"error": null,
"attempts": 1,
"createdAt": "2026-01-05T14:00:00.000Z",
"startedAt": "2026-01-05T14:00:07.000Z",
"completedAt": "2026-01-05T14:06:41.000Z"
}List jobs
/api/enterprise/v1/reportsReturns your 50 most recent jobs (reports and bundles), newest first, each in the same shape as the status response. Useful for reconciling deliveries or building a dashboard.
{ "jobs": [ { "jobId": "clx...", "type": "report", "status": "completed", ... } ] }Request a developer bundle
/api/enterprise/v1/bundleGenerate a developer bundle for an existing completed report. (To get the bundle at the same time as the report, set wantDevBundle: true on the report request instead.) The bundle contains a custom llms.txt, JSON-LD schema, answer & FAQ pages, an updated sitemap and an install guide — tagged to your client. The developer pack is a one-time purchase per business: you are billed $99 the first time you buy it for a given business, and every later bundle for that same business is free. The response includes devBundleAlreadyOwned so you know whether this call will be charged.
Request body
{
"reportId": "rep_...", // required — must belong to your account and be completed
"clientTag": "acme-plumbing", // optional — defaults to the report's tag
"deliverEmail": "[email protected]" // optional
}Example response (202)
{
"jobId": "clx...",
"status": "queued",
"type": "dev_bundle",
"reportId": "rep_...",
"devBundleAlreadyOwned": false,
"estimatedCharge": "$99",
"statusUrl": "/api/enterprise/v1/reports/clx..."
}Delivery & billing
- Deliverables. Every report is delivered as a PDF plus a separate companion file with the verbatim “what AI said, word for word” transcript. Files are delivered as secure links (by email if you set
deliverEmail, and always on the job's status URL). - Who we email. You control this from your back office under Delivery Preferences. Choose “We handle delivery” and we email each client their links directly under your brand; choose “I fulfill my clients” and we never contact your clients — every link is sent to you instead and listed in your back office, grouped by
clientTag, so you deliver them yourself. You can also email yourself a single digest of all client links, or the links for one client, at any time. - Developer pack entitlement. The developer pack is a one-time purchase per business. Once you buy it for a business, every future report for that same business can include the pack free. A different business requires its own one-time purchase.
- Pricing. $19 per 100 keywords per report; $99 per developer bundle (first time per business; free thereafter for that business). Usage is metered per request.
- Weekly settlement. All usage is settled automatically every Monday — regardless of the day you signed up — as a single invoice charged to your saved card.
- Failed payments. If a weekly charge fails, your API key is paused (requests return
402 api_key_paused) and we email you a link to settle. As soon as payment succeeds the key unlocks instantly and queued work resumes — nothing is lost.
Error codes
Errors return a JSON body with a human-readable error and a stable code you can branch on.
| HTTP | code | Meaning |
|---|---|---|
| 401 | missing_api_key | No key supplied. Send it as an Authorization: Bearer header. |
| 401 | invalid_api_key | The key does not match any active key, or it was revoked. |
| 403 | account_suspended | The enterprise account has been suspended. Contact support. |
| 402 | billing_inactive | No active payment method. Complete signup to activate billing. |
| 402 | setup_fee_required | The one-time API activation fee has not been paid. Pay it in your back office to unlock the key. |
| 402 | api_key_paused | The key is paused due to an unpaid balance. Settle the invoice to unlock instantly. |
| 400 | invalid_request | Required fields are missing or malformed. |
| 404 | not_found | The requested job or report does not belong to this account. |
| 409 | report_not_ready | A bundle was requested for a report that has not finished yet. |
How to implement it into your system
- 1. Store your key securely. Put it in your server-side secret manager or environment variables. Never ship it to a browser or mobile client.
- 2. Trigger a report from your workflow. Whenever you onboard a client or want a fresh audit, POST to
/v1/reportswith that client's details and your ownclientTag. Persist the returnedjobIdagainst the client in your database. - 3. Track completion. Either poll the
statusUrlevery minute or so untilstatusiscompleted, or setdeliverEmailand let us email the finished links. Both the PDF and companion file URLs arrive inresult. - 4. Offer the bundle when you're ready. If a client wants the done-for-you fixes, POST the report's
reportIdto/v1/bundleand hand them the resulting link. - 5. Handle the paused state. Treat a
402 api_key_pausedorbilling_inactiveas “action needed on billing” in your UI, and retry once the invoice is settled.
Ready to build?
Create your enterprise account