Search docs ⌘K
esc
Type to search across all documentation pages
Delivery

Delivery Operations

Dispatch, analytics, export, notifications, and webhook management for delivery operations.

Dispatch

Auto-assign drivers and get suggestions for optimal driver matches.

Suggest drivers for an order

POST
/modules/delivery/dispatch/suggest
delivery:write0.0000160 tokens

Suggest the best nearby available drivers for an order.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/dispatch/suggest \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"order_id":"..."}'
json — 200 OK
{ "status": "ok" }
typescript
const suggestions = await ss.delivery.dispatch.suggest({
  order_id: 'ord_01',
  limit: 5,
})
  1. Open Delivery and go to Orders
  2. Click on an unassigned order, then click Suggest Drivers
  3. Review the ranked driver suggestions
Body field
Type
Description
order_id required
string
radius_km
number
range ≥0.1 .. ≤100
limit
integer
range ≥1 .. ≤50
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Auto-assign a driver to an order

POST
/modules/delivery/dispatch/auto-assign
delivery:write0.0000160 tokens

Automatically assign the best available driver to an order.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/dispatch/auto-assign \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"order_id":"..."}'
json — 200 OK
{ "status": "ok" }
typescript
const result = await ss.delivery.dispatch.autoAssign({
  order_ids: ['ord_01', 'ord_02', 'ord_03'],
})
  1. Open Delivery and go to Orders
  2. Select multiple unassigned orders, then click Auto-Assign
Body field
Type
Description
order_id required
string
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Dispatch Rules

Configure priority-ordered auto-dispatch rules with zone, time window, and radius conditions.

Create a dispatch rule

POST
/modules/delivery/dispatch-rules
delivery:admin0.0000053 tokens

Create a priority-ordered dispatch rule with zone/time conditions and driver selection strategy.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/dispatch-rules \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"name":"example","priority":1,"conditions":{},"action":{}}'
json — 201 Created
{ "status": "ok" }
typescript
const rule = await ss.delivery.dispatchRules.create({
  name: 'Night Shift',
  priority: 1,
  conditions: { time_window: { start: '22:00', end: '06:00' } },
  action: { strategy: 'round_robin', fallback: 'queue' },
})
  1. Open Delivery and go to Dispatch Rules
  2. Click Add Rule
  3. Configure the rule name, priority, conditions (zones, time windows, radius), and dispatch strategy, then click Save
Body field
Type
Description
name required
string
1–128 chars
priority required
integer
range ≥0 .. ≤1000
conditions required
object
action required
object
enabled
boolean
metadata
any JSON
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

List dispatch rules

GET
/modules/delivery/dispatch-rules
delivery:read0.0000008 tokens

List all dispatch rules for the project, ordered by priority.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/dispatch-rules \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
const { rules } = await ss.delivery.dispatchRules.list()
  1. Open Delivery and go to Dispatch Rules
  2. Browse the list of dispatch rules ordered by priority
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Get a dispatch rule

GET
/modules/delivery/dispatch-rules/{rule_id}
delivery:read0.0000008 tokens

Get a single dispatch rule by ID.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/dispatch-rules/{rule_id} \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
const rule = await ss.delivery.dispatchRules.get('ddr_01')
  1. Open Delivery and go to Dispatch Rules
  2. Click on a rule to view its details
Path param
Type
Description
rule_id required
string
Error responses
401 Unauthorized
402 Insufficient tokens
404 Not found
429 Rate limited

Update a dispatch rule

PATCH
/modules/delivery/dispatch-rules/{rule_id}
delivery:admin0.0000053 tokens

Update a dispatch rule's conditions, action, priority, or toggle enabled state.

curl
curl -X PATCH https://api.saasignal.saastemly.com/modules/delivery/dispatch-rules/{rule_id} \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{}'
json — 200 OK
{ "status": "ok" }
typescript
const updated = await ss.delivery.dispatchRules.update('ddr_01', {
  enabled: false,
})
  1. Open Delivery and go to Dispatch Rules
  2. Click on a rule, edit the fields, then click Save
Path param
Type
Description
rule_id required
string
Body field
Type
Description
name
string
1–128 chars
priority
integer
range ≥0 .. ≤1000
conditions
object
action
object
enabled
boolean
metadata
any JSON
Error responses
401 Unauthorized
402 Insufficient tokens
404 Not found
429 Rate limited

