Route Catalog
Every documented SaaSignal route is listed here, including meta endpoints, MCP, public tracking pages, and signed storage handlers. Use this page to scan the full surface area quickly, then jump into the topic pages for deeper examples or into the dashboard API Console to run requests from the browser.
Core > Billing
/core/billing/{org_id}/free-planSwitch an organization to the free plan without checkout. This powers dashboard flows that only need the local state change and do not require a live Stripe completion. **Required scope:** `billing:write`
/core/billing/{org_id}/subscriptionGet the active subscription for an organization. **Required scope:** `billing:read`
/core/billing/{org_id}/usageGet usage dashboard data for an organization. **Required scope:** `billing:read`
/core/billing/packagesList available subscription packages. **Required scope:** none (public)
Core > Organizations
/core/organizationsList organizations the current user is a member of. **Required scope:** `orgs:read` (for OAuth tokens); portal tokens are trusted implicitly.
/core/organizationsCreate a new organization and add the authenticated user as the owner. **Required scope:** `orgs:write` (for OAuth tokens); portal tokens are trusted implicitly.
/core/organizations/{org_id}Permanently delete an organization. **Required scope:** `*` (wildcard)
/core/organizations/{org_id}Retrieve a single organization by ID. **Required scope:** `orgs:read`
/core/organizations/{org_id}Update an organization's name and/or slug. **Required scope:** `orgs:write`
/core/organizations/{org_id}/membersList all members of an organization with their scopes. **Required scope:** `orgs:read`
/core/organizations/{org_id}/members/{user_id}Remove a member from the organization. **Required scope:** `orgs:write`
/core/organizations/{org_id}/members/{user_id}/scopesReplace a member's scopes. Cannot modify owner scopes. **Required scope:** `orgs:write`
/core/organizations/{org_id}/members/inviteSend an email invitation to join the organization with specified scopes. **Required scope:** `orgs:write`
/core/organizations/{org_id}/my-scopesReturns the resolved scopes for the authenticated user in this organization. **Required scope:** `orgs:read`
Core > Projects
/core/organizations/{org_id}/projectsList all projects belonging to an organization. **Required scope:** `projects:read`
/core/organizations/{org_id}/projectsCreate a new project within an organization. **Required scope:** `projects:write`
/core/organizations/{org_id}/projects/{project_id}Permanently delete a project and all associated data. **Required scope:** `projects:write`
/core/organizations/{org_id}/projects/{project_id}Retrieve a single project by ID. **Required scope:** `projects:read`
Core > Tokens
/core/organizations/{org_id}/tokensList all tokens (API keys) for an organization, optionally filtered by project. **Required scope:** `tokens:read`
/core/organizations/{org_id}/tokensCreate a new scoped API key for an organization or a specific project. The raw `sk_live_…` secret is returned only once in the response. **Required scope:** `tokens:write`
/core/organizations/{org_id}/tokens/{token_id}Permanently revoke a token. Revoked tokens cannot be used for authentication. **Required scope:** `tokens:write`
/core/tokens/balanceGet the current included and top-up token balances for an organization. **Required scope:** `billing:read`
/core/tokens/browserCreate a short-lived browser token (`bt_*`) by exchanging an API key (`sk_live_*`) or OAuth JWT. The browser token is a stateless JWT that can be used directly from browser JavaScript. Requested scopes are intersected with the parent key's scopes. **Required scope:** inherits from the parent credential. **Required auth:** API key (`sk_live_*`) or OAuth JWT
/core/tokens/topup-bundlesList available top-up token bundles. **Required scope:** none (public)
/core/tokens/usageGet time-series token usage analytics with configurable granularity (hour, day, or month). **Required scope:** `billing:read`
Infra > AI
/infra/ai/audio/speechGenerate speech audio from text. Small payloads can return inline audio; larger or async outputs can be written to Storage. **Required scope:** `ai:generate`
/infra/ai/audio/transcriptionsTranscribe audio from multipart upload, storage reference, or base64 payloads. Supports `async: true`. **Required scope:** `ai:generate`
/infra/ai/audio/translationsTranslate audio from multipart upload, storage reference, or base64 payloads. Supports `async: true`. **Required scope:** `ai:generate`
/infra/ai/documents/chunkDeterministically chunk raw text or parsed blocks into retrieval-ready slices. **Cost:** 0.0000015 tokens. **Required scope:** `ai:generate`
/infra/ai/documents/parseParse supported text and image documents into normalized layout-aware blocks. Supports multipart upload, Storage references, and `async: true`. **Required scope:** `ai:generate`
/infra/ai/embeddingsGenerate embedding vectors. Embeddings are returned only; SaaSignal does not auto-index text in v1. **Required scope:** `ai:generate`
/infra/ai/images/editsEdit an existing image using a prompt plus the source asset. Supports base64 or Storage references and `async: true`. **Required scope:** `ai:generate`
/infra/ai/images/generationsGenerate images from prompts. Canonical routes can also write assets to Storage destinations. Supports `async: true`. **Required scope:** `ai:generate`
/infra/ai/images/variationsVary an existing image using a prompt plus the source asset. Supports base64 or Storage references and `async: true`. **Required scope:** `ai:generate`
/infra/ai/modelsList AI models exposed by SaaSignal. Model IDs are normalized as `provider:model` strings. **Required scope:** `ai:read`
/infra/ai/models/{model_id}Get a single AI model definition. **Required scope:** `ai:read`
/infra/ai/moderationsPolicy-neutral moderation and safety classification. No SaaSignal-hosted moderation profiles are persisted in v1. **Required scope:** `ai:generate`
/infra/ai/operations/{operation_id}Get the status and result metadata for an async AI operation. **Required scope:** `ai:read`
/infra/ai/operations/{operation_id}/cancelCancel an async AI operation that has not yet completed. **Required scope:** `ai:generate`
/infra/ai/realtime/sessionsMint a short-lived SaaSignal-managed realtime session descriptor without exposing provider credentials. Returns a proxy URL when realtime support is configured. **Cost:** 0.0000010 tokens. **Required scope:** `ai:generate`
/infra/ai/rerankReorder caller-supplied candidates. This route does not perform retrieval by itself. **Required scope:** `ai:generate`
/infra/ai/responsesCanonical AI response route. Accepts text and multimodal message content where the selected model supports it. Supports sync JSON, SSE streaming, and `async: true`. **Required scope:** `ai:generate`
/v1/audio/speechGenerate speech audio from text. Small payloads can return inline audio; larger or async outputs can be written to Storage. **Required scope:** `ai:generate`
/v1/audio/transcriptionsTranscribe audio from multipart upload, storage reference, or base64 payloads. Supports `async: true`. **Required scope:** `ai:generate`
/v1/audio/translationsTranslate audio from multipart upload, storage reference, or base64 payloads. Supports `async: true`. **Required scope:** `ai:generate`
/v1/chat/completionsOpenAI-compatible chat-completions alias that resolves through the same AI response service layer and billing path as `/infra/ai/responses`. **Required scope:** `ai:generate`
/v1/embeddingsGenerate embedding vectors. Embeddings are returned only; SaaSignal does not auto-index text in v1. **Required scope:** `ai:generate`
/v1/images/editsEdit an existing image using a prompt plus the source asset. Supports base64 or Storage references and `async: true`. **Required scope:** `ai:generate`
/v1/images/generationsGenerate images from prompts. Canonical routes can also write assets to Storage destinations. Supports `async: true`. **Required scope:** `ai:generate`
/v1/images/variationsVary an existing image using a prompt plus the source asset. Supports base64 or Storage references and `async: true`. **Required scope:** `ai:generate`
/v1/modelsList AI models exposed by SaaSignal. Model IDs are normalized as `provider:model` strings. **Required scope:** `ai:read`
/v1/models/{model_id}Get a single AI model definition. **Required scope:** `ai:read`
/v1/moderationsPolicy-neutral moderation and safety classification. No SaaSignal-hosted moderation profiles are persisted in v1. **Required scope:** `ai:generate`
/v1/realtime/sessionsMint a short-lived SaaSignal-managed realtime session descriptor without exposing provider credentials. Returns a proxy URL when realtime support is configured. **Cost:** 0.0000010 tokens. **Required scope:** `ai:generate`
/v1/responsesCanonical AI response route. Accepts text and multimodal message content where the selected model supports it. Supports sync JSON, SSE streaming, and `async: true`. **Required scope:** `ai:generate`
Infra > Channels
/infra/channels/{channel}/historyRetrieve message history for a channel. Use the `before` parameter for backward pagination. **Cost:** 0.0000008 tokens per request. **Required scope:** `channels:subscribe`
/infra/channels/{channel}/presenceGet currently connected clients. **Cost:** 0.0000008 tokens per request. **Required scope:** `channels:subscribe`
/infra/channels/{channel}/publishPublish a single event. **Cost:** 0.00000045 tokens per message. **Required scope:** `channels:publish`
/infra/channels/{channel}/subscribeSubscribe to real-time events via SSE or WebSocket upgrade. Connection billing is handled server-side per connection-minute. **Required scope:** `channels:subscribe`
/infra/channels/publishPublish events to one or more channels (max 50 messages per request). **Cost:** 0.00000045 tokens per message. **Required scope:** `channels:publish`
Infra > Decisioning > Matching
/infra/decisioning/matching/operationsSolve one constrained assignment problem, either synchronously or as a persisted async operation. **Required scope:** `matching:write`
/infra/decisioning/matching/operations/{operation_id}Get the status and result of an async matching operation. **Required scope:** `matching:read`
/infra/decisioning/matching/operations/{operation_id}/cancelCancel an in-flight matching operation if it has not completed yet. **Required scope:** `matching:write`
/infra/decisioning/matching/operations/batchSolve multiple matching problems in one request, either synchronously or as a persisted async batch operation. **Required scope:** `matching:write`
/infra/decisioning/matching/templatesList saved matching templates for the active project. **Required scope:** `matching:read`
/infra/decisioning/matching/templatesPersist a reusable matching problem template for later operation creation. **Required scope:** `matching:write`
/infra/decisioning/matching/templates/{template_id}Delete a saved matching template. **Required scope:** `matching:write`
/infra/decisioning/matching/templates/{template_id}Get one saved matching template. **Required scope:** `matching:read`
/infra/decisioning/matching/templates/{template_id}Update mutable matching template fields. **Required scope:** `matching:write`
/infra/decisioning/matching/templates/{template_id}/operationsSolve a saved matching template with optional overrides, either synchronously or as a persisted async operation. **Required scope:** `matching:write`
Infra > Decisioning > Ranking
/infra/decisioning/ranking/collectionsList ranking collections for the active project. **Required scope:** `ranking:read`
/infra/decisioning/ranking/collectionsCreate a caller-owned collection for ranking and recommendation primitives. **Required scope:** `ranking:write`
/infra/decisioning/ranking/collections/{collection_id}Delete a ranking collection and its stored items and signals. **Required scope:** `ranking:write`
/infra/decisioning/ranking/collections/{collection_id}Get one ranking collection definition. **Required scope:** `ranking:read`
/infra/decisioning/ranking/collections/{collection_id}Update mutable ranking collection fields. **Required scope:** `ranking:write`
/infra/decisioning/ranking/collections/{collection_id}/itemsList caller-owned items stored in a ranking collection. **Required scope:** `ranking:read`
/infra/decisioning/ranking/collections/{collection_id}/items/{item_id}Delete one item from a ranking collection. **Required scope:** `ranking:write`
/infra/decisioning/ranking/collections/{collection_id}/items/{item_id}Get one caller-owned item stored in a ranking collection. **Required scope:** `ranking:read`
/infra/decisioning/ranking/collections/{collection_id}/items/upsertUpsert caller-owned items into a ranking collection, with optional auto-embedding from item text. **Required scope:** `ranking:write`
/infra/decisioning/ranking/collections/{collection_id}/rankRank caller-owned candidate items for one subject using behavioral, semantic, or hybrid strategy. **Required scope:** `ranking:read`
/infra/decisioning/ranking/collections/{collection_id}/relatedRank items related to one anchor item using behavioral, semantic, or hybrid strategy. **Required scope:** `ranking:read`
/infra/decisioning/ranking/collections/{collection_id}/signals/batchRecord caller-owned subject-item signals for ranking and related-item queries. **Required scope:** `ranking:write`
/infra/decisioning/ranking/collections/{collection_id}/statsGet counts for items, signals, and unique subjects in a ranking collection. **Required scope:** `ranking:read`
Infra > Decisioning > Search
/infra/decisioning/search/indexesList search indexes for the active project. **Required scope:** `search:read`
/infra/decisioning/search/indexesCreate a managed search index backed by D1 metadata, FTS recall, and optional Vectorize namespaces. **Cost:** variable by index metadata and future document sync. **Required scope:** `search:write`
/infra/decisioning/search/indexes/{index_id}Delete a search index and all synced documents. **Cost:** variable by index state. **Required scope:** `search:write`
/infra/decisioning/search/indexes/{index_id}Get a search index definition and rebuild metadata. **Required scope:** `search:read`
/infra/decisioning/search/indexes/{index_id}Update mutable search index metadata. **Cost:** variable by index metadata. **Required scope:** `search:write`
/infra/decisioning/search/indexes/{index_id}/documentsList caller-owned documents stored in a managed search index. **Required scope:** `search:read`
/infra/decisioning/search/indexes/{index_id}/documents/{document_id}Delete one document from a search index. **Cost:** variable by sync work. **Required scope:** `search:write`
/infra/decisioning/search/indexes/{index_id}/documents/{document_id}Get one caller-owned document stored in a managed search index. **Required scope:** `search:read`
/infra/decisioning/search/indexes/{index_id}/documents/upsertUpsert documents with caller-supplied vectors or optional auto-embedding. SaaSignal stores document state in D1 and syncs vector-capable indexes into Vectorize when possible. **Required scope:** `search:write`
/infra/decisioning/search/indexes/{index_id}/queryQuery a managed search index with lexical, semantic, or hybrid retrieval, with optional AI reranking of the top candidate set. **Cost:** variable by retrieval mode, candidate set size, and reranking. **Required scope:** `search:read`
/infra/decisioning/search/indexes/{index_id}/rebuildRe-sync lexical and semantic state for all documents in the index. Async mode updates rebuild status in the background. **Required scope:** `search:write`
/infra/decisioning/search/indexes/{index_id}/statsGet item counts plus rebuild and vector sync state for a search index. **Required scope:** `search:read`
/infra/decisioning/search/indexes/{index_id}/suggestReturn prefix suggestions derived from indexed document text. **Cost:** variable by candidate set. **Required scope:** `search:read`
Infra > Jobs
/infra/jobsList jobs with optional status, trigger type, and queue filters. Supports cursor-based pagination. Max 500 results per page. **Required scope:** `jobs:read`
/infra/jobsCreate a job. Payload max 256 KB, name max 256 chars, queue max 128 chars, handler/callback_url must be HTTPS public URLs, max_attempts 1-20, timeout 1-30s, priority 1-10. **Cost:** 0.0000018 tokens. **Required scope:** `jobs:write`
/infra/jobs/{job_id}Cancel a pending or scheduled job. Running jobs cannot be cancelled. **Required scope:** `jobs:write`
/infra/jobs/{job_id}Retrieve a single job by ID, including its current status, trigger, and payload. **Required scope:** `jobs:read`
/infra/jobs/{job_id}Update a job's handler, payload, enabled state, or trigger schedule. Only pending or scheduled jobs can be updated. **Required scope:** `jobs:write`
/infra/jobs/{job_id}/ackAcknowledge a claimed job as completed or failed. Only the token that claimed the job can acknowledge it. **Required scope:** `jobs:write`
/infra/jobs/{job_id}/retryRetry a failed or dead job. Resets the job to pending and re-enqueues it. **Required scope:** `jobs:write`
/infra/jobs/{job_id}/runsList execution runs for a job with cursor-based pagination. Max 500 results per page. **Required scope:** `jobs:read`
/infra/jobs/{job_id}/triggerManually trigger a scheduled job to run now. **Cost:** 0.0000018 tokens per execution. **Required scope:** `jobs:write`
/infra/jobs/batchCreate up to 100 jobs. **Cost:** 0.0000018 tokens per job. **Required scope:** `jobs:write`
/infra/jobs/claimClaim up to 10 jobs from a pull queue. Claimed jobs are invisible to other consumers for the visibility timeout period (1-3600 seconds, default 30). **Required scope:** `jobs:write`
Infra > KV
/infra/kvList keys matching an optional prefix. **Cost:** 0.0000008 tokens. **Required scope:** `kv:read`
/infra/kvExecute up to 100 get, set, and/or delete operations in a single request. **Required scope:** `kv:write`
/infra/kv/{key}Remove a key and its value. **Cost:** 0.0000053 tokens per delete. **Required scope:** `kv:write`
/infra/kv/{key}Retrieve the value and metadata for a single key. **Cost:** 0.0000008 tokens per read. **Required scope:** `kv:read`
/infra/kv/{key}Create or overwrite a key-value pair. Key max 512 chars; value max 256 KB serialized. **Cost:** 0.0000053 tokens per write. **Required scope:** `kv:write`
/infra/kv/{key}/incrementIncrement (or decrement) a numeric value. **Cost:** 0.0000053 tokens. **Required scope:** `kv:write`
Infra > Locks
/infra/locks/{key}Inspect whether a lock is currently held. **Cost:** 0.0000008 tokens. **Required scope:** `locks:read`
/infra/locks/{key}/acquireAcquire a distributed lock on an arbitrary key. Lock TTL must be between 1 and 60,000 ms. **Cost:** 0.0000053 tokens. **Required scope:** `locks:write`
/infra/locks/{key}/releaseRelease a lock using the token returned during acquisition. **Cost:** 0.0000053 tokens. **Required scope:** `locks:write`
/infra/locks/{key}/renewExtend a held lock's TTL. TTL must be between 1 and 60,000 ms. **Cost:** 0.0000053 tokens. **Required scope:** `locks:write`
Infra > Media
/infra/media/assetsList media assets for the project. **Cost:** 0.0000004 tokens. **Required scope:** `media:read`
/infra/media/assetsUpload a new media asset. Send raw bytes with Content-Type, or JSON with `file_url` for server-side fetch. Images are uploaded to CF Images for transforms. Videos are uploaded to CF Stream for encoding. Max 100 MB. Cost varies with bytes, media type, and prepaid storage/delivery assumptions. **Required scope:** `media:write`
/infra/media/assets/{assetId}Delete a media asset, its R2 object, CF Images/Stream resource, and all variants. **Cost:** 0.0000004 tokens. **Required scope:** `media:write`
/infra/media/assets/{assetId}Get details of a media asset. **Cost:** 0.0000004 tokens. **Required scope:** `media:read`
/infra/media/assets/{assetId}/transform/imageGenerate a CDN delivery URL with on-the-fly image transformations via CF Images. Cost includes a conservative prepaid allowance for future image deliveries. **Required scope:** `media:write`
/infra/media/assets/{assetId}/transform/videoKick off asynchronous video encoding via CF Stream. The asset status changes to 'processing'. Cost varies with video duration and a conservative prepaid allowance for future delivery minutes. **Required scope:** `media:write`
/infra/media/assets/{assetId}/variantsList all processed variants (transforms, encodes) for an asset. **Cost:** 0.0000004 tokens. **Required scope:** `media:read`
Infra > Sketches
/infra/sketches/cms/{key}/estimateEstimate the frequency of a single item in a Count-Min Sketch. **Cost:** 0.0000008 tokens. **Required scope:** `sketches:read`
/infra/sketches/cms/{key}/incrementIncrement one or more items inside a Count-Min Sketch. **Cost:** 0.0000053 tokens. **Required scope:** `sketches:write`
/infra/sketches/hll/{key}/addAdd one or more elements to a HyperLogLog sketch for approximate unique counting. **Cost:** 0.0000053 tokens. **Required scope:** `sketches:write`
/infra/sketches/hll/{key}/countEstimate the cardinality of a HyperLogLog sketch. **Cost:** 0.0000008 tokens. **Required scope:** `sketches:read`
/infra/sketches/hll/mergeMerge multiple HyperLogLog sketches into a destination key. **Cost:** 0.0000053 tokens. **Required scope:** `sketches:write`
Infra > Storage
/infra/storage/bucketsList all storage buckets for the project. **Cost:** 0.0000004 tokens. **Required scope:** `storage:read`
/infra/storage/bucketsCreate a new storage bucket for the project. **Cost:** 0.0000044 tokens. **Required scope:** `storage:write`
/infra/storage/buckets/{bucketId}Delete a bucket and every object under it. Cost is conservatively prepaid for up to 10,000 objects, then refunded down to the actual delete/list work performed. **Required scope:** `storage:write`
/infra/storage/buckets/{bucketId}Get details of a storage bucket. **Cost:** 0.0000004 tokens. **Required scope:** `storage:read`
/infra/storage/buckets/{bucketId}/objectsList objects in a bucket. **Cost:** 0.0000004 tokens. **Required scope:** `storage:read`
/infra/storage/buckets/{bucketId}/objects/*Delete an object by key. **Cost:** 0.0000004 tokens. **Required scope:** `storage:write`
/infra/storage/buckets/{bucketId}/objects/*Download an object by key. Returns raw bytes with appropriate Content-Type. **Cost:** 0.0000004 tokens. **Required scope:** `storage:read`
/infra/storage/buckets/{bucketId}/objects/*Get metadata for an object without downloading the body. **Cost:** 0.0000004 tokens. **Required scope:** `storage:read`
/infra/storage/buckets/{bucketId}/objects/*Upload or overwrite an object. Send raw bytes with appropriate Content-Type. Max 100 MB. Cost varies with stored bytes and prepaid retention. **Required scope:** `storage:write`
/infra/storage/buckets/{bucketId}/signed-urlGenerate a time-limited signed URL for direct upload or download. The signed URL creation call is billed separately from the eventual upload/download it authorizes. **Required scope:** `storage:write`
/infra/storage/signed/{token}Download an object using a previously issued signed URL token. This route is intentionally public and authenticated entirely by the signed URL path token and query signature. Required query parameters are embedded in the signed URL returned by `POST /infra/storage/buckets/:bucketId/signed-url`.
/infra/storage/signed/{token}Upload an object using a previously issued signed URL token. Send raw bytes in the request body and optionally pass `ct` as a query parameter to lock the content type. This route is intentionally public and authenticated entirely by the signed URL path token and query signature.
Infra > Webhooks
/infra/webhooksList all webhooks for the project. **Cost:** 0.0000008 tokens. **Required scope:** `webhooks:read`
/infra/webhooksRegister a webhook subscription for event topics. Topics: `kv.set`, `kv.delete`, `channels.published`, `jobs.completed`, `jobs.failed`, `jobs.dead`, `logistics.*` (geo/geofence/tracking events), or `*` for all. Supports prefix wildcards (e.g. `jobs.*`). **Required scope:** `webhooks:write`
/infra/webhooks/{webhook_id}Permanently delete a webhook and its delivery history. **Cost:** 0.0000053 tokens. **Required scope:** `webhooks:write`
/infra/webhooks/{webhook_id}Retrieve a single webhook with delivery stats. **Cost:** 0.0000008 tokens. **Required scope:** `webhooks:read`
/infra/webhooks/{webhook_id}Update webhook fields. **Cost:** 0.0000053 tokens. **Required scope:** `webhooks:write`
/infra/webhooks/{webhook_id}/deliveriesPaginated delivery log for a webhook. **Cost:** 0.0000008 tokens. **Required scope:** `webhooks:read`
/infra/webhooks/{webhook_id}/deliveries/{delivery_id}/retryRe-dispatch a failed webhook delivery. **Cost:** 0.0000053 tokens. **Required scope:** `webhooks:write`
/infra/webhooks/{webhook_id}/testSend a test ping to the webhook URL and return the response status. **Cost:** 0.0000053 tokens. **Required scope:** `webhooks:write`
/infra/webhooks/publishPublish a custom event to trigger matching webhooks. Topics must start with `custom.` (e.g. `custom.order.created`). Payload `data` is capped at 64 KB. Base publish cost is charged up front; each downstream delivery attempt is billed separately and varies slightly with payload size. **Required scope:** `webhooks:publish`
Infra > Workflows
/infra/workflows/blueprintsList workflow blueprints for the current project. **Cost:** 0.0000008 tokens. **Required scope:** `workflows:read`
/infra/workflows/blueprintsDefine a workflow DAG on top of Infra Jobs. `payload_template` supports `{{input.*}}`, `{{steps.<id>.output}}`, `{{execution.id}}`, and `{{failure.*}}` placeholders. Workflow steps may use immediate, delayed, queue, or pull jobs. **Cost:** 0.0000053 tokens. **Required scope:** `workflows:write`
/infra/workflows/blueprints/{blueprint_id}/triggerInstantiate a blueprint into a live workflow execution and queue every eligible starting step. **Cost:** 0.0000053 tokens plus standard job-creation charges for each scheduled step. **Required scope:** `workflows:write`
/infra/workflows/executions/{execution_id}Retrieve workflow execution status, step state, and accumulated outputs. **Cost:** 0.0000008 tokens. **Required scope:** `workflows:read`
/infra/workflows/executions/{execution_id}/cancelStop queuing any additional workflow steps. Already running jobs are allowed to finish. **Cost:** 0.0000053 tokens. **Required scope:** `workflows:write`
/infra/workflows/executions/{execution_id}/resumeResume a paused, failed, or cancelled workflow. Provide `step_id` to retry a failed step, and optionally `override_output` to mark that step complete with supplied data instead of re-running it. **Cost:** 0.0000053 tokens plus standard job-creation charges for any re-queued steps. **Required scope:** `workflows:write`
Logistics > ETA Fencing
/logistics/geo/eta-fencesList all ETA fences for the project. **Cost:** 0.0000008 tokens. **Required scope:** `logistics:read`
/logistics/geo/eta-fencesDefine a destination point and time threshold. When a tracked entity's driving ETA drops below the threshold, a `logistics.eta_fence.breach` webhook fires. **Cost:** 0.0000053 tokens. **Required scope:** `logistics:write`
/logistics/geo/eta-fences/{fence_id}Permanently removes an ETA fence. **Required scope:** `logistics:admin`
/logistics/geo/eta-fences/{fence_id}Retrieve a single ETA fence. **Cost:** 0.0000008 tokens. **Required scope:** `logistics:read`
Logistics > Geo
/logistics/geo/entitiesList all geo entities for the project. **Cost:** 0.0000008 tokens. **Required scope:** `logistics:read`
/logistics/geo/entitiesRegister a trackable entity (driver, vehicle, asset, etc.). **Cost:** 0.0000053 tokens. **Required scope:** `logistics:write`
/logistics/geo/entities/{entity_id}Soft-delete an entity by setting status to deactivated. **Required scope:** `logistics:admin`
/logistics/geo/entities/{entity_id}Retrieve a single entity with cached position. **Cost:** 0.0000008 tokens. **Required scope:** `logistics:read`
/logistics/geo/entities/{entity_id}Update entity fields. **Cost:** 0.0000053 tokens. **Required scope:** `logistics:write`
/logistics/geo/entities/nearbyFind entities within a radius of a given point. **Cost:** 0.0000008 tokens. **Required scope:** `logistics:read`
Logistics > Geocoding
/logistics/geocoding/autocompleteLive address suggestions as the user types. **Cost:** 0.0000018 tokens. **Required scope:** `logistics:read`
/logistics/geocoding/forwardConvert an address string to coordinates. **Cost:** 0.0000018 tokens. **Required scope:** `logistics:read`
/logistics/geocoding/reverseConvert coordinates to an address. **Cost:** 0.0000018 tokens. **Required scope:** `logistics:read`
Logistics > Geofencing
/logistics/geo/fencesList all geofences for the project. **Cost:** 0.0000008 tokens. **Required scope:** `logistics:read`
/logistics/geo/fencesDefine a named zone (circle or polygon) for enter/exit detection. **Cost:** 0.0000053 tokens. **Required scope:** `logistics:write`
/logistics/geo/fences/{fence_id}Permanently removes a geofence. **Required scope:** `logistics:admin`
/logistics/geo/fences/{fence_id}Retrieve a single geofence. **Cost:** 0.0000008 tokens. **Required scope:** `logistics:read`
Logistics > Routing
/logistics/routing/dispatchCompute optimal agent-to-task assignment using distance matrix. **Cost:** 0.0000008 tokens per matrix cell. **Required scope:** `logistics:write`
/logistics/routing/distance-matrixGet distances and durations between multiple origins and destinations. **Cost:** 0.0000008 tokens per cell. **Required scope:** `logistics:read`
/logistics/routing/isochroneGet GeoJSON polygons of areas reachable from a point within given time budgets. **Cost:** 0.0000053 tokens. **Required scope:** `logistics:read`
/logistics/routing/optimizeFind the optimal order to visit a set of stops. **Cost:** 0.0000053 tokens per stop. **Required scope:** `logistics:write`
/logistics/routing/routeGet driving directions between two points via Mapbox. **Cost:** 0.0000053 tokens. **Required scope:** `logistics:write`
/logistics/routing/snapCorrect raw GPS coordinates by matching to the road network. **Cost:** 0.0000008 tokens per ping. **Required scope:** `logistics:read`
Logistics > Tracking
/logistics/tracking/{entity_id}/historyRetrieve historical location pings. **Cost:** 0.0000008 tokens. **Required scope:** `logistics:read`
/logistics/tracking/{entity_id}/pingReport an entity's current GPS position. **Cost:** 0.0000008 tokens. **Required scope:** `logistics:track`
/logistics/tracking/{entity_id}/ping/batchSubmit multiple GPS pings at once. **Cost:** 0.0000008 tokens per ping. **Required scope:** `logistics:track`
/logistics/tracking/{entity_id}/trackSubscribe to real-time location updates via WebSocket. Billing: per-minute connection cost. **Required scope:** `logistics:read`
MCP
/.well-known/oauth-protected-resource/mcpPublishes RFC 9728 protected resource metadata for the SaaSignal MCP endpoint. OAuth-capable MCP clients use this document to discover the frontend authorization server, supported scopes, and the MCP setup guide.
/mcpStateless MCP (Model Context Protocol) server over Streamable HTTP. This deployment is POST-only: clients send JSON-RPC 2.0 requests (`initialize`, `tools/list`, `tools/call`) to `POST /mcp`, and `GET /mcp` / `DELETE /mcp` return `405 Method Not Allowed` because SaaSignal does not provide a standalone SSE session transport. **Primary authentication:** Browser-based OAuth 2.1 / MCP authorization flow. OAuth-capable MCP clients can connect with just the server URL, discover `/.well-known/oauth-protected-resource/mcp`, open the frontend authorization flow in a browser, and then call `/mcp` with the JWT bearer token. OAuth tokens are user-level and grant access across all organizations the user belongs to. **Manual fallback:** Existing project API keys (`sk_live_…`) still work in the `Authorization: Bearer <key>` header for clients that do not support browser authorization. If `X-Project-Id` is provided, it is enforced for all tool calls. Otherwise, each tool call must include `project_id` unless the credential is already project-scoped. **Agent onboarding:** Call `saasignal_surface_map` or `saasignal_skill` first when you want the broader platform map before planning. **Automatic route exposure:** MCP now auto-registers a tool for each documented HTTP operation using its OpenAPI `operationId`. If you add a new Hono route with `describeRoute(...)` and a stable `operationId`, it becomes available through `tools/list` automatically after deploy. **Legacy aliases:** Existing operational aliases like `kv_get`, `channel_publish`, and `job_create` remain available for compatibility, but the canonical generated tool names follow the HTTP `operationId` values such as `listProjects`, `storageListBuckets`, or `logisticsGeoCreate`. **Response model:** Generated MCP route tools proxy the real HTTP handlers. They return the HTTP status, response headers, content type, and parsed body so validation, billing, side effects, and auth stay aligned with the underlying route. Streaming responses are returned as previews or connection metadata instead of long-lived sockets. All write operations are metered via token-based billing. Rate limits apply per organization plan.
Meta
/Returns an AI-first landing page. Serves semantic HTML to browsers and markdown documentation to agents that send `Accept: text/markdown`.
/.well-known/oauth-protected-resourcePublishes RFC 9728 protected resource metadata for the SaaSignal HTTP API. OAuth-capable SDKs and CLIs use this document to discover the frontend authorization server, supported scopes, and the primary API setup guide.
/api/openapi.jsonReturns the full OpenAPI 3.1.0 JSON specification for the SaaSignal API. Includes all route definitions, request/response schemas, authentication requirements, and tag descriptions. Use this spec to generate client SDKs, import into tools like Postman or Insomnia, or feed into code-generation pipelines.
/healthzCombined health endpoint — returns liveness status together with dependency checks (database connectivity). Responds 200 when all systems are healthy, 503 when any dependency is degraded. Equivalent to running both `/livez` and `/readyz` in a single call.
/livezLiveness check — returns 200 if the worker is alive and accepting HTTP requests. Does not verify downstream dependencies. Use `/readyz` for a deeper check.
/llms-full.txtReturns a token-optimized compact representation of the API (~60-75% smaller than raw OpenAPI JSON). Designed for LLM agents and AI tools. Supports HEAD requests to check token cost via `X-Markdown-Tokens` response header before downloading the full body. Responses include ETag for conditional requests (If-None-Match → 304).
/llms.txtReturns a spec-compliant llmstxt.org index linking to deeper resources: the full LLM-optimized API reference (`/llms-full.txt`), agent skill, OpenAPI spec, human-readable docs, MCP endpoint, and SDK/CLI references. Responses include ETag for conditional requests (If-None-Match → 304).
/readyzReadiness check — verifies the worker can reach its database (D1). Returns 200 when all dependencies are healthy, or 503 when degraded. Use `/livez` for a lightweight liveness-only check.
/robots.txtRobots exclusion protocol file. Serves a permissive policy that allows all user-agents to crawl public meta endpoints. Includes a Sitemap directive pointing to /sitemap.xml for automated URL discovery.
/scalarInteractive API reference powered by Scalar. Renders the OpenAPI specification as a browsable UI.
/sitemap.xmlSitemaps protocol file listing all publicly accessible meta endpoints with changefreq and priority hints. Referenced by the Sitemap directive in /robots.txt.
/skills/saasignalReturns the canonical SaaSignal agent skill as markdown. Use this when an agent needs a guided playbook for choosing between MCP, REST, the SDK, and the CLI, including current MCP coverage and common scope boundaries. Supports HEAD requests to inspect `X-Markdown-Tokens` before downloading the body. Responses include ETag for conditional requests (`If-None-Match` → 304).
/to-humans.mdReturns comprehensive markdown documentation with table of contents, authentication guide, parameter tables, and response schemas. Suitable for rendering in any markdown viewer or importing into documentation platforms. Responses include ETag for conditional requests (If-None-Match → 304).
Modules > Booking > Analytics
/modules/booking/analytics/by-periodBooking metrics grouped by time period. **Required scope:** `booking:read`
/modules/booking/analytics/by-resourceBooking metrics grouped by resource. **Required scope:** `booking:read`
/modules/booking/analytics/summaryAggregate booking metrics. **Required scope:** `booking:read`
Modules > Booking > Availability
/modules/booking/resources/{resource_id}/availabilityGet all availability rules for a resource. **Required scope:** `booking:read`
/modules/booking/resources/{resource_id}/availabilityReplace all availability rules for a resource. **Required scope:** `booking:write`
/modules/booking/resources/{resource_id}/slotsCompute available booking slots for a date. **Required scope:** `booking:read`
Modules > Booking > Blockers
/modules/booking/blockersList time blockers. **Required scope:** `booking:read`
/modules/booking/blockersBlock a time range on a resource. **Required scope:** `booking:write`
/modules/booking/blockers/{blocker_id}Remove a time blocker. **Required scope:** `booking:write`
Modules > Booking > Bookings
/modules/booking/bookingsList bookings. **Required scope:** `booking:read`
/modules/booking/bookingsCreate a new booking. **Required scope:** `booking:write`
/modules/booking/bookings/{booking_id}Delete a pending/cancelled booking. **Required scope:** `booking:admin`
/modules/booking/bookings/{booking_id}Retrieve a single booking with recent events. **Required scope:** `booking:read`
/modules/booking/bookings/{booking_id}Update a pending/confirmed booking. **Required scope:** `booking:write`
/modules/booking/bookings/{booking_id}/eventsList audit events for a booking. **Required scope:** `booking:read`
/modules/booking/bookings/{booking_id}/transitionTransition booking to a new status. Valid transitions: pending→[confirmed,cancelled], confirmed→[checked_in,cancelled,no_show], checked_in→[completed]. **Required scope:** `booking:write`
Modules > Booking > Customers
/modules/booking/customersList booking customers. **Required scope:** `booking:read`
/modules/booking/customersCreate a new booking customer. **Required scope:** `booking:write`
/modules/booking/customers/{customer_id}Permanently remove a booking customer. **Required scope:** `booking:admin`
/modules/booking/customers/{customer_id}Retrieve a single booking customer. **Required scope:** `booking:read`
/modules/booking/customers/{customer_id}Update a booking customer. **Required scope:** `booking:write`
Modules > Booking > Export
/modules/booking/export/bookingsExport bookings as JSON or CSV. **Required scope:** `booking:admin`
/modules/booking/export/customersExport booking customers as JSON or CSV. **Required scope:** `booking:admin`
/modules/booking/export/resourcesExport booking resources as JSON or CSV. **Required scope:** `booking:admin`
Modules > Booking > Resources
/modules/booking/resourcesList bookable resources. **Required scope:** `booking:read`
/modules/booking/resourcesCreate a bookable resource. **Required scope:** `booking:write`
/modules/booking/resources/{resource_id}Permanently remove a resource. **Required scope:** `booking:admin`
/modules/booking/resources/{resource_id}Retrieve a single resource. **Required scope:** `booking:read`
/modules/booking/resources/{resource_id}Update a bookable resource. **Required scope:** `booking:write`
Modules > Booking > Settings
/modules/booking/settingsGet or create default booking settings. **Required scope:** `booking:read`
/modules/booking/settingsUpdate booking settings. **Required scope:** `booking:admin`
Modules > Booking > Webhooks
/modules/booking/webhooksList webhooks filtered to booking.* topics. **Required scope:** `booking:read`
/modules/booking/webhooksRegister a webhook for booking event topics. **Required scope:** `booking:write`
Modules > Commerce > Analytics
/modules/commerce/analytics/revenueRevenue grouped by time period. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/analytics/summaryAggregate commerce metrics. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/analytics/top-productsTop products by units sold and revenue. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
Modules > Commerce > Carts
/modules/commerce/cartsCreate a new shopping cart. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/carts/{cart_id}Retrieve a cart with items. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/carts/{cart_id}/checkoutConvert a cart into an order. **Cost:** 0.0000106 tokens. **Required scope:** `commerce:write`
/modules/commerce/carts/{cart_id}/discountRemove a discount code from a cart. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/carts/{cart_id}/discountApply a discount code to a cart. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/carts/{cart_id}/itemsAdd an item to a cart. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/carts/{cart_id}/items/{item_id}Remove an item from a cart. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/carts/{cart_id}/items/{item_id}Update the quantity of a cart item. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
Modules > Commerce > Catalogs
/modules/commerce/catalogsList product catalogs. **Required scope:** `commerce:read`
/modules/commerce/catalogsCreate a new product catalog. **Required scope:** `commerce:write`
/modules/commerce/catalogs/{catalog_id}Permanently remove a catalog. **Required scope:** `commerce:admin`
/modules/commerce/catalogs/{catalog_id}Retrieve a single catalog. **Required scope:** `commerce:read`
/modules/commerce/catalogs/{catalog_id}Update a product catalog. **Required scope:** `commerce:write`
Modules > Commerce > Categories
/modules/commerce/categoriesList product categories. **Required scope:** `commerce:read`
/modules/commerce/categoriesCreate a new product category. **Required scope:** `commerce:write`
/modules/commerce/categories/{category_id}Permanently remove a category. **Required scope:** `commerce:admin`
/modules/commerce/categories/{category_id}Retrieve a single category. **Required scope:** `commerce:read`
/modules/commerce/categories/{category_id}Update a product category. **Required scope:** `commerce:write`
/modules/commerce/categories/{category_id}/treeRetrieve a category with its full subtree of children. **Required scope:** `commerce:read`
Modules > Commerce > Customers
/modules/commerce/customersList commerce customers. **Required scope:** `commerce:read`
/modules/commerce/customersCreate a new commerce customer. **Required scope:** `commerce:write`
/modules/commerce/customers/{customer_id}Permanently remove a customer. **Required scope:** `commerce:admin`
/modules/commerce/customers/{customer_id}Retrieve a single customer. **Required scope:** `commerce:read`
/modules/commerce/customers/{customer_id}Update a commerce customer. **Required scope:** `commerce:write`
/modules/commerce/customers/{customer_id}/addressesList addresses for a customer. **Required scope:** `commerce:read`
/modules/commerce/customers/{customer_id}/addressesAdd an address to a customer. **Required scope:** `commerce:write`
/modules/commerce/customers/{customer_id}/addresses/{address_id}Remove an address from a customer. **Required scope:** `commerce:write`
Modules > Commerce > Discounts
/modules/commerce/discountsList discount codes. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/discountsCreate a new discount code. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/discounts/{discount_id}Permanently remove a discount. **Required scope:** `commerce:admin`
/modules/commerce/discounts/{discount_id}Retrieve a single discount. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/discounts/{discount_id}Update a discount code. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/discounts/validateValidate whether a discount code is applicable. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
Modules > Commerce > Export
/modules/commerce/export/customersExport customers as JSON or CSV. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:admin`
/modules/commerce/export/ordersExport orders as JSON or CSV. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:admin`
/modules/commerce/export/productsExport products as JSON or CSV. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:admin`
Modules > Commerce > Inventory
/modules/commerce/inventoryList inventory records. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/inventory/{inventory_id}Retrieve a single inventory record. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/inventory/{inventory_id}Update inventory quantity or incoming. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/inventory/{inventory_id}/adjustAdjust inventory by a delta amount. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
Modules > Commerce > Orders
/modules/commerce/ordersList commerce orders. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/orders/{order_id}Permanently remove a pending or cancelled order. **Required scope:** `commerce:admin`
/modules/commerce/orders/{order_id}Retrieve a single order with items, payments, and recent events. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/orders/{order_id}Update order addresses, notes, or metadata. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/orders/{order_id}/eventsList events for an order. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/orders/{order_id}/transitionTransition an order to a new status. **Cost:** 0.0000106 tokens. **Required scope:** `commerce:write`
Modules > Commerce > Payments
/modules/commerce/orders/{order_id}/paymentsList payments for an order. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/orders/{order_id}/paymentsCreate a payment for an order. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/orders/{order_id}/payments/{payment_id}Retrieve a single payment. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/orders/{order_id}/payments/{payment_id}/transitionTransition a payment to a new status. **Cost:** 0.0000106 tokens. **Required scope:** `commerce:write`
Modules > Commerce > Products
/modules/commerce/productsList products with optional filters. **Required scope:** `commerce:read`
/modules/commerce/productsCreate a new product. **Required scope:** `commerce:write`
/modules/commerce/products/{product_id}Permanently remove a product. **Required scope:** `commerce:admin`
/modules/commerce/products/{product_id}Retrieve a single product. **Required scope:** `commerce:read`
/modules/commerce/products/{product_id}Update a product. **Required scope:** `commerce:write`
Modules > Commerce > Reviews
/modules/commerce/reviewsList product reviews. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/reviewsCreate a product review. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
/modules/commerce/reviews/{review_id}Permanently remove a review. **Required scope:** `commerce:admin`
/modules/commerce/reviews/{review_id}Retrieve a single review. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/reviews/{review_id}/transitionTransition review moderation status. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:admin`
Modules > Commerce > Settings
/modules/commerce/settingsGet or create default commerce settings. **Required scope:** `commerce:read`
/modules/commerce/settingsUpdate commerce settings. **Required scope:** `commerce:admin`
Modules > Commerce > Variants
/modules/commerce/products/{product_id}/variantsList variants for a product. **Required scope:** `commerce:read`
/modules/commerce/products/{product_id}/variantsCreate a new product variant. **Required scope:** `commerce:write`
/modules/commerce/products/{product_id}/variants/{variant_id}Permanently remove a variant. **Required scope:** `commerce:admin`
/modules/commerce/products/{product_id}/variants/{variant_id}Retrieve a single variant. **Required scope:** `commerce:read`
/modules/commerce/products/{product_id}/variants/{variant_id}Update a product variant. **Required scope:** `commerce:write`
Modules > Commerce > Webhooks
/modules/commerce/webhooksList webhooks filtered to commerce.* topics. **Cost:** 0.0000008 tokens. **Required scope:** `commerce:read`
/modules/commerce/webhooksRegister a webhook for commerce event topics. **Cost:** 0.0000053 tokens. **Required scope:** `commerce:write`
Modules > Delivery > Analytics
/modules/delivery/analytics/driversPer-driver delivery metrics. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/analytics/summaryAggregate delivery metrics. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
Modules > Delivery > Customers
/modules/delivery/customersList delivery customers. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/customersCreate a new delivery customer. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/customers/{customer_id}Permanently remove a customer. **Required scope:** `delivery:admin`
/modules/delivery/customers/{customer_id}Retrieve a single customer. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/customers/{customer_id}Update a delivery customer. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/customers/{customer_id}/addressesList addresses for a customer. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/customers/{customer_id}/addressesAdd an address to a customer. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/customers/{customer_id}/addresses/{address_id}Remove an address from a customer. **Required scope:** `delivery:write`
Modules > Delivery > Dispatch
/modules/delivery/dispatch/auto-assignAutomatically assign the best available driver to an order. **Cost:** 0.0000160 tokens. **Required scope:** `delivery:write`
/modules/delivery/dispatch/suggestSuggest the best nearby available drivers for an order. **Cost:** 0.0000160 tokens. **Required scope:** `delivery:write`
Modules > Delivery > Dispatch Rules
/modules/delivery/auto-dispatchEvaluate dispatch rules for an order and assign the best available driver based on the matched rule's strategy. Falls back to nearest-driver if no rules match. **Cost:** 0.0000160 tokens. **Required scope:** `delivery:write`
/modules/delivery/dispatch-rulesList all dispatch rules for the project, ordered by priority. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/dispatch-rulesCreate a priority-ordered dispatch rule with zone/time conditions and driver selection strategy. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:admin`
/modules/delivery/dispatch-rules/{rule_id}Delete a dispatch rule. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:admin`
/modules/delivery/dispatch-rules/{rule_id}Get a single dispatch rule by ID. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/dispatch-rules/{rule_id}Update a dispatch rule's conditions, action, priority, or toggle enabled state. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:admin`
/modules/delivery/dispatch-rules/evaluateTest which rule would fire for given coordinates and time without performing any assignment. **Cost:** 0.0000160 tokens. **Required scope:** `delivery:write`
Modules > Delivery > Drivers
/modules/delivery/driversList delivery drivers for the active project, with optional status and cursor filters. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/driversCreate a new delivery driver. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/drivers/{driver_id}Permanently remove a driver. **Required scope:** `delivery:admin`
/modules/delivery/drivers/{driver_id}Retrieve a single driver. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/drivers/{driver_id}Update a delivery driver. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/drivers/{driver_id}/offlineSet driver status to offline. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:track`
/modules/delivery/drivers/{driver_id}/onlineSet driver status to online. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:track`
Modules > Delivery > ETA Fences
/modules/delivery/eta-fencesList all ETA fences for the project. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/eta-fencesDefine a destination point and time threshold for delivery ETA monitoring. When a tracked entity's driving ETA drops below the threshold, a `logistics.eta_fence.breach` webhook fires. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/eta-fences/{fence_id}Permanently removes an ETA fence. **Required scope:** `delivery:admin`
/modules/delivery/eta-fences/{fence_id}Retrieve a single ETA fence. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
Modules > Delivery > Export
/modules/delivery/export/ordersExport orders as JSON or CSV. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:admin`
Modules > Delivery > Hubs
/modules/delivery/hubsList all delivery hubs. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/hubsCreate a delivery hub. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/hubs/{hub_id}Permanently remove a delivery hub. **Required scope:** `delivery:admin`
/modules/delivery/hubs/{hub_id}Retrieve a single delivery hub. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/hubs/{hub_id}Update delivery hub fields. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
Modules > Delivery > Notifications
/modules/delivery/notificationsList all notification configs for the project. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:admin`
/modules/delivery/notificationsInsert or update a notification config by project + event. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:admin`
Modules > Delivery > Orders
/modules/delivery/ordersList delivery orders. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/ordersCreate a new delivery order with optional pickup, dropoff, scheduling, and assignment fields. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/orders/{order_id}Permanently remove an order. **Required scope:** `delivery:admin`
/modules/delivery/orders/{order_id}Retrieve a single order. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/orders/{order_id}Update a delivery order. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/orders/{order_id}/eventsList events for an order. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/orders/{order_id}/proofList all proof records for an order. Photo proofs include signed URLs. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/orders/{order_id}/proofSubmit proof of delivery for an order. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:track`
/modules/delivery/orders/{order_id}/proof/{proof_id}Delete a proof record and its associated file. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/orders/{order_id}/proof/{proof_id}Retrieve a single proof record. Photo proofs include a signed URL. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/orders/{order_id}/proof/photoUpload a photo file as delivery proof. Send raw image bytes with appropriate Content-Type header. Max 10 MB. **Cost:** 0.0000044 tokens. **Required scope:** `delivery:track`
/modules/delivery/orders/{order_id}/transitionTransition an order to a new status. **Cost:** 0.0000106 tokens. **Required scope:** `delivery:write`
Modules > Delivery > Settings
/modules/delivery/settingsGet or create default delivery settings. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/settingsUpdate delivery settings. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:admin`
Modules > Delivery > Stops
/modules/delivery/orders/{order_id}/stopsList all stops for an order. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/orders/{order_id}/stopsAdd a stop to an order. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/stops/{stop_id}Permanently remove a stop. **Required scope:** `delivery:write`
/modules/delivery/stops/{stop_id}Retrieve a single stop. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/stops/{stop_id}Update a delivery stop. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/stops/{stop_id}/arriveMark a stop as arrived. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:track`
/modules/delivery/stops/{stop_id}/completeMark a stop as completed. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:track`
/modules/delivery/stops/{stop_id}/skipSkip a stop. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:track`
Modules > Delivery > Tracking
/modules/delivery/tracking-linksGenerate short-lived public tracking tokens for a delivery order. Returns embeddable customer and driver tracking page URLs. **Cost:** 0.0000160 tokens. **Required scope:** `delivery:write`
/modules/delivery/tracking-links/{link_id}Revoke a tracking link, invalidating both customer and driver tokens. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/tracking-links/{token}Public endpoint — resolves a tracking token to its associated channel and role. No authentication required.
/modules/delivery/tracking-pages/customer/{token}Render the public customer-facing delivery tracking page for a tracking token. Returns HTML that embeds live order updates, proof history, and customer rating submission. This route is intentionally public and authenticated by the signed tracking token in the URL.
/modules/delivery/tracking-pages/customer/{token}/feedLoad the initial JSON payload for a customer tracking page, including order status, delivery proofs, and any submitted rating. This route is public and authenticated by the tracking token in the URL.
/modules/delivery/tracking-pages/customer/{token}/ratingSubmit or update a customer rating from the public tracking page after an order is delivered. This route is public and authenticated by the tracking token in the URL.
/modules/delivery/tracking-pages/driver/{token}Render the public driver-facing delivery tracking page for a tracking token. Returns HTML used by couriers to send location pings and upload proof. This route is intentionally public and authenticated by the signed tracking token in the URL.
/modules/delivery/tracking-pages/driver/{token}/pingPublish a live driver location update from the public driver tracking page. This route is public and authenticated by the tracking token in the URL.
/modules/delivery/tracking-pages/driver/{token}/proof/commentSubmit text-only proof from the public driver tracking page. This route is public and authenticated by the tracking token in the URL.
/modules/delivery/tracking-pages/driver/{token}/proof/photoUpload delivery proof directly from the public driver tracking page using multipart form data. Expected fields: `file` (required image file), optional `comment`, `lat`, and `lng`. This route is public and authenticated by the tracking token in the URL.
/modules/delivery/tracking-pages/subscribe/{token}Open a public Server-Sent Events stream for a delivery tracking token. Use this from customer and driver tracking pages to receive live order, proof, and location updates without any bearer token. If reconnecting, pass `last_event_id` to resume from the previous event cursor.
Modules > Delivery > Vehicles
/modules/delivery/vehiclesList delivery vehicles. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/vehiclesCreate a new delivery vehicle. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/vehicles/{vehicle_id}Permanently remove a vehicle. **Required scope:** `delivery:admin`
/modules/delivery/vehicles/{vehicle_id}Retrieve a single vehicle. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/vehicles/{vehicle_id}Update a delivery vehicle. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
Modules > Delivery > Webhooks
/modules/delivery/webhooksList webhooks filtered to delivery.* topics. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/webhooksRegister a webhook for delivery event topics. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
Modules > Delivery > Zones
/modules/delivery/zonesList all delivery zones. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/zonesCreate a delivery zone with optional geofence. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
/modules/delivery/zones/{zone_id}Permanently remove a delivery zone. **Required scope:** `delivery:admin`
/modules/delivery/zones/{zone_id}Retrieve a single delivery zone. **Cost:** 0.0000008 tokens. **Required scope:** `delivery:read`
/modules/delivery/zones/{zone_id}Update delivery zone fields. **Cost:** 0.0000053 tokens. **Required scope:** `delivery:write`
Modules > Messaging > Analytics
/modules/messaging/analytics/by-conversationMessaging metrics grouped by conversation. **Required scope:** `messaging:read`
/modules/messaging/analytics/by-periodMessaging metrics grouped by time period. **Required scope:** `messaging:read`
/modules/messaging/analytics/summaryAggregate messaging metrics. **Required scope:** `messaging:read`
Modules > Messaging > Conversations
/modules/messaging/conversationsList conversations. **Required scope:** `messaging:read`
/modules/messaging/conversationsCreate a new conversation. **Required scope:** `messaging:write`
/modules/messaging/conversations/{conversation_id}Delete a conversation. **Required scope:** `messaging:admin`
/modules/messaging/conversations/{conversation_id}Retrieve a single conversation. **Required scope:** `messaging:read`
/modules/messaging/conversations/{conversation_id}Update a conversation. **Required scope:** `messaging:write`
/modules/messaging/conversations/{conversation_id}/archiveArchive a conversation. **Required scope:** `messaging:write`
/modules/messaging/conversations/{conversation_id}/closeClose a conversation. **Required scope:** `messaging:write`
/modules/messaging/conversations/{conversation_id}/reopenReopen a closed or archived conversation. **Required scope:** `messaging:write`
Modules > Messaging > Export
/modules/messaging/export/conversationsExport conversations as JSON or CSV. **Required scope:** `messaging:admin`
/modules/messaging/export/messagesExport messages as JSON or CSV. **Required scope:** `messaging:admin`
Modules > Messaging > Messages
/modules/messaging/conversations/{conversation_id}/messagesList messages in a conversation. **Required scope:** `messaging:read`
/modules/messaging/conversations/{conversation_id}/messagesSend a message to a conversation. **Required scope:** `messaging:write`
/modules/messaging/conversations/{conversation_id}/messages/{message_id}Soft-delete a message. **Required scope:** `messaging:write`
/modules/messaging/conversations/{conversation_id}/messages/{message_id}Retrieve a single message. **Required scope:** `messaging:read`
/modules/messaging/conversations/{conversation_id}/messages/{message_id}Edit a message body. **Required scope:** `messaging:write`
Modules > Messaging > Participants
/modules/messaging/conversations/{conversation_id}/participantsList participants of a conversation. **Required scope:** `messaging:read`
/modules/messaging/conversations/{conversation_id}/participantsAdd a participant to a conversation. **Required scope:** `messaging:write`
/modules/messaging/conversations/{conversation_id}/participants/{participant_id}Remove a participant from a conversation. **Required scope:** `messaging:write`
/modules/messaging/conversations/{conversation_id}/participants/{participant_id}Update a participant in a conversation. **Required scope:** `messaging:write`
Modules > Messaging > Reactions
/modules/messaging/messages/{message_id}/reactionsAdd a reaction to a message. **Required scope:** `messaging:write`
/modules/messaging/messages/{message_id}/reactions/{reaction_id}Remove a reaction from a message. **Required scope:** `messaging:write`
Modules > Messaging > Settings
/modules/messaging/settingsGet or create default messaging settings. **Required scope:** `messaging:read`
/modules/messaging/settingsUpdate messaging settings. **Required scope:** `messaging:admin`
Modules > Messaging > Webhooks
/modules/messaging/webhooksList webhooks filtered to messaging.* topics. **Required scope:** `messaging:read`
/modules/messaging/webhooksRegister a webhook for messaging event topics. **Required scope:** `messaging:write`