SendifyAPI docs
Open Sendify

Updated September 2026

Changelog

This page lists notable changes to the Sendify API — new endpoints, new fields, and changes in behavior. Entries are grouped by month, newest first.

We only make backwards-compatible changes to the API. That means we may add new endpoints, add new optional request fields, add new fields to responses, and add new values to enums. Make sure your integration tolerates unknown fields and enum values. If a breaking change is ever unavoidable, we will reach out to affected integrations well in advance.

Questions about a change? Contact us at api@sendify.com.

September 2026

  • Added: GET /shipment-defaults and PATCH /shipment-defaults — read and change the sender address, receiver address and favorite package a shipment created with POST /shipments is filled in with when it arrives without them. These were previously only editable in the Sendify web app. Each default is referenced as {"id": "..."} with the id from POST /favorites/addresses or GET /favorites/packages; send null to clear it. An id that names none of your own entries is rejected with 422.
  • Changed: A shipment sent from your default sender address now uses the whole address book entry: its name and first contact as well as its address and customs numbers. Before, the sender was always your team, with the API user as the contact. An entry without a name or a contact still falls back on those.
  • Added: dangerous_goods_type on packages when creating a shipment with POST /shipments or updating it with PUT /shipments/{id}. Set it to adr for fully regulated dangerous goods, limited_quantity for ADR 3.4, or leave it empty for non-dangerous goods.
  • Added: dangerous_goods_type on each entry in the GET /favorites/packages response.
  • Added: 2x2 as a label_layout value on POST /shipments/print: four labels on one A4 page.
  • Added: Booking confirmations pushed to Webhook endpoints. Subscribe to SHIPMENT_BOOKED_APP and/or SHIPMENT_BOOKED_API to be told as soon as Sendify books a shipment with the carrier, including the ones booked by hand in the Sendify web app. They arrive with type SHIPMENT_BOOKED. See Webhooks.
  • Changed: Tracking event webhooks use the same envelope as booking confirmations. type is now always TRACKING_EVENT, and the event name moved from event.type to data.event. carrier, tracking_id and the remaining event fields moved into data, with event.time renamed to data.event_time. The Tracking Webhooks page is now Webhooks.
  • Added: Webhook payloads are described in the API reference under Webhooks, as OpenAPI 3.1 webhooks with a model for each event.
  • Added: adr_dangerousgoods as a document type on POST /shipments/{id}/{document_type} for uploading the ADR certificate of a dangerous goods shipment.
  • Added: id on each entry in the POST /favorites/addresses response.
  • Added: address_book_id on the from, to, alternative_from and alternative_to parties of a shipment, accepted on create and update and returned when fetching a shipment. Send the id of an address book entry to record which contact the party came from, so shipping rules that target an address book contact apply to the shipment.
  • Added: id on each entry in the GET /favorites/packages response.
  • Added: favorite_package_id on shipment packages, accepted on create and update and returned when fetching a shipment. Send the id of a favorite package to record which preset the goods came from, so shipping rules that target a favorite package apply to the shipment.
  • Changed: Shipping rules are now identified by id everywhere. GET /shipping-rules and applied_shipping_rules return the rule's identifier as id, and POST /shipments/rates accepts it as shipping_rule_ids. The identifier value is unchanged — it is what the hash field carried before. The hash response field and the shipping_rule_hashes request field keep working; when both request fields are sent, shipping_rule_ids wins.
  • Changed: applied_shipping_rules[].id used to be an internal numeric ID that no endpoint accepted back. It now carries the rule identifier as a string, matching id on GET /shipping-rules. If you read this field, read it as a string — or use name for display.
  • Changed: POST /shipments/rates reads dangerous goods types of the shipment's packages, and only returns results that support the relevant dangerous goods type (or all results, if no packages contain dangerous goods). Fully regulated goods require ADR approval for your team. Note that some products require an ADR declaration form, which is not yet supported by the API - these products are not shown in the response.
  • Changed: POST /shipments/book responds with 422 if the dangerous_goods_type on the packages was changed after the rate was requested. Request rates again and book with the new rate.
  • Deprecated: required_addons.dangerous_goods_limited_quantity on POST /shipments/rates. It will continue to work for shipments where dangerous_goods_type is not set on the package level, but use dangerous_goods_type on the packages going forward.

August 2026

  • Added: Third-party customs payer support — bill customs duties and import taxes to a third party's carrier account instead of the receiver. See How to Bill Customs Duties to a Third Party.
  • Added: loading_meters on shipment packages.
  • Added: GET /shipments now supports filtering by your own reference with the reference_id query parameter.
  • Improved: Tracking statuses returned by GET /shipments/{id}/tracking are now more accurate, especially around out-for-delivery and delivered transitions.
  • Fixed: GET /shipments/{id} returns 400 Bad Request for a malformed shipment ID instead of a server error.

