openapi: 3.1.0 info: title: Convelio Public Webhook API version: '2.0' contact: name: Convelio API Team email: api@convelio.com url: https://www.convelio.com termsOfService: https://www.convelio.com/fr/termes/ license: name: MIT url: https://www.convelio.com/fr/termes/ description: '**This document describes the current version (2.0) of the Shipping API.** The Convelio API is organized around REST. Our API has predictable resource-oriented urls, accept and return json-encoded requests and responses. It also use standard HTTP response codes, authentication, and verbs. You can use the Convelio API in sandbox mode, which does not affect your live data or interact with the live api. The API key you use to authenticate the request determine whether the request is live mode or sandbox mode. # API key Convelio authenticates your API requests using your account’s API key. If you do not include your key when making an API request, or use one that is incorrect, Convelio returns an error. Your API key has a *Secret* type, prefixed by *sk*, and should be kept confidential and only stored on your own servers. Your account’s secret API key can perform any API request to Convelio without restriction. There are also two **modes** for your API key: *live* and *test*. - *live* key can only be used on our production server. - *test* key can only be used on our sandbox server. Example of key by modes | **Type** \\ **Mode** | Test | Live | |---------------------|-----------------------------------|-----------------------------------| | Secret | REDACTED_STRIPE_KEY | REDACTED_STRIPE_KEY | Obtaining your API key To get your API key, please send your request at api@convelio.com.' x-logo: url: public/assets/icons/convelio-black-spaced.svg altText: Convelio logo servers: - url: https://api.sandbox.convelio.com/v2 description: Sandbox - url: https://api.convelio.com/v2 description: Production security: - secret_token: [] tags: - name: webhook x-displayName: Webhook API description: 'The Webhook API allows an API partner to create and manage webhooks. ' paths: /webhook: parameters: - $ref: '#/components/parameters/json-content-type' - $ref: '#/components/parameters/accept' get: summary: List registered webhooks description: List all webhooks. operationId: listWebhooks tags: - webhook responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/webhook' '401': $ref: '#/components/responses/unauthorized' '403': $ref: '#/components/responses/forbidden' '500': $ref: '#/components/responses/internal-server-error' post: summary: Create webhook description: 'Create a webhook.

Deliveries:

To acknowledge receipt of a webhook delivery, return a 204 OK response with an empty body. To send a negative acknowledgment for the message, return any other status code. Webhook deliveries are signed with the API secret token. HTTP header name: X-Convelio-signature

Retry policy:

