Convelio · AsyncAPI Specification

Convelio Webhooks

Version

View Spec View on GitHub CompanyLogisticsShippingFine ArtFreightEcommerceQuotesWebhooksCustomsInsuranceAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
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.