{
  "openapi": "3.0.3",
  "paths": {
    "/partner-api/hubs": {
      "get": {
        "description": "Use returned hub ids as pickupHubId when pickupMethod=HUB_DROPOFF or as dropoffHubId when dropoffMethod=HUB_PICKUP.",
        "operationId": "PartnerApiController_listHubs",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Active hubs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PartnerApiHubDto"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "List active hubs available for partner bookings",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/booking-quotes": {
      "post": {
        "description": "Direct booking quotes support CLICK, GO_LIGHT, and EXPRESS. CLICK can use home-to-home or multi-stop routes. GO_LIGHT and EXPRESS are planned as multi-leg services and can use home or hub endpoints. For hub endpoints, read hub ids from GET /partner-api/hubs and set pickupMethod=HUB_DROPOFF with pickupHubId and/or dropoffMethod=HUB_PICKUP with dropoffHubId.",
        "operationId": "PartnerApiController_quoteBooking",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "title": "CLICK or GO Light home pickup to home delivery",
                    "type": "object",
                    "required": [
                      "pickupAddress",
                      "pickupLatitude",
                      "pickupLongitude",
                      "dropoffAddress",
                      "dropoffLatitude",
                      "dropoffLongitude"
                    ],
                    "properties": {
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "CLICK",
                          "GO_LIGHT"
                        ],
                        "default": "CLICK"
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_PICKUP"
                        ],
                        "default": "HOME_PICKUP",
                        "description": "Use HOME_PICKUP when ELA should collect from a sender address."
                      },
                      "pickupAddress": {
                        "type": "string",
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_DELIVERY"
                        ],
                        "default": "HOME_DELIVERY",
                        "description": "Use HOME_DELIVERY when ELA should deliver to a receiver address."
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      }
                    }
                  },
                  {
                    "title": "EXPRESS home pickup to home delivery",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "packageWeightKg",
                      "pickupAddress",
                      "pickupLatitude",
                      "pickupLongitude",
                      "dropoffAddress",
                      "dropoffLatitude",
                      "dropoffLongitude"
                    ],
                    "properties": {
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "EXPRESS"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 50,
                        "description": "Required for ELA Express bookings."
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_PICKUP"
                        ],
                        "default": "HOME_PICKUP",
                        "description": "Use HOME_PICKUP when ELA should collect from a sender address."
                      },
                      "pickupAddress": {
                        "type": "string",
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_DELIVERY"
                        ],
                        "default": "HOME_DELIVERY",
                        "description": "Use HOME_DELIVERY when ELA should deliver to a receiver address."
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      }
                    }
                  },
                  {
                    "title": "CLICK multi-stop delivery",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "orderMode",
                      "stops"
                    ],
                    "properties": {
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "CLICK"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "orderMode": {
                        "type": "string",
                        "enum": [
                          "MULTI_STOP"
                        ]
                      },
                      "stops": {
                        "type": "array",
                        "minItems": 3,
                        "maxItems": 3,
                        "items": {
                          "type": "object",
                          "required": [
                            "type",
                            "address",
                            "latitude",
                            "longitude"
                          ],
                          "properties": {
                            "type": {
                              "type": "string",
                              "enum": [
                                "PICKUP",
                                "DROPOFF"
                              ]
                            },
                            "address": {
                              "type": "string"
                            },
                            "latitude": {
                              "type": "number",
                              "minimum": -90,
                              "maximum": 90
                            },
                            "longitude": {
                              "type": "number",
                              "minimum": -180,
                              "maximum": 180
                            },
                            "phone": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  },
                  {
                    "title": "GO Light home pickup to hub pickup",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "dropoffMethod",
                      "dropoffHubId",
                      "pickupAddress",
                      "pickupLatitude",
                      "pickupLongitude"
                    ],
                    "properties": {
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "GO_LIGHT"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_PICKUP"
                        ],
                        "default": "HOME_PICKUP",
                        "description": "Use HOME_PICKUP when ELA should collect from a sender address."
                      },
                      "pickupAddress": {
                        "type": "string",
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_PICKUP"
                        ],
                        "description": "Use HUB_PICKUP when the receiver will collect the parcel from an ELA hub returned by GET /partner-api/hubs."
                      },
                      "dropoffHubId": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HUB_PICKUP. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_aba"
                      }
                    }
                  },
                  {
                    "title": "GO Light hub dropoff to home delivery",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "pickupMethod",
                      "pickupHubId",
                      "dropoffAddress",
                      "dropoffLatitude",
                      "dropoffLongitude"
                    ],
                    "properties": {
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "GO_LIGHT"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_DROPOFF"
                        ],
                        "description": "Use HUB_DROPOFF when the sender will drop the parcel at an ELA hub returned by GET /partner-api/hubs."
                      },
                      "pickupHubId": {
                        "type": "string",
                        "description": "Required when pickupMethod is HUB_DROPOFF. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_lagos"
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_DELIVERY"
                        ],
                        "default": "HOME_DELIVERY",
                        "description": "Use HOME_DELIVERY when ELA should deliver to a receiver address."
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      }
                    }
                  },
                  {
                    "title": "GO Light hub dropoff to hub pickup",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "pickupMethod",
                      "pickupHubId",
                      "dropoffMethod",
                      "dropoffHubId"
                    ],
                    "properties": {
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "GO_LIGHT"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_DROPOFF"
                        ],
                        "description": "Use HUB_DROPOFF when the sender will drop the parcel at an ELA hub returned by GET /partner-api/hubs."
                      },
                      "pickupHubId": {
                        "type": "string",
                        "description": "Required when pickupMethod is HUB_DROPOFF. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_lagos"
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_PICKUP"
                        ],
                        "description": "Use HUB_PICKUP when the receiver will collect the parcel from an ELA hub returned by GET /partner-api/hubs."
                      },
                      "dropoffHubId": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HUB_PICKUP. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_aba"
                      }
                    }
                  },
                  {
                    "title": "EXPRESS home pickup to hub pickup",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "dropoffMethod",
                      "dropoffHubId",
                      "pickupAddress",
                      "pickupLatitude",
                      "pickupLongitude",
                      "packageWeightKg"
                    ],
                    "properties": {
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "EXPRESS"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 50,
                        "description": "Required for ELA Express bookings."
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_PICKUP"
                        ],
                        "default": "HOME_PICKUP",
                        "description": "Use HOME_PICKUP when ELA should collect from a sender address."
                      },
                      "pickupAddress": {
                        "type": "string",
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_PICKUP"
                        ],
                        "description": "Use HUB_PICKUP when the receiver will collect the parcel from an ELA hub returned by GET /partner-api/hubs."
                      },
                      "dropoffHubId": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HUB_PICKUP. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_aba"
                      }
                    }
                  },
                  {
                    "title": "EXPRESS hub dropoff to home delivery",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "pickupMethod",
                      "pickupHubId",
                      "dropoffAddress",
                      "dropoffLatitude",
                      "dropoffLongitude",
                      "packageWeightKg"
                    ],
                    "properties": {
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "EXPRESS"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 50,
                        "description": "Required for ELA Express bookings."
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_DROPOFF"
                        ],
                        "description": "Use HUB_DROPOFF when the sender will drop the parcel at an ELA hub returned by GET /partner-api/hubs."
                      },
                      "pickupHubId": {
                        "type": "string",
                        "description": "Required when pickupMethod is HUB_DROPOFF. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_lagos"
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_DELIVERY"
                        ],
                        "default": "HOME_DELIVERY",
                        "description": "Use HOME_DELIVERY when ELA should deliver to a receiver address."
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      }
                    }
                  },
                  {
                    "title": "EXPRESS hub dropoff to hub pickup",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "pickupMethod",
                      "pickupHubId",
                      "dropoffMethod",
                      "dropoffHubId",
                      "packageWeightKg"
                    ],
                    "properties": {
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "EXPRESS"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 50,
                        "description": "Required for ELA Express bookings."
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_DROPOFF"
                        ],
                        "description": "Use HUB_DROPOFF when the sender will drop the parcel at an ELA hub returned by GET /partner-api/hubs."
                      },
                      "pickupHubId": {
                        "type": "string",
                        "description": "Required when pickupMethod is HUB_DROPOFF. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_lagos"
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_PICKUP"
                        ],
                        "description": "Use HUB_PICKUP when the receiver will collect the parcel from an ELA hub returned by GET /partner-api/hubs."
                      },
                      "dropoffHubId": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HUB_PICKUP. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_aba"
                      }
                    }
                  }
                ]
              },
              "examples": {
                "standardClick": {
                  "summary": "Standard CLICK booking",
                  "value": {
                    "serviceType": "CLICK",
                    "vehicleType": "BIKE",
                    "pickupAddress": "15 Admiralty Way, Lekki Phase 1",
                    "pickupLatitude": 6.4541,
                    "pickupLongitude": 3.3947,
                    "pickupPhone": "+2348011111111",
                    "dropoffAddress": "19 Admiralty Road, Lekki Phase 1",
                    "dropoffLatitude": 6.4612,
                    "dropoffLongitude": 3.401,
                    "dropoffPhone": "+2348022222222",
                    "packageDescription": "Small parcel - documents"
                  }
                },
                "express": {
                  "summary": "ELA Express booking",
                  "value": {
                    "serviceType": "EXPRESS",
                    "vehicleType": "VAN",
                    "packageWeightKg": 12.5,
                    "pickupAddress": "Ikeja, Lagos State",
                    "pickupLatitude": 6.6018,
                    "pickupLongitude": 3.3515,
                    "dropoffAddress": "Aba, Abia State",
                    "dropoffLatitude": 5.1214,
                    "dropoffLongitude": 7.3733
                  }
                },
                "goLightHubDropoff": {
                  "summary": "GO Light hub dropoff to home delivery",
                  "value": {
                    "serviceType": "GO_LIGHT",
                    "vehicleType": "VAN",
                    "deliveryMode": "STANDARD",
                    "pickupMethod": "HUB_DROPOFF",
                    "pickupHubId": "hub_partner_lagos",
                    "dropoffMethod": "HOME_DELIVERY",
                    "dropoffAddress": "Aba, Abia State",
                    "dropoffLatitude": 5.1214,
                    "dropoffLongitude": 7.3733,
                    "dropoffPhone": "+2348022222222",
                    "packageDescription": "Two cartons of packaged goods"
                  }
                },
                "expressHubToHub": {
                  "summary": "EXPRESS hub dropoff to hub pickup",
                  "value": {
                    "serviceType": "EXPRESS",
                    "vehicleType": "VAN",
                    "packageWeightKg": 12.5,
                    "pickupMethod": "HUB_DROPOFF",
                    "pickupHubId": "hub_partner_lagos",
                    "dropoffMethod": "HUB_PICKUP",
                    "dropoffHubId": "hub_partner_aba",
                    "packageDescription": "Urgent stock transfer"
                  }
                },
                "multiStop": {
                  "summary": "CLICK multi-stop booking",
                  "value": {
                    "serviceType": "CLICK",
                    "orderMode": "MULTI_STOP",
                    "stops": [
                      {
                        "type": "PICKUP",
                        "address": "15 Admiralty Way",
                        "latitude": 6.4541,
                        "longitude": 3.3947
                      },
                      {
                        "type": "PICKUP",
                        "address": "19 Admiralty Road",
                        "latitude": 6.4612,
                        "longitude": 3.401
                      },
                      {
                        "type": "DROPOFF",
                        "address": "24 Ozumba Mbadiwe",
                        "latitude": 6.4281,
                        "longitude": 3.4219
                      }
                    ]
                  }
                },
                "hubRouted": {
                  "summary": "GO Light home pickup to hub pickup",
                  "value": {
                    "serviceType": "GO_LIGHT",
                    "vehicleType": "VAN",
                    "pickupMethod": "HOME_PICKUP",
                    "pickupAddress": "Victoria Island, Lagos State",
                    "pickupLatitude": 6.4281,
                    "pickupLongitude": 3.4219,
                    "dropoffMethod": "HUB_PICKUP",
                    "dropoffHubId": "hub_partner_aba"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Quote created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiBookingQuoteResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Create a partner booking quote",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/bookings": {
      "post": {
        "description": "Send the same route fields used for POST /partner-api/booking-quotes, plus the quoteId returned by that quote response. Hub-routed bookings must repeat pickupMethod/pickupHubId and/or dropoffMethod/dropoffHubId.",
        "operationId": "PartnerApiController_createBooking",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Same fields used to create the quote, plus the quoteId returned by /booking-quotes.",
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "title": "CLICK or GO Light home pickup to home delivery booking creation",
                    "type": "object",
                    "required": [
                      "pickupAddress",
                      "pickupLatitude",
                      "pickupLongitude",
                      "dropoffAddress",
                      "dropoffLatitude",
                      "dropoffLongitude",
                      "quoteId"
                    ],
                    "properties": {
                      "quoteId": {
                        "type": "string",
                        "example": "QT-CK-abc123"
                      },
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "CLICK",
                          "GO_LIGHT"
                        ],
                        "default": "CLICK"
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_PICKUP"
                        ],
                        "default": "HOME_PICKUP",
                        "description": "Use HOME_PICKUP when ELA should collect from a sender address."
                      },
                      "pickupAddress": {
                        "type": "string",
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_DELIVERY"
                        ],
                        "default": "HOME_DELIVERY",
                        "description": "Use HOME_DELIVERY when ELA should deliver to a receiver address."
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      }
                    }
                  },
                  {
                    "title": "EXPRESS home pickup to home delivery booking creation",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "packageWeightKg",
                      "pickupAddress",
                      "pickupLatitude",
                      "pickupLongitude",
                      "dropoffAddress",
                      "dropoffLatitude",
                      "dropoffLongitude",
                      "quoteId"
                    ],
                    "properties": {
                      "quoteId": {
                        "type": "string",
                        "example": "QT-CK-abc123"
                      },
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "EXPRESS"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 50,
                        "description": "Required for ELA Express bookings."
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_PICKUP"
                        ],
                        "default": "HOME_PICKUP",
                        "description": "Use HOME_PICKUP when ELA should collect from a sender address."
                      },
                      "pickupAddress": {
                        "type": "string",
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_DELIVERY"
                        ],
                        "default": "HOME_DELIVERY",
                        "description": "Use HOME_DELIVERY when ELA should deliver to a receiver address."
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      }
                    }
                  },
                  {
                    "title": "CLICK multi-stop delivery booking creation",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "orderMode",
                      "stops",
                      "quoteId"
                    ],
                    "properties": {
                      "quoteId": {
                        "type": "string",
                        "example": "QT-CK-abc123"
                      },
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "CLICK"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "orderMode": {
                        "type": "string",
                        "enum": [
                          "MULTI_STOP"
                        ]
                      },
                      "stops": {
                        "type": "array",
                        "minItems": 3,
                        "maxItems": 3,
                        "items": {
                          "type": "object",
                          "required": [
                            "type",
                            "address",
                            "latitude",
                            "longitude"
                          ],
                          "properties": {
                            "type": {
                              "type": "string",
                              "enum": [
                                "PICKUP",
                                "DROPOFF"
                              ]
                            },
                            "address": {
                              "type": "string"
                            },
                            "latitude": {
                              "type": "number",
                              "minimum": -90,
                              "maximum": 90
                            },
                            "longitude": {
                              "type": "number",
                              "minimum": -180,
                              "maximum": 180
                            },
                            "phone": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  },
                  {
                    "title": "GO Light home pickup to hub pickup booking creation",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "dropoffMethod",
                      "dropoffHubId",
                      "pickupAddress",
                      "pickupLatitude",
                      "pickupLongitude",
                      "quoteId"
                    ],
                    "properties": {
                      "quoteId": {
                        "type": "string",
                        "example": "QT-CK-abc123"
                      },
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "GO_LIGHT"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_PICKUP"
                        ],
                        "default": "HOME_PICKUP",
                        "description": "Use HOME_PICKUP when ELA should collect from a sender address."
                      },
                      "pickupAddress": {
                        "type": "string",
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_PICKUP"
                        ],
                        "description": "Use HUB_PICKUP when the receiver will collect the parcel from an ELA hub returned by GET /partner-api/hubs."
                      },
                      "dropoffHubId": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HUB_PICKUP. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_aba"
                      }
                    }
                  },
                  {
                    "title": "GO Light hub dropoff to home delivery booking creation",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "pickupMethod",
                      "pickupHubId",
                      "dropoffAddress",
                      "dropoffLatitude",
                      "dropoffLongitude",
                      "quoteId"
                    ],
                    "properties": {
                      "quoteId": {
                        "type": "string",
                        "example": "QT-CK-abc123"
                      },
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "GO_LIGHT"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_DROPOFF"
                        ],
                        "description": "Use HUB_DROPOFF when the sender will drop the parcel at an ELA hub returned by GET /partner-api/hubs."
                      },
                      "pickupHubId": {
                        "type": "string",
                        "description": "Required when pickupMethod is HUB_DROPOFF. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_lagos"
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_DELIVERY"
                        ],
                        "default": "HOME_DELIVERY",
                        "description": "Use HOME_DELIVERY when ELA should deliver to a receiver address."
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      }
                    }
                  },
                  {
                    "title": "GO Light hub dropoff to hub pickup booking creation",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "pickupMethod",
                      "pickupHubId",
                      "dropoffMethod",
                      "dropoffHubId",
                      "quoteId"
                    ],
                    "properties": {
                      "quoteId": {
                        "type": "string",
                        "example": "QT-CK-abc123"
                      },
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "GO_LIGHT"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_DROPOFF"
                        ],
                        "description": "Use HUB_DROPOFF when the sender will drop the parcel at an ELA hub returned by GET /partner-api/hubs."
                      },
                      "pickupHubId": {
                        "type": "string",
                        "description": "Required when pickupMethod is HUB_DROPOFF. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_lagos"
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_PICKUP"
                        ],
                        "description": "Use HUB_PICKUP when the receiver will collect the parcel from an ELA hub returned by GET /partner-api/hubs."
                      },
                      "dropoffHubId": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HUB_PICKUP. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_aba"
                      }
                    }
                  },
                  {
                    "title": "EXPRESS home pickup to hub pickup booking creation",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "dropoffMethod",
                      "dropoffHubId",
                      "pickupAddress",
                      "pickupLatitude",
                      "pickupLongitude",
                      "packageWeightKg",
                      "quoteId"
                    ],
                    "properties": {
                      "quoteId": {
                        "type": "string",
                        "example": "QT-CK-abc123"
                      },
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "EXPRESS"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 50,
                        "description": "Required for ELA Express bookings."
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_PICKUP"
                        ],
                        "default": "HOME_PICKUP",
                        "description": "Use HOME_PICKUP when ELA should collect from a sender address."
                      },
                      "pickupAddress": {
                        "type": "string",
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_PICKUP"
                        ],
                        "description": "Use HUB_PICKUP when the receiver will collect the parcel from an ELA hub returned by GET /partner-api/hubs."
                      },
                      "dropoffHubId": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HUB_PICKUP. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_aba"
                      }
                    }
                  },
                  {
                    "title": "EXPRESS hub dropoff to home delivery booking creation",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "pickupMethod",
                      "pickupHubId",
                      "dropoffAddress",
                      "dropoffLatitude",
                      "dropoffLongitude",
                      "packageWeightKg",
                      "quoteId"
                    ],
                    "properties": {
                      "quoteId": {
                        "type": "string",
                        "example": "QT-CK-abc123"
                      },
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "EXPRESS"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 50,
                        "description": "Required for ELA Express bookings."
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_DROPOFF"
                        ],
                        "description": "Use HUB_DROPOFF when the sender will drop the parcel at an ELA hub returned by GET /partner-api/hubs."
                      },
                      "pickupHubId": {
                        "type": "string",
                        "description": "Required when pickupMethod is HUB_DROPOFF. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_lagos"
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_DELIVERY"
                        ],
                        "default": "HOME_DELIVERY",
                        "description": "Use HOME_DELIVERY when ELA should deliver to a receiver address."
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      }
                    }
                  },
                  {
                    "title": "EXPRESS hub dropoff to hub pickup booking creation",
                    "type": "object",
                    "required": [
                      "serviceType",
                      "pickupMethod",
                      "pickupHubId",
                      "dropoffMethod",
                      "dropoffHubId",
                      "packageWeightKg",
                      "quoteId"
                    ],
                    "properties": {
                      "quoteId": {
                        "type": "string",
                        "example": "QT-CK-abc123"
                      },
                      "serviceType": {
                        "type": "string",
                        "enum": [
                          "EXPRESS"
                        ]
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "description": "Applies to GO_LIGHT bookings. EXPRESS uses packageWeightKg instead."
                      },
                      "vehicleType": {
                        "type": "string",
                        "enum": [
                          "BIKE",
                          "VAN",
                          "TRUCK"
                        ]
                      },
                      "externalReference": {
                        "type": "string",
                        "example": "INV-1001"
                      },
                      "requesterName": {
                        "type": "string",
                        "example": "Nkem Okafor"
                      },
                      "recipientName": {
                        "type": "string",
                        "example": "Amina Yusuf"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "example": "+2348012345678"
                      },
                      "dropoffPhone": {
                        "type": "string",
                        "example": "+2348098765432"
                      },
                      "packageDescription": {
                        "type": "string",
                        "example": "Small parcel - documents"
                      },
                      "deliveryNote": {
                        "type": "string",
                        "example": "Leave at reception after OTP confirmation."
                      },
                      "promoCode": {
                        "type": "string",
                        "example": "WELCOME50"
                      },
                      "scheduledAt": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.01,
                        "maximum": 50,
                        "description": "Required for ELA Express bookings."
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_DROPOFF"
                        ],
                        "description": "Use HUB_DROPOFF when the sender will drop the parcel at an ELA hub returned by GET /partner-api/hubs."
                      },
                      "pickupHubId": {
                        "type": "string",
                        "description": "Required when pickupMethod is HUB_DROPOFF. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_lagos"
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_PICKUP"
                        ],
                        "description": "Use HUB_PICKUP when the receiver will collect the parcel from an ELA hub returned by GET /partner-api/hubs."
                      },
                      "dropoffHubId": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HUB_PICKUP. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_aba"
                      }
                    }
                  }
                ]
              },
              "examples": {
                "standardClick": {
                  "summary": "Standard CLICK booking",
                  "value": {
                    "quoteId": "quote_demo_123",
                    "serviceType": "CLICK",
                    "vehicleType": "BIKE",
                    "pickupAddress": "15 Admiralty Way, Lekki Phase 1",
                    "pickupLatitude": 6.4541,
                    "pickupLongitude": 3.3947,
                    "pickupPhone": "+2348011111111",
                    "dropoffAddress": "19 Admiralty Road, Lekki Phase 1",
                    "dropoffLatitude": 6.4612,
                    "dropoffLongitude": 3.401,
                    "dropoffPhone": "+2348022222222",
                    "packageDescription": "Small parcel - documents"
                  }
                },
                "express": {
                  "summary": "ELA Express booking",
                  "value": {
                    "quoteId": "quote_demo_123",
                    "serviceType": "EXPRESS",
                    "vehicleType": "VAN",
                    "packageWeightKg": 12.5,
                    "pickupAddress": "Ikeja, Lagos State",
                    "pickupLatitude": 6.6018,
                    "pickupLongitude": 3.3515,
                    "dropoffAddress": "Aba, Abia State",
                    "dropoffLatitude": 5.1214,
                    "dropoffLongitude": 7.3733
                  }
                },
                "goLightHubDropoff": {
                  "summary": "GO Light hub dropoff to home delivery",
                  "value": {
                    "quoteId": "quote_demo_123",
                    "serviceType": "GO_LIGHT",
                    "vehicleType": "VAN",
                    "deliveryMode": "STANDARD",
                    "pickupMethod": "HUB_DROPOFF",
                    "pickupHubId": "hub_partner_lagos",
                    "dropoffMethod": "HOME_DELIVERY",
                    "dropoffAddress": "Aba, Abia State",
                    "dropoffLatitude": 5.1214,
                    "dropoffLongitude": 7.3733,
                    "dropoffPhone": "+2348022222222",
                    "packageDescription": "Two cartons of packaged goods"
                  }
                },
                "expressHubToHub": {
                  "summary": "EXPRESS hub dropoff to hub pickup",
                  "value": {
                    "quoteId": "quote_demo_123",
                    "serviceType": "EXPRESS",
                    "vehicleType": "VAN",
                    "packageWeightKg": 12.5,
                    "pickupMethod": "HUB_DROPOFF",
                    "pickupHubId": "hub_partner_lagos",
                    "dropoffMethod": "HUB_PICKUP",
                    "dropoffHubId": "hub_partner_aba",
                    "packageDescription": "Urgent stock transfer"
                  }
                },
                "multiStop": {
                  "summary": "CLICK multi-stop booking",
                  "value": {
                    "quoteId": "quote_demo_123",
                    "serviceType": "CLICK",
                    "orderMode": "MULTI_STOP",
                    "stops": [
                      {
                        "type": "PICKUP",
                        "address": "15 Admiralty Way",
                        "latitude": 6.4541,
                        "longitude": 3.3947
                      },
                      {
                        "type": "PICKUP",
                        "address": "19 Admiralty Road",
                        "latitude": 6.4612,
                        "longitude": 3.401
                      },
                      {
                        "type": "DROPOFF",
                        "address": "24 Ozumba Mbadiwe",
                        "latitude": 6.4281,
                        "longitude": 3.4219
                      }
                    ]
                  }
                },
                "hubRouted": {
                  "summary": "GO Light home pickup to hub pickup",
                  "value": {
                    "quoteId": "quote_demo_123",
                    "serviceType": "GO_LIGHT",
                    "vehicleType": "VAN",
                    "pickupMethod": "HOME_PICKUP",
                    "pickupAddress": "Victoria Island, Lagos State",
                    "pickupLatitude": 6.4281,
                    "pickupLongitude": 3.4219,
                    "dropoffMethod": "HUB_PICKUP",
                    "dropoffHubId": "hub_partner_aba"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Booking created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiCreateBookingResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Create a partner booking from a quote",
        "tags": [
          "Partner Booking API"
        ]
      },
      "get": {
        "operationId": "PartnerApiController_listBookings",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "default": 1,
              "example": 1,
              "type": "integer"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25,
              "type": "integer"
            }
          },
          {
            "name": "status",
            "required": false,
            "in": "query",
            "schema": {
              "example": "DELIVERED",
              "type": "string",
              "enum": [
                "PENDING_PAYMENT",
                "SCHEDULED",
                "SEARCHING",
                "ASSIGNED",
                "ENROUTE_PICKUP",
                "PICKED_UP",
                "ENROUTE_DROPOFF",
                "AWAITING_CONFIRMATION",
                "DELIVERED",
                "AWAITING_PAYMENT",
                "CANCELLED"
              ]
            }
          },
          {
            "name": "serviceType",
            "required": false,
            "in": "query",
            "schema": {
              "example": "CLICK",
              "type": "string",
              "enum": [
                "CLICK",
                "GO_LIGHT",
                "EXPRESS"
              ]
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "schema": {
              "example": "ELA-1234",
              "type": "string"
            }
          },
          {
            "name": "from",
            "required": false,
            "in": "query",
            "schema": {
              "example": "2026-05-01T00:00:00.000Z",
              "type": "string"
            }
          },
          {
            "name": "to",
            "required": false,
            "in": "query",
            "schema": {
              "example": "2026-05-11T23:59:59.000Z",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Partner bookings",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiBookingsPageDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "List partner bookings for the authenticated organization",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/bookings/{id}/tracking": {
      "get": {
        "operationId": "PartnerApiController_getBookingTracking",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Booking tracking snapshot",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiTrackingSnapshotDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Get a partner-scoped live tracking snapshot for a booking",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/bookings/{id}": {
      "get": {
        "operationId": "PartnerApiController_getBooking",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Partner booking detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiBookingDetailDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Get a partner booking by ID",
        "tags": [
          "Partner Booking API"
        ]
      },
      "patch": {
        "operationId": "PartnerApiController_updateBooking",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePartnerApiBookingDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Partner booking updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiBookingDetailDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Update safe pre-pickup partner booking fields",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/bookings/{id}/payment": {
      "post": {
        "operationId": "PartnerApiController_payBooking",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InitializePartnerApiBookingPaymentDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Booking payment intent processed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiPaymentInitializationResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Pay a partner booking invoice with a dashboard-saved card",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/bookings/{id}/cancel": {
      "post": {
        "operationId": "PartnerApiController_cancelBooking",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelPartnerShipmentDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Partner booking cancelled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiCancelBookingResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Cancel a partner booking when cancellation is still allowed",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/quote-requests": {
      "post": {
        "description": "GO Bulk uses the manual quote-request lifecycle. For hub endpoints, read hub ids from GET /partner-api/hubs and set pickupMethod=HUB_DROPOFF with pickupHubId and/or dropoffMethod=HUB_PICKUP with dropoffHubId.",
        "operationId": "PartnerApiController_createQuoteRequest",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Create a GO Bulk manual quote request. Route fields are required according to pickupMethod and dropoffMethod.",
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "title": "GO Bulk home pickup to home delivery",
                    "type": "object",
                    "required": [
                      "itemDescription",
                      "pickupAddress",
                      "pickupLatitude",
                      "pickupLongitude",
                      "dropoffAddress",
                      "dropoffLatitude",
                      "dropoffLongitude"
                    ],
                    "properties": {
                      "itemDescription": {
                        "type": "string",
                        "example": "20 cartons of office furniture"
                      },
                      "quantity": {
                        "type": "integer",
                        "minimum": 1,
                        "default": 1,
                        "example": 3
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.1,
                        "description": "Estimated package weight in kg.",
                        "example": 24000
                      },
                      "declaredValueKobo": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Declared item value in kobo."
                      },
                      "photoUrls": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "format": "uri"
                        },
                        "description": "Externally hosted HTTPS item photo URLs are recommended for public API integrations."
                      },
                      "specialHandlingRequirement": {
                        "type": "string",
                        "maxLength": 2000,
                        "description": "Optional handling instructions for operations review."
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "default": "STANDARD"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "maxLength": 32
                      },
                      "dropPhone": {
                        "type": "string",
                        "maxLength": 32
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_PICKUP"
                        ],
                        "default": "HOME_PICKUP",
                        "description": "Use HOME_PICKUP when ELA should collect from a sender address."
                      },
                      "pickupAddress": {
                        "type": "string",
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_DELIVERY"
                        ],
                        "default": "HOME_DELIVERY",
                        "description": "Use HOME_DELIVERY when ELA should deliver to a receiver address."
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      }
                    }
                  },
                  {
                    "title": "GO Bulk home pickup to hub pickup",
                    "type": "object",
                    "required": [
                      "itemDescription",
                      "dropoffMethod",
                      "dropoffHubId",
                      "pickupAddress",
                      "pickupLatitude",
                      "pickupLongitude"
                    ],
                    "properties": {
                      "itemDescription": {
                        "type": "string",
                        "example": "20 cartons of office furniture"
                      },
                      "quantity": {
                        "type": "integer",
                        "minimum": 1,
                        "default": 1,
                        "example": 3
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.1,
                        "description": "Estimated package weight in kg.",
                        "example": 24000
                      },
                      "declaredValueKobo": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Declared item value in kobo."
                      },
                      "photoUrls": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "format": "uri"
                        },
                        "description": "Externally hosted HTTPS item photo URLs are recommended for public API integrations."
                      },
                      "specialHandlingRequirement": {
                        "type": "string",
                        "maxLength": 2000,
                        "description": "Optional handling instructions for operations review."
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "default": "STANDARD"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "maxLength": 32
                      },
                      "dropPhone": {
                        "type": "string",
                        "maxLength": 32
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_PICKUP"
                        ],
                        "default": "HOME_PICKUP",
                        "description": "Use HOME_PICKUP when ELA should collect from a sender address."
                      },
                      "pickupAddress": {
                        "type": "string",
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "pickupLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when pickupMethod is HOME_PICKUP."
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_PICKUP"
                        ],
                        "description": "Use HUB_PICKUP when the receiver will collect the parcel from an ELA hub returned by GET /partner-api/hubs."
                      },
                      "dropoffHubId": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HUB_PICKUP. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_aba"
                      }
                    }
                  },
                  {
                    "title": "GO Bulk hub dropoff to home delivery",
                    "type": "object",
                    "required": [
                      "itemDescription",
                      "pickupMethod",
                      "pickupHubId",
                      "dropoffAddress",
                      "dropoffLatitude",
                      "dropoffLongitude"
                    ],
                    "properties": {
                      "itemDescription": {
                        "type": "string",
                        "example": "20 cartons of office furniture"
                      },
                      "quantity": {
                        "type": "integer",
                        "minimum": 1,
                        "default": 1,
                        "example": 3
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.1,
                        "description": "Estimated package weight in kg.",
                        "example": 24000
                      },
                      "declaredValueKobo": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Declared item value in kobo."
                      },
                      "photoUrls": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "format": "uri"
                        },
                        "description": "Externally hosted HTTPS item photo URLs are recommended for public API integrations."
                      },
                      "specialHandlingRequirement": {
                        "type": "string",
                        "maxLength": 2000,
                        "description": "Optional handling instructions for operations review."
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "default": "STANDARD"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "maxLength": 32
                      },
                      "dropPhone": {
                        "type": "string",
                        "maxLength": 32
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_DROPOFF"
                        ],
                        "description": "Use HUB_DROPOFF when the sender will drop the parcel at an ELA hub returned by GET /partner-api/hubs."
                      },
                      "pickupHubId": {
                        "type": "string",
                        "description": "Required when pickupMethod is HUB_DROPOFF. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_lagos"
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HOME_DELIVERY"
                        ],
                        "default": "HOME_DELIVERY",
                        "description": "Use HOME_DELIVERY when ELA should deliver to a receiver address."
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLatitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      },
                      "dropoffLongitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180,
                        "description": "Required when dropoffMethod is HOME_DELIVERY."
                      }
                    }
                  },
                  {
                    "title": "GO Bulk hub dropoff to hub pickup",
                    "type": "object",
                    "required": [
                      "itemDescription",
                      "pickupMethod",
                      "pickupHubId",
                      "dropoffMethod",
                      "dropoffHubId"
                    ],
                    "properties": {
                      "itemDescription": {
                        "type": "string",
                        "example": "20 cartons of office furniture"
                      },
                      "quantity": {
                        "type": "integer",
                        "minimum": 1,
                        "default": 1,
                        "example": 3
                      },
                      "packageWeightKg": {
                        "type": "number",
                        "minimum": 0.1,
                        "description": "Estimated package weight in kg.",
                        "example": 24000
                      },
                      "declaredValueKobo": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "Declared item value in kobo."
                      },
                      "photoUrls": {
                        "type": "array",
                        "maxItems": 10,
                        "items": {
                          "type": "string",
                          "format": "uri"
                        },
                        "description": "Externally hosted HTTPS item photo URLs are recommended for public API integrations."
                      },
                      "specialHandlingRequirement": {
                        "type": "string",
                        "maxLength": 2000,
                        "description": "Optional handling instructions for operations review."
                      },
                      "deliveryMode": {
                        "type": "string",
                        "enum": [
                          "STANDARD",
                          "EXPRESS"
                        ],
                        "default": "STANDARD"
                      },
                      "pickupPhone": {
                        "type": "string",
                        "maxLength": 32
                      },
                      "dropPhone": {
                        "type": "string",
                        "maxLength": 32
                      },
                      "pickupMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_DROPOFF"
                        ],
                        "description": "Use HUB_DROPOFF when the sender will drop the parcel at an ELA hub returned by GET /partner-api/hubs."
                      },
                      "pickupHubId": {
                        "type": "string",
                        "description": "Required when pickupMethod is HUB_DROPOFF. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_lagos"
                      },
                      "dropoffMethod": {
                        "type": "string",
                        "enum": [
                          "HUB_PICKUP"
                        ],
                        "description": "Use HUB_PICKUP when the receiver will collect the parcel from an ELA hub returned by GET /partner-api/hubs."
                      },
                      "dropoffHubId": {
                        "type": "string",
                        "description": "Required when dropoffMethod is HUB_PICKUP. Use an id from GET /partner-api/hubs.",
                        "example": "hub_partner_aba"
                      }
                    }
                  }
                ]
              },
              "examples": {
                "homeToHome": {
                  "summary": "GO Bulk home pickup to home delivery",
                  "value": {
                    "itemDescription": "20 cartons of office furniture",
                    "quantity": 3,
                    "packageWeightKg": 24000,
                    "pickupMethod": "HOME_PICKUP",
                    "pickupAddress": "15 Allen Avenue, Ikeja",
                    "pickupLatitude": 6.6018,
                    "pickupLongitude": 3.3515,
                    "dropoffMethod": "HOME_DELIVERY",
                    "dropoffAddress": "24 Ozumba Mbadiwe Avenue, Victoria Island",
                    "dropoffLatitude": 6.4281,
                    "dropoffLongitude": 3.4219
                  }
                },
                "hubToHub": {
                  "summary": "GO Bulk sender hub dropoff to receiver hub pickup",
                  "value": {
                    "itemDescription": "50 cartons of retail stock",
                    "quantity": 5,
                    "packageWeightKg": 18000,
                    "pickupMethod": "HUB_DROPOFF",
                    "pickupHubId": "hub_partner_lagos",
                    "dropoffMethod": "HUB_PICKUP",
                    "dropoffHubId": "hub_partner_aba",
                    "deliveryMode": "STANDARD",
                    "specialHandlingRequirement": "Keep cartons dry and upright."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "GO Bulk quote request created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiQuoteRequestResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Create a GO Bulk manual quote request",
        "tags": [
          "Partner Booking API"
        ]
      },
      "get": {
        "operationId": "PartnerApiController_listQuoteRequests",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "default": 1,
              "example": 1,
              "type": "integer"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25,
              "type": "integer"
            }
          },
          {
            "name": "status",
            "required": false,
            "in": "query",
            "schema": {
              "example": "QUOTED",
              "type": "string",
              "enum": [
                "UNDER_REVIEW",
                "QUOTED",
                "PAYMENT_PENDING",
                "PAID",
                "AWAITING_PAYMENT",
                "ACCEPTED",
                "REJECTED",
                "EXPIRED",
                "CANCELLED"
              ]
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "schema": {
              "example": "QR-GO-1234",
              "type": "string"
            }
          },
          {
            "name": "from",
            "required": false,
            "in": "query",
            "schema": {
              "example": "2026-05-01T00:00:00.000Z",
              "type": "string"
            }
          },
          {
            "name": "to",
            "required": false,
            "in": "query",
            "schema": {
              "example": "2026-05-11T23:59:59.000Z",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "GO Bulk quote requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiQuoteRequestsPageDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "List GO Bulk quote requests for the authenticated organization",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/quote-requests/{id}": {
      "get": {
        "operationId": "PartnerApiController_getQuoteRequest",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "GO Bulk quote request detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiQuoteRequestResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Get a GO Bulk quote request by ID",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/quote-requests/{id}/payment": {
      "post": {
        "operationId": "PartnerApiController_initializeQuoteRequestPayment",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InitializePartnerApiQuoteRequestPaymentDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "GO Bulk payment initialized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiPaymentInitializationResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Pay a quoted GO Bulk request with approved credit or a saved card",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/quote-requests/{id}/credit-accept": {
      "post": {
        "operationId": "PartnerApiController_creditAcceptQuoteRequest",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerApiTermsAcceptanceDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "GO Bulk quote request accepted on partner credit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiQuoteRequestResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Accept a quoted GO Bulk request using partner credit",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/haulage/quote-requests": {
      "post": {
        "operationId": "PartnerApiController_createHaulageQuoteRequest",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerApiCreateHaulageQuoteRequestDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "HAUL quote request created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiHaulageQuoteResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Create an ELA Haulage quote request",
        "tags": [
          "Partner Booking API"
        ]
      },
      "get": {
        "operationId": "PartnerApiController_listHaulageQuoteRequests",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "default": 1,
              "example": 1,
              "type": "integer"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25,
              "type": "integer"
            }
          },
          {
            "name": "status",
            "required": false,
            "in": "query",
            "schema": {
              "example": "QUOTED",
              "type": "string",
              "enum": [
                "REQUESTED",
                "UNDER_REVIEW",
                "QUOTED",
                "ACCEPTED",
                "DECLINED",
                "PAYMENT_PENDING",
                "PAYMENT_CONFIRMED",
                "ASSIGNMENT_IN_PROGRESS",
                "TRUCK_ASSIGNED",
                "CANCELLED"
              ]
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "schema": {
              "example": "cement",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "HAUL quote requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiHaulageQuoteRequestsPageDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "List ELA Haulage quote requests for the authenticated organization",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/haulage/quote-requests/{id}": {
      "get": {
        "operationId": "PartnerApiController_getHaulageQuoteRequest",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "HAUL quote request detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiHaulageQuoteResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Get an ELA Haulage quote request",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/haulage/quote-requests/{id}/accept": {
      "post": {
        "operationId": "PartnerApiController_acceptHaulageQuotation",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerApiTermsAcceptanceDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "HAUL quotation accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiHaulageQuoteResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Accept an ELA Haulage quotation",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/haulage/quote-requests/{id}/decline": {
      "post": {
        "operationId": "PartnerApiController_declineHaulageQuotation",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RejectHaulageQuoteRequestDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "HAUL quotation declined",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiHaulageQuoteResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Decline an ELA Haulage quotation",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/haulage/quotations/{id}/payment": {
      "post": {
        "operationId": "PartnerApiController_initializeHaulagePayment",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InitializePartnerApiHaulagePaymentDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "HAUL payment initialized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiPaymentInitializationResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Pay an ELA Haulage quotation with approved credit or a saved card",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/haulage/quotations/{id}/credit-accept": {
      "post": {
        "operationId": "PartnerApiController_creditAcceptHaulageQuotation",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerApiTermsAcceptanceDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "HAUL quotation accepted on partner credit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiHaulageQuoteResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Accept an ELA Haulage quotation on approved partner credit",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/payments/{reference}": {
      "get": {
        "operationId": "PartnerApiController_getPaymentStatus",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reference",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Payment status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiPaymentStatusResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Get public Partner API payment status by reference",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/haulage/tracking/trucks": {
      "get": {
        "operationId": "PartnerApiController_listHaulageTrackingTrucks",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "HAUL tracking trucks",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiHaulageTrackingListDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "List partner-scoped active ELA Haulage truck tracking rows",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/haulage/tracking/trucks/{assignmentId}": {
      "get": {
        "operationId": "PartnerApiController_getHaulageTrackingTruck",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assignmentId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "HAUL tracking truck detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiHaulageTrackingAssignmentDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Get partner-scoped ELA Haulage truck tracking detail",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/haulage/trips/{tripId}": {
      "get": {
        "operationId": "PartnerApiController_getHaulageTrip",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tripId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "HAUL trip detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiHaulageTripDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found in this partner organization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Get partner-scoped ELA Haulage trip detail",
        "tags": [
          "Partner Booking API"
        ]
      }
    },
    "/partner-api/support-cases": {
      "post": {
        "description": "Creates a durable support case scoped to the authenticated partner organization. If a related booking, quote request, haulage trip, or tracking assignment is supplied, ownership is verified before the case is created.",
        "operationId": "PartnerApiSupportCasesController_create",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePartnerApiSupportCaseDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Support case created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiSupportCaseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API support request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required support capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Support case or related partner resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Create a partner-scoped support case",
        "tags": [
          "Partner Support API"
        ]
      },
      "get": {
        "operationId": "PartnerApiSupportCasesController_list",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "default": 1,
              "example": 1,
              "type": "integer"
            }
          },
          {
            "name": "limit",
            "required": false,
            "in": "query",
            "schema": {
              "minimum": 1,
              "maximum": 100,
              "default": 25,
              "example": 25,
              "type": "integer"
            }
          },
          {
            "name": "status",
            "required": false,
            "in": "query",
            "schema": {
              "example": "OPEN",
              "type": "string",
              "enum": [
                "OPEN",
                "IN_PROGRESS",
                "WAITING_ON_USER",
                "WAITING_ON_INTERNAL",
                "RESOLVED",
                "CLOSED",
                "ARCHIVED",
                "VOIDED"
              ]
            }
          },
          {
            "name": "priority",
            "required": false,
            "in": "query",
            "schema": {
              "example": "HIGH",
              "type": "string",
              "enum": [
                "LOW",
                "MEDIUM",
                "HIGH",
                "CRITICAL"
              ]
            }
          },
          {
            "name": "category",
            "required": false,
            "in": "query",
            "schema": {
              "example": "DELIVERY_ISSUE",
              "type": "string",
              "enum": [
                "DELIVERY_ISSUE",
                "PAYMENT_BILLING",
                "RIDER_DRIVER",
                "CUSTOMER_PARTNER",
                "APP_TECHNICAL",
                "DISPATCH",
                "HAULAGE",
                "ERRAND_DISPUTE",
                "QUALITY",
                "SAFETY",
                "ALERT",
                "OTHER"
              ]
            }
          },
          {
            "name": "search",
            "required": false,
            "in": "query",
            "schema": {
              "example": "INC-20260621",
              "type": "string"
            }
          },
          {
            "name": "relatedResourceType",
            "required": false,
            "in": "query",
            "schema": {
              "example": "BOOKING",
              "type": "string",
              "enum": [
                "BOOKING",
                "QUOTE_REQUEST",
                "HAULAGE_QUOTE_REQUEST",
                "HAULAGE_TRIP",
                "TRACKING_ASSIGNMENT"
              ]
            }
          },
          {
            "name": "relatedResourceId",
            "required": false,
            "in": "query",
            "schema": {
              "example": "cm1order123",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Support cases",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiSupportCasesPageDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API support request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required support capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Support case or related partner resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "List partner support cases for the authenticated organization",
        "tags": [
          "Partner Support API"
        ]
      }
    },
    "/partner-api/support-cases/{id}": {
      "get": {
        "operationId": "PartnerApiSupportCasesController_get",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Support case detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiSupportCaseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API support request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required support capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Support case or related partner resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Get a partner support case by ID",
        "tags": [
          "Partner Support API"
        ]
      }
    },
    "/partner-api/support-cases/{id}/comments": {
      "post": {
        "operationId": "PartnerApiSupportCasesController_addComment",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerApiSupportCaseCommentDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Support case updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiSupportCaseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API support request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required support capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Support case or related partner resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Add a public partner comment to a support case",
        "tags": [
          "Partner Support API"
        ]
      }
    },
    "/partner-api/support-cases/{id}/reopen": {
      "post": {
        "operationId": "PartnerApiSupportCasesController_reopen",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReopenPartnerApiSupportCaseDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Support case reopened",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiSupportCaseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API support request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required support capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Support case or related partner resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Reopen a resolved or closed support case",
        "tags": [
          "Partner Support API"
        ]
      }
    },
    "/partner-api/support-cases/{id}/close": {
      "post": {
        "operationId": "PartnerApiSupportCasesController_close",
        "parameters": [
          {
            "name": "X-ELA-API-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClosePartnerApiSupportCaseDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Support case closed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiSupportCaseDto"
                }
              }
            }
          },
          "400": {
            "description": "Invalid public Partner API support request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Partner API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "Partner API key lacks required support capability",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Support case or related partner resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerApiErrorResponseDto"
                }
              }
            }
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Close a support case after partner confirmation",
        "tags": [
          "Partner Support API"
        ]
      }
    }
  },
  "info": {
    "title": "ELA Partner API",
    "description": "Public API for ELA partner organizations.\n\nPartners can list active hubs, create automatically priced booking quotes and credit-backed bookings for CLICK, GO_LIGHT, and EXPRESS, list and manage bookings, fetch partner-scoped booking tracking snapshots, and create manually priced GO_BULK quote requests.\n\nGO_BULK is not accepted by the direct booking quote or booking endpoints. Use `/partner-api/quote-requests` to request a manual GO_BULK quote, `/partner-api/quote-requests/{id}/payment` to initialize online payment, or `/partner-api/quote-requests/{id}/credit-accept` to accept a quoted, unexpired request using partner credit.\n\nELA Haulage uses `/partner-api/haulage/*` endpoints for quote requests, quotation acceptance, payment initialization, credit acceptance, and partner-scoped trip/truck tracking. HAUL is not an automatically priced direct booking service.\n\nPartner support cases use `/partner-api/support-cases` and require `support:create` or `support:read`. Support cases are scoped to the authenticated partner organization and never expose admin-only notes, internal audit, unrelated organization data, full finance ledgers, or payment proofs.\n\nThis API key cannot manage partner organization members, billing settings, users, admin resources, full finance ledgers, or payment-proof workflows.\n\nMutating requests require an `Idempotency-Key` header. Reusing the same key with the same request replays the original response; reusing it with a different request is rejected.",
    "version": "1.0.0",
    "contact": {}
  },
  "tags": [
    {
      "name": "Partner Booking API",
      "description": "Partner booking, GO Bulk quote/payment, HAUL quote/payment, and tracking endpoints"
    },
    {
      "name": "Partner Support API",
      "description": "Partner-scoped support case creation, status, comments, and closure"
    }
  ],
  "servers": [
    {
      "url": "https://services.enviablelogistics.com/api/v1",
      "description": "Production"
    }
  ],
  "components": {
    "securitySchemes": {
      "PartnerApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-ELA-API-Key",
        "description": "Partner organization API key generated in Partner Settings > API & Integration."
      }
    },
    "schemas": {
      "PartnerApiErrorResponseDto": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "example": 400
          },
          "error": {
            "type": "string",
            "example": "Bad Request"
          },
          "message": {
            "type": "object",
            "example": "HAUL bookings must use /partner-api/haulage/quote-requests."
          },
          "path": {
            "type": "string",
            "example": "/api/v1/partner-api/bookings"
          },
          "timestamp": {
            "type": "string",
            "example": "2026-06-18T10:30:00.000Z"
          }
        },
        "required": [
          "statusCode",
          "error",
          "message",
          "path",
          "timestamp"
        ]
      },
      "PartnerApiHubDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cmf8q9b1u0000kz08r2h7x3fd"
          },
          "name": {
            "type": "string",
            "example": "Ikeja Loading Hub"
          },
          "address": {
            "type": "string",
            "example": "15 Allen Avenue, Ikeja"
          },
          "latitude": {
            "type": "number",
            "example": 6.6018
          },
          "longitude": {
            "type": "number",
            "example": 3.3515
          }
        },
        "required": [
          "id",
          "name",
          "address",
          "latitude",
          "longitude"
        ]
      },
      "PartnerApiExpressPricingBreakdownDto": {
        "type": "object",
        "properties": {
          "standardServiceType": {
            "type": "string",
            "example": "GO_LIGHT"
          },
          "standardVehicleType": {
            "type": "string",
            "example": "VAN"
          },
          "standardTotalPrice": {
            "type": "number",
            "example": 200000
          },
          "premiumMultiplier": {
            "type": "number",
            "example": 1.8
          },
          "premiumAmount": {
            "type": "number",
            "example": 160000
          },
          "packageWeightKg": {
            "type": "number",
            "nullable": true,
            "example": 12.5
          },
          "maxWeightKg": {
            "type": "number",
            "example": 50
          }
        },
        "required": [
          "standardServiceType",
          "standardVehicleType",
          "standardTotalPrice",
          "premiumMultiplier",
          "premiumAmount",
          "maxWeightKg"
        ]
      },
      "PartnerApiBookingQuoteResponseDto": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean",
            "example": true
          },
          "quoteId": {
            "type": "string",
            "example": "quote_abc123"
          },
          "expiresAt": {
            "type": "string",
            "example": "2026-06-20T09:05:00.000Z"
          },
          "estimatedAmountKobo": {
            "type": "number",
            "example": 360000
          },
          "breakdown": {
            "type": "object",
            "example": {
              "totalPrice": 360000,
              "distanceKm": 7.2,
              "estimatedMinutes": 28,
              "currency": "NGN"
            }
          },
          "expressPricing": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiExpressPricingBreakdownDto"
              }
            ]
          },
          "distanceKm": {
            "type": "number",
            "nullable": true,
            "example": 7.2
          },
          "estimatedMinutes": {
            "type": "number",
            "nullable": true,
            "example": 28
          },
          "serviceType": {
            "type": "string",
            "example": "EXPRESS"
          },
          "deliveryMode": {
            "type": "string",
            "nullable": true,
            "example": "STANDARD"
          },
          "vehicleType": {
            "type": "string",
            "example": "VAN"
          },
          "orderMode": {
            "type": "string",
            "example": "STANDARD"
          },
          "billingProduct": {
            "type": "string",
            "example": "ELA_EXPRESS"
          },
          "invoiceCadence": {
            "type": "string",
            "example": "PER_DELIVERY"
          }
        },
        "required": [
          "valid",
          "quoteId",
          "estimatedAmountKobo",
          "serviceType",
          "vehicleType"
        ]
      },
      "PartnerApiMoneySummaryDto": {
        "type": "object",
        "properties": {
          "subtotalKobo": {
            "type": "number",
            "example": 150000
          },
          "discountKobo": {
            "type": "number",
            "nullable": true,
            "example": 0
          },
          "surchargeKobo": {
            "type": "number",
            "nullable": true,
            "example": 0
          },
          "finalAmountKobo": {
            "type": "number",
            "nullable": true,
            "example": 150000
          },
          "currency": {
            "type": "string",
            "nullable": true,
            "example": "NGN"
          }
        },
        "required": [
          "subtotalKobo"
        ]
      },
      "PartnerApiRouteEndpointDto": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "nullable": true,
            "example": "15 Admiralty Way, Lekki Phase 1"
          },
          "latitude": {
            "type": "number",
            "nullable": true,
            "example": 6.454123
          },
          "longitude": {
            "type": "number",
            "nullable": true,
            "example": 3.394712
          },
          "phone": {
            "type": "string",
            "nullable": true,
            "example": "+2348012345678"
          }
        }
      },
      "PartnerApiBookingRouteDto": {
        "type": "object",
        "properties": {
          "pickup": {
            "$ref": "#/components/schemas/PartnerApiRouteEndpointDto"
          },
          "dropoff": {
            "$ref": "#/components/schemas/PartnerApiRouteEndpointDto"
          },
          "distanceKm": {
            "type": "number",
            "nullable": true,
            "example": 7.2
          },
          "estimatedMinutes": {
            "type": "number",
            "nullable": true,
            "example": 28
          }
        },
        "required": [
          "pickup",
          "dropoff"
        ]
      },
      "PartnerApiBookingCargoDto": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true,
            "example": "Small parcel - documents"
          },
          "weightKg": {
            "type": "number",
            "nullable": true,
            "example": 12.5
          },
          "deliveryMode": {
            "type": "string",
            "nullable": true,
            "example": "STANDARD"
          }
        }
      },
      "PartnerApiTimelineEventDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "example": "CREATED"
          },
          "label": {
            "type": "string",
            "nullable": true,
            "example": "Booking created"
          },
          "timestamp": {
            "type": "string",
            "example": "2026-06-17T12:00:00.000Z"
          },
          "actor": {
            "type": "string",
            "nullable": true,
            "example": "Partner API"
          }
        },
        "required": [
          "status",
          "timestamp"
        ]
      },
      "PartnerApiRelatedRecordDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "example": "invoice"
          },
          "id": {
            "type": "string",
            "example": "pinv_123"
          },
          "label": {
            "type": "string",
            "example": "PINV-2026-001"
          },
          "status": {
            "type": "string",
            "nullable": true,
            "example": "OPEN"
          },
          "amountKobo": {
            "type": "number",
            "nullable": true,
            "example": 150000
          }
        },
        "required": [
          "type",
          "id",
          "label"
        ]
      },
      "PartnerApiBookingDetailDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cmf8q9order0001"
          },
          "trackingNumber": {
            "type": "string",
            "example": "ELA-12345"
          },
          "serviceType": {
            "type": "string",
            "example": "CLICK"
          },
          "deliveryMode": {
            "type": "string",
            "nullable": true,
            "example": "STANDARD"
          },
          "vehicleType": {
            "type": "string",
            "example": "BIKE"
          },
          "status": {
            "type": "string",
            "example": "SEARCHING"
          },
          "fulfillmentStage": {
            "type": "string",
            "nullable": true,
            "example": "SEARCHING"
          },
          "haulStatus": {
            "type": "string",
            "nullable": true,
            "example": "DELIVERED"
          },
          "paymentMethod": {
            "type": "string",
            "example": "CREDIT"
          },
          "paymentStatus": {
            "type": "string",
            "example": "PENDING"
          },
          "invoiceStatus": {
            "type": "string",
            "nullable": true,
            "example": "OPEN"
          },
          "invoiceDueAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-20T09:00:00.000Z"
          },
          "pickupAddress": {
            "type": "string",
            "nullable": true,
            "example": "15 Admiralty Way, Lekki Phase 1"
          },
          "dropoffAddress": {
            "type": "string",
            "nullable": true,
            "example": "19 Admiralty Road, Lekki Phase 1"
          },
          "requesterName": {
            "type": "string",
            "nullable": true,
            "example": "Nkem Okafor"
          },
          "recipientName": {
            "type": "string",
            "nullable": true,
            "example": "Amina Yusuf"
          },
          "amountKobo": {
            "type": "number",
            "example": 150000
          },
          "finalAmountKobo": {
            "type": "number",
            "nullable": true,
            "example": 150000
          },
          "scheduledAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-20T09:00:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "example": "2026-06-17T12:00:00.000Z"
          },
          "canCancel": {
            "type": "boolean",
            "example": true
          },
          "pickupPhone": {
            "type": "string",
            "nullable": true,
            "example": "+2348012345678"
          },
          "dropoffPhone": {
            "type": "string",
            "nullable": true,
            "example": "+2348098765432"
          },
          "packageDescription": {
            "type": "string",
            "nullable": true,
            "example": "Small parcel - documents"
          },
          "packageWeightKg": {
            "type": "number",
            "nullable": true,
            "example": 12.5
          },
          "distanceKm": {
            "type": "number",
            "nullable": true,
            "example": 7.2
          },
          "estimatedMinutes": {
            "type": "number",
            "nullable": true,
            "example": 28
          },
          "quoteId": {
            "type": "string",
            "nullable": true,
            "example": "quote_abc123"
          },
          "invoiceId": {
            "type": "string",
            "nullable": true,
            "example": "pinv_123"
          },
          "invoiceReference": {
            "type": "string",
            "nullable": true,
            "example": "PINV-2026-001"
          },
          "pricingSummary": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiMoneySummaryDto"
              }
            ]
          },
          "route": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiBookingRouteDto"
              }
            ]
          },
          "cargo": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiBookingCargoDto"
              }
            ]
          },
          "timeline": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiTimelineEventDto"
            }
          },
          "relatedRecords": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiRelatedRecordDto"
            }
          }
        },
        "required": [
          "id",
          "trackingNumber",
          "serviceType",
          "vehicleType",
          "status",
          "paymentMethod",
          "paymentStatus",
          "amountKobo",
          "createdAt",
          "canCancel",
          "timeline",
          "relatedRecords"
        ]
      },
      "PartnerApiInvoiceDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "pinv_123"
          },
          "reference": {
            "type": "string",
            "example": "PINV-2026-001"
          },
          "status": {
            "type": "string",
            "example": "OPEN"
          },
          "subtotalKobo": {
            "type": "number",
            "example": 150000
          },
          "paidKobo": {
            "type": "number",
            "example": 0
          },
          "balanceKobo": {
            "type": "number",
            "example": 150000
          },
          "dueAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-07-02T00:00:00.000Z"
          }
        },
        "required": [
          "id",
          "reference",
          "status",
          "subtotalKobo",
          "paidKobo",
          "balanceKobo"
        ]
      },
      "PartnerApiCreateBookingResponseDto": {
        "type": "object",
        "properties": {
          "order": {
            "$ref": "#/components/schemas/PartnerApiBookingDetailDto"
          },
          "invoice": {
            "$ref": "#/components/schemas/PartnerApiInvoiceDto"
          }
        },
        "required": [
          "order",
          "invoice"
        ]
      },
      "PartnerApiBookingDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cmf8q9order0001"
          },
          "trackingNumber": {
            "type": "string",
            "example": "ELA-12345"
          },
          "serviceType": {
            "type": "string",
            "example": "CLICK"
          },
          "deliveryMode": {
            "type": "string",
            "nullable": true,
            "example": "STANDARD"
          },
          "vehicleType": {
            "type": "string",
            "example": "BIKE"
          },
          "status": {
            "type": "string",
            "example": "SEARCHING"
          },
          "fulfillmentStage": {
            "type": "string",
            "nullable": true,
            "example": "SEARCHING"
          },
          "haulStatus": {
            "type": "string",
            "nullable": true,
            "example": "DELIVERED"
          },
          "paymentMethod": {
            "type": "string",
            "example": "CREDIT"
          },
          "paymentStatus": {
            "type": "string",
            "example": "PENDING"
          },
          "invoiceStatus": {
            "type": "string",
            "nullable": true,
            "example": "OPEN"
          },
          "invoiceDueAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-20T09:00:00.000Z"
          },
          "pickupAddress": {
            "type": "string",
            "nullable": true,
            "example": "15 Admiralty Way, Lekki Phase 1"
          },
          "dropoffAddress": {
            "type": "string",
            "nullable": true,
            "example": "19 Admiralty Road, Lekki Phase 1"
          },
          "requesterName": {
            "type": "string",
            "nullable": true,
            "example": "Nkem Okafor"
          },
          "recipientName": {
            "type": "string",
            "nullable": true,
            "example": "Amina Yusuf"
          },
          "amountKobo": {
            "type": "number",
            "example": 150000
          },
          "finalAmountKobo": {
            "type": "number",
            "nullable": true,
            "example": 150000
          },
          "scheduledAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-20T09:00:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "example": "2026-06-17T12:00:00.000Z"
          },
          "canCancel": {
            "type": "boolean",
            "example": true
          }
        },
        "required": [
          "id",
          "trackingNumber",
          "serviceType",
          "vehicleType",
          "status",
          "paymentMethod",
          "paymentStatus",
          "amountKobo",
          "createdAt",
          "canCancel"
        ]
      },
      "PartnerApiPageMetaDto": {
        "type": "object",
        "properties": {
          "page": {
            "type": "number",
            "example": 1
          },
          "limit": {
            "type": "number",
            "example": 25
          },
          "total": {
            "type": "number",
            "example": 1
          },
          "totalPages": {
            "type": "number",
            "example": 1
          }
        },
        "required": [
          "page",
          "limit",
          "total",
          "totalPages"
        ]
      },
      "PartnerApiBookingsPageDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiBookingDto"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/PartnerApiPageMetaDto"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "PartnerApiTrackingLocationDto": {
        "type": "object",
        "properties": {
          "riderId": {
            "type": "string",
            "example": "rider_account_id"
          },
          "orderId": {
            "type": "string",
            "example": "cmf8q9order0001"
          },
          "latitude": {
            "type": "number",
            "example": 6.4541
          },
          "longitude": {
            "type": "number",
            "example": 3.3947
          },
          "timestamp": {
            "type": "string",
            "example": "2026-06-17T12:00:00.000Z"
          },
          "heading": {
            "type": "number",
            "nullable": true,
            "example": 180
          },
          "speed": {
            "type": "number",
            "nullable": true,
            "example": 32
          }
        },
        "required": [
          "riderId",
          "orderId",
          "latitude",
          "longitude",
          "timestamp"
        ]
      },
      "PartnerApiTrackingEtaDto": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "example": "cmf8q9order0001"
          },
          "estimatedMinutes": {
            "type": "number",
            "example": 18
          },
          "distanceKm": {
            "type": "number",
            "example": 4.6
          },
          "polylineEncoded": {
            "type": "string",
            "nullable": true,
            "example": "enc_polyline"
          },
          "updatedAt": {
            "type": "string",
            "example": "2026-06-17T12:00:00.000Z"
          }
        },
        "required": [
          "orderId",
          "estimatedMinutes",
          "distanceKm",
          "updatedAt"
        ]
      },
      "PartnerApiTrackingTrailPointDto": {
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "example": 6.454123
          },
          "longitude": {
            "type": "number",
            "example": 3.394712
          },
          "timestamp": {
            "type": "string",
            "example": "2026-06-17T12:00:00.000Z"
          }
        },
        "required": [
          "latitude",
          "longitude",
          "timestamp"
        ]
      },
      "PartnerApiTrackingSnapshotDto": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "example": "cmf8q9order0001"
          },
          "trackingNumber": {
            "type": "string",
            "example": "ELA-12345"
          },
          "status": {
            "type": "string",
            "example": "ENROUTE_PICKUP"
          },
          "riderLocation": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiTrackingLocationDto"
              }
            ]
          },
          "eta": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiTrackingEtaDto"
              }
            ]
          },
          "riderName": {
            "type": "string",
            "nullable": true,
            "example": "Amina Yusuf"
          },
          "riderPhone": {
            "type": "string",
            "nullable": true,
            "example": "+2348012345678"
          },
          "pickupLatitude": {
            "type": "number",
            "example": 6.454123
          },
          "pickupLongitude": {
            "type": "number",
            "example": 3.394712
          },
          "dropoffLatitude": {
            "type": "number",
            "example": 6.461212
          },
          "dropoffLongitude": {
            "type": "number",
            "example": 3.401001
          },
          "trail": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiTrackingTrailPointDto"
            }
          }
        },
        "required": [
          "orderId",
          "trackingNumber",
          "status",
          "pickupLatitude",
          "pickupLongitude",
          "dropoffLatitude",
          "dropoffLongitude",
          "trail"
        ]
      },
      "InitializePartnerApiBookingPaymentDto": {
        "type": "object",
        "properties": {
          "paymentMethod": {
            "enum": [
              "SAVED_CARD",
              "CREDIT"
            ],
            "type": "string",
            "example": "SAVED_CARD",
            "description": "Public API payments can use approved partner credit or a dashboard-saved card."
          },
          "paymentMethodId": {
            "type": "string",
            "example": "pm_123",
            "description": "Required for SAVED_CARD unless useDefaultPaymentMethod is true."
          },
          "useDefaultPaymentMethod": {
            "type": "boolean",
            "example": false,
            "description": "When true, the organization default payment method is charged."
          }
        },
        "required": [
          "paymentMethod"
        ]
      },
      "PartnerApiPaymentInitializationResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "pap_1234567890abcdef"
          },
          "resourceType": {
            "type": "string",
            "example": "QUOTE_REQUEST"
          },
          "resourceId": {
            "type": "string",
            "example": "cmf8q9quote0001"
          },
          "paymentMethod": {
            "enum": [
              "SAVED_CARD",
              "CREDIT"
            ],
            "type": "string",
            "example": "SAVED_CARD"
          },
          "amount": {
            "type": "number",
            "example": 750000
          },
          "currency": {
            "type": "string",
            "example": "NGN"
          },
          "status": {
            "enum": [
              "paid",
              "processing",
              "pending_verification",
              "failed",
              "requires_action",
              "cancelled",
              "credit_accepted"
            ],
            "type": "string",
            "example": "paid"
          },
          "reference": {
            "type": "string",
            "example": "pap_ref_1234567890abcdef"
          },
          "paidAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-18T10:30:00.000Z"
          },
          "message": {
            "type": "string",
            "nullable": true,
            "example": "Resolve the saved card in the dashboard."
          }
        },
        "required": [
          "id",
          "resourceType",
          "resourceId",
          "paymentMethod",
          "amount",
          "currency",
          "status",
          "reference"
        ]
      },
      "UpdatePartnerApiBookingDto": {
        "type": "object",
        "properties": {
          "scheduledAt": {
            "type": "string",
            "example": "2026-06-20T09:00:00.000Z"
          },
          "packageDescription": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000,
            "example": "Small parcel - documents"
          },
          "pickupPhone": {
            "type": "string",
            "minLength": 7,
            "maxLength": 32,
            "example": "+2348012345678"
          },
          "dropoffPhone": {
            "type": "string",
            "minLength": 7,
            "maxLength": 32,
            "example": "+2348098765432"
          }
        }
      },
      "CancelPartnerShipmentDto": {
        "type": "object",
        "properties": {
          "customReason": {
            "type": "string",
            "maxLength": 500,
            "example": "Customer requested cancellation before dispatch."
          }
        }
      },
      "PartnerApiCancelBookingResponseDto": {
        "type": "object",
        "properties": {
          "order": {
            "$ref": "#/components/schemas/PartnerApiBookingDetailDto"
          },
          "invoice": {
            "$ref": "#/components/schemas/PartnerApiInvoiceDto"
          }
        },
        "required": [
          "order",
          "invoice"
        ]
      },
      "QuoteCommercialTermsDto": {
        "type": "object",
        "properties": {
          "loadingIncludedMinutes": {
            "type": "number",
            "minimum": 0,
            "example": 120
          },
          "offloadingIncludedMinutes": {
            "type": "number",
            "minimum": 0,
            "example": 120
          },
          "waitingIncludedMinutes": {
            "type": "number",
            "minimum": 0,
            "example": 60
          },
          "loadingPenaltyKoboPerHour": {
            "type": "number",
            "minimum": 0,
            "example": 1500000,
            "description": "Kobo per hour."
          },
          "offloadingPenaltyKoboPerHour": {
            "type": "number",
            "minimum": 0,
            "example": 1500000,
            "description": "Kobo per hour."
          },
          "waitingPenaltyKoboPerHour": {
            "type": "number",
            "minimum": 0,
            "example": 1000000,
            "description": "Kobo per hour."
          },
          "penaltyNotes": {
            "type": "string",
            "maxLength": 1000,
            "example": "Penalty applies after included time and is reviewed by finance before billing."
          }
        }
      },
      "PartnerApiQuoteRequestOrderDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cmf8q9order0001"
          },
          "trackingNumber": {
            "type": "string",
            "example": "ELA-GO-12345"
          },
          "serviceType": {
            "type": "string",
            "example": "GO_BULK"
          },
          "vehicleType": {
            "type": "string",
            "example": "VAN"
          },
          "status": {
            "type": "string",
            "example": "SEARCHING"
          },
          "fulfillmentStage": {
            "type": "string",
            "nullable": true,
            "example": "PARCEL_RECEIVED_AT_HUB"
          },
          "paymentMethod": {
            "type": "string",
            "example": "CREDIT"
          },
          "paymentStatus": {
            "type": "string",
            "example": "PENDING"
          },
          "amountKobo": {
            "type": "number",
            "example": 4500000
          },
          "finalAmountKobo": {
            "type": "number",
            "nullable": true,
            "example": 4500000
          },
          "pickupAddress": {
            "type": "string",
            "nullable": true,
            "example": "15 Allen Avenue, Ikeja"
          },
          "dropoffAddress": {
            "type": "string",
            "nullable": true,
            "example": "24 Marina Road, Lagos Island"
          },
          "requesterName": {
            "type": "string",
            "nullable": true,
            "example": "Nkem Okafor"
          },
          "recipientName": {
            "type": "string",
            "nullable": true,
            "example": "Amina Yusuf"
          },
          "deliveryMode": {
            "type": "string",
            "nullable": true,
            "example": "STANDARD"
          },
          "scheduledAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-20T09:00:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "example": "2026-06-17T12:00:00.000Z"
          }
        },
        "required": [
          "id",
          "trackingNumber",
          "serviceType",
          "vehicleType",
          "status",
          "paymentMethod",
          "paymentStatus",
          "amountKobo",
          "createdAt"
        ]
      },
      "PartnerApiQuoteRequestRelatedRecordDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "example": "order"
          },
          "id": {
            "type": "string",
            "example": "cmf8q9record0001"
          },
          "label": {
            "type": "string",
            "example": "ELA-GO-12345"
          },
          "status": {
            "type": "string",
            "nullable": true,
            "example": "SEARCHING"
          },
          "amountKobo": {
            "type": "number",
            "nullable": true,
            "example": 4500000
          },
          "description": {
            "type": "string",
            "nullable": true,
            "example": "15 Allen Avenue to 24 Marina Road"
          }
        },
        "required": [
          "type",
          "id",
          "label"
        ]
      },
      "PartnerApiQuoteRequestResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cmf8q9quote0001"
          },
          "requestNumber": {
            "type": "string",
            "example": "QR-GO-12345"
          },
          "status": {
            "type": "string",
            "example": "QUOTED"
          },
          "serviceType": {
            "type": "string",
            "example": "GO_BULK"
          },
          "vehicleType": {
            "type": "string",
            "nullable": true,
            "example": "VAN"
          },
          "deliveryMode": {
            "type": "string",
            "nullable": true,
            "example": "STANDARD"
          },
          "pickupMethod": {
            "nullable": true,
            "enum": [
              "HOME_PICKUP",
              "HUB_DROPOFF"
            ],
            "type": "string"
          },
          "dropoffMethod": {
            "nullable": true,
            "enum": [
              "HOME_DELIVERY",
              "HUB_PICKUP"
            ],
            "type": "string"
          },
          "pickupHubId": {
            "type": "string",
            "nullable": true,
            "example": "cm1pickuphub123"
          },
          "dropoffHubId": {
            "type": "string",
            "nullable": true,
            "example": "cm1dropoffhub123"
          },
          "pickupAddress": {
            "type": "string",
            "nullable": true,
            "example": "15 Allen Avenue, Ikeja"
          },
          "dropoffAddress": {
            "type": "string",
            "nullable": true,
            "example": "24 Marina Road, Lagos Island"
          },
          "quotedPriceKobo": {
            "type": "number",
            "nullable": true,
            "example": 4500000
          },
          "commercialTerms": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/QuoteCommercialTermsDto"
              }
            ]
          },
          "createdAt": {
            "type": "string",
            "example": "2026-06-17T10:00:00.000Z"
          },
          "expiresAt": {
            "type": "string",
            "example": "2026-06-18T10:00:00.000Z"
          },
          "itemDescription": {
            "type": "string",
            "nullable": true,
            "example": "20 cartons of office furniture"
          },
          "quantity": {
            "type": "number",
            "example": 3
          },
          "photoUrls": {
            "example": [
              "https://example.com/item.jpg"
            ],
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "adminNotes": {
            "type": "string",
            "nullable": true,
            "example": "Fragile item. Keep upright."
          },
          "quotedAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-17T11:00:00.000Z"
          },
          "acceptedAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-17T11:10:00.000Z"
          },
          "paidAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-17T11:15:00.000Z"
          },
          "rejectedAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-17T11:20:00.000Z"
          },
          "orderId": {
            "type": "string",
            "nullable": true,
            "example": "cmf8q9order0001"
          },
          "order": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiQuoteRequestOrderDto"
              }
            ]
          },
          "invoiceId": {
            "type": "string",
            "nullable": true,
            "example": "pinv_123"
          },
          "invoiceReference": {
            "type": "string",
            "nullable": true,
            "example": "PINV-2026-001"
          },
          "relatedRecords": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiQuoteRequestRelatedRecordDto"
            }
          }
        },
        "required": [
          "id",
          "requestNumber",
          "status",
          "serviceType",
          "createdAt",
          "expiresAt",
          "quantity",
          "photoUrls",
          "relatedRecords"
        ]
      },
      "PartnerApiQuoteRequestsPageDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiQuoteRequestResponseDto"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/PartnerApiPageMetaDto"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "InitializePartnerApiQuoteRequestPaymentDto": {
        "type": "object",
        "properties": {
          "paymentMethod": {
            "enum": [
              "SAVED_CARD",
              "CREDIT"
            ],
            "type": "string",
            "example": "SAVED_CARD",
            "description": "Public API payments can use approved partner credit or a dashboard-saved card."
          },
          "paymentMethodId": {
            "type": "string",
            "example": "pm_123",
            "description": "Required for SAVED_CARD unless useDefaultPaymentMethod is true."
          },
          "useDefaultPaymentMethod": {
            "type": "boolean",
            "example": false,
            "description": "When true, the organization default payment method is charged."
          },
          "termsAccepted": {
            "type": "boolean",
            "example": true,
            "description": "Required for GO Bulk and HAUL quote payment or credit acceptance to confirm partner special conditions."
          }
        },
        "required": [
          "paymentMethod",
          "termsAccepted"
        ]
      },
      "PartnerApiTermsAcceptanceDto": {
        "type": "object",
        "properties": {
          "termsAccepted": {
            "type": "boolean",
            "example": true,
            "description": "Must be true to confirm the partner special conditions before acceptance."
          }
        },
        "required": [
          "termsAccepted"
        ]
      },
      "CreateHaulageQuoteRequestStopDto": {
        "type": "object",
        "properties": {
          "sequence": {
            "type": "number",
            "minimum": 1,
            "maximum": 5,
            "example": 1
          },
          "type": {
            "enum": [
              "PICKUP",
              "DROPOFF"
            ],
            "type": "string",
            "example": "DROPOFF"
          },
          "address": {
            "type": "string",
            "example": "Enugu depot, Abakpa"
          },
          "latitude": {
            "type": "number",
            "example": 6.4599
          },
          "longitude": {
            "type": "number",
            "example": 7.5489
          },
          "city": {
            "type": "string",
            "example": "Enugu"
          },
          "contactPhone": {
            "type": "string",
            "example": "+2348012345678"
          },
          "comment": {
            "type": "string",
            "maxLength": 500,
            "example": "Call the warehouse manager before arrival."
          }
        },
        "required": [
          "sequence",
          "address",
          "latitude",
          "longitude"
        ]
      },
      "PartnerApiCreateHaulageQuoteRequestDto": {
        "type": "object",
        "properties": {
          "itemDescription": {
            "type": "string",
            "example": "Industrial generator and spare parts"
          },
          "quantity": {
            "type": "number",
            "minimum": 1,
            "example": 4,
            "description": "Number of trucks requested."
          },
          "estimatedWeightKg": {
            "type": "number",
            "minimum": 0,
            "example": 12000,
            "deprecated": true
          },
          "specialHandling": {
            "type": "string",
            "example": "Crane loading required. Fragile casing."
          },
          "photoUrls": {
            "minItems": 1,
            "example": [
              "https://cdn.partner.example/haulage/item-photo.jpg"
            ],
            "description": "Externally hosted HTTPS item photo URLs. Internal ELA upload keys are not accepted by the public API.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "pickupAddress": {
            "type": "string",
            "example": "12 Creek Road, Apapa, Lagos"
          },
          "pickupLatitude": {
            "type": "number",
            "example": 6.4442
          },
          "pickupLongitude": {
            "type": "number",
            "example": 3.3645
          },
          "pickupCity": {
            "type": "string",
            "example": "Lagos"
          },
          "pickupContactPhone": {
            "type": "string",
            "example": "+2348012345678"
          },
          "pickupComment": {
            "type": "string",
            "maxLength": 500,
            "example": "Use Gate 2 and ask for Musa."
          },
          "dropoffAddress": {
            "type": "string",
            "example": "Port Harcourt Industrial Estate"
          },
          "dropoffLatitude": {
            "type": "number",
            "example": 4.8156
          },
          "dropoffLongitude": {
            "type": "number",
            "example": 7.0498
          },
          "dropoffCity": {
            "type": "string",
            "example": "Port Harcourt"
          },
          "dropoffContactPhone": {
            "type": "string",
            "example": "+2348098765432"
          },
          "dropoffComment": {
            "type": "string",
            "maxLength": 500,
            "example": "Offload beside the west loading bay."
          },
          "additionalStops": {
            "maxItems": 5,
            "description": "Optional intermediate haulage stops, ordered by sequence. Maximum of 5 stops.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreateHaulageQuoteRequestStopDto"
            }
          },
          "stops": {
            "maxItems": 5,
            "deprecated": true,
            "description": "Deprecated alias for additionalStops.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreateHaulageQuoteRequestStopDto"
            }
          },
          "loadingReadinessDate": {
            "type": "string",
            "example": "2026-05-18T08:00:00.000Z"
          },
          "companyName": {
            "type": "string",
            "example": "Acme Manufacturing Ltd"
          },
          "contactName": {
            "type": "string",
            "example": "Ada Okafor"
          },
          "contactPhone": {
            "type": "string",
            "example": "+2348012345678"
          },
          "contactEmail": {
            "type": "string",
            "example": "ops@acme.example"
          }
        },
        "required": [
          "itemDescription",
          "quantity",
          "photoUrls",
          "pickupAddress",
          "pickupLatitude",
          "pickupLongitude",
          "dropoffAddress",
          "dropoffLatitude",
          "dropoffLongitude"
        ]
      },
      "PartnerApiHaulageQuotationDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "qhpp_123"
          },
          "quoteRequestId": {
            "type": "string",
            "example": "cmf8q9haulquote0001"
          },
          "quotationNumber": {
            "type": "string",
            "example": "HLQ-2026-0001"
          },
          "priceKobo": {
            "type": "number",
            "example": 12500000
          },
          "paymentMode": {
            "type": "string",
            "example": "SPLIT"
          },
          "paymentStatus": {
            "type": "string",
            "example": "PENDING"
          },
          "upfrontAmountKobo": {
            "type": "number",
            "example": 5000000
          },
          "balanceAmountKobo": {
            "type": "number",
            "example": 7500000
          },
          "transitDays": {
            "type": "number",
            "nullable": true,
            "example": 3
          },
          "terms": {
            "type": "string",
            "nullable": true,
            "example": "Payment before dispatch."
          },
          "commercialTerms": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/QuoteCommercialTermsDto"
              }
            ]
          },
          "paymentReference": {
            "type": "string",
            "nullable": true,
            "example": "pap_ref_123"
          },
          "validUntil": {
            "type": "object",
            "example": "2026-06-19T12:00:00.000Z",
            "nullable": true
          },
          "isExpired": {
            "type": "boolean",
            "example": false
          }
        },
        "required": [
          "id",
          "quoteRequestId",
          "quotationNumber",
          "priceKobo",
          "paymentMode",
          "paymentStatus",
          "upfrontAmountKobo",
          "balanceAmountKobo",
          "isExpired"
        ]
      },
      "PartnerApiHaulagePaymentPlanDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "qhpp_123"
          },
          "quotationNumber": {
            "type": "string",
            "example": "HLQ-2026-0001"
          },
          "priceKobo": {
            "type": "number",
            "example": 12500000
          },
          "upfrontAmountKobo": {
            "type": "number",
            "example": 5000000
          },
          "balanceAmountKobo": {
            "type": "number",
            "example": 7500000
          },
          "paymentMode": {
            "type": "string",
            "example": "SPLIT"
          },
          "paymentStatus": {
            "type": "string",
            "example": "PENDING"
          },
          "acceptedAt": {
            "type": "object",
            "example": "2026-06-17T11:10:00.000Z",
            "nullable": true
          },
          "paidAt": {
            "type": "object",
            "example": "2026-06-17T11:15:00.000Z",
            "nullable": true
          },
          "balanceDueAt": {
            "type": "object",
            "example": "2026-06-24T00:00:00.000Z",
            "nullable": true
          },
          "commercialTerms": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/QuoteCommercialTermsDto"
              }
            ]
          }
        },
        "required": [
          "id",
          "quotationNumber",
          "priceKobo",
          "upfrontAmountKobo",
          "balanceAmountKobo",
          "paymentMode",
          "paymentStatus"
        ]
      },
      "PartnerApiHaulageOrderSummaryDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cmf8q9haulorder0001"
          },
          "trackingNumber": {
            "type": "string",
            "example": "ELA-HL-12345"
          },
          "serviceType": {
            "type": "string",
            "example": "HAUL"
          },
          "vehicleType": {
            "type": "string",
            "example": "TRUCK"
          },
          "status": {
            "type": "string",
            "example": "IN_PROGRESS"
          },
          "finalAmountKobo": {
            "type": "number",
            "nullable": true,
            "example": 12500000
          },
          "createdAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-17T12:00:00.000Z"
          }
        },
        "required": [
          "id",
          "trackingNumber",
          "serviceType",
          "vehicleType",
          "status"
        ]
      },
      "PartnerApiHaulageTripPaymentDto": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "example": "SPLIT"
          },
          "status": {
            "type": "string",
            "example": "DEPOSIT_PAID"
          },
          "totalKobo": {
            "type": "number",
            "example": 12500000
          },
          "upfrontAmountKobo": {
            "type": "number",
            "example": 5000000
          },
          "balanceAmountKobo": {
            "type": "number",
            "example": 7500000
          }
        },
        "required": [
          "mode",
          "status",
          "totalKobo",
          "upfrontAmountKobo",
          "balanceAmountKobo"
        ]
      },
      "PartnerApiHaulageRouteDto": {
        "type": "object",
        "properties": {
          "pickupAddress": {
            "type": "string",
            "nullable": true,
            "example": "12 Creek Road, Apapa, Lagos"
          },
          "pickupLatitude": {
            "type": "number",
            "nullable": true,
            "example": 6.444444
          },
          "pickupLongitude": {
            "type": "number",
            "nullable": true,
            "example": 3.333333
          },
          "pickupComment": {
            "type": "string",
            "nullable": true,
            "example": "Use Gate 2 and call security."
          },
          "dropoffAddress": {
            "type": "string",
            "nullable": true,
            "example": "Port Harcourt Industrial Estate"
          },
          "dropoffLatitude": {
            "type": "number",
            "nullable": true,
            "example": 4.777777
          },
          "dropoffLongitude": {
            "type": "number",
            "nullable": true,
            "example": 7.000001
          },
          "dropoffComment": {
            "type": "string",
            "nullable": true,
            "example": "Offload beside the west bay."
          }
        }
      },
      "PartnerApiHaulageTruckDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "veh_123"
          },
          "truckCode": {
            "type": "string",
            "nullable": true,
            "example": "TRK-009"
          },
          "truckType": {
            "type": "string",
            "nullable": true,
            "example": "Flatbed"
          },
          "registrationNumber": {
            "type": "string",
            "nullable": true,
            "example": "ABC-123XY"
          },
          "capacityKg": {
            "type": "number",
            "nullable": true,
            "example": 12000
          },
          "currentLatitude": {
            "type": "number",
            "nullable": true,
            "example": 6.444444
          },
          "currentLongitude": {
            "type": "number",
            "nullable": true,
            "example": 3.333333
          },
          "status": {
            "type": "string",
            "nullable": true,
            "example": "MOVING"
          }
        },
        "required": [
          "id"
        ]
      },
      "PartnerApiHaulageAssignmentLegDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "leg_123"
          },
          "sequence": {
            "type": "number",
            "example": 1
          },
          "status": {
            "type": "string",
            "example": "TRUCK_ASSIGNED"
          },
          "originAddress": {
            "type": "string",
            "nullable": true,
            "example": "Apapa, Lagos"
          },
          "originComment": {
            "type": "string",
            "nullable": true,
            "example": "Use Gate 2 and call security."
          },
          "destinationAddress": {
            "type": "string",
            "nullable": true,
            "example": "Port Harcourt"
          },
          "destinationComment": {
            "type": "string",
            "nullable": true,
            "example": "Offload beside the west bay."
          }
        },
        "required": [
          "id",
          "sequence",
          "status"
        ]
      },
      "PartnerApiHaulageTimelineEventDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "event_123"
          },
          "type": {
            "type": "string",
            "example": "DRIVER_ACTION"
          },
          "status": {
            "type": "string",
            "example": "LOADING_COMPLETE"
          },
          "label": {
            "type": "string",
            "example": "Loading Complete"
          },
          "note": {
            "type": "string",
            "nullable": true,
            "example": null
          },
          "createdAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-17T12:00:00.000Z"
          }
        },
        "required": [
          "id",
          "type",
          "status",
          "label"
        ]
      },
      "PartnerApiHaulageTrackingAssignmentDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "leg_123"
          },
          "tripId": {
            "type": "string",
            "example": "order_123"
          },
          "assignmentId": {
            "type": "string",
            "example": "leg_123"
          },
          "tripNumber": {
            "type": "string",
            "nullable": true,
            "example": "ELA-HL-12345"
          },
          "quotationNumber": {
            "type": "string",
            "nullable": true,
            "example": "HLQ-2026-0001"
          },
          "truck": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiHaulageTruckDto"
              }
            ]
          },
          "status": {
            "type": "string",
            "example": "DRIVER_HEADING_TO_PICKUP"
          },
          "displayStatus": {
            "type": "string",
            "example": "Driver heading to pickup"
          },
          "movementStatus": {
            "type": "string",
            "nullable": true,
            "example": "MOVING"
          },
          "route": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiHaulageRouteDto"
              }
            ]
          },
          "currentLatitude": {
            "type": "number",
            "nullable": true,
            "example": 6.444444
          },
          "currentLongitude": {
            "type": "number",
            "nullable": true,
            "example": 3.333333
          },
          "lastLocationAt": {
            "type": "object",
            "example": "2026-06-17T12:00:00.000Z",
            "nullable": true
          },
          "orderLegs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiHaulageAssignmentLegDto"
            }
          },
          "timeline": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiHaulageTimelineEventDto"
            }
          }
        },
        "required": [
          "id",
          "tripId",
          "assignmentId",
          "status",
          "displayStatus"
        ]
      },
      "PartnerApiHaulageTripDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "order_123"
          },
          "tripNumber": {
            "type": "string",
            "example": "ELA-HL-12345"
          },
          "quoteRequestId": {
            "type": "string",
            "nullable": true,
            "example": "cmf8q9haulquote0001"
          },
          "quotationNumber": {
            "type": "string",
            "nullable": true,
            "example": "HLQ-2026-0001"
          },
          "status": {
            "type": "string",
            "example": "IN_PROGRESS"
          },
          "totalDistanceKm": {
            "type": "number",
            "nullable": true,
            "example": 820.4
          },
          "payment": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiHaulageTripPaymentDto"
              }
            ]
          },
          "route": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiHaulageRouteDto"
              }
            ]
          },
          "assignments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiHaulageTrackingAssignmentDto"
            }
          },
          "trucks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiHaulageTrackingAssignmentDto"
            }
          },
          "timeline": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiHaulageTimelineEventDto"
            }
          }
        },
        "required": [
          "id",
          "tripNumber",
          "status",
          "assignments"
        ]
      },
      "PartnerApiHaulageQuoteResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cmf8q9haulquote0001"
          },
          "requestNumber": {
            "type": "string",
            "example": "QR-HL-12345"
          },
          "status": {
            "type": "string",
            "example": "UNDER_REVIEW"
          },
          "sharedStatus": {
            "type": "string",
            "nullable": true,
            "example": "QUOTED"
          },
          "serviceType": {
            "type": "string",
            "example": "HAUL"
          },
          "vehicleType": {
            "type": "string",
            "example": "TRUCK"
          },
          "itemDescription": {
            "type": "string",
            "example": "Industrial generator and spare parts"
          },
          "quantity": {
            "type": "number",
            "example": 4
          },
          "photoUrls": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "pickupAddress": {
            "type": "string",
            "example": "12 Creek Road, Apapa, Lagos"
          },
          "pickupComment": {
            "type": "string",
            "nullable": true,
            "example": "Use Gate 2 and call security."
          },
          "dropoffAddress": {
            "type": "string",
            "example": "Port Harcourt Industrial Estate"
          },
          "dropoffComment": {
            "type": "string",
            "nullable": true,
            "example": "Offload beside the west bay."
          },
          "commercialTerms": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/QuoteCommercialTermsDto"
              }
            ]
          },
          "quotation": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiHaulageQuotationDto"
              }
            ]
          },
          "paymentPlan": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiHaulagePaymentPlanDto"
              }
            ]
          },
          "order": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiHaulageOrderSummaryDto"
              }
            ]
          },
          "trip": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiHaulageTripDto"
              }
            ]
          },
          "tracking": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiHaulageTimelineEventDto"
            }
          }
        },
        "required": [
          "id",
          "requestNumber",
          "status",
          "serviceType",
          "vehicleType",
          "itemDescription",
          "quantity",
          "photoUrls",
          "pickupAddress",
          "dropoffAddress"
        ]
      },
      "PartnerApiHaulageQuoteRequestsPageDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiHaulageQuoteResponseDto"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/PartnerApiPageMetaDto"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "RejectHaulageQuoteRequestDto": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "example": "Truck capacity not available for requested date."
          }
        }
      },
      "InitializePartnerApiHaulagePaymentDto": {
        "type": "object",
        "properties": {
          "paymentMethod": {
            "enum": [
              "SAVED_CARD",
              "CREDIT"
            ],
            "type": "string",
            "example": "SAVED_CARD",
            "description": "Public API payments can use approved partner credit or a dashboard-saved card."
          },
          "paymentMethodId": {
            "type": "string",
            "example": "pm_123",
            "description": "Required for SAVED_CARD unless useDefaultPaymentMethod is true."
          },
          "useDefaultPaymentMethod": {
            "type": "boolean",
            "example": false,
            "description": "When true, the organization default payment method is charged."
          },
          "termsAccepted": {
            "type": "boolean",
            "example": true,
            "description": "Required for GO Bulk and HAUL quote payment or credit acceptance to confirm partner special conditions."
          },
          "paymentStage": {
            "enum": [
              "UPFRONT",
              "BALANCE"
            ],
            "type": "string",
            "example": "UPFRONT"
          }
        },
        "required": [
          "paymentMethod",
          "termsAccepted"
        ]
      },
      "PartnerApiPaymentStatusResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "pap_1234567890abcdef"
          },
          "resourceType": {
            "type": "string",
            "example": "QUOTE_REQUEST"
          },
          "resourceId": {
            "type": "string",
            "example": "cmf8q9quote0001"
          },
          "paymentMethod": {
            "enum": [
              "SAVED_CARD",
              "CREDIT"
            ],
            "type": "string",
            "example": "SAVED_CARD"
          },
          "amount": {
            "type": "number",
            "example": 750000
          },
          "currency": {
            "type": "string",
            "example": "NGN"
          },
          "status": {
            "enum": [
              "paid",
              "processing",
              "pending_verification",
              "failed",
              "requires_action",
              "cancelled",
              "credit_accepted"
            ],
            "type": "string",
            "example": "paid"
          },
          "reference": {
            "type": "string",
            "example": "pap_ref_1234567890abcdef"
          },
          "paidAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-18T10:30:00.000Z"
          },
          "message": {
            "type": "string",
            "nullable": true,
            "example": "Resolve the saved card in the dashboard."
          },
          "updatedAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-18T10:30:10.000Z"
          }
        },
        "required": [
          "id",
          "resourceType",
          "resourceId",
          "paymentMethod",
          "amount",
          "currency",
          "status",
          "reference"
        ]
      },
      "PartnerApiHaulageTrackingListDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiHaulageTrackingAssignmentDto"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "CreatePartnerApiSupportCaseDto": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 3,
            "maxLength": 160,
            "example": "Delivery proof dispute"
          },
          "summary": {
            "type": "string",
            "minLength": 3,
            "maxLength": 4000,
            "example": "Recipient says the package was not received for tracking ELA-1234."
          },
          "category": {
            "enum": [
              "DELIVERY_ISSUE",
              "PAYMENT_BILLING",
              "RIDER_DRIVER",
              "CUSTOMER_PARTNER",
              "APP_TECHNICAL",
              "DISPATCH",
              "HAULAGE",
              "ERRAND_DISPUTE",
              "QUALITY",
              "SAFETY",
              "ALERT",
              "OTHER"
            ],
            "type": "string",
            "example": "DELIVERY_ISSUE"
          },
          "priority": {
            "enum": [
              "LOW",
              "MEDIUM",
              "HIGH",
              "CRITICAL"
            ],
            "type": "string",
            "example": "MEDIUM"
          },
          "relatedResourceType": {
            "enum": [
              "BOOKING",
              "QUOTE_REQUEST",
              "HAULAGE_QUOTE_REQUEST",
              "HAULAGE_TRIP",
              "TRACKING_ASSIGNMENT"
            ],
            "type": "string",
            "example": "BOOKING"
          },
          "relatedResourceId": {
            "type": "string",
            "example": "cm1order123"
          },
          "metadata": {
            "type": "object",
            "description": "Partner-provided references or tags. Internal admin notes are never returned."
          }
        },
        "required": [
          "title",
          "summary"
        ]
      },
      "PartnerApiSupportCaseRelatedResourceDto": {
        "type": "object",
        "properties": {
          "type": {
            "nullable": true,
            "enum": [
              "BOOKING",
              "QUOTE_REQUEST",
              "HAULAGE_QUOTE_REQUEST",
              "HAULAGE_TRIP",
              "TRACKING_ASSIGNMENT"
            ],
            "type": "string"
          },
          "id": {
            "type": "string",
            "nullable": true,
            "example": "cm1order123"
          },
          "reference": {
            "type": "string",
            "nullable": true,
            "example": "ELA-1234"
          }
        }
      },
      "PartnerApiSupportCaseSourceDto": {
        "type": "object",
        "properties": {
          "sourceType": {
            "enum": [
              "COMPLAINT",
              "CHAT_ROOM",
              "DISPATCH_SESSION",
              "DISPATCH_ATTEMPT",
              "ORDER_EVENT",
              "HAUL_OPERATION",
              "ERRAND_DISPUTE",
              "QUALITY_REVIEW_FLAG",
              "NOTIFICATION_ALERT",
              "PAYMENT_REVIEW",
              "HUB_EXCEPTION",
              "ADMIN_INTERVENTION"
            ],
            "type": "string"
          },
          "sourceId": {
            "type": "string",
            "example": "partner-api-support:org:key"
          },
          "sourceLabel": {
            "type": "string",
            "nullable": true,
            "example": "Partner API support case"
          },
          "sourceStatus": {
            "type": "string",
            "nullable": true,
            "example": "OPEN"
          },
          "isPrimary": {
            "type": "boolean",
            "example": true
          }
        },
        "required": [
          "sourceType",
          "sourceId",
          "isPrimary"
        ]
      },
      "PartnerApiSupportCaseTimelineEventDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cm1caseevent123"
          },
          "type": {
            "enum": [
              "CREATED",
              "SOURCE_LINKED",
              "ROUTED",
              "ASSIGNED",
              "STATUS_CHANGED",
              "PRIORITY_CHANGED",
              "MANUAL_REVIEW_SET",
              "SLA_ESCALATED",
              "COMMENT",
              "CONTACT_LOGGED",
              "NOTIFICATION_SENT",
              "RESOLUTION_ADDED",
              "REOPENED",
              "ARCHIVED",
              "SYSTEM_SYNCED"
            ],
            "type": "string"
          },
          "message": {
            "type": "string",
            "nullable": true,
            "example": "We are checking proof of delivery."
          },
          "actorName": {
            "type": "string",
            "nullable": true,
            "example": "Support Agent"
          },
          "createdAt": {
            "type": "string",
            "example": "2026-06-21T12:00:00.000Z"
          }
        },
        "required": [
          "id",
          "type",
          "createdAt"
        ]
      },
      "PartnerApiSupportCaseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cm1case123"
          },
          "caseNumber": {
            "type": "string",
            "example": "INC-20260621-A1B2C3"
          },
          "title": {
            "type": "string",
            "example": "Delivery proof dispute"
          },
          "summary": {
            "type": "string",
            "nullable": true,
            "example": "Recipient says the package was not received."
          },
          "category": {
            "enum": [
              "DELIVERY_ISSUE",
              "PAYMENT_BILLING",
              "RIDER_DRIVER",
              "CUSTOMER_PARTNER",
              "APP_TECHNICAL",
              "DISPATCH",
              "HAULAGE",
              "ERRAND_DISPUTE",
              "QUALITY",
              "SAFETY",
              "ALERT",
              "OTHER"
            ],
            "type": "string"
          },
          "status": {
            "enum": [
              "OPEN",
              "IN_PROGRESS",
              "WAITING_ON_USER",
              "WAITING_ON_INTERNAL",
              "RESOLVED",
              "CLOSED",
              "ARCHIVED",
              "VOIDED"
            ],
            "type": "string"
          },
          "priority": {
            "enum": [
              "LOW",
              "MEDIUM",
              "HIGH",
              "CRITICAL"
            ],
            "type": "string"
          },
          "relatedResource": {
            "nullable": true,
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/PartnerApiSupportCaseRelatedResourceDto"
              }
            ]
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiSupportCaseSourceDto"
            }
          },
          "timeline": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiSupportCaseTimelineEventDto"
            }
          },
          "firstResponseDueAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-21T12:15:00.000Z"
          },
          "dueAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-22T12:00:00.000Z"
          },
          "firstRespondedAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-21T12:05:00.000Z"
          },
          "resolvedAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-21T15:00:00.000Z"
          },
          "closedAt": {
            "type": "string",
            "nullable": true,
            "example": "2026-06-21T15:10:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "example": "2026-06-21T12:00:00.000Z"
          },
          "updatedAt": {
            "type": "string",
            "example": "2026-06-21T12:05:00.000Z"
          }
        },
        "required": [
          "id",
          "caseNumber",
          "title",
          "category",
          "status",
          "priority",
          "sources",
          "timeline",
          "createdAt",
          "updatedAt"
        ]
      },
      "PartnerApiSupportCasesPageDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartnerApiSupportCaseDto"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/PartnerApiPageMetaDto"
          }
        },
        "required": [
          "data",
          "meta"
        ]
      },
      "PartnerApiSupportCaseCommentDto": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4000,
            "example": "Customer has attached the invoice in the partner portal."
          }
        },
        "required": [
          "message"
        ]
      },
      "ReopenPartnerApiSupportCaseDto": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "maxLength": 2000,
            "example": "The customer supplied new evidence."
          }
        }
      },
      "ClosePartnerApiSupportCaseDto": {
        "type": "object",
        "properties": {
          "note": {
            "type": "string",
            "maxLength": 2000,
            "example": "Partner confirmed the resolution."
          }
        }
      },
      "PartnerWebhookBookingPayload": {
        "type": "object",
        "required": [
          "id",
          "event",
          "createdAt",
          "data"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac"
          },
          "event": {
            "type": "string",
            "enum": [
              "booking.created",
              "booking.updated",
              "booking.cancelled",
              "booking.status_changed",
              "booking.delivered",
              "payment.processing",
              "payment.succeeded",
              "payment.failed",
              "payment.pending_verification",
              "credit.accepted",
              "quote_request.quoted",
              "quote_request.expired",
              "quote_request.declined",
              "haulage.quotation.accepted",
              "haulage.trip.assigned",
              "haulage.trip.updated",
              "support_case.created",
              "support_case.updated",
              "support_case.resolved",
              "support_case.closed"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "data": {
            "type": "object",
            "required": [
              "booking"
            ],
            "properties": {
              "booking": {
                "type": "object",
                "required": [
                  "id",
                  "trackingNumber",
                  "status",
                  "createdAt"
                ],
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "trackingNumber": {
                    "type": "string",
                    "example": "ELA-1234ABCD"
                  },
                  "status": {
                    "type": "string",
                    "example": "SCHEDULED"
                  },
                  "serviceType": {
                    "type": "string",
                    "example": "CLICK"
                  },
                  "deliveryMode": {
                    "type": "string",
                    "example": "STANDARD"
                  },
                  "vehicleType": {
                    "type": "string",
                    "example": "BIKE"
                  },
                  "pickupAddress": {
                    "type": "string",
                    "nullable": true
                  },
                  "dropoffAddress": {
                    "type": "string",
                    "nullable": true
                  },
                  "pickupPhone": {
                    "type": "string",
                    "nullable": true
                  },
                  "dropoffPhone": {
                    "type": "string",
                    "nullable": true
                  },
                  "packageDescription": {
                    "type": "string",
                    "nullable": true
                  },
                  "amountKobo": {
                    "type": "number",
                    "description": "Amount in kobo."
                  },
                  "finalAmountKobo": {
                    "type": "number",
                    "description": "Amount in kobo.",
                    "nullable": true
                  },
                  "invoiceStatus": {
                    "type": "string",
                    "nullable": true
                  },
                  "invoiceReference": {
                    "type": "string",
                    "nullable": true
                  },
                  "scheduledAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "assignedAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "pickedUpAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "deliveredAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "cancelledAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "createdAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "requesterName": {
                    "type": "string",
                    "nullable": true
                  }
                }
              }
            }
          }
        }
      },
      "PartnerWebhookPaymentPayload": {
        "type": "object",
        "required": [
          "id",
          "event",
          "createdAt",
          "data"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac"
          },
          "event": {
            "type": "string",
            "enum": [
              "booking.created",
              "booking.updated",
              "booking.cancelled",
              "booking.status_changed",
              "booking.delivered",
              "payment.processing",
              "payment.succeeded",
              "payment.failed",
              "payment.pending_verification",
              "credit.accepted",
              "quote_request.quoted",
              "quote_request.expired",
              "quote_request.declined",
              "haulage.quotation.accepted",
              "haulage.trip.assigned",
              "haulage.trip.updated",
              "support_case.created",
              "support_case.updated",
              "support_case.resolved",
              "support_case.closed"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "data": {
            "type": "object",
            "required": [
              "payment"
            ],
            "properties": {
              "payment": {
                "type": "object",
                "required": [
                  "id",
                  "resourceType",
                  "resourceId",
                  "paymentMethod",
                  "amount",
                  "currency",
                  "status",
                  "reference"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "example": "pap_123"
                  },
                  "resourceType": {
                    "type": "string",
                    "enum": [
                      "BOOKING",
                      "QUOTE_REQUEST",
                      "HAULAGE_QUOTATION"
                    ]
                  },
                  "resourceId": {
                    "type": "string"
                  },
                  "paymentMethod": {
                    "type": "string",
                    "enum": [
                      "SAVED_CARD",
                      "CREDIT"
                    ]
                  },
                  "amount": {
                    "type": "number",
                    "description": "Amount in kobo."
                  },
                  "currency": {
                    "type": "string",
                    "example": "NGN"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "processing",
                      "paid",
                      "failed",
                      "pending_verification",
                      "credit_accepted",
                      "requires_action",
                      "cancelled"
                    ]
                  },
                  "reference": {
                    "type": "string",
                    "nullable": true
                  },
                  "paidAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "createdAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "updatedAt": {
                    "type": "string",
                    "format": "date-time"
                  }
                }
              }
            }
          }
        }
      },
      "PartnerWebhookQuoteRequestPayload": {
        "type": "object",
        "required": [
          "id",
          "event",
          "createdAt",
          "data"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac"
          },
          "event": {
            "type": "string",
            "enum": [
              "booking.created",
              "booking.updated",
              "booking.cancelled",
              "booking.status_changed",
              "booking.delivered",
              "payment.processing",
              "payment.succeeded",
              "payment.failed",
              "payment.pending_verification",
              "credit.accepted",
              "quote_request.quoted",
              "quote_request.expired",
              "quote_request.declined",
              "haulage.quotation.accepted",
              "haulage.trip.assigned",
              "haulage.trip.updated",
              "support_case.created",
              "support_case.updated",
              "support_case.resolved",
              "support_case.closed"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "data": {
            "type": "object",
            "required": [
              "quoteRequest"
            ],
            "properties": {
              "quoteRequest": {
                "type": "object",
                "required": [
                  "id",
                  "requestNumber",
                  "status",
                  "serviceType"
                ],
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "requestNumber": {
                    "type": "string",
                    "nullable": true
                  },
                  "status": {
                    "type": "string",
                    "example": "QUOTED"
                  },
                  "kind": {
                    "type": "string",
                    "nullable": true
                  },
                  "serviceType": {
                    "type": "string",
                    "example": "GO_BULK"
                  },
                  "vehicleType": {
                    "type": "string",
                    "nullable": true
                  },
                  "itemDescription": {
                    "type": "string",
                    "nullable": true
                  },
                  "quantity": {
                    "type": "integer",
                    "nullable": true
                  },
                  "pickupAddress": {
                    "type": "string",
                    "nullable": true
                  },
                  "dropoffAddress": {
                    "type": "string",
                    "nullable": true
                  },
                  "quotedPriceKobo": {
                    "type": "number",
                    "description": "Amount in kobo.",
                    "nullable": true
                  },
                  "expiresAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "quotedAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "acceptedAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "rejectedAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "orderId": {
                    "type": "string",
                    "nullable": true
                  },
                  "quotationNumber": {
                    "type": "string",
                    "nullable": true
                  },
                  "createdAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "updatedAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  }
                }
              }
            }
          }
        }
      },
      "PartnerWebhookHaulagePayload": {
        "type": "object",
        "required": [
          "id",
          "event",
          "createdAt",
          "data"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac"
          },
          "event": {
            "type": "string",
            "enum": [
              "booking.created",
              "booking.updated",
              "booking.cancelled",
              "booking.status_changed",
              "booking.delivered",
              "payment.processing",
              "payment.succeeded",
              "payment.failed",
              "payment.pending_verification",
              "credit.accepted",
              "quote_request.quoted",
              "quote_request.expired",
              "quote_request.declined",
              "haulage.quotation.accepted",
              "haulage.trip.assigned",
              "haulage.trip.updated",
              "support_case.created",
              "support_case.updated",
              "support_case.resolved",
              "support_case.closed"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "data": {
            "type": "object",
            "required": [
              "haulage"
            ],
            "properties": {
              "haulage": {
                "type": "object",
                "required": [
                  "quoteRequest",
                  "quotation",
                  "trip"
                ],
                "properties": {
                  "quoteRequest": {
                    "type": "object",
                    "required": [
                      "id",
                      "requestNumber",
                      "status",
                      "serviceType"
                    ],
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "requestNumber": {
                        "type": "string",
                        "nullable": true
                      },
                      "status": {
                        "type": "string",
                        "example": "QUOTED"
                      },
                      "kind": {
                        "type": "string",
                        "nullable": true
                      },
                      "serviceType": {
                        "type": "string",
                        "example": "GO_BULK"
                      },
                      "vehicleType": {
                        "type": "string",
                        "nullable": true
                      },
                      "itemDescription": {
                        "type": "string",
                        "nullable": true
                      },
                      "quantity": {
                        "type": "integer",
                        "nullable": true
                      },
                      "pickupAddress": {
                        "type": "string",
                        "nullable": true
                      },
                      "dropoffAddress": {
                        "type": "string",
                        "nullable": true
                      },
                      "quotedPriceKobo": {
                        "type": "number",
                        "description": "Amount in kobo.",
                        "nullable": true
                      },
                      "expiresAt": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                      },
                      "quotedAt": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                      },
                      "acceptedAt": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                      },
                      "rejectedAt": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                      },
                      "orderId": {
                        "type": "string",
                        "nullable": true
                      },
                      "quotationNumber": {
                        "type": "string",
                        "nullable": true
                      },
                      "createdAt": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                      },
                      "updatedAt": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                      }
                    }
                  },
                  "quotation": {
                    "type": "object",
                    "required": [
                      "id",
                      "quotationNumber",
                      "priceKobo",
                      "paymentMode",
                      "paymentStatus"
                    ],
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "quotationNumber": {
                        "type": "string",
                        "example": "HLQ-2026-0001"
                      },
                      "priceKobo": {
                        "type": "number",
                        "description": "Amount in kobo."
                      },
                      "upfrontAmountKobo": {
                        "type": "number",
                        "description": "Amount in kobo."
                      },
                      "balanceAmountKobo": {
                        "type": "number",
                        "description": "Amount in kobo."
                      },
                      "paymentMode": {
                        "type": "string",
                        "example": "SPLIT"
                      },
                      "paymentStatus": {
                        "type": "string",
                        "example": "DEPOSIT_PAID"
                      }
                    },
                    "nullable": true
                  },
                  "trip": {
                    "type": "object",
                    "required": [
                      "id",
                      "trackingNumber",
                      "status"
                    ],
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "trackingNumber": {
                        "type": "string",
                        "example": "ELA-HL-12345"
                      },
                      "status": {
                        "type": "string",
                        "example": "IN_PROGRESS"
                      }
                    },
                    "nullable": true
                  }
                }
              }
            }
          }
        }
      },
      "PartnerWebhookSupportCasePayload": {
        "type": "object",
        "required": [
          "id",
          "event",
          "createdAt",
          "data"
        ],
        "properties": {
          "id": {
            "type": "string",
            "example": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac"
          },
          "event": {
            "type": "string",
            "enum": [
              "booking.created",
              "booking.updated",
              "booking.cancelled",
              "booking.status_changed",
              "booking.delivered",
              "payment.processing",
              "payment.succeeded",
              "payment.failed",
              "payment.pending_verification",
              "credit.accepted",
              "quote_request.quoted",
              "quote_request.expired",
              "quote_request.declined",
              "haulage.quotation.accepted",
              "haulage.trip.assigned",
              "haulage.trip.updated",
              "support_case.created",
              "support_case.updated",
              "support_case.resolved",
              "support_case.closed"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "data": {
            "type": "object",
            "required": [
              "supportCase"
            ],
            "properties": {
              "supportCase": {
                "type": "object",
                "required": [
                  "id",
                  "caseNumber",
                  "title",
                  "category",
                  "status",
                  "priority",
                  "createdAt",
                  "updatedAt"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "example": "cm1case123"
                  },
                  "caseNumber": {
                    "type": "string",
                    "example": "INC-20260621-A1B2C3"
                  },
                  "title": {
                    "type": "string",
                    "example": "Delivery proof dispute"
                  },
                  "summary": {
                    "type": "string",
                    "nullable": true
                  },
                  "category": {
                    "type": "string",
                    "example": "DELIVERY_ISSUE"
                  },
                  "status": {
                    "type": "string",
                    "example": "OPEN"
                  },
                  "priority": {
                    "type": "string",
                    "example": "MEDIUM"
                  },
                  "relatedResource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "nullable": true
                      },
                      "id": {
                        "type": "string",
                        "nullable": true
                      },
                      "reference": {
                        "type": "string",
                        "nullable": true
                      }
                    },
                    "nullable": true
                  },
                  "firstResponseDueAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "dueAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "firstRespondedAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "resolvedAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "closedAt": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "createdAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "updatedAt": {
                    "type": "string",
                    "format": "date-time"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "PartnerApiKey": []
    }
  ],
  "webhooks": {
    "booking.created": {
      "post": {
        "summary": "Receive booking.created",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookBookingPayload"
              },
              "examples": {
                "booking.created": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "booking.created",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "booking": {
                        "id": "cmbooking123",
                        "trackingNumber": "ELA-1234ABCD",
                        "status": "SCHEDULED",
                        "serviceType": "CLICK",
                        "deliveryMode": "STANDARD",
                        "vehicleType": "BIKE",
                        "pickupAddress": "15 Admiralty Way, Lekki Phase 1",
                        "dropoffAddress": "24 Ozumba Mbadiwe Ave, Victoria Island",
                        "pickupPhone": "+2348012345678",
                        "dropoffPhone": "+2348098765432",
                        "packageDescription": "Small parcel - documents",
                        "amountKobo": 250000,
                        "finalAmountKobo": null,
                        "invoiceStatus": "DRAFT",
                        "invoiceReference": "INV-2026-0001",
                        "scheduledAt": "2026-06-20T09:00:00.000Z",
                        "assignedAt": null,
                        "pickedUpAt": null,
                        "deliveredAt": null,
                        "cancelledAt": null,
                        "createdAt": "2026-06-14T11:55:00.000Z",
                        "requesterName": "Amina Yusuf"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "booking.updated": {
      "post": {
        "summary": "Receive booking.updated",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookBookingPayload"
              },
              "examples": {
                "booking.updated": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "booking.updated",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "booking": {
                        "id": "cmbooking123",
                        "trackingNumber": "ELA-1234ABCD",
                        "status": "SCHEDULED",
                        "serviceType": "CLICK",
                        "deliveryMode": "STANDARD",
                        "vehicleType": "BIKE",
                        "pickupAddress": "15 Admiralty Way, Lekki Phase 1",
                        "dropoffAddress": "24 Ozumba Mbadiwe Ave, Victoria Island",
                        "pickupPhone": "+2348012345678",
                        "dropoffPhone": "+2348098765432",
                        "packageDescription": "Small parcel - documents",
                        "amountKobo": 250000,
                        "finalAmountKobo": null,
                        "invoiceStatus": "DRAFT",
                        "invoiceReference": "INV-2026-0001",
                        "scheduledAt": "2026-06-20T09:00:00.000Z",
                        "assignedAt": null,
                        "pickedUpAt": null,
                        "deliveredAt": null,
                        "cancelledAt": null,
                        "createdAt": "2026-06-14T11:55:00.000Z",
                        "requesterName": "Amina Yusuf"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "booking.cancelled": {
      "post": {
        "summary": "Receive booking.cancelled",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookBookingPayload"
              },
              "examples": {
                "booking.cancelled": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "booking.cancelled",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "booking": {
                        "id": "cmbooking123",
                        "trackingNumber": "ELA-1234ABCD",
                        "status": "CANCELLED",
                        "serviceType": "CLICK",
                        "deliveryMode": "STANDARD",
                        "vehicleType": "BIKE",
                        "pickupAddress": "15 Admiralty Way, Lekki Phase 1",
                        "dropoffAddress": "24 Ozumba Mbadiwe Ave, Victoria Island",
                        "pickupPhone": "+2348012345678",
                        "dropoffPhone": "+2348098765432",
                        "packageDescription": "Small parcel - documents",
                        "amountKobo": 250000,
                        "finalAmountKobo": null,
                        "invoiceStatus": "DRAFT",
                        "invoiceReference": "INV-2026-0001",
                        "scheduledAt": "2026-06-20T09:00:00.000Z",
                        "assignedAt": null,
                        "pickedUpAt": null,
                        "deliveredAt": null,
                        "cancelledAt": "2026-06-14T12:00:00.000Z",
                        "createdAt": "2026-06-14T11:55:00.000Z",
                        "requesterName": "Amina Yusuf"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "booking.status_changed": {
      "post": {
        "summary": "Receive booking.status_changed",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookBookingPayload"
              },
              "examples": {
                "booking.status_changed": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "booking.status_changed",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "booking": {
                        "id": "cmbooking123",
                        "trackingNumber": "ELA-1234ABCD",
                        "status": "SCHEDULED",
                        "serviceType": "CLICK",
                        "deliveryMode": "STANDARD",
                        "vehicleType": "BIKE",
                        "pickupAddress": "15 Admiralty Way, Lekki Phase 1",
                        "dropoffAddress": "24 Ozumba Mbadiwe Ave, Victoria Island",
                        "pickupPhone": "+2348012345678",
                        "dropoffPhone": "+2348098765432",
                        "packageDescription": "Small parcel - documents",
                        "amountKobo": 250000,
                        "finalAmountKobo": null,
                        "invoiceStatus": "DRAFT",
                        "invoiceReference": "INV-2026-0001",
                        "scheduledAt": "2026-06-20T09:00:00.000Z",
                        "assignedAt": null,
                        "pickedUpAt": null,
                        "deliveredAt": null,
                        "cancelledAt": null,
                        "createdAt": "2026-06-14T11:55:00.000Z",
                        "requesterName": "Amina Yusuf"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "booking.delivered": {
      "post": {
        "summary": "Receive booking.delivered",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookBookingPayload"
              },
              "examples": {
                "booking.delivered": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "booking.delivered",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "booking": {
                        "id": "cmbooking123",
                        "trackingNumber": "ELA-1234ABCD",
                        "status": "SCHEDULED",
                        "serviceType": "CLICK",
                        "deliveryMode": "STANDARD",
                        "vehicleType": "BIKE",
                        "pickupAddress": "15 Admiralty Way, Lekki Phase 1",
                        "dropoffAddress": "24 Ozumba Mbadiwe Ave, Victoria Island",
                        "pickupPhone": "+2348012345678",
                        "dropoffPhone": "+2348098765432",
                        "packageDescription": "Small parcel - documents",
                        "amountKobo": 250000,
                        "finalAmountKobo": null,
                        "invoiceStatus": "DRAFT",
                        "invoiceReference": "INV-2026-0001",
                        "scheduledAt": "2026-06-20T09:00:00.000Z",
                        "assignedAt": null,
                        "pickedUpAt": null,
                        "deliveredAt": null,
                        "cancelledAt": null,
                        "createdAt": "2026-06-14T11:55:00.000Z",
                        "requesterName": "Amina Yusuf"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "payment.processing": {
      "post": {
        "summary": "Receive payment.processing",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookPaymentPayload"
              },
              "examples": {
                "payment.processing": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "payment.processing",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "payment": {
                        "id": "pap_123",
                        "resourceType": "QUOTE_REQUEST",
                        "resourceId": "qr_123",
                        "paymentMethod": "SAVED_CARD",
                        "amount": 750000,
                        "currency": "NGN",
                        "status": "paid",
                        "reference": "pap_ref_123",
                        "paidAt": null,
                        "createdAt": "2026-06-14T11:59:00.000Z",
                        "updatedAt": "2026-06-14T12:00:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "payment.succeeded": {
      "post": {
        "summary": "Receive payment.succeeded",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookPaymentPayload"
              },
              "examples": {
                "payment.succeeded": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "payment.succeeded",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "payment": {
                        "id": "pap_123",
                        "resourceType": "QUOTE_REQUEST",
                        "resourceId": "qr_123",
                        "paymentMethod": "SAVED_CARD",
                        "amount": 750000,
                        "currency": "NGN",
                        "status": "paid",
                        "reference": "pap_ref_123",
                        "paidAt": "2026-06-14T12:00:00.000Z",
                        "createdAt": "2026-06-14T11:59:00.000Z",
                        "updatedAt": "2026-06-14T12:00:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "payment.failed": {
      "post": {
        "summary": "Receive payment.failed",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookPaymentPayload"
              },
              "examples": {
                "payment.failed": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "payment.failed",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "payment": {
                        "id": "pap_123",
                        "resourceType": "QUOTE_REQUEST",
                        "resourceId": "qr_123",
                        "paymentMethod": "SAVED_CARD",
                        "amount": 750000,
                        "currency": "NGN",
                        "status": "failed",
                        "reference": "pap_ref_123",
                        "paidAt": null,
                        "createdAt": "2026-06-14T11:59:00.000Z",
                        "updatedAt": "2026-06-14T12:00:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "payment.pending_verification": {
      "post": {
        "summary": "Receive payment.pending_verification",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookPaymentPayload"
              },
              "examples": {
                "payment.pending_verification": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "payment.pending_verification",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "payment": {
                        "id": "pap_123",
                        "resourceType": "QUOTE_REQUEST",
                        "resourceId": "qr_123",
                        "paymentMethod": "SAVED_CARD",
                        "amount": 750000,
                        "currency": "NGN",
                        "status": "paid",
                        "reference": "pap_ref_123",
                        "paidAt": null,
                        "createdAt": "2026-06-14T11:59:00.000Z",
                        "updatedAt": "2026-06-14T12:00:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "credit.accepted": {
      "post": {
        "summary": "Receive credit.accepted",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookPaymentPayload"
              },
              "examples": {
                "credit.accepted": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "credit.accepted",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "payment": {
                        "id": "pap_123",
                        "resourceType": "QUOTE_REQUEST",
                        "resourceId": "qr_123",
                        "paymentMethod": "CREDIT",
                        "amount": 750000,
                        "currency": "NGN",
                        "status": "paid",
                        "reference": "pap_ref_123",
                        "paidAt": null,
                        "createdAt": "2026-06-14T11:59:00.000Z",
                        "updatedAt": "2026-06-14T12:00:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "quote_request.quoted": {
      "post": {
        "summary": "Receive quote_request.quoted",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookQuoteRequestPayload"
              },
              "examples": {
                "quote_request.quoted": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "quote_request.quoted",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "quoteRequest": {
                        "id": "qr_go_bulk_123",
                        "requestNumber": "QR-GO-12345",
                        "status": "QUOTED",
                        "kind": "BULK",
                        "serviceType": "GO_BULK",
                        "vehicleType": "VAN",
                        "itemDescription": "20 cartons of office furniture",
                        "quantity": 3,
                        "pickupAddress": "15 Allen Avenue, Ikeja",
                        "dropoffAddress": "24 Marina Road, Lagos Island",
                        "quotedPriceKobo": 4500000,
                        "expiresAt": "2026-06-15T12:00:00.000Z",
                        "quotedAt": "2026-06-14T12:00:00.000Z",
                        "acceptedAt": null,
                        "rejectedAt": null,
                        "orderId": null,
                        "quotationNumber": null,
                        "createdAt": "2026-06-14T11:45:00.000Z",
                        "updatedAt": "2026-06-14T12:00:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "quote_request.expired": {
      "post": {
        "summary": "Receive quote_request.expired",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookQuoteRequestPayload"
              },
              "examples": {
                "quote_request.expired": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "quote_request.expired",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "quoteRequest": {
                        "id": "qr_go_bulk_123",
                        "requestNumber": "QR-GO-12345",
                        "status": "EXPIRED",
                        "kind": "BULK",
                        "serviceType": "GO_BULK",
                        "vehicleType": "VAN",
                        "itemDescription": "20 cartons of office furniture",
                        "quantity": 3,
                        "pickupAddress": "15 Allen Avenue, Ikeja",
                        "dropoffAddress": "24 Marina Road, Lagos Island",
                        "quotedPriceKobo": null,
                        "expiresAt": "2026-06-15T12:00:00.000Z",
                        "quotedAt": null,
                        "acceptedAt": null,
                        "rejectedAt": null,
                        "orderId": null,
                        "quotationNumber": null,
                        "createdAt": "2026-06-14T11:45:00.000Z",
                        "updatedAt": "2026-06-14T12:00:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "quote_request.declined": {
      "post": {
        "summary": "Receive quote_request.declined",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookQuoteRequestPayload"
              },
              "examples": {
                "quote_request.declined": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "quote_request.declined",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "quoteRequest": {
                        "id": "qr_go_bulk_123",
                        "requestNumber": "QR-GO-12345",
                        "status": "REJECTED",
                        "kind": "BULK",
                        "serviceType": "GO_BULK",
                        "vehicleType": "VAN",
                        "itemDescription": "20 cartons of office furniture",
                        "quantity": 3,
                        "pickupAddress": "15 Allen Avenue, Ikeja",
                        "dropoffAddress": "24 Marina Road, Lagos Island",
                        "quotedPriceKobo": null,
                        "expiresAt": "2026-06-15T12:00:00.000Z",
                        "quotedAt": null,
                        "acceptedAt": null,
                        "rejectedAt": "2026-06-14T12:00:00.000Z",
                        "orderId": null,
                        "quotationNumber": null,
                        "createdAt": "2026-06-14T11:45:00.000Z",
                        "updatedAt": "2026-06-14T12:00:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "haulage.quotation.accepted": {
      "post": {
        "summary": "Receive haulage.quotation.accepted",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookHaulagePayload"
              },
              "examples": {
                "haulage.quotation.accepted": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "haulage.quotation.accepted",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "haulage": {
                        "quoteRequest": {
                          "id": "qr_haul_123",
                          "requestNumber": "QR-HL-12345",
                          "status": "ACCEPTED",
                          "kind": "HAULAGE",
                          "serviceType": "HAUL",
                          "vehicleType": "TRUCK",
                          "itemDescription": "Industrial generator and spare parts",
                          "quantity": 4,
                          "pickupAddress": "12 Creek Road, Apapa, Lagos",
                          "dropoffAddress": "Port Harcourt Industrial Estate",
                          "quotedPriceKobo": 12500000,
                          "expiresAt": "2026-06-15T12:00:00.000Z",
                          "quotedAt": "2026-06-14T11:50:00.000Z",
                          "acceptedAt": "2026-06-14T12:00:00.000Z",
                          "rejectedAt": null,
                          "orderId": null,
                          "quotationNumber": "HLQ-2026-0001",
                          "createdAt": "2026-06-14T11:40:00.000Z",
                          "updatedAt": "2026-06-14T12:00:00.000Z"
                        },
                        "quotation": {
                          "id": "qhpp_123",
                          "quotationNumber": "HLQ-2026-0001",
                          "priceKobo": 12500000,
                          "upfrontAmountKobo": 5000000,
                          "balanceAmountKobo": 7500000,
                          "paymentMode": "SPLIT",
                          "paymentStatus": "DEPOSIT_PAID"
                        },
                        "trip": null
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "haulage.trip.assigned": {
      "post": {
        "summary": "Receive haulage.trip.assigned",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookHaulagePayload"
              },
              "examples": {
                "haulage.trip.assigned": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "haulage.trip.assigned",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "haulage": {
                        "quoteRequest": {
                          "id": "qr_haul_123",
                          "requestNumber": "QR-HL-12345",
                          "status": "TRUCK_ASSIGNED",
                          "kind": "HAULAGE",
                          "serviceType": "HAUL",
                          "vehicleType": "TRUCK",
                          "itemDescription": "Industrial generator and spare parts",
                          "quantity": 4,
                          "pickupAddress": "12 Creek Road, Apapa, Lagos",
                          "dropoffAddress": "Port Harcourt Industrial Estate",
                          "quotedPriceKobo": 12500000,
                          "expiresAt": "2026-06-15T12:00:00.000Z",
                          "quotedAt": "2026-06-14T11:50:00.000Z",
                          "acceptedAt": "2026-06-14T12:00:00.000Z",
                          "rejectedAt": null,
                          "orderId": "ord_haul_123",
                          "quotationNumber": "HLQ-2026-0001",
                          "createdAt": "2026-06-14T11:40:00.000Z",
                          "updatedAt": "2026-06-14T12:00:00.000Z"
                        },
                        "quotation": {
                          "id": "qhpp_123",
                          "quotationNumber": "HLQ-2026-0001",
                          "priceKobo": 12500000,
                          "upfrontAmountKobo": 5000000,
                          "balanceAmountKobo": 7500000,
                          "paymentMode": "SPLIT",
                          "paymentStatus": "DEPOSIT_PAID"
                        },
                        "trip": {
                          "id": "ord_haul_123",
                          "trackingNumber": "ELA-HL-12345",
                          "status": "TRUCK_ASSIGNED"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "haulage.trip.updated": {
      "post": {
        "summary": "Receive haulage.trip.updated",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookHaulagePayload"
              },
              "examples": {
                "haulage.trip.updated": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "haulage.trip.updated",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "haulage": {
                        "quoteRequest": {
                          "id": "qr_haul_123",
                          "requestNumber": "QR-HL-12345",
                          "status": "ACCEPTED",
                          "kind": "HAULAGE",
                          "serviceType": "HAUL",
                          "vehicleType": "TRUCK",
                          "itemDescription": "Industrial generator and spare parts",
                          "quantity": 4,
                          "pickupAddress": "12 Creek Road, Apapa, Lagos",
                          "dropoffAddress": "Port Harcourt Industrial Estate",
                          "quotedPriceKobo": 12500000,
                          "expiresAt": "2026-06-15T12:00:00.000Z",
                          "quotedAt": "2026-06-14T11:50:00.000Z",
                          "acceptedAt": "2026-06-14T12:00:00.000Z",
                          "rejectedAt": null,
                          "orderId": "ord_haul_123",
                          "quotationNumber": "HLQ-2026-0001",
                          "createdAt": "2026-06-14T11:40:00.000Z",
                          "updatedAt": "2026-06-14T12:00:00.000Z"
                        },
                        "quotation": {
                          "id": "qhpp_123",
                          "quotationNumber": "HLQ-2026-0001",
                          "priceKobo": 12500000,
                          "upfrontAmountKobo": 5000000,
                          "balanceAmountKobo": 7500000,
                          "paymentMode": "SPLIT",
                          "paymentStatus": "DEPOSIT_PAID"
                        },
                        "trip": {
                          "id": "ord_haul_123",
                          "trackingNumber": "ELA-HL-12345",
                          "status": "IN_PROGRESS"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "support_case.created": {
      "post": {
        "summary": "Receive support_case.created",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookSupportCasePayload"
              },
              "examples": {
                "support_case.created": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "support_case.created",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "supportCase": {
                        "id": "cm1case123",
                        "caseNumber": "INC-20260621-A1B2C3",
                        "title": "Delivery proof dispute",
                        "summary": "Recipient says the package was not received.",
                        "category": "DELIVERY_ISSUE",
                        "status": "OPEN",
                        "priority": "MEDIUM",
                        "relatedResource": {
                          "type": "BOOKING",
                          "id": "cmbooking123",
                          "reference": "ELA-1234ABCD"
                        },
                        "firstResponseDueAt": "2026-06-14T12:30:00.000Z",
                        "dueAt": "2026-06-14T16:00:00.000Z",
                        "firstRespondedAt": null,
                        "resolvedAt": null,
                        "closedAt": null,
                        "createdAt": "2026-06-14T12:00:00.000Z",
                        "updatedAt": "2026-06-14T12:10:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "support_case.updated": {
      "post": {
        "summary": "Receive support_case.updated",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookSupportCasePayload"
              },
              "examples": {
                "support_case.updated": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "support_case.updated",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "supportCase": {
                        "id": "cm1case123",
                        "caseNumber": "INC-20260621-A1B2C3",
                        "title": "Delivery proof dispute",
                        "summary": "Recipient says the package was not received.",
                        "category": "DELIVERY_ISSUE",
                        "status": "OPEN",
                        "priority": "MEDIUM",
                        "relatedResource": {
                          "type": "BOOKING",
                          "id": "cmbooking123",
                          "reference": "ELA-1234ABCD"
                        },
                        "firstResponseDueAt": "2026-06-14T12:30:00.000Z",
                        "dueAt": "2026-06-14T16:00:00.000Z",
                        "firstRespondedAt": "2026-06-14T12:10:00.000Z",
                        "resolvedAt": null,
                        "closedAt": null,
                        "createdAt": "2026-06-14T12:00:00.000Z",
                        "updatedAt": "2026-06-14T12:10:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "support_case.resolved": {
      "post": {
        "summary": "Receive support_case.resolved",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookSupportCasePayload"
              },
              "examples": {
                "support_case.resolved": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "support_case.resolved",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "supportCase": {
                        "id": "cm1case123",
                        "caseNumber": "INC-20260621-A1B2C3",
                        "title": "Delivery proof dispute",
                        "summary": "Recipient says the package was not received.",
                        "category": "DELIVERY_ISSUE",
                        "status": "RESOLVED",
                        "priority": "MEDIUM",
                        "relatedResource": {
                          "type": "BOOKING",
                          "id": "cmbooking123",
                          "reference": "ELA-1234ABCD"
                        },
                        "firstResponseDueAt": "2026-06-14T12:30:00.000Z",
                        "dueAt": "2026-06-14T16:00:00.000Z",
                        "firstRespondedAt": "2026-06-14T12:10:00.000Z",
                        "resolvedAt": "2026-06-14T13:00:00.000Z",
                        "closedAt": null,
                        "createdAt": "2026-06-14T12:00:00.000Z",
                        "updatedAt": "2026-06-14T12:10:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    },
    "support_case.closed": {
      "post": {
        "summary": "Receive support_case.closed",
        "description": "ELA sends this JSON payload to the configured partner webhook URL. Verify `X-ELA-Signature` before processing. Return any 2xx response within the configured timeout to acknowledge delivery. Non-2xx responses, connection failures, and timeouts are retried with exponential backoff. Treat `X-ELA-Webhook-Id` as an idempotency key because duplicate deliveries are possible.",
        "tags": [
          "Partner Webhooks"
        ],
        "parameters": [
          {
            "name": "X-ELA-Webhook-Id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique webhook delivery id."
          },
          {
            "name": "X-ELA-Webhook-Event",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "booking.created",
                "booking.updated",
                "booking.cancelled",
                "booking.status_changed",
                "booking.delivered",
                "payment.processing",
                "payment.succeeded",
                "payment.failed",
                "payment.pending_verification",
                "credit.accepted",
                "quote_request.quoted",
                "quote_request.expired",
                "quote_request.declined",
                "haulage.quotation.accepted",
                "haulage.trip.assigned",
                "haulage.trip.updated",
                "support_case.created",
                "support_case.updated",
                "support_case.resolved",
                "support_case.closed"
              ]
            },
            "description": "Webhook event type."
          },
          {
            "name": "X-ELA-Signature",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "example": "t=1781443200,v1=abcdef..."
            },
            "description": "HMAC SHA-256 signature over `${timestamp}.${rawBody}` using the webhook signing secret."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerWebhookSupportCasePayload"
              },
              "examples": {
                "support_case.closed": {
                  "value": {
                    "id": "wh_018f2f0f-2e31-7331-a4db-5bd3b9bdc2ac",
                    "event": "support_case.closed",
                    "createdAt": "2026-06-14T12:00:00.000Z",
                    "data": {
                      "supportCase": {
                        "id": "cm1case123",
                        "caseNumber": "INC-20260621-A1B2C3",
                        "title": "Delivery proof dispute",
                        "summary": "Recipient says the package was not received.",
                        "category": "DELIVERY_ISSUE",
                        "status": "CLOSED",
                        "priority": "MEDIUM",
                        "relatedResource": {
                          "type": "BOOKING",
                          "id": "cmbooking123",
                          "reference": "ELA-1234ABCD"
                        },
                        "firstResponseDueAt": "2026-06-14T12:30:00.000Z",
                        "dueAt": "2026-06-14T16:00:00.000Z",
                        "firstRespondedAt": "2026-06-14T12:10:00.000Z",
                        "resolvedAt": null,
                        "closedAt": "2026-06-14T13:15:00.000Z",
                        "createdAt": "2026-06-14T12:00:00.000Z",
                        "updatedAt": "2026-06-14T12:10:00.000Z"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any 2xx status after successful processing."
          }
        }
      }
    }
  }
}
