Karrio · AsyncAPI Specification

Karrio Webhooks

Version

View Spec View on GitHub ShippingLogisticsLabel GenerationPackage TrackingCarriersFulfillmentOpen-SourceMulti-CarrierRatingWebhookAsyncAPIEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-27'
method: derived
source: >-
  The `enabled_events` enum on the Webhook / WebhookData / PatchedWebhookData schemas in
  openapi/karrio-api-openapi.yml (Karrio API 2026.1.32) — the authoritative catalog —
  cross-read against https://karrio.io/docs/products/webhooks and
  https://karrio.io/docs/products/events.
provider: Karrio
providerId: karrio
type: Webhooks
asyncapi_published: false
description: >-
  Karrio has a real event surface and manages it through the REST API — webhooks are
  first-class objects with full CRUD plus a test-fire operation. It publishes NO AsyncAPI
  document, so the event catalog has to be read out of an enum inside the OpenAPI. Doing
  that turns up a discrepancy worth knowing about before you build against the docs.
event_catalog:
  authoritative_source: 'Webhook.enabled_events enum in the OpenAPI (x-spec-enum-id 7310794d8b16bdaf)'
  naming: snake_case, no dots
  count: 20
  wildcard: all
  events:
  - shipment_purchased
  - shipment_cancelled
  - shipment_fulfilled
  - shipment_out_for_delivery
  - shipment_needs_attention
  - shipment_delivery_failed
  - tracker_created
  - tracker_updated
  - pickup_scheduled
  - pickup_cancelled
  - pickup_closed
  - order_created
  - order_updated
  - order_fulfilled
  - order_cancelled
  - order_delivered
  - batch_queued
  - batch_failed
  - batch_running
  - batch_completed
documentation_discrepancy:
  severity: high
  detail: >-
    https://karrio.io/docs/products/webhooks shows a create-webhook payload subscribing to
    "shipment.created", "shipment.purchased", "tracking.status_updated",
    "tracking.delivered" and "order.fulfilled". Only ONE of those five ("order.fulfilled"
    -> order_fulfilled) has a counterpart in the contract's enum, and even that one is
    spelled differently. The contract uses snake_case with no dots; there is no
    shipment_created, no tracking_* namespace and no tracking_delivered event at all
    (delivery is tracker_updated, or shipment_out_for_delivery /
    shipment_delivery_failed). An integrator who copies the documented payload will be
    rejected by the enum.
  affected_page: https://karrio.io/docs/products/webhooks
  contract_wins: true
management:
  api: rest
  operations:
  - operationId: '$$$$$$$list'
    method: GET
    path: /v1/webhooks
  - operationId: '$$$$$$$create'
    method: POST
    path: /v1/webhooks
  - operationId: '$$$$$$$retrieve'
    method: GET
    path: '/v1/webhooks/{id}'
  - operationId: '$$$$$$$update'
    method: PATCH
    path: '/v1/webhooks/{id}'
  - operationId: '$$$$$$$remove'
    method: DELETE
    path: '/v1/webhooks/{id}'
  - operationId: '$$$$$$$test'
    method: POST
    path: '/v1/webhooks/{id}/test'
  - operationId: '$$$$$$$$resend_webhooks'
    method: POST
    path: /v1/batches/webhooks
  subscription_object:
    url: HTTPS endpoint to deliver to
    enabled_events: array from the enum above
    secret: header signature secret
    disabled: boolean
    last_event_at: datetime of last delivery
    test_mode: boolean
delivery:
  retries: true
  strategy: exponential backoff
  dead_letter: true
  replay: POST /v1/batches/webhooks (resend_webhooks)
  signature_verification: true
  signature_mechanism: >-
    Shared secret stored on the webhook object and used to sign a request header. Karrio
    does not publish the header name or the signature algorithm on any page found, which
    is a gap — a consumer cannot implement verification from the published docs alone.
  monitoring: >-
    Delivery counts and last response status are exposed on the webhook object; full
    delivery history is in the GraphQL events/api_logs surface.
event_object:
  source: GraphQL Event type (management API)
  fields:
  - id
  - type
  - data
  - test_mode
  - pending_webhooks
  - created_at
streaming:
  available: true
  tier: Insiders
  note: >-
    Continuous event streams, event history and custom handlers are documented at
    https://karrio.io/docs/products/events and marked Insiders. Queried through the
    GraphQL `events` connection with page_info cursor pagination — note that this is
    cursor-based, unlike the REST API's offset pagination.
asyncapi:
  published: false
  probed:
  - url: https://karrio.io/asyncapi.yml
    status: 404
  - url: https://karrio.io/asyncapi.json
    status: 404
  note: >-
    No asyncapi document exists anywhere in github.com/karrioapi/karrio (6,469 paths
    searched) and none is served. The enum above is the closest thing to a machine-
    readable event catalog Karrio publishes.
maintainers:
  - FN: Kin Lane
    email: kin@apievangelist.com

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/karrio-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.