Techengy Group Group Materials Smart Home Solar

Spanhaul · for technical teams

Connect Spanhaul to the systems you already run.

Spanhaul has a read and write API, signed webhooks, an owner console to manage credentials and endpoints, and an audit log of every call. Each company gets its own credentials, and each credential has only the scopes it needs.

What is live today

Read and write API

  • Packages, statuses, batches and invoices can be read with a scoped credential.
  • Packages can be created, and corrected while still expected.
  • Status is never written by a caller. Packages are moved along by the warehouse.

Signed webhooks

  • Events are signed with HMAC-SHA256 using a per-endpoint secret.
  • Failed deliveries are retried automatically, and every delivery is logged.
  • Owners can send test events and replay past deliveries.

Control and audit

  • The owner console issues and revokes credentials and sets webhook endpoints.
  • Every API call is logged with its credential, company, endpoint, result and time.
  • Each company sees only its own data. Unknown references return 404.

Authentication and scopes

Every request carries a bearer token in the Authorization header. A token belongs to one company and is granted one or more scopes. A request outside a token’s scopes is refused.

GET /api/v1/packages HTTP/1.1
Host: spanhaul.techengysolutions.com
Authorization: Bearer <your token>
Accept: application/json
ScopeMethodPathWhat it does
read:packages GET /api/v1/packages List packages for the company.
read:packages GET /api/v1/packages/{ref} One package. Unknown references return 404.
write:packages POST /api/v1/packages Create a package.
write:packages PUT /api/v1/packages/{ref} Correct a package while it is still expected.
read:statuses GET /api/v1/packages/{ref}/statuses The status history of a package.
read:batches GET /api/v1/batches List batches (air or sea).
read:batches GET /api/v1/batches/{ref} One batch.
read:invoices GET /api/v1/invoices List invoices.
read:invoices GET /api/v1/invoices/{customer_code} An importer’s statement.

Webhook events

Each event is sent as an HTTP POST to the endpoint you set in the owner console. Verify the signature before you trust the payload.

EventSent when
package.receivedA carton is received at the China warehouse.
package.status_changedA package moves to its next status.
batch.loadedA batch is loaded for shipment.
shipment.departedA shipment leaves China.
shipment.arrivedA shipment arrives in Ghana.
charge.confirmedA payment is confirmed.
X-Spanhaul-Timestamp: 1760000000
X-Spanhaul-Signature: sha256=<HMAC_SHA256(secret, "<timestamp>.<raw body>")>

Customs stages are not sent as webhook events yet. They are visible to importers in the portal, and to the company in the customs desk.

Custom connections

Connections beyond the API and webhooks are scoped with each company and built on request. They are not pre-built connectors. Single sign-on and file exchange by SFTP or CSV are not available yet.