Delete a dispatch rule

DELETE
/modules/delivery/dispatch-rules/{rule_id}
delivery:admin0.0000053 tokens

Delete a dispatch rule.

curl
curl -X DELETE https://api.saasignal.saastemly.com/modules/delivery/dispatch-rules/{rule_id} \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
await ss.delivery.dispatchRules.delete('ddr_01')
  1. Open Delivery and go to Dispatch Rules
  2. Click the delete icon next to a rule, then confirm
Path param
Type
Description
rule_id required
string
Error responses
401 Unauthorized
402 Insufficient tokens
404 Not found
429 Rate limited

Evaluate dispatch rules (dry-run)

POST
/modules/delivery/dispatch-rules/evaluate
delivery:write0.0000160 tokens

Test which rule would fire for given coordinates and time without performing any assignment.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/dispatch-rules/evaluate \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"lat":1,"lng":1}'
json — 200 OK
{ "status": "ok" }
typescript
const result = await ss.delivery.dispatchRules.evaluate({
  lat: 40.7128,
  lng: -74.0060,
})
  1. Open Delivery and go to Dispatch Rules
  2. Use the Evaluate tool to test which rule matches for a given location and time
Body field
Type
Description
lat required
number
range ≥-90 .. ≤90
lng required
number
range ≥-180 .. ≤180
time
string (ISO 8601)
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Auto-dispatch an order using rules

POST
/modules/delivery/auto-dispatch
delivery:write0.0000160 tokens

Evaluate 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.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/auto-dispatch \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"order_id":"..."}'
json — 200 OK
{ "status": "ok" }
typescript
const result = await ss.delivery.dispatchRules.autoDispatch({
  order_id: 'ord_01',
})
  1. Open Delivery and go to Orders
  2. Click on an unassigned order, then click Auto-Dispatch to trigger rules-based driver assignment
Body field
Type
Description
order_id required
string
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Tracking Pages

Public customer and driver tracking routes, plus SSE updates and proof submission flows.

Render Customer Tracking Page

GET
/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.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/tracking-pages/customer/{token} \
  -H "Authorization: Bearer <session_token>"
json — 200 OK
{ "status": "ok" }
typescript
const html = await ss.delivery.trackingPages.customerPage('trk_c_abc123')
  1. Open Delivery, generate a tracking link for an order, then copy the customer URL
  2. Paste the URL into a new tab to verify the public customer experience end-to-end
  3. Or use API Console to fetch the raw HTML route directly from the browser
Path param
Type
Description
token required
string
Customer tracking token from a generated tracking link
Error responses
404 Invalid, expired, or unknown tracking link

Load Customer Tracking Feed

GET
/modules/delivery/tracking-pages/customer/{token}/feed

Load 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.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/tracking-pages/customer/{token}/feed \
  -H "Authorization: Bearer <session_token>"
json — 200 OK
{ "status": "ok" }
typescript
const feed = await ss.delivery.trackingPages.customerFeed('trk_c_abc123')
  1. Use API Console to call this public JSON feed with a customer tracking token
  2. Inspect the order snapshot, proof records, and rating data that power the public tracking page
Path param
Type
Description
token required
string
Customer tracking token
Error responses
401 Unauthorized
404 Not found

Submit Customer Rating

POST
/modules/delivery/tracking-pages/customer/{token}/rating

Submit 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.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/tracking-pages/customer/{token}/rating \
  -H "Authorization: Bearer <session_token>" \
  -H "Content-Type: application/json" \
  -d '{"score":1}'
json — 201 Created
{ "status": "ok" }
typescript
await ss.delivery.trackingPages.rate('trk_c_abc123', { score: 5, comment: 'Right on time' })
  1. Generate a tracking link for a delivered order in Delivery
  2. Open the customer tracking page and submit a rating through the public UI, or send the JSON payload from API Console
Path param
Type
Description
token required
string
Customer tracking token
Body field
Type
Description
score required
integer
Star rating from 1 to 5
range ≥1 .. ≤5
comment
string
Optional rating comment (max 1000 chars)
max 1000 chars
Error responses
400 Bad request
401 Unauthorized
404 Not found

