Overview
API reference and developer guides for the TrieOH platform services.
TrieOH is a multi-service platform: four Go backends, each with its own OpenAPI 3.1 contract, all sharing one identity and tenant model.
Every service's reference below is generated from the OpenAPI spec the service itself serves (/docs/openapi.yml) — the docs always match the deployed contract.
Services
| Service | Local | What it does | Guide |
|---|---|---|---|
| IdentityX | http://localhost:8080 | Identity & tenants — actors, projects, organizations, JWTs, API keys, OAuth, profiles | IdentityX |
| Univents | http://localhost:8081 | Events, editions, ticketing, products, programs, badges & certifications, store | Univents |
| Payssage | http://localhost:8082 | Payments — wallets, sellers, intents, provider OAuth, webhooks, test mode | Payssage |
| Informd | http://localhost:8083 | Multi-tenant forms — namespaces, forms, steps, fields, responses | Informd |
In production the services are reachable through the gateway at https://api.trieoh.com/{service}.
Authentication
Every backend authenticates with credentials issued by IdentityX:
| Scheme | Header | Use for |
|---|---|---|
| Bearer JWT | Authorization: Bearer <token> | End-user calls (issued by /auth/login or OAuth) |
| API key | X-API-Key: <key> | Server-to-server calls (created in the service's IdentityX project) |
Response envelope
Every JSON response (except IdentityX's raw JWKS) is the shared fun.Response envelope:
{
"code": 200,
"message": "",
"data": {},
"error": null,
"pagination": null,
"timestamp": "2026-01-01T12:00:00Z",
"module": "IdentityX"
}- Success: the payload lives in
data. - Failure:
erroris anAppError—{ "code", "message", "fields", "meta" }, anddatais absent. Thecodesentinel maps to the HTTP status (e.g.UNAUTHORIZED→ 401).
Always read data, not the envelope root.