API Endpoints Reference
Available to: Developers (license type) Minimum plan: Free
Complete reference for all TitanRDM REST API v1 endpoints. All endpoints are prefixed with /api/v1/ and require a valid OAuth Bearer token.
Conventions
{id}— numeric resource ID- Request body — JSON (
Content-Type: application/json) - Pagination —
?page=1&per_page=100on all collection endpoints - Filtering —
?q=search_termon most collection endpoints - Scopes — enforced per HTTP method:
api:read(GET),api:write(POST/PATCH/PUT),api:delete(DELETE),api:admin(admin operations)
Table Data
Interact with the actual reference data stored in deployed tables.
Query Data (Grid)
POST /api/v1/table_data/grid
Server-side pagination, filtering, and sorting — compatible with AG Grid's request model.
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
table_definition_id | integer | Yes* | ID of the deployed table definition |
table_definition_key | string | Yes* | Key of the table (alternative to ID) |
environment_id | integer | Yes* | Environment ID (required when using table_definition_key) |
startRow | integer | Yes | Starting row index (0-based) |
endRow | integer | Yes | Ending row index (max 1000 rows per request) |
filterModel | object | No | AG Grid filter model |
sortModel | array | No | AG Grid sort model |
*Provide either table_definition_id or table_definition_key + environment_id.
Response:
{
"rows": [ { "trdm_sk": 1, "col_name": "value", ... } ],
"rowCount": 500
}
Filter model format:
{
"column_name": {
"filterType": "text|number|date",
"type": "contains|equals|greaterThan|...",
"filter": "value"
}
}
Text filter types: contains, notContains, equals, notEqual, startsWith, endsWith
Number filter types: equals, notEqual, lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqual
Date filter types: equals, notEqual, lessThan, greaterThan (use dateFrom field)
Show Record
GET /api/v1/table_data/{id}?table_definition_id={td_id}
Returns a single record by its internal ID.
Create Record
POST /api/v1/table_data
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
table_definition_id | integer | Yes | Deployed table definition ID |
record | object | Yes | Column name/value pairs |
Response: 201 Created with the created record.
Update Record
PATCH /api/v1/table_data/{id}
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
table_definition_id | integer | Yes | Deployed table definition ID |
record | object | Yes | Column name/value pairs to update |
Delete Records (Soft Delete)
POST /api/v1/table_data/delete_records
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
table_definition_id | integer | Yes | Deployed table definition ID |
ids | array[integer] | Yes | Array of trdm_sk values to soft-delete |
Sets trdm_is_deleted = true on the specified records.
Table Definitions
Manage table definition metadata and column structure.
List Table Definitions
GET /api/v1/table_definitions
Query parameters:
| Parameter | Description |
|---|---|
branch_id | Filter by branch |
q | Search by name |
Response: Paginated collection with domain and branch includes.
Show Table Definition
GET /api/v1/table_definitions/{id}
Supports lookup by numeric ID, UUID, or key (requires branch_id query param when using key).
Response: Full detail including column definitions and user groups.
Create Table Definition
POST /api/v1/table_definitions
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
branch_id | integer | Yes | Branch to create on |
table_definition[name] | string | Yes | Table name |
table_definition[description] | string | No | Description |
table_definition[domain_id] | integer | Yes | Domain ID |
table_definition[load_type] | string | No | manual or source |
table_definition[lookup_display_column_id] | integer | No | Column ID for FK display |
Update Table Definition
PATCH /api/v1/table_definitions/{id}
Same parameters as create (except branch_id).
Delete Table Definition
DELETE /api/v1/table_definitions/{id}
Permanently destroys the table definition and all its column definitions.
Response: 204 No Content
Clone Table Definition
POST /api/v1/table_definitions/{id}/clone
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
target_branch_id | integer | Yes | Branch to clone to |
Requires user context (Authorization Code flow).
Remove Table Definition
POST /api/v1/table_definitions/{id}/remove
Removes the table definition and its deployed counterpart (if any). Blocked if other tables reference this table via foreign keys.
Response: 204 No Content
Column Definitions
Manage columns within a table definition.
List Column Definitions
GET /api/v1/column_definitions?table_definition_id={td_id}
Create Column Definition
POST /api/v1/column_definitions
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
table_definition_id | integer | Yes | Parent table definition |
column_definition[name] | string | Yes | Column name |
column_definition[data_type] | string | Yes | Data type (e.g., string, integer, decimal, date, datetime, boolean, text) |
column_definition[length] | integer | No | Max length (for string type) |
column_definition[scale] | integer | No | Decimal places (for decimal type) |
column_definition[is_primary_key] | boolean | No | Part of composite primary key |
column_definition[is_required] | boolean | No | NOT NULL constraint |
column_definition[foreign_key_table_id] | integer | No | Referenced table definition ID |
column_definition[valid_values] | string | No | Pipe-delimited list of allowed values |
column_definition[description] | string | No | Column description |
Update Column Definition
PATCH /api/v1/column_definitions/{id}
Delete Column Definition
DELETE /api/v1/column_definitions/{id}
Deployed Table Definitions
Read-only access to tables that have been deployed (physical tables exist).
List Deployed Tables
GET /api/v1/deployed_table_definitions
Query parameters:
| Parameter | Description |
|---|---|
environment_id | Filter by environment |
domain_id | Filter by domain |
q | Search by name |
Only tables deployed to environments you can access are returned. Look up a single table by key with GET /api/v1/deployed_table_definitions/lookup?key=…&environment_id=….
Domains
Manage organisational domains.
List Domains
GET /api/v1/domains
Show Domain
GET /api/v1/domains/{id}
Includes user groups and their members.
Create Domain
POST /api/v1/domains
Requires api:admin scope.
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
domain[name] | string | Yes | Domain name |
domain[abbreviation] | string | No | Short code |
domain[description] | string | No | Description |
Update Domain
PATCH /api/v1/domains/{id}
Requires api:admin scope.
Delete Domain
DELETE /api/v1/domains/{id}
Requires api:admin scope.
Branches
Manage branches (available on all plans).
List Branches
GET /api/v1/branches
| Parameter | Description |
|---|---|
external_id | Filter by external id (e.g. the matching Git branch name) |
q | Filter expression, e.g. branch_type:eq:shared |
Show Branch
GET /api/v1/branches/{id}
Includes parent branch, owner, the environments it deploys to, user groups, and members.
Create Branch
POST /api/v1/branches
Creates a development (private) branch for the calling user, together with a private environment it deploys to. Requires user context.
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
branch[name] | string | Yes | Branch name |
branch[parent_branch_id] | integer | No | Shared branch to promote into (defaults to the integration branch) |
branch[external_id] | string | No | The matching Git branch |
branch[description] | string | No | Description |
Update Branch
PATCH /api/v1/branches/{id}
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
branch[name] | string | No | New name |
branch[description] | string | No | New description |
branch[external_id] | string | No | The matching Git branch |
branch[parent_branch_id] | integer | No | New parent branch |
Delete Branch
DELETE /api/v1/branches/{id}
Deletes (archives) the branch and its private environments. They can be restored in the app for 30 days.
Environments
Environments are deployment targets — for example Prod, Stage, or a developer's Dev environment. Each environment is deployed from one branch.
List Environments
GET /api/v1/environments
Returns the environments you can access.
| Parameter | Description |
|---|---|
external_id | Filter by external id (e.g. the release stage name in your CI/CD system) |
branch_id | Filter by the branch that deploys to the environment |
q | Filter expression, e.g. is_prod:eq:true |
Show Environment
GET /api/v1/environments/{id}
Includes the branch it is deployed from and its owner (for private environments).
Create, Update, Delete Environment
POST /api/v1/environments
PATCH /api/v1/environments/{id}
DELETE /api/v1/environments/{id}
Account administrators only. Fields: environment[name], environment[schema_name] (create only), environment[branch_id], environment[parent_environment_id], environment[is_prod], environment[environment_type] (shared or private, create only), environment[owner_id], environment[external_id], environment[description]. Deleting an environment hides it; it can be restored in the app for 30 days.
Set Current Environment
PATCH /api/v1/environments/set_current
Requires user context.
| Field | Type | Required | Description |
|---|---|---|---|
environment_id | integer | Yes | Environment to set as current |
Deployments
Manage deployments (requires user context). A deployment applies a branch's table definitions to one environment.
List Deployments
GET /api/v1/deployments
Returns deployments to environments you can access, oldest first.
| Parameter | Description |
|---|---|
environment_id | Filter by environment |
environment_external_id | Filter by the environment's external id |
promotion_id | Filter by the promotion that created the deployment |
promotion_external_id | Filter by the external id of the promotion that created the deployment (e.g. a PR number) |
status | created, deployed, failed, rejected, abandoned or superseded |
Each deployment includes its environment, source branch, and promotion (if any).
Show Deployment
GET /api/v1/deployments/{id}
Returns deployment details, table definitions, computed diffs, warnings (tables changed since the deployment was created, older pending deployments), and older_pending_deployment_ids.
Create Deployment
POST /api/v1/deployments
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
environment_id | integer | Yes | Target environment. The table definitions come from the branch that deploys to it. |
table_definition_ids | array[integer] | Yes* | Table definitions to deploy |
all_pending | boolean | Yes* | Deploy every table definition with changes not yet deployed to the environment |
description | string | No | Description |
*Provide table_definition_ids or all_pending: true. Environments of shared branches normally receive deployments from promotions; creating one directly for such an environment requires an account administrator.
Execute Deployment
POST /api/v1/deployments/{id}/deploy
Applies the changes to the environment. Requires the Deployer permission on the environment (or ownership of a private environment). Other pending deployments to the same environment whose changes this deployment applies are marked superseded.
Returns 409 Conflict if the deployment is no longer pending (for example it is already deployed or superseded), or while another deployment to the environment is running.
Send Deployment Request
POST /api/v1/deployments/{id}/send_request
| Field | Type | Required | Description |
|---|---|---|---|
comment | string | No | Message for the environment's deployers |
Reject Deployment
POST /api/v1/deployments/{id}/reject
| Field | Type | Required | Description |
|---|---|---|---|
comment | string | No | Rejection reason |
Cancel Deployment
POST /api/v1/deployments/{id}/cancel
Abandon Deployment
POST /api/v1/deployments/{id}/abandon
Notifies the environment's deployers via email.
Promotions
Manage promotions (requires user context).
List Promotions
GET /api/v1/promotions
| Parameter | Description |
|---|---|
external_id | Filter by external id (e.g. a PR number) |
to_branch_id / from_branch_id | Filter by target or source branch |
status | Filter by status |
Show Promotion
GET /api/v1/promotions/{id}
Returns promotion details and computed diffs.
Create Promotion
POST /api/v1/promotions
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
from_branch_id | integer | Yes | Source branch |
to_branch_id | integer | Yes | Target branch |
table_definition_ids | array[integer] | Yes* | Table definitions to promote |
all_pending | boolean | Yes* | Promote every table definition on the source branch that has not been promoted |
external_id | string | No | External id, e.g. the pull request number in your Git provider |
description | string | No | Description |
*Provide table_definition_ids or all_pending: true.
Update Promotion
PATCH /api/v1/promotions/{id}
| Field | Type | Required | Description |
|---|---|---|---|
external_id | string | No | External id (e.g. set the PR number after the promotion was created). Unique among the account's promotions that are not cancelled, abandoned or rejected. |
merge_commit_sha | string | No | The commit that merged the pull request (normally recorded by POST /api/v1/cicd/promote) |
description | string | No | Description |
Execute Promotion
POST /api/v1/promotions/{id}/promote
Requires the approve permission on the target branch. Copies the table definitions to the target branch and creates a deployment for every environment the target branch deploys to. The response includes those deployments (id, status, environment).
Only a promotion that is created, requested or failed can be promoted. Otherwise, or while the promotion is already being promoted, the response is 409 Conflict.
Send Promotion Request
POST /api/v1/promotions/{id}/send_request
Reject Promotion
POST /api/v1/promotions/{id}/reject
Cancel Promotion
POST /api/v1/promotions/{id}/cancel
Abandon Promotion
POST /api/v1/promotions/{id}/abandon
CI/CD
Promote and deploy by external id from a CI/CD pipeline: a promotion by its pull request, an environment by its release stage. Requires user context: the Authorization Code flow, or Client Credentials with a service account. Every call is safe to repeat. See CI/CD Integration for the full flow and examples.
Promote by External Id
POST /api/v1/cicd/promote
| Field | Type | Required | Description |
|---|---|---|---|
promotion_external_id | string | Yes | The promotion's external id (e.g. the pull request) |
merge_commit_sha | string | No | The merge commit, recorded on the promotion |
allow_missing | boolean | No | Return 200 with "result": "not_found" instead of 404 when no promotion has the external id |
Requires the approve permission on the target branch. result is promoted or already_promoted; the response includes the promotion and its deployments. Returns 409 for a promotion that is cancelled, abandoned or rejected, and 422 if promoting fails.
Deploy a Release
POST /api/v1/cicd/deploy
| Field | Type | Required | Description |
|---|---|---|---|
environment_external_id | string | Yes | The environment's external id |
promotion_external_id | string | One of | The promotion being released |
commit_shas | array | One of | The commits in the release; the latest promotion merged by any of them is released |
release_ref | string | No | Release reference recorded on each deployment as its external_id |
allow_later_changes | boolean | No | Deploy even though tables were changed by promotions promoted after the released one |
dry_run | boolean | No | Report what would be deployed without deploying |
Deploys every pending deployment to the environment created by promotions up to and including the released promotion, oldest first. Requires the Deployer permission on the environment.
result is deployed, up_to_date, nothing_to_deploy, planned (dry run) or failed. results lists each deployment with its outcome (deployed, superseded, failed or, for a dry run, pending). skipped lists pending deployments not created by a promotion, which are never deployed by a release.
Returns 409 with later_changes when deploying would also apply changes promoted after the released promotion (unless allow_later_changes), and 409 with a Retry-After header while another deployment to the environment is running.
CI/CD Status
GET /api/v1/cicd/status?promotion_external_id={id}
GET /api/v1/cicd/status?environment_external_id={id}
- Promotion: status,
promotable,merge_commit_sha, tables, and each environment with its deployment for the promotion. - Environment:
pending_deploymentsin the order a release applies them, andlast_deployment(the last deployment created by a promotion, with its release reference inexternal_id).
Imports
Manage data imports.
List Imports
GET /api/v1/imports
Show Import
GET /api/v1/imports/{id}
Returns import details, import tables with metrics, and action history.
Create Import
POST /api/v1/imports
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
environment_id | integer | Yes | Environment to import into |
correlation_code | string | No | Custom correlation code (auto-generated if omitted) |
Mark Upload Complete
POST /api/v1/imports/{id}/upload_complete
Signals that all file uploads for this import are done. Triggers auto-finalization if all import tables are in a terminal state.
Complete Import
POST /api/v1/imports/{id}/complete
Manually marks the import as complete.
Exports
Manage data exports.
List Exports
GET /api/v1/exports
Query parameters:
| Parameter | Description |
|---|---|
table_definition_key | Filter by table key (with environment_id) |
environment_id | Filter by environment (with table_definition_key) |
Show Export
GET /api/v1/exports/{id}
Returns export details including download_url (when complete), rows_exported, bytes_exported.
Create Export
POST /api/v1/exports
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
environment_id | integer | Yes | Environment to export from |
table_definition_key | string | Yes | Table key to export |
pattern | string | Yes | full or incremental |
high_water_mark | string | Conditional | Required for incremental exports (ISO 8601 datetime). Include a UTC offset — e.g. 2026-09-09T19:00:00+10:00 — as a value without one is read as UTC |
include_history | boolean | No | Export every version of each record, deleted records included (default false) |
correlation_code | string | No | Custom correlation code |
The export job runs asynchronously. Poll the export GET endpoint until status is completed.
Import Mappings
Manage reusable import column mappings for table definitions.
List Import Mappings
GET /api/v1/import_mappings?table_definition_id={td_id}
Create Import Mapping
POST /api/v1/import_mappings
Update Import Mapping
PATCH /api/v1/import_mappings/{id}
Delete Import Mapping
DELETE /api/v1/import_mappings/{id}
Users
Manage account users (requires api:admin scope).
List Users
GET /api/v1/users
Show User
GET /api/v1/users/{id}
Create User
POST /api/v1/users
| Field | Type | Required | Description |
|---|---|---|---|
user.email | string | Yes (people) | Email address |
user.first_name | string | Yes | First name, or the service account's name |
user.last_name | string | Yes (people) | Last name |
user.license_type | string | No | developer or end_user |
user.service_account | boolean | No | true creates a service account, which needs only first_name |
Update User
PATCH /api/v1/users/{id}
Delete User
DELETE /api/v1/users/{id}
User Groups
List User Groups
GET /api/v1/user_groups
Show User Group
GET /api/v1/user_groups/{id}
User Group Assignments
List Assignments
GET /api/v1/user_group_assignments?user_group_id={group_id}
Create Assignment
POST /api/v1/user_group_assignments
Parameters (body):
| Field | Type | Required | Description |
|---|---|---|---|
user_id | integer | Yes | User to assign |
user_group_id | integer | Yes | Target group |
Delete Assignment
DELETE /api/v1/user_group_assignments/{id}
Account
Show Account
GET /api/v1/account
Returns the current account's details, plan, and billing status.
Update Account
PATCH /api/v1/account
Permissions
List Permissions
GET /api/v1/permissions
Returns all permissions in the account (read-only).
Related Pages
- API Overview — general concepts, response format, error codes
- Authentication — OAuth flows and token management
- API Quick Start — hands-on tutorial