Render Driver Tracking Page

GET
/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.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/tracking-pages/driver/{token} \
  -H "Authorization: Bearer <session_token>"
json — 200 OK
{ "status": "ok" }
typescript
const html = await ss.delivery.trackingPages.driverPage('trk_d_abc123')
  1. Open Delivery, generate a tracking link, then copy the driver URL
  2. Open the driver URL in a new tab to validate the public courier workflow, including ping and proof actions
Path param
Type
Description
token required
string
Driver tracking token from a generated tracking link
Error responses
404 Invalid, expired, or unknown tracking link

Send Driver Tracking Ping

POST
/modules/delivery/tracking-pages/driver/{token}/ping

Publish a live driver location update from the public driver tracking page. This route is public and authenticated by the tracking token in the URL.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/tracking-pages/driver/{token}/ping \
  -H "Authorization: Bearer <session_token>" \
  -H "Content-Type: application/json" \
  -d '{"lat":1,"lng":1}'
json — 200 OK
{ "status": "ok" }
typescript
await ss.delivery.trackingPages.ping('trk_d_abc123', { lat: 51.5072, lng: -0.1276 })
  1. Open the public driver tracking page in a browser to send live location updates
  2. Or use API Console with the driver token to test the public JSON endpoint directly
Path param
Type
Description
token required
string
Driver tracking token
Body field
Type
Description
lat required
number
Latitude
lng required
number
Longitude
Error responses
400 Bad request
401 Unauthorized

Upload Driver Photo Proof

POST
/modules/delivery/tracking-pages/driver/{token}/proof/photo

Upload 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.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/tracking-pages/driver/{token}/proof/photo \
  -H "Authorization: Bearer <session_token>" \
  -H "Content-Type: application/json" \
  -d '{"file":"..."}'
json — 201 Created
{ "status": "ok" }
typescript
await ss.delivery.trackingPages.uploadPhotoProof('trk_d_abc123', file, { fileName: 'dropoff.jpg', comment: 'Left at reception' })
  1. Open the public driver tracking page and upload a proof photo from the courier UI
  2. Or use API Console in form mode to send multipart proof uploads from Chrome
Path param
Type
Description
token required
string
Driver tracking token
Body field
Type
Description
file required
binary
Image file to upload as proof
comment
string
Optional comment saved alongside the proof
lat
number
Latitude where the proof was captured
lng
number
Longitude where the proof was captured
Error responses
400 Bad request
401 Unauthorized

Submit Driver Comment Proof

POST
/modules/delivery/tracking-pages/driver/{token}/proof/comment

Submit text-only proof from the public driver tracking page. This route is public and authenticated by the tracking token in the URL.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/tracking-pages/driver/{token}/proof/comment \
  -H "Authorization: Bearer <session_token>" \
  -H "Content-Type: application/json" \
  -d '{"text":"..."}'
json — 201 Created
{ "status": "ok" }
typescript
await ss.delivery.trackingPages.commentProof('trk_d_abc123', { text: 'Customer requested handoff at side gate' })
  1. Open the public driver tracking page to add text proof from the courier flow
  2. Or send the JSON request from API Console with the driver tracking token
Path param
Type
Description
token required
string
Driver tracking token
Body field
Type
Description
text required
string
Proof note text (1–2000 chars)
1–2000 chars
lat
number
Latitude where the note was recorded
lng
number
Longitude where the note was recorded
Error responses
400 Bad request
401 Unauthorized

Subscribe to Public Tracking Updates

GET
/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.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/tracking-pages/subscribe/{token} \
  -H "Authorization: Bearer <session_token>"
json — 200 OK
{ "status": "ok" }
typescript
const es = new EventSource(ss.delivery.trackingPages.subscribeUrl('trk_c_abc123'))
  1. Open the customer or driver tracking page to watch live SSE updates automatically
  2. Or inspect the event stream directly from API Console by calling the subscribe endpoint with a tracking token
Path param
Type
Description
token required
string
Customer or driver tracking token
Query param
Type
Description
last_event_id
string
Optional SSE cursor for resuming a previous stream
max 128 chars
Error responses
400 Bad request
401 Unauthorized
404 Not found

Settings

Configure delivery module behavior per project.

Get delivery settings

GET
/modules/delivery/settings
delivery:read0.0000008 tokens

