Enterprise API

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/v1

Requests 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_here

Keys 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

POST/api/enterprise/v1/reports

Queues a new AEO report for one client. Returns immediately with a job you can track. Reports run strictly in the order received.

Request body

FieldTypeDescription
domainstring (required)The client website domain, e.g. "acmeplumbing.com".
businessNamestring (required)The client business name as it should appear in searches.
categorystring (required)The business category or type, e.g. "Plumber", "SaaS CRM".
keywordCountnumber (optional, default 100)How many buyer keywords to test. 100–1000, rounded to the nearest 100. Report price scales at $19 per 100.
clientTagstring (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.
wantDevBundleboolean (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).
deliverEmailstring (optional)Email address to send the finished report and companion file to (in addition to the status URL).
targetAudiencestring (optional)Describe the ideal customer to sharpen keyword generation.
locationstring (optional)City / region for local businesses.
radiusMilesnumber (optional)Service radius for local businesses.
competitorsstring[] (optional)Known competitors to factor into the analysis.
contactName / contactEmail / contactPhonestring (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

GET/api/enterprise/v1/reports/:jobId

Poll this endpoint (or use the statusUrl returned at creation) to track a job. Status moves through queuedprocessingcompleted (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

GET/api/enterprise/v1/reports

Returns 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

POST/api/enterprise/v1/bundle

Generate 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.

HTTPcodeMeaning
401missing_api_keyNo key supplied. Send it as an Authorization: Bearer header.
401invalid_api_keyThe key does not match any active key, or it was revoked.
403account_suspendedThe enterprise account has been suspended. Contact support.
402billing_inactiveNo active payment method. Complete signup to activate billing.
402setup_fee_requiredThe one-time API activation fee has not been paid. Pay it in your back office to unlock the key.
402api_key_pausedThe key is paused due to an unpaid balance. Settle the invoice to unlock instantly.
400invalid_requestRequired fields are missing or malformed.
404not_foundThe requested job or report does not belong to this account.
409report_not_readyA bundle was requested for a report that has not finished yet.

How to implement it into your system

  1. 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. 2. Trigger a report from your workflow. Whenever you onboard a client or want a fresh audit, POST to /v1/reports with that client's details and your own clientTag. Persist the returned jobId against the client in your database.
  3. 3. Track completion. Either poll the statusUrl every minute or so until status is completed, or set deliverEmail and let us email the finished links. Both the PDF and companion file URLs arrive in result.
  4. 4. Offer the bundle when you're ready. If a client wants the done-for-you fixes, POST the report's reportId to /v1/bundle and hand them the resulting link.
  5. 5. Handle the paused state. Treat a 402 api_key_paused or billing_inactive as “action needed on billing” in your UI, and retry once the invoice is settled.