For your own scripts, servers, and agents, an API key is simpler. OAuth is for apps acting on behalf of other Engini users.
Discovery
authorization_code + refresh_token grants, code response type, PKCE S256, client auth none (public clients) / client_secret_basic / client_secret_post. Scopes: openid, profile, mcp:tools.
Register a client
OAuth clients are currently provisioned from your Engini account (or by the Engini team for global/partner clients) - there is no dynamic registration. A client pins its exactredirect_uri allowlist. Public clients (no secret) are supported and PKCE is required by default.
The flow
- Authorize - send the user to:
- Consent - the user signs in to Engini (email/password or Google/Microsoft/GitHub) and approves your app for a specific account they’re a member of.
-
Redirect - the browser returns to your
redirect_uriwith?code=...&state=.... Codes are single-use and expire in 10 minutes. - Token - exchange the code (form-encoded):
Using and refreshing the token
Send the access token asAuthorization: Bearer <jwt>. It expires after 1 hour; the refresh token lasts 30 days:
Where OAuth tokens work
- MCP - the primary consumer: see Connect via MCP.
- DeveloperAPI (
/v1) - the token is a standard Engini Bearer JWT.