openapi: 3.0.3 info: title: Wakeo Visibility API description: >- REST API for Wakeo, a multimodal supply-chain visibility platform (sea, air, road, rail, and parcel). The API lets customers register transport orders / shipments, retrieve predictive ETAs, positions, and milestone events, and subscribe to webhooks that push tracking updates back into a TMS, ERP, or MRP. Wakeo describes its APIs as able to "pull the latest transport orders and push the latest ETA" into shipper systems. ACCESS MODEL: Wakeo is an enterprise, customer-provisioned SaaS. The API reference is published at https://docs.wakeo.co/docs/getting-started behind a password wall; access is granted by a Customer Success representative or via support@wakeo.co. As a result this document is a HONEST MODEL, not a byte-for-byte copy of Wakeo's private reference. WHAT IS CONFIRMED (2026-07-12): * Base host https://api.wakeo.co is LIVE and fronted by AWS API Gateway (unauthenticated requests return HTTP 403 ForbiddenException). * Authentication is OAuth 2.0 - every request carries `Authorization: Bearer ` (per Wakeo's published docs). * The public surface is request/response REST over HTTPS plus webhooks; no WebSocket (wss://) endpoint is documented. WHAT IS MODELED (unconfirmed, marked x-wakeo-modeled: true on each path): * The exact resource paths, path prefix/version, query parameters, and request/response schemas below are reconstructed from Wakeo's public capability descriptions (shipment tracking, ETA, positions, events, webhooks). They must be reconciled against the password-protected reference before use. version: '1.0-modeled' contact: name: Wakeo Support url: https://wakeo.co email: support@wakeo.co x-api-evangelist-status: baseHost: confirmed authentication: confirmed endpointPaths: modeled schemas: modeled reviewer: API Evangelist reviewed: '2026-07-12' servers: - url: https://api.wakeo.co description: >- Wakeo production API (confirmed live, AWS API Gateway). The path structure below, including any version prefix, is modeled and unconfirmed. security: - oauth2: [] tags: - name: Shipments description: >- Register and manage tracked shipments / transport orders across sea, air, road, rail, and parcel. (Modeled.) - name: Tracking description: >- Predictive ETAs, positions, and milestone events for a tracked shipment. (Modeled.) - name: Webhooks description: >- Subscriptions that push tracking and ETA updates to a customer endpoint. (Modeled.) paths: /v1/shipments: x-wakeo-modeled: true get: operationId: listShipments tags: - Shipments summary: List shipments description: >- Lists tracked shipments for the authenticated account. MODELED - query parameters and response shape are reconstructed, not confirmed. parameters: - name: status in: query required: false description: Filter by shipment status (e.g. in_transit, delivered). schema: type: string - name: mode in: query required: false description: Filter by transport mode (sea, air, road, rail, parcel). schema: type: string - name: limit in: query required: false schema: type: integer default: 50 responses: '200': description: A page of shipments. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Shipment' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' post: operationId: createShipment tags: - Shipments summary: Create a shipment (transport order) description: >- Registers a new transport order for Wakeo to track and predict. MODELED - request body reconstructed from documented capabilities. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ShipmentInput' responses: '201': description: The created shipment. content: application/json: schema: $ref: '#/components/schemas/Shipment' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '422': $ref: '#/components/responses/ValidationError' /v1/shipments/{shipmentId}: x-wakeo-modeled: true parameters: - $ref: '#/components/parameters/ShipmentId' get: operationId: getShipment tags: - Shipments summary: Get a shipment description: Retrieves a single shipment by its identifier. MODELED. responses: '200': description: The requested shipment. content: application/json: schema: $ref: '#/components/schemas/Shipment' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteShipment tags: - Shipments summary: Stop tracking a shipment description: Removes a shipment from active tracking. MODELED. responses: '204': description: The shipment tracking was stopped. '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /v1/shipments/{shipmentId}/eta: x-wakeo-modeled: true parameters: - $ref: '#/components/parameters/ShipmentId' get: operationId: getShipmentEta tags: - Tracking summary: Get predictive ETA description: >- Returns Wakeo's predictive door-to-door ETA for the shipment, blending tracking data with data-science predictions. MODELED. responses: '200': description: The current predictive ETA. content: application/json: schema: $ref: '#/components/schemas/Eta' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /v1/shipments/{shipmentId}/positions: x-wakeo-modeled: true parameters: - $ref: '#/components/parameters/ShipmentId' get: operationId: listShipmentPositions tags: - Tracking summary: List positions description: >- Returns the geolocation positions recorded for the shipment along its journey. MODELED. responses: '200': description: A list of positions. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Position' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /v1/shipments/{shipmentId}/events: x-wakeo-modeled: true parameters: - $ref: '#/components/parameters/ShipmentId' get: operationId: listShipmentEvents tags: - Tracking summary: List milestone events description: >- Returns the milestone events (departures, arrivals, port calls, transshipments, PODs, congestion and disruption alerts) for a shipment. MODELED. responses: '200': description: A list of milestone events. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Event' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /v1/webhooks: x-wakeo-modeled: true get: operationId: listWebhooks tags: - Webhooks summary: List webhook subscriptions description: Lists the webhook subscriptions for the account. MODELED. responses: '200': description: A list of webhook subscriptions. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Webhook' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createWebhook tags: - Webhooks summary: Create a webhook subscription description: >- Subscribes a customer endpoint to shipment tracking and ETA update events, pushing enriched data into a TMS/ERP/MRP. MODELED. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookInput' responses: '201': description: The created webhook subscription. content: application/json: schema: $ref: '#/components/schemas/Webhook' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/ValidationError' /v1/webhooks/{webhookId}: x-wakeo-modeled: true parameters: - name: webhookId in: path required: true description: The identifier of the webhook subscription. schema: type: string delete: operationId: deleteWebhook tags: - Webhooks summary: Delete a webhook subscription description: Removes a webhook subscription. MODELED. responses: '204': description: The webhook subscription was deleted. '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: securitySchemes: oauth2: type: oauth2 description: >- OAuth 2.0. Every request must include `Authorization: Bearer ` (confirmed from Wakeo's published documentation). The token URL and grant type below are MODELED and must be confirmed against the password-protected reference. flows: clientCredentials: tokenUrl: https://api.wakeo.co/oauth/token scopes: {} parameters: ShipmentId: name: shipmentId in: path required: true description: The identifier of the shipment. schema: type: string responses: Unauthorized: description: Missing or invalid OAuth 2.0 access token. content: application/json: schema: $ref: '#/components/schemas/Error' Forbidden: description: >- The request was rejected (AWS API Gateway returns 403 ForbiddenException for unauthenticated or unauthorized calls). content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' ValidationError: description: The request payload failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Error: type: object properties: message: type: string code: type: string ShipmentInput: type: object description: Modeled transport-order input. Fields reconstructed, not confirmed. required: - mode properties: reference: type: string description: Customer transport-order or shipment reference. mode: type: string description: Transport mode. enum: - sea - air - road - rail - parcel carrier: type: string description: Carrier, shipping line, or NVOCC identifier. trackingNumber: type: string description: Container number, AWB, booking, or parcel tracking number. origin: type: string description: Origin location (UN/LOCODE, port, or address). destination: type: string description: Destination location (UN/LOCODE, port, or address). containerNumber: type: string Shipment: allOf: - $ref: '#/components/schemas/ShipmentInput' - type: object properties: id: type: string status: type: string description: Lifecycle status (e.g. in_transit, delivered). createdAt: type: string format: date-time Eta: type: object description: Modeled predictive ETA payload. properties: shipmentId: type: string estimatedArrival: type: string format: date-time confidence: type: string description: Qualitative or numeric confidence in the prediction. updatedAt: type: string format: date-time Position: type: object description: Modeled geolocation position. properties: latitude: type: number format: double longitude: type: number format: double timestamp: type: string format: date-time source: type: string description: Data source (AIS, telematics, carrier, etc.). Event: type: object description: Modeled milestone / disruption event. properties: type: type: string description: Event type (departure, arrival, port_call, transshipment, pod, congestion, disruption). location: type: string timestamp: type: string format: date-time description: type: string WebhookInput: type: object description: Modeled webhook subscription input. required: - url properties: url: type: string format: uri description: HTTPS endpoint that Wakeo POSTs event payloads to. events: type: array description: Event types to subscribe to (e.g. eta.updated, event.created). items: type: string secret: type: string description: Shared secret used to sign webhook payloads. Webhook: allOf: - $ref: '#/components/schemas/WebhookInput' - type: object properties: id: type: string createdAt: type: string format: date-time