Convelio · AsyncAPI Specification
Convelio Webhooks
Version
View Spec
View on GitHub
CompanyLogisticsShippingFine ArtFreightEcommerceQuotesWebhooksCustomsInsuranceAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-09'
method: derived
source: openapi/convelio-shipping-openapi.yml
docs: https://developers.convelio.com/#tag/webhook
spec_type: Webhooks
asyncapi_published: false
asyncapi_note: >-
Convelio publishes NO AsyncAPI document. It does, however, do something better than
most webhook providers in the catalog: it declares its five events in the OpenAPI
3.1.0 top-level `webhooks` object with a typed request-body schema per event, so the
event surface IS machine-readable — it just is not expressed in AsyncAPI. This
artifact catalogues that surface as-declared. Nothing here is invented; every event
name, payload field and enum below is lifted from the published spec.
subscription:
model: self-service via the REST API
operations:
- {operationId: listWebhooks, method: GET, path: /webhook, summary: List registered webhooks}
- {operationId: createWebhook, method: POST, path: /webhook, summary: Create webhook}
- {operationId: getWebhook, method: GET, path: '/webhook/{webhookId}', summary: Get webhook}
- {operationId: updateWebhook, method: PUT, path: '/webhook/{webhookId}', summary: Update webhook}
- {operationId: deleteWebhook, method: DELETE, path: '/webhook/{webhookId}', summary: Delete webhook}
registration_shape:
schema: webhook
fields:
- {name: id, type: string, format: uuid, readOnly: true}
- {name: url, type: string, required: true, description: subscriber endpoint Convelio POSTs to}
- {name: triggering_event_name, type: enum, required: true}
- {name: creation_date, type: string, format: date-time, readOnly: true}
one_event_per_subscription: true
note: >-
A webhook registration binds exactly one triggering_event_name, so a partner wanting
all five events registers five webhooks.
delivery:
transport: HTTP POST
content_type: application/json
expected_response: 204 No Content
signature:
header: X-Convelio-signature
algorithm: HMAC-SHA256
signed_over: the request body
key: the account's API secret token
scheme_name: convelio_signature
retries: not documented
ordering: not documented
replay: not documented
envelope:
fields:
- {name: event, type: string, description: the event name, constrained by enum on each event schema}
- {name: created, type: string, format: date-time}
- {name: payload, type: object, description: event-specific body}
events:
- name: custom_quote_ready
channel: custom-quote-ready
operationId: customQuoteReadyEvent
summary: Custom Quote Ready Event
description: Sent when a price is available for a custom quote.
schema: custom-quote-ready-event
payload:
- {field: quote_id, type: string, format: uuid, description: The Quote ID}
significance: >-
This is the event that closes the loop on the API's most important asynchronous
branch. createShippingQuote can return a quote in status `processing` when Convelio
cannot price instantly (geography, oversized item, high commercial value); the
operations team produces a custom quote within 24h and this event announces it.
- name: quote_paid
channel: quote-paid
operationId: quotePaidEvent
summary: Quote Paid Event
description: Sent when a quote was paid.
schema: quote-paid-event
payload:
- {field: quote_id, type: string, format: uuid, description: The Quote ID}
- {field: tracking_link, type: string, description: Link to follow the progress of the shipping order}
- name: order_created
channel: order-created
operationId: orderCreatedEvent
summary: Order Created Event
description: Sent when an order is created through the API.
schema: orde-created-event
payload:
- {field: quote_id, type: string, format: uuid, description: The Quote ID}
- {field: order_id, type: string, format: uuid, description: The Order ID}
note: >-
The backing component schema is named `orde-created-event` in the published
document — a typo Convelio ships. Recorded verbatim, not corrected.
- name: shipment_status_changed
channel: shipment-status-changed
operationId: shipmentStatusChangedEvent
summary: Shipment Status Changed Event
description: Sent when a new shipment status is published.
schema: shipment-status-changed-event
payload:
- {field: order_id, type: string, format: uuid, description: The Order ID}
- {field: status, type: enum, ref: shipment-status}
status_values:
- {value: shipment_created, meaning: The Order has been booked and our team is planning collection at the pickup location}
- {value: picked_up, meaning: The items have been collected at the pickup location}
- {value: packing_in_progress, meaning: The items are being packed at one of our crating centers}
- {value: export_in_progress, meaning: The shipment has left our crating center to be sent abroad}
- {value: freight_in_transit, meaning: The shipment is on its way to the delivery location}
- {value: import_in_progress, meaning: The shipment has arrived at country of destination}
- {value: out_for_delivery, meaning: The carrier is about to deliver the shipment}
- {value: shipment_completed, meaning: The shipment has been delivered to the delivery location}
- {value: on_hold, meaning: The shipment has temporarily been paused}
- {value: canceled, meaning: The shipment has been canceled}
- name: document_ready
channel: document-ready
operationId: documentReadyEvent
summary: Document Ready Event
description: Sent when a new document is available.
schema: document-ready-event
payload:
- {field: order_id, type: string, format: uuid, description: The Order ID}
- {field: document_type, type: string, description: The type of document}
- {field: dashboard_order_link, type: string, description: link to the order in the Convelio dashboard}
coverage:
events_declared: 5
events_with_typed_schema: 5
subscription_operations: 5
gaps:
- No AsyncAPI document — the event surface is discoverable only by reading the OpenAPI webhooks block.
- No documented retry policy, backoff, or delivery guarantee.
- No replay/redelivery endpoint and no delivery-log surface.
- No signature-verification worked example or signing-secret rotation procedure.
- No event catalogue page in the help centre; the spec is the only description.