July 2026

  • Added: Shipments to Norway can now include a VOEC number in the customs information, so VOEC-registered sellers get correct VAT treatment. See International Shipping & Customs.
  • Added: Shipments whose booking failed can now be deleted with DELETE /shipments/{id}.
  • Fixed: customs_information is now included when fetching shipments via GET /shipments and GET /shipments/{id}.

June 2026

  • Added: PUT /shipments/{id} — update a shipment that has not been booked yet. The endpoint validates that the shipment is still bookable, regenerates the customs invoice when customs data changes, and returns the full updated shipment.
  • Changed: Structured customs information is now validated at booking time for shipments that require a customs invoice, so incomplete customs data fails fast with a clear error instead of failing at the carrier.
  • Added: collection_at_terminal addon on rates.
  • Fixed: Sending an empty packages array in an update no longer removes the shipment's packages.

May 2026

  • Fixed: Filtering shipments with status=CANCELED now returns canceled shipments correctly.
  • Fixed: Address validation now requires a state/province for countries where carriers require one.
  • Docs: Clarified how shipping_costs in customs information is auto-filled when omitted. See International Shipping & Customs.

April 2026

  • Changed: Price fields are omitted from responses for receiver-pays shipments, since the shipping cost is billed to the receiver's carrier account. See Advanced Billing Options.

March 2026

  • Added: GET /shipping-rules — list your team's shipping rules and see which rules are enabled.
  • Added: Shipping rules are now applied to POST /shipments/rates results, and the response tells you which rules were applied and which rates were excluded by them.
  • Added: unit_type field on customs items.
  • Added: Rates for your own carrier agreements now include own_agreement_name, so you can tell your agreements apart.
  • Changed: The manifest is always included in the available document types for booked shipments that require one.

February 2026

  • Added: POST /shipments/rates responses now include warnings and the rates that were excluded, with the reason for each exclusion.
  • Added: carrier_name and product_name in shipment responses.
  • Added: More document types can be requested via POST /shipments/print.

October 2025

  • Added: Structured customs support — include customs_information (items, HS codes, values, reason for export) when creating a shipment, and Sendify generates the customs invoice automatically at booking. See International Shipping & Customs.
  • Added: POST /shipments/cancel — cancel a booked shipment.
  • Changed: When complete structured customs data is provided, the customs invoice is no longer listed as a required document to upload.
  • Changed: Stricter customs validation — receiver VAT/EORI is required for B2B international shipments, and customs item weights are validated against package weights.

September 2025

  • Added: incoterms support on rate requests.
  • Added: tracking_id on shipment responses, and available document types on relevant endpoints.

June 2025

  • Added: Carrier filter on POST /locations/servicepoints.
  • Added: Carrier code on rates.
  • Added: Contact details in the favorite addresses response.
  • Fixed: GET /favorites/packages returns the actual total count.

May 2025

  • Launched: The public documentation site, including the Getting Started, Customs, Service Point, and Receiver Pays guides.
  • Added: GET /carriers — list available carriers.
  • Added: Service point delivery — look up service points via POST /locations/servicepoints, get service-point rates, and book to a service point.
  • Added: POST /shipments/{id}/{document_type} — upload customs documents for a shipment.
  • Added: required_documents on rates, and support for booking non-EU shipments once the required documents are provided.
  • Added: Resale prices from shipping rules in rates and booking responses.
  • Added: POST /favorites/addresses — search the addresses saved in your team's address book.

April 2025

  • Added: Rates from your own carrier agreements in POST /shipments/rates.
  • Added: Receiver-pays support — book with the receiver's carrier account as the paying party. See Advanced Billing Options.
  • Added: GET /printers and printing directly to your connected printers via POST /shipments/print.
  • Added: More addons on rates, including insurance, definite loading, and guaranteed delivery time.
  • Added: invoice_reference and expected_price on shipments.
  • Added: DELETE /shipments/{id} — delete a shipment that has not been booked.

January 2025

  • Launched: Rate search and booking are live in production — POST /shipments/rates and POST /shipments/book.
  • Added: GET /shipments/{id} — fetch a single shipment.
  • Added: GET /favorites/packages — list your saved package presets.
  • Added: Pickup and delivery instructions on shipments.
  • Added: Rates include pickup and delivery time estimates, cutoff date/time, required addons, and an expiry.

Changes before 2025 — the original shipment, tracking, and label printing API — predate this changelog and are not listed.