AxleHire (Jitsu) · AsyncAPI Specification

Axlehire Webhooks

Version

View Spec View on GitHub CompanyLogisticsLast Mile DeliveryShippingParcelTransportationSupply ChainEcommerceTrackingWebhooksAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-06'
method: searched
source: >-
  https://docs.gojitsu.com/#/docs/Webhooks.md and the webhook explorer catalog
  served by https://docs.gojitsu.com/static/js/docs.js, plus the Webhook /
  WebhookEventData / MiniShipment schemas in
  openapi/axlehire-jitsu-rest-api.yml.
description: >-
  Jitsu (formerly AxleHire) publishes NO AsyncAPI document — this is the webhook
  catalog captured verbatim from its documented event surface. 35 documented
  event entries across 5 categories (33 distinct `event` string values; the
  three DAS variants all emit `SHIPMENT.NOTIFICATION` and are distinguished by
  data.event_data.update_status). Each event has a published sample payload in
  the docs webhook explorer. Nothing here is invented.
asyncapi_published: false
spec_hint: >-
  The Webhook schema IS already modelled in the OpenAPI
  (components.schemas.Webhook → WebhookEventData → MiniShipment / MiniAssignment
  / Geolocation), so an AsyncAPI 3.0 document over these 33 events would be
  largely mechanical for Jitsu to publish.

transport:
  protocol: HTTPS
  method: POST
  content_type: application/json
  registration: >-
    Manual. Email the endpoint URL and any auth requirement to the Jitsu team;
    they register it per account and per environment. There is no self-service
    subscription API.
  signing: >-
    None published. The docs invite integrators to supply "any authentication
    requirements (token header, HMAC signature, etc.)" for Jitsu to configure —
    negotiated per account rather than specified.
  delivery_semantics: at-least-once
  retries: exponential backoff on any non-2xx response
  consumer_requirements:
  - Return 2xx quickly; process asynchronously
  - Handler must be idempotent — deduplicate on ts + event + shipment.id
  recovery:
  - GET /v3/shipments/{shipment_id}
  - GET /v3/tracking/{tracking_code}/events
  - Ask Jitsu to review delivery logs for missed events

envelope:
  event: string — the event type
  ts: string (ISO-8601 UTC) — when the event occurred
  geolocation: object — {latitude, longitude, altitude}, present on driver-location events
  data: object — WebhookEventData, varies by event
data_fields:
  reason_code: Reason provided by the driver
  shipment: MiniShipment — {id, shipment_id, internal_id, tracking_code, assignment_id}
  assignment: MiniAssignment
  ts_local: Localized ISO-8601 timestamp with offset
  eta: Estimated time of arrival, in milliseconds
  destination: Destination city and state
  old_data: Previous values of updated fields
  new_data: New values for updated fields
  updated_fields: Array of field names that changed
  source: Event origin (e.g. AP_dataorch, AP_inbound_api)
  delayed_reason: Delay reason

categories:
- name: Planning
  description: Address verification, geocoding and route assignment — fired before or independent of physical delivery.
  events:
  - {event: SHIPMENT.GEOCODED, description: Address successfully geolocated.}
  - {event: SHIPMENT.GEOCODE_FAILED, description: Address could not be geolocated — requires correction before routing.}
  - {event: DELIVERABLE_ADDRESS.UPDATE, description: Deliverable address updated to a more precise or corrected location.}
  - {event: SHIPMENT.NOTIFICATION, variant: DAS-Corrected, discriminator: data.event_data.update_status = CORRECTED,
     description: DAS successfully corrected the address based on verified data.}
  - {event: SHIPMENT.NOTIFICATION, variant: DAS-Flagged, discriminator: data.event_data.update_status = FLAGGED,
     description: DAS applied a correction but could not fully confirm the secondary unit — SMS sent to recipient.}
  - {event: SHIPMENT.NOTIFICATION, variant: DAS-Failed, discriminator: data.event_data.update_status = FAILED,
     description: DAS could not correct the address — SMS sent to recipient for manual confirmation.}
  - {event: SHIPMENT.UPDATE_DROPOFF, description: 'Delivery information updated (e.g. instructions, access code, address correction).'}
  - {event: CUSTOMER_PROFILE.UPDATE, description: Delivery preferences updated for a customer profile — saved for future deliveries.}
  - {event: ASSIGNMENT.ROUTE_ASSIGNED, description: Shipment assigned to a delivery route.}
