API ReferenceOverview

API Reference

The SignalSmith REST API provides programmatic access to all platform resources. Use it to manage warehouses, models, destinations, syncs, audiences, identity graphs, journeys, events, and more.

Base URL

All API requests are made to your SignalSmith instance:

https://your-instance.signalsmith.io/api/v1

The API is versioned via the URL path. The current version is v1.

Request Format

  • All request bodies must be JSON with Content-Type: application/json
  • All responses are JSON with Content-Type: application/json
  • Resource paths follow the pattern /api/v1/workspaces/{workspaceId}/{resource}
  • Timestamps are ISO 8601 format (e.g., 2024-01-15T09:30:00Z)
  • IDs are UUIDs (e.g., 550e8400-e29b-41d4-a716-446655440000)

Authentication

Every request requires two headers:

Authorization: Bearer <token>
X-Workspace-ID: <workspace-id>

The Authorization header accepts either a Firebase ID token (for browser/UI clients) or an API key (for server-to-server integrations). See Authentication for details.

Pagination

List endpoints that return large collections support pagination via query parameters:

ParameterTypeDefaultDescription
pageinteger1Page number (1-indexed)
page_sizeinteger20Number of items per page (max 100)

Paginated responses include a pagination object:

{
  "data": [...],
  "pagination": {
    "page": 1,
    "page_size": 20,
    "total": 142
  }
}

Rate Limiting

API requests are rate-limited per workspace:

TierLimit
Standard100 requests/minute
Burst20 requests/second

When rate-limited, the API returns 429 Too Many Requests with a Retry-After header indicating when you can retry.

Error Format

Error responses use a consistent JSON structure:

{
  "error": "human-readable error message"
}

HTTP Status Codes

CodeMeaningWhen
200OKSuccessful read or update
201CreatedSuccessful resource creation
400Bad RequestInvalid request body, missing required fields, unsupported values
401UnauthorizedMissing or invalid authentication token
403ForbiddenValid token but insufficient permissions for the requested resource
404Not FoundResource does not exist or is not accessible in this workspace
409ConflictResource already exists (duplicate name, slug, etc.)
422Unprocessable EntityRequest is well-formed but semantically invalid (e.g., referencing a non-existent source)
429Too Many RequestsRate limit exceeded
500Internal Server ErrorUnexpected server error

Common Response Patterns

Successful Deletion

{
  "status": "deleted"
}

Single Resource

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "workspace_id": "...",
  "name": "...",
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z"
}

List of Resources

Most list endpoints return a JSON array directly:

[
  { "id": "...", "name": "..." },
  { "id": "...", "name": "..." }
]

Resources

ResourceBase PathDescription
Warehouses/api/v1/workspaces/{id}/sourcesData warehouse connections
Models/api/v1/workspaces/{id}/modelsSQL-defined datasets
Destinations/api/v1/workspaces/{id}/destinationsData write targets
Syncs/api/v1/workspaces/{id}/syncsData movement configurations
Traits/api/v1/workspaces/{id}/traitsComputed properties
Audiences/api/v1/workspaces/{id}/audiencesSegmentation queries
Audience Syncs/api/v1/workspaces/{id}/audience-syncsAudience activation syncs
Identity Graphs/api/v1/workspaces/{id}/identity-graphsIdentity resolution
Journeys/api/v1/workspaces/{id}/journeysMulti-step workflows
Events/api/v1/workspaces/{id}/eventsReal-time event collection
Loaders/api/v1/workspaces/{id}/loadersInbound loaders
Govern/api/v1/workspaces/{id}/...Roles, groups, rules, access filters
Insights/api/v1/workspaces/{id}/insightsPlatform analytics
Workspaces/api/v1/workspacesMulti-tenant workspaces
Organizations/api/v1/organizationsCompany-level entities
API Keys/api/v1/workspaces/{id}/api-keysAPI key management