API Quick Start

Available to: Developers (license type) Minimum plan: Free

Get up and running with the TitanRDM API in 5 minutes. This guide walks through creating an OAuth application, obtaining a token, and making your first API calls.


Prerequisites

  • A TitanRDM account with at least one deployed table containing data
  • Account Administrator access (to create OAuth applications)
  • curl or any HTTP client (Postman, Insomnia, etc.)

Step 1: Create an OAuth Application

  1. Navigate to Admin > OAuth Applications
  2. Click New Application
  3. Fill in:
    • Name: My API Client (any descriptive name)
    • Redirect URI: urn:ietf:wg:oauth:2.0:oob (for testing; use your actual callback URL in production)
    • Confidential: Yes
    • Scopes: Select api (full access)
  4. Click Create
  5. Copy the Client Secret immediately — it is shown only once

You now have a Client ID and Client Secret.


Step 2: Obtain an Access Token

Use the Client Credentials flow for quick testing:

curl -X POST https://{subdomain}.titanrdm.com/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "scope=api"

Save the access_token from the response:

export TOKEN="your_access_token_here"

Step 3: List Your Domains

curl -H "Authorization: Bearer $TOKEN" \
  https://{subdomain}.titanrdm.com/api/v1/domains

Response:

{
  "data": [
    {
      "id": 1,
      "name": "Finance",
      "abbreviation": "FIN",
      "description": "Financial reference data"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 100,
    "total_count": 1,
    "total_pages": 1
  }
}

Step 4: List Table Definitions

curl -H "Authorization: Bearer $TOKEN" \
  https://{subdomain}.titanrdm.com/api/v1/table_definitions

This returns all table definitions across all branches. Filter by branch:

curl -H "Authorization: Bearer $TOKEN" \
  "https://{subdomain}.titanrdm.com/api/v1/table_definitions?branch_id=1"

Step 5: Query Table Data

To read data from a deployed table, you need the table_definition_id (from the deployed table definitions endpoint) or the table_definition_key + branch_id:

curl -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  https://{subdomain}.titanrdm.com/api/v1/table_data/grid \
  -d '{
    "table_definition_id": 1,
    "startRow": 0,
    "endRow": 50,
    "filterModel": {},
    "sortModel": []
  }'

Response:

{
  "rows": [
    {
      "trdm_sk": 1,
      "currency_code": "USD",
      "currency_name": "US Dollar",
      "trdm_created_at": "2024-01-15T10:30:00Z",
      "trdm_updated_at": "2024-01-15T10:30:00Z",
      "trdm_is_deleted": false
    }
  ],
  "rowCount": 150
}

Step 6: Create a Record

curl -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  https://{subdomain}.titanrdm.com/api/v1/table_data \
  -d '{
    "table_definition_id": 1,
    "record": {
      "currency_code": "GBP",
      "currency_name": "British Pound"
    }
  }'

Response (201 Created):

{
  "record": {
    "trdm_sk": 151,
    "currency_code": "GBP",
    "currency_name": "British Pound",
    "trdm_created_at": "2024-06-01T09:00:00Z",
    "trdm_updated_at": "2024-06-01T09:00:00Z",
    "trdm_is_deleted": false
  },
  "message": "Record created successfully"
}

Step 7: Update a Record

curl -X PATCH -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  https://{subdomain}.titanrdm.com/api/v1/table_data/151 \
  -d '{
    "table_definition_id": 1,
    "record": {
      "currency_name": "Pound Sterling"
    }
  }'

Step 8: Export Data

Trigger a full export of a table:

curl -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  https://{subdomain}.titanrdm.com/api/v1/exports \
  -d '{
    "branch_id": 1,
    "table_definition_key": "currency_codes",
    "pattern": "full"
  }'

Response (201 Created):

{
  "id": 42,
  "correlation_code": "a1b2c3d4",
  "status": "created",
  "pattern": "full",
  "download_url": null
}

Poll the export status until status is "completed" and download_url is available:

curl -H "Authorization: Bearer $TOKEN" \
  https://{subdomain}.titanrdm.com/api/v1/exports/42

Common Patterns

Paginating Through Results

# Page 1
curl -H "Authorization: Bearer $TOKEN" \
  "https://{subdomain}.titanrdm.com/api/v1/table_definitions?page=1&per_page=50"

# Page 2
curl -H "Authorization: Bearer $TOKEN" \
  "https://{subdomain}.titanrdm.com/api/v1/table_definitions?page=2&per_page=50"

Filtering with Server-Side Filters

The table data grid endpoint supports AG Grid-compatible filter models:

{
  "table_definition_id": 1,
  "startRow": 0,
  "endRow": 100,
  "filterModel": {
    "currency_code": {
      "filterType": "text",
      "type": "contains",
      "filter": "USD"
    }
  },
  "sortModel": [
    { "colId": "currency_name", "sort": "asc" }
  ]
}

Handling Token Expiration

# Check if token is still valid
curl -H "Authorization: Bearer $TOKEN" \
  https://{subdomain}.titanrdm.com/api/v1/account

# If you get 401, request a new token
curl -X POST https://{subdomain}.titanrdm.com/oauth/token \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "scope=api"

Next Steps