API & MCP
A read-only public API and a Model Context Protocol server your AI agent can run on its own machine, with your own API key. No write access. No shared credentials. Nothing to trust but the key you generate.
BLOCKED — not yet reachable through the public gateway
services/ee-gateway's blanket JWT-only authMiddleware sits in front of every operation in this spec and rejects any non-JWT Bearer token (pf_*/pg_* API keys included) with 401 before it is ever proxied to the service that would validate it. The service-level apiKeyAuth middlewares that validate these keys are real, tested, and tenant-scoped — they are simply unreachable from the public internet today.
Measured 2026-09-15. The spec and MCP server below are complete and correct — this note will be removed the day the gateway change ships.
What this is built on
Read-only, always
Every operation in this spec is a GET. There is no write endpoint published here, and none is generated — not a configuration mistake to avoid, a class of request that does not exist.
Your key, your machine
The MCP server runs where you run it — your laptop, your CI, your agent's sandbox — authenticated with a key you generated and can revoke. EternalEngine never sees your AI agent's traffic.
Open source, auditable
packages/ee-mcp-public is a small TypeScript package generated directly from this spec — every tool it exposes is traceable to one GET operation. Read it before you trust it.
Get your API key
Keys are scoped per app. Mint one from the app you want to read data from.
PostFrame
Email delivery, contacts, audiences, analytics — pf_live_* / pf_test_*
PayGate
Transactions, disputes, customers, payouts — pg_live_* / pg_test_*
Minting a key requires signing in to app.eternalengineos.io.
Run the MCP server
Works with Claude Desktop, Claude Code, and any MCP-compatible client. One env var, one key.
1. Run it
EE_API_KEY=pf_live_your_key npx ee-mcp-public2. Or add it to Claude Desktop / Claude Code config
{
"mcpServers": {
"eternalengine": {
"command": "npx",
"args": ["ee-mcp-public"],
"env": { "EE_API_KEY": "pf_live_your_key" }
}
}
}Full install instructions, config snippets for every client, and the threat model are inpackages/ee-mcp-public/README.md.
43 GET operations
Base URL https://app.eternalengineos.io/api/v1. Every request needsAuthorization: Bearer <your key>. Full machine-readable spec:openapi.public.yaml· openapi.public.json.
API Keys
/paygate/api-keysList API keys for the tenant
/postframe/api-keysList API keys
Connect
/paygate/connect/accountGet the tenant's Stripe Connect account status
/paygate/connect/balanceGet the connected account's Stripe balance
/paygate/connect/checkout/sessionsList recent Checkout sessions
/paygate/connect/couponsList Stripe coupons on the connected account
/paygate/connect/payoutsList Stripe Connect payouts
/paygate/connect/productsList Stripe products/plans on the connected account
/paygate/connect/subscriptionsList Stripe subscriptions on the connected account
Customers
/paygate/customersList customers (aggregated from transaction history)
/paygate/customers/{email}Get a customer's transaction history
Me
/paygate/me/invoices/{invoiceId}/pdfDownload a branded PDF of the tenant's own platform subscription invoice
/paygate/me/volumeGet the tenant's month-to-date processing volume
Settings
/paygate/settingsGet merchant settings and fraud rules
/postframe/settingsGet tenant settings
/postframe/settings/onboardingGet onboarding status
Status
/paygate/statusno authService health (public, no auth)
Transactions
/paygate/transactionsList transactions
/paygate/transactions/{id}Get transaction by ID
/paygate/transactions/statsPayment stats
Disputes
/paygate/transactions/disputesList disputes
/paygate/transactions/disputes/{id}Get a dispute by ID
Providers
/paygate/transactions/providersList configured payment providers
/postframe/providersList providers
Routing
/paygate/transactions/routingList routing rules
Webhooks
/paygate/webhooks/eventsList webhook delivery events
/postframe/webhooksList webhooks
Analytics
/postframe/analytics/overviewGet delivery overview
/postframe/analytics/timeseriesGet time series metrics
Audiences
/postframe/audiencesList audiences
/postframe/audiences/{id}Get audience details
Broadcasts
/postframe/audiences/{audienceId}/broadcastsList broadcasts for an audience
Billing
/postframe/billing/subscriptionGet subscription status
Contacts
/postframe/contactsList contacts
/postframe/contacts/{id}Get a contact
Domains
/postframe/domainsList domains
/postframe/domains/{id}Get domain details
Emails
/postframe/emailsList emails
/postframe/emails/{id}Get email details
Suppressions
/postframe/suppressionsList suppressions
Templates
/postframe/templatesList templates
/postframe/templates/{id}Get a template
Usage
/postframe/usage/quotaGet usage quota
Questions about the API?
The spec and MCP server are both open in the repository — read the source, file an issue, or reach out directly.
Contact us