If a webhook delivery fails, Convelio will retry the delivery for up to 7 days. Retry attempts will start after 60 seconds and will increase exponentially.' operationId: createWebhook tags: - webhook requestBody: $ref: '#/components/requestBodies/webhook' responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/webhook' '401': $ref: '#/components/responses/unauthorized' '403': $ref: '#/components/responses/forbidden' '422': $ref: '#/components/responses/unprocessable-entity' '500': $ref: '#/components/responses/internal-server-error' /webhook/{webhookId}: parameters: - $ref: '#/components/parameters/webhook-id' - $ref: '#/components/parameters/json-content-type' - $ref: '#/components/parameters/accept' get: summary: Get webhook description: Get a webhook. operationId: getWebhook tags: - webhook responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/webhook' '401': $ref: '#/components/responses/unauthorized' '403': $ref: '#/components/responses/forbidden' '404': $ref: '#/components/responses/not-found' '500': $ref: '#/components/responses/internal-server-error' put: summary: Update webhook description: Update a webhook. operationId: updateWebhook tags: - webhook requestBody: $ref: '#/components/requestBodies/webhook-update' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/webhook' '401': $ref: '#/components/responses/unauthorized' '403': $ref: '#/components/responses/forbidden' '404': $ref: '#/components/responses/not-found' '422': $ref: '#/components/responses/unprocessable-entity' '500': $ref: '#/components/responses/internal-server-error' delete: summary: Delete webhook description: Delete a webhook. operationId: deleteWebhook tags: - webhook responses: '204': description: No Content '401': $ref: '#/components/responses/unauthorized' '403': $ref: '#/components/responses/forbidden' '404': $ref: '#/components/responses/not-found' '500': $ref: '#/components/responses/internal-server-error' webhooks: custom-quote-ready: post: summary: Custom Quote Ready Event description: Sent when a price is available for a custom quote. operationId: customQuoteReadyEvent tags: - webhook security: - convelio_signature: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/custom-quote-ready-event' responses: '204': description: Sent from your server when it accepts the callback. quote-paid: post: summary: Quote Paid Event description: Sent when a quote was paid operationId: quotePaidEvent tags: - webhook security: - convelio_signature: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/quote-paid-event' responses: '204': description: Sent from your server when it accepts the callback. order-created: post: summary: Order Created Event description: Sent when an order is created through the API. operationId: orderCreatedEvent tags: - webhook security: - convelio_signature: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/orde-created-event' responses: '204': description: Sent from your server when it accepts the callback. shipment-status-changed: post: summary: Shipment Status Changed Event description: Sent when a new shipment status is published. operationId: shipmentStatusChangedEvent tags: - webhook security: - convelio_signature: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/shipment-status-changed-event' responses: '204': description: Sent from your server when it accepts the callback. document-ready: post: summary: Document Ready Event description: Sent when a new document is available. operationId: documentReadyEvent tags: - webhook security: - convelio_signature: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/document-ready-event' responses: '204': description: Sent from your server when it accepts the callback. components: schemas: orde-created-event: title: OrderCreatedEvent type: object properties: event: type: string enum: - order_created created: type: string format: date-time payload: type: object properties: quote_id: type: string description: The Quote ID. format: uuid order_id: type: string description: The Order ID. format: uuid custom-quote-ready-event: title: CustomQuoteReadyEvent type: object properties: event: type: string enum: - custom_quote_ready created: type: string format: date-time payload: type: object properties: quote_id: type: string description: The Quote ID. format: uuid http-error: title: HttpError x-tags: - Error responses description: 'The error model for the API follow the Content-Type **application/problem+json** defined by the [IETF RFC 7807](https://tools.ietf.org/html/rfc7807). Description of the errors: - Bad Request (400): The URL requested is not valid. - Unauthorized (401): Token not found. - Forbidden (403): You are authenticated but not allowed to execute the action. - Not Found (404): Page not found. - Unprocessable Entity (422): The server was unable to process the request. - Internal Server Error (500): There is an internal problem on our server. - Service Unavailable (503): The server is not ready to handle the request. ' type: object properties: type: type: string example: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html description: 'A URL to a page with more details regarding the problem. The primary identifier for the problem. It''s typically an absolute URL that leads to an HTML page containing human-readable documentation regarding the problem.' title: type: string description: Short human-readable summary of the problem. example: Forbidden status: type: integer description: 'The HTTP status code. It''s always the same as the status code in the HTTP header. It''s only included for the convenience of the consumer.' example: 403 minimum: 100 detail: type: string description: Human-readable description of this specific problem. example: Forbidden required: - type - title - status - detail shipment-status: title: ShipmentStatus description: 'The shipment status of the tracked order. Possible values: - shipment_created: The Order has been booked and our team is planning collection at the pickup location. - picked_up: The items have been collected at the pickup location. - packing_in_progress: The items are being packed at one of our crating center for more safety. - export_in_progress: The shipment has left our crating center to be sent abroad. - freight_in_transit: The shipment is on its way to the delivery location. - import_in_progress: The shipment has arrived at country of destination. - out_for_delivery: The shipment has arrived the destination facility and the carrier is about to deliver the shipment. - shipment_completed: Home, sweet home! The shipment has been delivered to the delivery location. - on_hold: The shipment has temporarily been paused. - canceled: The shipment has been canceled for some reason.' type: string enum: - shipment_created - picked_up - packing_in_progress - export_in_progress - freight_in_transit - import_in_progress - out_for_delivery - shipment_completed - on_hold - canceled document-ready-event: title: DocumentReadyEvent type: object properties: event: type: string enum: - document_ready created: type: string format: date-time payload: type: object properties: order_id: type: string description: The Order ID. format: uuid document_type: type: string description: The type of document. dashboard_order_link: type: string description: Link to see the details of the shipping order. format: uri quote-paid-event: title: QuotePaidEvent type: object properties: event: type: string enum: - quote_paid created: type: string format: date-time payload: type: object properties: quote_id: type: string description: The Quote ID. format: uuid tracking_link: type: string description: Link to follow the progress of the shipping order. format: uri example: https://tracking.convelio.com/example webhook-url: title: WebhookUrl description: URL to receive webhooks. type: string format: uri pattern: ^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$ maxLength: 255 example: https://example.com/webhook triggering-event-name: title: TriggeringEventName type: string enum: - custom_quote_ready - quote_paid - order_created - shipment_status_changed - document_ready http-unprocessable-entity-error: title: HttpUnprocessableEntityError x-tags: - Error responses type: object allOf: - $ref: '#/components/schemas/http-error' - properties: status: example: 422 validation_messages: type: object description: Validation messages are only returned when your request have a body and the body is invalid. properties: '{field_name}': type: object description: 'The name of the field which is wrong in your request. Example: "delivery_type"' properties: '{error_title}': type: string description: 'The title of the error. Example: "deliveryTypeInvalid"' example: 'Invalid delivery type. Valid values are: curbside, white_glove' required: - '{field_name}' shipment-status-changed-event: title: ShipmentStatusChangedEvent type: object properties: event: type: string enum: - shipment_status_changed created: type: string format: date-time payload: type: object properties: order_id: type: string description: The Order ID. format: uuid status: $ref: '#/components/schemas/shipment-status' webhook-update: title: RequestBodyUpdateWebhook type: object properties: url: $ref: '#/components/schemas/webhook-url' required: - url webhook: title: Webhook x-tags: - Models type: object description: A webhook (also called a web callback or HTTP push API) is a way for an app to provide other applications with real-time information. properties: id: type: string description: Identifier of the webhook format: uuid example: df35ed86-2151-437d-839e-ef650313a067 readOnly: true url: $ref: '#/components/schemas/webhook-url' triggering_event_name: $ref: '#/components/schemas/triggering-event-name' creation_date: type: string format: date-time example: '2020-01-01T00:00:00Z' readOnly: true required: - url - triggering_event_name responses: internal-server-error: description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/http-error' example: type: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html title: Internal Server Error status: 500 detail: There is an internal problem on our server. unauthorized: description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/http-error' example: type: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html title: Unauthorized status: 401 detail: Token not found. forbidden: description: Forbidden content: application/json: schema: $ref: '#/components/schemas/http-error' example: type: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html title: Forbidden status: 403 detail: You are authenticated but not allowed to execute the action. unprocessable-entity: description: Unprocessable Entity content: application/json: schema: $ref: '#/components/schemas/http-unprocessable-entity-error' example: type: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html title: Unprocessable Entity status: 422 detail: The server was unable to process the request. validation_messages: '{field_name}': '{error_title}': 'Invalid delivery type. Valid values are: curbside, white_glove' not-found: description: Not Found content: application/json: schema: $ref: '#/components/schemas/http-error' example: type: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html title: Not Found status: 404 detail: Page not found. parameters: webhook-id: name: webhookId description: Webhook ID in: path schema: type: string required: true json-content-type: name: Content-Type description: Content-Type header should be sent and should be `application/vnd.convelio-shipping.v2+json` in: header schema: type: string enum: - application/json - application/vnd.convelio-shipping.v2+json default: application/json accept: description: Accept header should be sent and should be `application/json` name: Accept in: header schema: type: string enum: - '*/*' - application/json default: application/json requestBodies: webhook: content: application/json: schema: $ref: '#/components/schemas/webhook' application/vnd.convelio-shipping.v2+json: schema: $ref: '#/components/schemas/webhook' webhook-update: content: application/json: schema: $ref: '#/components/schemas/webhook-update' application/vnd.convelio-shipping.v2+json: schema: $ref: '#/components/schemas/webhook-update' securitySchemes: convelio_signature: name: X-Convelio-signature description: An HMAC SHA256 signature created with the body data and the API secret token. in: header type: apiKey secret_token: name: Authorization type: apiKey in: header description: token x-convelio-example: token {{secret_token}} x-convelio-sensitive: true x-tagGroups: - name: Endpoints tags: - shipping - webhook - name: Schemas tags: - Error responses - Models - Enums - name: Resources tags: - api-status-page