REST API v1

SignTrack API

A JSON REST API for programmatic access to projects, brands, and events. All requests require a bearer token and are scoped to your workspace and role permissions.

Authentication

Provide your API key as a bearer token on every request.

curl https://api.signtrack.co/v1/locations \
  -H "Authorization: Bearer sk_live_a1b2c3d4e5f6" \
  -H "Accept: application/json"

Locations

Create, list, and update signage project locations.

GET
/v1/locations

List all locations visible to the caller.

Response
{
  "data": [
    {
      "id": "loc_9K8mQx",
      "brand_id": "b_brewbeans",
      "store_number": "#1042",
      "name": "Brew & Beans — Austin",
      "address": "218 Market St, Austin, TX 78701",
      "coordinates": { "lat": 30.2672, "lng": -97.7431 },
      "stage": "installing",
      "scheduled_date": "2026-07-14"
    }
  ],
  "page": 1,
  "total": 24
}
POST
/v1/locations

Create a new project location.

Request body
{
  "brand_id": "b_brewbeans",
  "store_number": "#1042",
  "name": "Brew & Beans — Austin",
  "address": "218 Market St",
  "city": "Austin", "state": "TX", "zip": "78701",
  "sign_type": "Channel Letters",
  "budget": 14500
}
GET
/v1/locations/{id}

Fetch a single location including notes and photos.

PATCH
/v1/locations/{id}

Update fields on a location. Partial updates supported.

DELETE
/v1/locations/{id}

Soft-delete a location. Audit entry created.

POST
/v1/locations/{id}/stage

Advance or override the project stage.

Request body
{ "stage": "installing", "reason": "Crew dispatched" }

Brands

Manage franchise and multi-location client accounts.

GET
/v1/brands

List all brands the caller can view.

POST
/v1/brands

Create a new brand account (admin only).

PATCH
/v1/brands/{id}

Update brand details.

Users

Team members, clients, and their permissions.

GET
/v1/users

List users in the workspace.

POST
/v1/users/invite

Send an invitation.

Request body
{ "email": "alex@brewbeans.co", "role": "client", "brand_id": "b_brewbeans" }

Webhooks

Push notifications for downstream systems.

POST
/v1/webhooks

Subscribe to project events.

Request body
{
  "url": "https://client.example.com/hooks/signtrack",
  "events": ["location.stage_changed", "location.completed"]
}

Rate limits

120 requests / minute per API key. Responses include X-RateLimit-Remaining and Retry-After headers.