# API & MCP — EternalEngine

A read-only public API and a zero-attack-surface MCP server for AI agents and developers — 43 GET-only endpoints, your own API key, your own machine.

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](https://app.eternalengineos.io/postframe/developers)

### PayGate

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

[Open PayGate → Developers](https://app.eternalengineos.io/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 in`packages/ee-mcp-public/README.md`.

## 43 GET operations

Base URL `https://app.eternalengineos.io/api/v1`. Every request needs`Authorization: Bearer `. Full machine-readable spec:[openapi.public.yaml](https://eternalengineos.io/developers/openapi.public.yaml)· [openapi.public.json](https://eternalengineos.io/developers/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/status`no 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](https://eternalengineos.io/contact/)