Get or create default delivery settings.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/settings \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
const settings = await ss.delivery.settings.get()
  1. Open Delivery and go to Settings
  2. View the current delivery configuration
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Update delivery settings

PATCH
/modules/delivery/settings
delivery:admin0.0000053 tokens

Update delivery settings.

curl
curl -X PATCH https://api.saasignal.saastemly.com/modules/delivery/settings \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{}'
json — 200 OK
{ "status": "ok" }
typescript
const updated = await ss.delivery.settings.update({
  auto_dispatch: true,
  default_timezone: 'America/New_York',
})
  1. Open Delivery and go to Settings
  2. Edit the configuration fields, then click Save
Body field
Type
Description
auto_assign
boolean
auto_assign_radius_km
number
range ≥0.1 .. ≤1000
max_concurrent_orders
integer
range ≥1 .. ≤10000
require_proof
boolean
proof_types
array
max 20 items
eta_fence_threshold_min
number
range ≥0 .. ≤1440
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Notifications

Configure which delivery events trigger notifications.

List notification configs

GET
/modules/delivery/notifications
delivery:admin0.0000008 tokens

List all notification configs for the project.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/notifications \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
const templates = await ss.delivery.notifications.list()
  1. Open Delivery and go to Notifications
  2. Browse the list of notification templates
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Upsert notification config

PUT
/modules/delivery/notifications
delivery:admin0.0000053 tokens

Insert or update a notification config by project + event.

curl
curl -X PUT https://api.saasignal.saastemly.com/modules/delivery/notifications \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"event":"metric.updated","enabled":true}'
json — 200 OK
{ "status": "ok" }
typescript
await ss.delivery.notifications.upsert({
  event: 'order.delivered',
  channel: 'sms',
  template: 'Your order {{order_id}} has been delivered!',
  enabled: true,
})
  1. Open Delivery and go to Notifications
  2. Click on a template to edit it, or click Add Template
  3. Configure the event trigger, channel, and message template, then click Save
Body field
Type
Description
event required
string
1–128 chars
enabled required
boolean
channel
string
max 64 chars
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Webhooks

Manage webhooks for delivery-specific event topics.

List delivery webhooks

GET
/modules/delivery/webhooks
delivery:read0.0000008 tokens

List webhooks filtered to delivery.* topics.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/webhooks \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
const webhooks = await ss.delivery.webhooks.list()
  1. Open Delivery and go to Webhooks
  2. Browse the list of registered webhooks
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Create a delivery webhook

POST
/modules/delivery/webhooks
delivery:write0.0000053 tokens

Register a webhook for delivery event topics.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/webhooks \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"name":"example","url":"https://app.acme.com/webhooks/saasignal","topics":["kv:write"]}'
json — 201 Created
{ "status": "ok" }
typescript
const webhook = await ss.delivery.webhooks.create({
  url: 'https://example.com/hooks/delivery',
  events: ['order.created', 'order.delivered'],
})
  1. Open Delivery and go to Webhooks
  2. Click Add Webhook
  3. Enter the endpoint URL, select the events to subscribe to, then click Save
Body field
Type
Description
name required
string
1–128 chars
url required
string (URI)
topics required
array
1–50 items
secret
string
16–256 chars
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

ETA Fences

Create and manage ETA fences for delivery destinations. Receive breach webhooks when a tracked entity's driving ETA drops below the configured threshold.

Create Delivery ETA Fence

POST
/modules/delivery/eta-fences
delivery:write0.0000053 tokens

Define 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.

curl
curl -X POST https://api.saasignal.saastemly.com/modules/delivery/eta-fences \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"name":"example","dest_lat":1,"dest_lng":1,"threshold_min":1}'
json — 201 Created
{ "status": "ok" }
typescript
await ss.delivery.etaFences.create({
  name: 'Depot Arrival',
  dest_lat: 40.7128, dest_lng: -74.0060,
  threshold_min: 30,
  avg_speed_kmh: 50,
})
  1. Open Delivery and go to the ETA Fences tab
  2. Click Create ETA Fence and fill in the destination, threshold, and speed
  3. Click Create to save the fence
