The header
Every request — to a gateway or to a backend service — carries the same header:
Authorization: Bearer <your-api-key>
That’s it. There is no separate session cookie, no signed payload, and no per-request HMAC.
Where keys come from
API keys are issued per organization. To request one, email hello@epcstudio.io with:
- Your organization name
- The intended use case (what you’re building, roughly)
- Whether you want a sandbox key (rate-limited, isolated) or a production key
Sandbox keys are free for evaluation. Production keys are issued per contract.
Scoping
A single key authenticates you to:
- The conversational gateways (
/api,/api/ug) - The engineering services that gateway calls under the hood
- The MCP servers, if you choose to call tools directly via the MCP protocol
Keys can be scoped down on request — e.g. read-only, parse-only, or per-utility tenant.
Treat keys like passwords
Keys grant access to your organization’s data and your billing meter. Don’t:
- Commit keys to source control
- Embed keys in browser-side JavaScript
- Share keys across organizations
Do:
- Store keys in your secret manager (Google Secret Manager, AWS Secrets Manager, Doppler, etc.)
- Rotate keys when team members leave
- Use separate keys for sandbox and production environments
Rotating a key
Email hello@epcstudio.io with the key fingerprint (the first 8 characters of the key plus the issue date) and we’ll issue a new key and revoke the old one. Self-service rotation is on the roadmap.
Errors
If a request is unauthenticated or the key is invalid, the service returns:
{
"error": "unauthorized",
"message": "missing or invalid bearer token"
}
with a 401 status code. The gateway streams the same shape inside an SSE error event.