API Reference
REST API documentation for the Riptide Application Manager. The API runs on port 11402 by default.
Live source of truth. This reference is hand-maintained and is intended to cover the most commonly-integrated endpoints with worked request/response examples. The canonical and always-current list of every endpoint, parameter, and response shape is the Swagger / OpenAPI document the API itself exposes at
/swaggerwhenApi:Swagger:Enabled=true(default off in Production for surface reduction). Endpoints documented here include the trial-user, session, role, configuration, audit-log, dashboard, application, identity-provider, and integration-related routes; the API also exposes auth (/api/auth/login,/api/auth/logout,/api/auth/refresh), security inventory (/api/security/reports), attestation key management (/api/attestation/keys), cloud events, synthetic principals, application self-registration, and other operational endpoints — see Swagger for the full surface and contracts.
Authentication
Most API requests authenticate with an API key passed in the X-Api-Key header:
curl -X GET https://<your-am-host>/api/trial-users \
-H "X-Api-Key: rtk_your-api-key"
The interactive auth flow used by SDK applications is different — clients call POST /api/auth/login with credentials and receive a session token returned in the response body and as an HttpOnly cookie; subsequent calls include the cookie or pass the token explicitly. POST /api/auth/refresh extends an existing session without forcing a re-login, and POST /api/auth/logout invalidates it.
API keys are issued through the Application Manager Web UI. Each key is prefixed with rtk_ and can be scoped and revoked independently. Configure the service-account key in your application settings under Api:ApiKey or via the RIPTIDE_API_KEY environment variable.
Error Responses
The API uses RFC 7807 Problem Details for error responses:
{
"type": "https://tools.ietf.org/html/rfc7807#section-3.1",
"title": "Not Found",
"status": 404,
"detail": "Trial user with ID 42 was not found.",
"traceId": "00-abc123..."
}
Health & Status
GET /health
System health check. No authentication required.
curl http://localhost:11402/health
{
"status": "healthy",
"timestamp": "2026-03-11T10:00:00Z",
"service": "riptide-application-manager-api",
"version": "1.0.0"
}
GET /api/dashboard/metrics
Dashboard metrics with trend data.
{
"activeTrialUsers": 24,
"totalApplications": 5,
"activeSessions": 12,
"trends": { }
}
GET /api/dashboard/health
Detailed system health status including database connectivity and service availability.
Trial Users
Manage trial user registration and lifecycle.
GET /api/trial-users
List trial users with optional filtering.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| active | boolean | Filter by active status |
Response: 200 OK
[
{
"id": 1,
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@example.com",
"isActive": true,
"emailVerified": true,
"trialStartDate": "2026-03-01T00:00:00Z",
"trialEndDate": "2026-03-08T00:00:00Z",
"createdAt": "2026-03-01T10:30:00Z"
}
]
GET /api/trial-users/
Get a single trial user by ID.
Response: 200 OK — trial user object (same shape as list items)
Error: 404 Not Found — user does not exist
GET /api/trial-users/by-email/
Look up a trial user by email address.
Response: 200 OK — trial user object
Error: 404 Not Found — no user with that email
POST /api/trial-users
Create a new trial user.
Request Body:
{
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@example.com",
"organization": "Example Corp"
}
Response: 201 Created — created trial user object
Errors:
400 Bad Request— validation failure409 Conflict— email already registered
PATCH /api/trial-users/
Update trial user fields.
Request Body:
{
"firstName": "Janet",
"isActive": false
}
Response: 200 OK — updated trial user object
DELETE /api/trial-users/
Delete a trial user.
Response: 204 No Content
Sessions
Track and manage user sessions.
GET /api/sessions
List sessions with optional filtering.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| userId | integer | Filter by user ID |
| active | boolean | Filter by active status |
Response: 200 OK
[
{
"id": 1,
"trialUserId": 1,
"ipAddress": "192.168.1.100",
"startedAt": "2026-03-11T09:00:00Z",
"lastActivityAt": "2026-03-11T10:15:00Z",
"isActive": true
}
]
GET /api/sessions/
Get a single session by ID.
POST /api/sessions
Create a new session.
Request Body:
{
"trialUserId": 1,
"ipAddress": "192.168.1.100"
}
Response: 201 Created
DELETE /api/sessions/
Terminate a session (logout).
Response: 204 No Content
Roles
Manage roles and capability assignments.
GET /api/roles
List roles with optional application filtering.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| applicationId | integer | Filter by application |
Response: 200 OK
[
{
"id": 1,
"name": "Reviewer",
"description": "Can view and approve permits",
"applicationId": 3,
"capabilities": ["permits:view", "permits:approve"]
}
]
GET /api/roles/
Get a single role by ID.
POST /api/roles
Create a new role.
Request Body:
{
"name": "Reviewer",
"description": "Can view and approve permits",
"applicationId": 3,
"capabilities": ["permits:view", "permits:approve"]
}
Response: 201 Created
PATCH /api/roles/
Update a role's name, description, or capabilities.
DELETE /api/roles/
Delete a role.
Response: 204 No Content
Configuration
Manage application configuration files with version control.
GET /api/configuration/
Get a file node by ID (metadata and content).
GET /api/configuration/tree
Get the configuration file tree for an application.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| applicationId | integer | Application to get the tree for |
Response: 200 OK — hierarchical file/folder structure
GET /api/configuration/
Get the version history for a configuration file.
Response: 200 OK
[
{
"version": 3,
"content": "{ ... }",
"createdAt": "2026-03-11T10:00:00Z",
"createdBy": "admin"
},
{
"version": 2,
"content": "{ ... }",
"createdAt": "2026-03-10T14:30:00Z",
"createdBy": "admin"
}
]
POST /api/configuration
Create a new file or folder in the configuration tree.
Request Body:
{
"applicationId": 3,
"parentId": null,
"name": "appsettings.json",
"type": "file",
"content": "{ \"key\": \"value\" }"
}
Response: 201 Created
PUT /api/configuration/
Update a file's content. Automatically creates a new version.
Request Body:
{
"content": "{ \"key\": \"updated-value\" }"
}
Response: 200 OK
POST /api/configuration/
Roll back a file to a specific version number.
Response: 200 OK — the restored file content
Audit Logs
Query the system audit trail.
GET /api/audit-logs
List audit log entries with filtering.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
| actionType | string | Filter by action type (e.g., UserCreated, RoleUpdated) |
| entityType | string | Filter by entity type (e.g., TrialUser, Role) |
| userId | string | Filter by acting user |
| startDate | datetime | Entries after this date |
| endDate | datetime | Entries before this date |
Response: 200 OK — paginated audit log entries
GET /api/audit-logs/
Get a single audit log entry with full detail.