Skip to content

API Overview

Logistall exposes a small, read-only REST API (/api/v1/*) for integrating shipment, customer, and invoice data into other systems, alongside outbound webhooks for near-real-time shipment status changes. This section documents both, plus the public (unauthenticated) tracking-link endpoint.

If you’re looking for the in-app pages this API is generated from — Shipments, Customers, Invoices, Keys — see the User Guide instead. This section is for developers integrating programmatically.

The API is served from a single production hostname — there is no per-company subdomain. The tenant is identified solely by the API key you present, not by the host you connect to:

https://tenant.logistall.cloud/api

All endpoints below are relative to this base — for example, GET /v1/shipments means GET https://tenant.logistall.cloud/api/v1/shipments.

The public API is currently read-only: every /v1/* endpoint is a GET. There is no way to create, update, or delete records through this API — all writes happen through the Logistall web app. There is only one version, v1, and no versioning scheme has been established yet beyond that prefix.

Every /v1/* endpoint requires an API key. See Authentication for how to create a key and present it on requests.

All responses are JSON. Object keys are camelCase, regardless of the underlying database column names (e.g. the database’s shipment_number column is returned as shipmentNumber).

List endpoints return a plain JSON array — there is no wrapper object and no total count.

List endpoints accept two query parameters:

Parameter Default Max Notes
limit 50 200 Values above 200 are clamped to 200. Non-numeric or values below 1 fall back to the default.
offset 0 Values below 0 are clamped to 0.

There is no cursor-based pagination — use offset and re-fetch. Results are ordered newest-first (by creation date) unless otherwise noted on the endpoint.

Errors are always a JSON object with a single error string:

{ "error": "Invalid API key" }

Common status codes:

Status Meaning
401 Missing, malformed, or invalid API key.
404 The requested record doesn’t exist (or doesn’t belong to the tenant your key resolves to).
500 An unexpected server or database error.

There is currently no per-key rate limit enforced on /v1/* endpoints. The only rate limiting in the platform today applies to the login/password-reset endpoints used by the web app itself, not to the API-key-authenticated routes documented here. This may change — a rate limit could be introduced on /v1/* in the future — so don’t build an integration that assumes unlimited request volume, but there is no documented number to design against today.

Method Path Description
GET /v1/shipments List shipments
GET /v1/shipments/:id Get one shipment, with its tracking timeline
GET /v1/customers List customers
GET /v1/invoices List invoices

Plus:

  • Webhooks — subscribe to shipment.status_changed events instead of polling.
  • Public tracking — the unauthenticated link customers use to check a shipment’s status.