- name: Inbound
  description: Fired as shipments arrive at the Jitsu warehouse.
  events:
  - {event: SHIPMENT.SCAN, description: Shipment scanned at the warehouse.}
  - {event: SHIPMENT.RECEIVED_OK, description: Shipment received at the warehouse without damage.}
  - {event: SHIPMENT.RECEIVED_DAMAGED, description: Shipment received at the warehouse with damage.}
  - {event: SHIPMENT.MISSING, description: Shipment missing at the anticipated injection point after routing completes.}
  - {event: SHIPMENT.MANIFEST_NOT_RECEIVED, description: Shipment not scanned as received within the configured threshold window.}
  - {event: SHIPMENT.CANCELLED_BEFORE_PICKUP, description: Shipment cancelled before driver pickup.}
  - {event: CONTAINER.RECEIVED, description: A container of shipments received at the warehouse.}
- name: Outbound
  description: Fired during the pickup and delivery lifecycle.
  events:
  - {event: SHIPMENT.PICKUP_EN_ROUTE, description: Driver en route to the pickup location.}
  - {event: SHIPMENT.PICKUP_READY, description: Driver arrived at pickup location, ready to load.}
  - {event: SHIPMENT.PICKUP_SUCCEEDED, description: Shipment picked up successfully.}
  - {event: SHIPMENT.CANCELLED_AFTER_PICKUP, description: Shipment cancelled after pickup but before delivery.}
  - {event: SHIPMENT.DROPOFF_EN_ROUTE, description: Driver en route to the dropoff location.}
  - {event: SHIPMENT.DROPOFF_READY, description: Driver arrived at dropoff location, ready to deliver.}
  - {event: SHIPMENT.DROPOFF_SUCCEEDED, description: Shipment delivered successfully.}
  - {event: SHIPMENT.DROPOFF_DELAY, description: Delivery delayed en route.}
  - {event: SHIPMENT.RETURN_EN_ROUTE, description: Driver en route to return an undelivered shipment.}
  - {event: SHIPMENT.RETURN_READY, description: Driver at return location, ready to unload.}
  - {event: SHIPMENT.RETURN_SUCCEEDED, description: Undelivered shipment returned successfully.}
  - {event: SHIPMENT.HANDED-OFF, description: Shipment transferred to another carrier based on client protocol.}
- name: POD
  description: Proof-of-delivery photo review. NOT enabled by default — the account must ask Jitsu to turn these on.
  enabled_by_default: false
  events:
  - {event: POD.ACCEPTED, description: 'Delivery photo approved. Payload carries a pods array of pod_id + url.'}
  - {event: POD.NEED_REVIEW, description: Delivery photo under review.}
  - {event: POD.REJECTED, description: 'Delivery photo rejected (e.g. reason: PERSON IN PHOTO).'}
- name: Exceptions
  description: Fired when a pickup, delivery or return could not be completed.
  events:
  - {event: SHIPMENT.PICKUP_FAILED, description: Shipment not picked up on the planned route.}
  - {event: SHIPMENT.DROPOFF_FAILED, description: Delivery attempt unsuccessful.}
  - {event: SHIPMENT.RETURN_FAILED, description: Undelivered shipment could not be returned.}
  - {event: SHIPMENT.DISPOSABLE, description: Shipment marked for disposal after exhausting delivery and return attempts.}

counts:
  categories: 5
  documented_entries: 35
  distinct_event_values: 33

related_operations:
  poll_status: retrieve_1 (GET /v3/shipments/{shipment_id})
  poll_events: retrieveEvents (GET /v3/tracking/{tracking_code}/events)
  proof_of_delivery: getPod (GET /v3/shipments/{shipment_id}/pod)

gaps:
- >-
  No AsyncAPI document, even though the Webhook payload is already a named
  schema in the OpenAPI.
- >-
  No published signature scheme. Webhook authentication is negotiated per
  account, so no integrator can verify authenticity from the docs alone.
- >-
  No self-service subscription/registration API — endpoints are registered by
  emailing the Jitsu team.
- >-
  SHIPMENT.NOTIFICATION overloads one event string with three semantically
  distinct outcomes, discriminated only by a nested field.