For developers & AI agents

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_*

Open PostFrame → Developers → API Keys

PayGate

Transactions, disputes, customers, payouts — pg_live_* / pg_test_*

Open PayGate → Developers

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-public

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

GET/paygate/api-keys

List API keys for the tenant

100 req/1m
GET/postframe/api-keys

List API keys

100 req/1m

Connect

GET/paygate/connect/account

Get the tenant's Stripe Connect account status

100 req/1m
GET/paygate/connect/balance

Get the connected account's Stripe balance

100 req/1m
GET/paygate/connect/checkout/sessions

List recent Checkout sessions

100 req/1m
GET/paygate/connect/coupons

List Stripe coupons on the connected account

100 req/1m
GET/paygate/connect/payouts

List Stripe Connect payouts

100 req/1m
GET/paygate/connect/products

List Stripe products/plans on the connected account

100 req/1m
GET/paygate/connect/subscriptions

List Stripe subscriptions on the connected account

100 req/1m

Customers

GET/paygate/customers

List customers (aggregated from transaction history)

100 req/1m
GET/paygate/customers/{email}

Get a customer's transaction history

100 req/1m

Me

GET/paygate/me/invoices/{invoiceId}/pdf

Download a branded PDF of the tenant's own platform subscription invoice

100 req/1m
GET/paygate/me/volume

Get the tenant's month-to-date processing volume

100 req/1m

Settings

GET/paygate/settings

Get merchant settings and fraud rules

100 req/1m
GET/postframe/settings

Get tenant settings

100 req/1m
GET/postframe/settings/onboarding

Get onboarding status

100 req/1m

Status

GET/paygate/statusno auth

Service health (public, no auth)

Transactions

GET/paygate/transactions

List transactions

100 req/1m
GET/paygate/transactions/{id}

Get transaction by ID

100 req/1m
GET/paygate/transactions/stats

Payment stats

100 req/1m

Disputes

GET/paygate/transactions/disputes

List disputes

100 req/1m
GET/paygate/transactions/disputes/{id}

Get a dispute by ID

100 req/1m

Providers

GET/paygate/transactions/providers

List configured payment providers

100 req/1m
GET/postframe/providers

List providers

100 req/1m

Routing

GET/paygate/transactions/routing

List routing rules

100 req/1m

Webhooks

GET/paygate/webhooks/events

List webhook delivery events

100 req/1m
GET/postframe/webhooks

List webhooks

100 req/1m

Analytics

GET/postframe/analytics/overview

Get delivery overview

100 req/1m
GET/postframe/analytics/timeseries

Get time series metrics

100 req/1m

Audiences

GET/postframe/audiences

List audiences

100 req/1m
GET/postframe/audiences/{id}

Get audience details

100 req/1m

Broadcasts

GET/postframe/audiences/{audienceId}/broadcasts

List broadcasts for an audience

100 req/1m

Billing

GET/postframe/billing/subscription

Get subscription status

100 req/1m

Contacts

GET/postframe/contacts

List contacts

100 req/1m
GET/postframe/contacts/{id}

Get a contact

100 req/1m

Domains

GET/postframe/domains

List domains

100 req/1m
GET/postframe/domains/{id}

Get domain details

100 req/1m

Emails

GET/postframe/emails

List emails

100 req/1m
GET/postframe/emails/{id}

Get email details

100 req/1m

Suppressions

GET/postframe/suppressions

List suppressions

100 req/1m

Templates

GET/postframe/templates

List templates

100 req/1m
GET/postframe/templates/{id}

Get a template

100 req/1m

Usage

GET/postframe/usage/quota

Get usage quota

100 req/1m

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