{
    "openapi": "3.0.3",
    "info": {
        "title": "Tracking Widgets",
        "version": "1.0.0",
        "description": "Replaced at request time by App\\Services\\ApiDocs\\WidgetOpenApi::description()."
    },
    "paths": {
        "/api/tracking/ocean": {
            "get": {
                "tags": [
                    "Container Tracking"
                ],
                "operationId": "proxyOceanShipment",
                "summary": "Integrate the container tracking widget",
                "description": "The endpoint you host and hand to the container tracking widget as `apiEndpoint`. The path is yours to choose — `/api/tracking/ocean` is only the example used throughout this page.\n\nForward the parameters below to [`GET /v1/shipments/ocean`]({{apiDocs}}#/operations/getOceanShipment) with your Bearer token attached, and return the upstream body and status code unchanged. What the parameters mean and what comes back is documented once, in the [API reference]({{apiDocs}}#/operations/getOceanShipment) — this page only says which of them the widget sends.",
                "parameters": [
                    {
                        "name": "referenceNumber",
                        "in": "query",
                        "required": true,
                        "description": "Whatever the visitor typed. Forward verbatim — rewriting it changes which shipment is billed.",
                        "schema": {
                            "type": "string",
                            "example": "UETU7838717"
                        }
                    },
                    {
                        "name": "carrierCode",
                        "in": "query",
                        "required": false,
                        "description": "Sent only when the visitor picked a carrier. Omit it when the widget omits it: an empty `carrierCode` is not the same as no `carrierCode`.",
                        "schema": {
                            "type": "string",
                            "example": "MAEU"
                        }
                    },
                    {
                        "name": "routeDetails",
                        "in": "query",
                        "required": false,
                        "description": "Always `true` from the widget — it is what fills the map. Forward as received.",
                        "schema": {
                            "type": "boolean",
                            "example": true
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The upstream payload, forwarded unchanged. Do not unwrap, rename or re-encode it — the widget parses the document the [API reference]({{apiDocs}}#/operations/getOceanShipment) describes."
                    },
                    "401": {
                        "description": "Missing or invalid Bearer token — your server did not attach the key, or it was revoked."
                    },
                    "402": {
                        "description": "No credits left for ocean tracking."
                    },
                    "429": {
                        "description": "Rate limit reached."
                    },
                    "502": {
                        "description": "Your proxy could not reach the tracking API."
                    }
                }
            }
        },
        "/api/tracking/air": {
            "get": {
                "tags": [
                    "Air Tracking"
                ],
                "operationId": "proxyAirShipment",
                "summary": "Integrate the air tracking widget",
                "description": "The endpoint you host and hand to the air tracking widget as `apiEndpoint`.\n\nSame contract as the ocean proxy, against [`GET /v1/shipments/air`]({{apiDocs}}#/operations/getAirShipment).",
                "parameters": [
                    {
                        "name": "number",
                        "in": "query",
                        "required": true,
                        "description": "The air waybill number the visitor typed. Its three-digit prefix identifies the airline, which is why the air widget has no carrier field and sends no carrier parameter.",
                        "schema": {
                            "type": "string",
                            "example": "176-12345675"
                        }
                    },
                    {
                        "name": "routePath",
                        "in": "query",
                        "required": false,
                        "description": "Always `true` from the widget — it is what fills the map. Forward as received.",
                        "schema": {
                            "type": "boolean",
                            "example": true
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The upstream payload, forwarded unchanged — the document the [API reference]({{apiDocs}}#/operations/getAirShipment) describes."
                    },
                    "401": {
                        "description": "Missing or invalid Bearer token."
                    },
                    "402": {
                        "description": "No credits left for air tracking."
                    },
                    "429": {
                        "description": "Rate limit reached."
                    },
                    "502": {
                        "description": "Your proxy could not reach the tracking API."
                    }
                }
            }
        }
    }
}
