Skip to content
useEventStack 0.3.0 is live.Read the quickstart

Reference

Complete route index for the Axum API

Source-backed route inventory organized by domain, with the credential each domain accepts and the standard JSON error envelope.

Base URL

Every route on this page is written the way the API registers it, without a prefix. Join it to your base URL:

DeploymentBase URLExample
Hostedhttps://api.useeventstack.comhttps://api.useeventstack.com/events
Local developmenthttp://localhost:3001http://localhost:3001/events

Every SDK takes the base URL as configuration, so you never concatenate it yourself.

Credentials

There is no single credential for the whole API. Which one a route accepts follows from what it does, and sending the wrong one is a 403, not a401. See Authentication for the full rules.

CredentialRoutesTransport
API keyEvent ingestion and the reads a service needs: events, traces, contracts, projections, replay, failed eventsAuthorization: Bearer useeventstack_…. No CSRF token.
User sessionManagement: organizations, members, API keys, contracts, workflows, custom action upload and review, integrations, billing, and the AI previewHttpOnly session cookie. Unsafe methods also require the CSRF cookie echoed in x-useeventstack-csrf.
Provider signature/integrations/:adapter_id/webhook, /stripe/webhookThe provider's own signature. No session, no API key.
None/health, /plans, /public/:slug/changelog, /contact/submitPublic.

An API key cannot become a user session, and it is refused on session-only routes. Everything else authenticated: anonymous requests get 401.

Headers and errors

Project-scoped routes require the project header, and the project is verified to belong to the organization before any query runs:

Authorization: Bearer <api-key>          # or the session cookie
Content-Type: application/json
x-useeventstack-organization: <organization-uuid>
x-useeventstack-project: <project-uuid>
x-useeventstack-environment: production | sandbox

For an API key, the organization, project and environment come from the key itself. Sending headers that disagree with it is a 400(project_mismatch, environment_mismatch) rather than a silent override.

Every error uses the same envelope:

{
  "error": {
    "code": "bad_request",
    "message": "...",
    "correlation_id": "uuid",
    "details": {}
  }
}

Quote the correlation_id in a support request: it is in the server logs next to the underlying cause, which the message itself never leaks.

Events

MethodRouteNotes
POST/eventsEmit event. Supports x-useeventstack-idempotency-key header.
GET/eventsUp to 100 results. Filters: event_type, correlation_id, environment
GET/events/:idSingle event detail
GET/events/:id/traceFull causation trace chain
GET/event-graphWorkflow event graph. Params: root, environment

Workflows

MethodRoute
GET, POST/organizations/:org_id/workflows
GET, PUT, DELETE/organizations/:org_id/workflows/:id
POST/organizations/:org_id/workflows/:id/enable
POST/organizations/:org_id/workflows/:id/disable
GET/workflows/query
GET/intelligence

Custom actions

MethodRouteNotes
GET, POST/organizations/:org_id/custom-actionsPOST is multipart (name, file)
GET, DELETE/organizations/:org_id/custom-actions/:id
POST/organizations/:org_id/custom-actions/:id/simulate{"payload": ...}
POST/organizations/:org_id/custom-actions/:id/reviewAdmin only. status: "approved" | "rejected"
GET, POST/organizations/:org_id/custom-actions/:id/secretsPOST: {key, value}. GET: keys only

Marketplace

Publish contracts, approved actions and workflows as an immutable version, and install one into a project. See the Marketplace guide.

MethodRouteNotes
GET, POST/organizations/:org_id/marketplace/listingsPOST: {slug, name, summary, description, visibility}
GET/organizations/:org_id/marketplace/listings/:listing_idListing plus its versions
POST/organizations/:org_id/marketplace/listings/:listing_id/versionsAdmin only. Immutable once published
POST/organizations/:org_id/marketplace/listings/:listing_id/versions/:version_id/installActions land pending, workflows disabled
GET/organizations/:org_id/marketplace/installationsScoped to the active project
DELETE/organizations/:org_id/marketplace/installations/:installation_idAdmin only. Retains event contracts

Projections and replay

MethodRouteNotes
GET/projectionsQuery projection state
POST/projections/rebuildReset and replay all projections
POST/replayevent_id required, skip_external_side_effects optional
POST/replay/bulkevent_ids or event_type/since. Limit: 1–1000
GET/dead-letter-eventsList quarantined events
GET/failed-eventsList failed events
POST/platform/dead-letter-events/clearReprocess DLQ

Authentication

MethodRoute
POST/auth/signup, /auth/login, /auth/logout
POST/auth/forgot-password, /auth/reset-password, /auth/verify-email
POST/auth/change-password, /auth/resend-verification
GET/auth/sessions, /auth/mfa/status, /me
POST/auth/mfa/setup, /auth/mfa/enable, /auth/mfa/verify, /auth/mfa/disable

Organizations

MethodRoute
GET, POST/organizations
GET, PUT/organizations/:org_id
GET/organizations/:org_id/members
GET, POST/organizations/:org_id/api-keys
DELETE/organizations/:org_id/api-keys/:key_id
GET, POST/organizations/:org_id/event-contracts
GET, POST/organizations/:org_id/projects
GET, POST/organizations/:org_id/invitations
GET/organizations/:org_id/audit-logs

Integrations

MethodRoute
GET, POST/organizations/:org_id/integrations
POST/integrations/:adapter_id/webhook
POST/integrations/:adapter_id/test
GET/integrations/health
POST/organizations/:org_id/schemas/sync
POST/stripe/webhook

Billing and platform

MethodRouteNotes
GET/plansAvailable plans
GET/organizations/:org_id/billingCurrent billing status
GET/organizations/:org_id/usageUsage metrics
POST/organizations/:org_id/billing/checkoutStripe checkout session
POST/organizations/:org_id/billing/portalStripe billing portal
GET/healthSystem health (public)
GET/runtime/metricsRuntime statistics

Platform admin routes (/platform/*) require platform-admin access and are not general SDK substitutes.

Operations AI (preview)

Experimental and off by default

These routes exist but the assistant is a work in progress and is disabled unless the deployment enables it. See Operations AI before building against them.

MethodRouteNotes
GET/ai/statusWhether the assistant is available. Never invokes a model.
POST/ai/chat503 ai_assistant_not_configured when disabled
GET/ai/conversationsConversations for this user, organization and project
GET, DELETE/ai/conversations/:idRead or delete one conversation

User session only — an API key is refused with 403. The project header is mandatory, and every tool is read-only.