Body field
Type
Description
name required
string
ETA fence name (1–256 chars)
1–256 chars
dest_lat required
number
Destination latitude (−90 to 90)
range ≥-90 .. ≤90
dest_lng required
number
Destination longitude (−180 to 180)
range ≥-180 .. ≤180
threshold_min required
number
ETA threshold in minutes (0.5–1440). A logistics.eta_fence.breach webhook fires when driving ETA drops below this value.
range ≥0.5 .. ≤1440
entity_types
string[]
Entity types to monitor (each 1–64 chars, max 20). Null matches all types.
max 20 items
avg_speed_kmh
number
Assumed average speed for heuristic ETA (1–300 km/h). Default 40.
range ≥1 .. ≤300default 40
heuristic_multiplier
number
Multiplier applied to threshold for heuristic pre-filter (1–5). Default 1.5.
range ≥1 .. ≤5default 1.5
metadata
object
Arbitrary key-value metadata (max 8 KB)
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

List Delivery ETA Fences

GET
/modules/delivery/eta-fences
delivery:read0.0000008 tokens

List all ETA fences for the project.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/eta-fences \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
const result = await ss.delivery.etaFences.list()
  1. Open Delivery and go to the ETA Fences tab
  2. All ETA fences are displayed with their destination coordinates and threshold
Query param
Type
Description
enabled
string
Filter by enabled status: true or false
values: true, false
limit
integer
Results per page (1–100). Default 25.
range ≥1 .. ≤100default 25
cursor
string
Pagination cursor from previous response
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Get Delivery ETA Fence

GET
/modules/delivery/eta-fences/{fence_id}
delivery:read0.0000008 tokens

Retrieve a single ETA fence.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/eta-fences/{fence_id} \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
const fence = await ss.delivery.etaFences.get('etaf_abc')
  1. Open Delivery and go to the ETA Fences tab
  2. Click on a fence to view its destination, threshold, and metadata
Path param
Type
Description
fence_id required
string
ETA fence ID
Error responses
401 Unauthorized
402 Insufficient tokens
404 Not found
429 Rate limited

Delete Delivery ETA Fence

DELETE
/modules/delivery/eta-fences/{fence_id}
delivery:admin

Permanently removes an ETA fence.

curl
curl -X DELETE https://api.saasignal.saastemly.com/modules/delivery/eta-fences/{fence_id} \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
await ss.delivery.etaFences.delete('etaf_abc')
  1. Open Delivery and go to the ETA Fences tab
  2. Click the delete icon on the fence you want to remove
Path param
Type
Description
fence_id required
string
ETA fence ID to delete
Error responses
401 Unauthorized
402 Insufficient tokens
404 Not found
429 Rate limited

Analytics

Delivery performance analytics and driver statistics.

Get delivery analytics summary

GET
/modules/delivery/analytics/summary
delivery:read0.0000008 tokens

Aggregate delivery metrics.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/analytics/summary \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
const summary = await ss.delivery.analytics.summary()
  1. Open Delivery and go to Analytics
  2. View the summary dashboard with order counts, delivery times, and trends
Query param
Type
Description
from
string (ISO 8601)
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
to
string (ISO 8601)
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Get driver analytics

GET
/modules/delivery/analytics/drivers
delivery:read0.0000008 tokens

Per-driver delivery metrics.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/analytics/drivers \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
const driverStats = await ss.delivery.analytics.drivers()
  1. Open Delivery and go to Analytics
  2. Switch to the Drivers tab to view per-driver performance metrics
Query param
Type
Description
from
string (ISO 8601)
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
to
string (ISO 8601)
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
driver_id
string
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited

Export

Export delivery data in JSON or CSV format.

Export delivery orders

GET
/modules/delivery/export/orders
delivery:admin0.0000008 tokens

Export orders as JSON or CSV.

curl
curl https://api.saasignal.saastemly.com/modules/delivery/export/orders \
  -H "Authorization: Bearer sk_live_..."
json — 200 OK
{ "status": "ok" }
typescript
const csv = await ss.delivery.export.orders()
  1. Open Delivery and go to Orders
  2. Click the Export button to download orders as CSV
Query param
Type
Description
from
string (ISO 8601)
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
to
string (ISO 8601)
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
status
string
format
string
values: json, csvdefault json
Error responses
401 Unauthorized
402 Insufficient tokens
429 Rate limited