1. Getting Started
  2. Release Notes

Getting Started

Release Notes

This changelog details updates primarily related to API, Web improvements and bug fixes.

3rd October, 2026

🚀 API Key Features

  • Shipping Label Inference:
    • POST /v1/inferences/images/shipping-labels now accepts up to 4 images in one request: image and image_url each take an array as well as a single value. Send the top and bottom of a package and the label is found on whichever frame carries it. Over the cap returns 400 inference.too_many_images
    • New options.images.classification chooses how hard we work to identify which frame is the label: from_extraction_only (the default, no classifier), classifier_feeds_extraction, or classifier_informs_selection
    • New options.images.on_ambiguity: use_best (default) picks the strongest candidate, error refuses to guess. New errors values ambiguous_label (two or more frames look like labels and cannot be reconciled) and missing_label (no frame yielded a label). Both require 2 or more images, so single-image behavior is unchanged
    • New options.images.barcodes_from_all collects barcodes from every frame rather than only the winning one, and barcode_values accepts one list per image when you send several
    • New response field images[], one entry per submitted image in submission order, with index, image_url, document_classification, scores, selected, error when that frame's model call failed. It is null for a single-image request. On an ambiguous_label result selected reports what we would have picked, not what was used - branch on status
    • New options.tracker.create_synchronously (with create_automatically) creates the tracker inside the request, so the response already carries status: "completed" and the tracker id and an integration working to a deadline does not have to poll. Failures still come back as status: "error" with the reason in errors[] rather than as an HTTP error
    • When several images are sent, media_urls holds every one of them, including frames that were not selected, so they stay retrievable. Deleting an inference cleans up every image it was sent
    • See the updated Shipping Label Inference docs for selection, ambiguity and the full options.images reference
  • Items Assembly - any inventory item can now be an assembly item with a versioned bill of materials, and build/unbuild operations that move inventory atomically:
    • GET /v1/items/:item/boms and POST /v1/items/:item/boms - list and create bills of materials with component items and quantities
    • GET /v1/items/:item/boms/:bom - retrieve BOM detail; pass location_id to get per-component available_qty, assembly item stock, and max_buildable_qty
    • POST /v1/items/:item/boms/:bom and DELETE /v1/items/:item/boms/:bom - update a BOM, or delete it (it is deactivated instead when build history exists)
    • GET /v1/items/:item/boms/:bom/versions - list a BOM's versions
    • POST /v1/items/:item/boms/:bom/build and .../unbuild - deduct components and raise assembly stock, or reverse it, atomically
    • GET /v1/items/:item/assembly-orders and .../assembly-orders/:order - build and unbuild history with quantities and component consumption
    • New item_type on item create and update (inventory or assembly). Editing a BOM's components creates a new version, while metadata-only edits do not; an item cannot be a direct or indirect component of itself; min_build_qty is enforced on both build and unbuild; and archiving an assembly item deactivates its BOMs
    • Component layouts are auto-selected when a component has stock on a single layout at the build location, and multiple layouts can be selected explicitly per component
  • Event Subscribers - organization-managed email destinations that always receive system-level operational alerts (webhook health and integration errors), independent of user accounts:
    • POST /v1/events/subscribers - Create a subscriber by providing an email and a non-empty events array of system-level event types. The address must be verified (and, when the creator is not the org's sole owner, approved by a second owner) before it goes active.
    • GET /v1/events/subscribers and GET /v1/events/subscribers/:subscriber - List and retrieve subscribers (notifications:read).
    • POST /v1/events/subscribers/:subscriber - Update the subscribed events, approve a verified subscriber, or resend the verification email (notifications:write).
    • DELETE /v1/events/subscribers/:subscriber - Remove a subscriber (recipients cannot self-unsubscribe).
    • GET /v1/events/types - Catalog of subscribable event types; pass ?type=system for the system-level events only.
  • Webhook Health and Lifecycle Events - webhooks now report their own state, so an integration can react to its endpoint being throttled instead of inferring it from missing traffic:
    • New subscribable events webhook.created, webhook.updated, webhook.deleted, webhook.degraded, webhook.suspended, and webhook.disabled. The health events also email organization administrators
    • A webhook is temporarily suspended for 1 hour once it accumulates 50 failed deliveries with no successes in the same hour. Rate-limited (429) responses do not count toward suspension. A degraded warning is raised when the failure rate is above 30% with more than 100 failures in the last 24 hours, and a webhook is permanently disabled when the failure rate is above 30% with more than 500 failures in both the last and the previous 24-hour window
    • A disabled webhook can be re-enabled by updating it - a test POST is sent to the URL, and the webhook returns to enabled if it succeeds
    • New fields on the webhook object: disabled_at and enable_at, retry_mode, supersede, and a stats breakdown carrying success, failure, and rate for last_24h, previous_24h, and last_48h. status reports enabled, suspended, or disabled
    • Delivery now backs off automatically while an endpoint returns 429. A Retry-After from your endpoint pauses delivery to the whole endpoint, not just the one delivery that was rate limited, and held-back deliveries do not spend a retry. When a rate-limited response has no usable Retry-After, the RateLimit-Reset and X-RateLimit-Reset headers (and their -After variants) are read instead
    • New GET /v1/events/:event/outgoing-webhooks lists the delivery attempts for an event. Each attempt includes retry_after_ms, the wait your endpoint asked for
    • retry_mode chooses the retry schedule: fast, slow, or balanced (about 15 seconds, 1 minute, 3 minutes, and 8 minutes). balanced is the default
    • Concurrent deliveries per webhook are capped, settable with max_concurrency (default 100)
    • Pending deliveries for a disabled webhook are dropped 48 hours after it is disabled
    • See the Webhooks and Events docs for the full health rules
  • Support:
    • New /v1/support endpoints to file support requests by email, with list and retrieve, signed-URL attachment uploads, and tokenized attachment links
  • Documents on Resources:
    • Added an optional include_documents query parameter to the retrieve endpoints for shipments, items, assets, fulfillments, and manifests (GET /v1/shipments/:id, GET /v1/items/:id, GET /v1/assets/:id, GET /v1/fulfillments/:id, GET /v1/manifests/:manifest). Pass include_documents=true to embed the resource's linked documents inline as a _documents array of document objects, avoiding a separate call to the Documents API. When the parameter is omitted, _documents is null.
  • Provider Detection:
    • New POST /v1/utils/providers/detect accepts one or more tracking numbers and returns, for each, the auto-detected carrier and a clickable tracking URL - so a tracking number can be displayed with its carrier and linked to the right tracking page without the user picking a carrier. Accepts a single tracking_number, an array of them (for split shipping), or a comma-separated string; PackageX-internal (PKGX-) numbers are not supported
    • Each result carries a result summary (external, ambiguous, or unknown) and a candidates list. The tracking URL is the carrier's own page when known, a universal tracking page otherwise, and null for an unknown provider. Results are cached, so repeated lookups are fast
  • Fractional Item Quantities - items measured by weight, volume, length, or area can now carry fractional quantities:
    • Non-asset item quantities store up to 4 decimal places. Asset items stay whole-numbered, and writing a fractional quantity for one is rejected
    • Asset items are restricted to units with uom_category: "count", and setting a non-count base_uom on an asset item returns 400
    • Transactional units on asset items require whole-number conversion factors
    • item_transactional_unit_id is accepted on fulfillment article requested_qty and picked_qty, on fulfillment parcel contents, and on inventory level writes; the conversion factor is applied before storage and the resolved unit is returned as item_transactional_unit on each article
    • Converting an existing item to is_asset: true is blocked when any level holds a fractional quantity
  • Locations Imports - locations can now be created in bulk through the imports pipeline.
  • Audits:
    • Audits can now be created using an item's sku, upc, or gtin instead of requiring item_id.
  • Templates:
    • POST /v1/templates/pdf/generate image elements now accept SVG, supplied as an HTTPS URL, a base64 data URI, or bare base64 - the format is detected automatically, so no extra field is needed
    • SVG images are rasterized at the element's on-page size scaled to the requested dpi, so they stay crisp at print size. For SVG images, omitting height derives it from the image's aspect ratio, so a logo sent with only a width keeps its proportions
    • Repeating the same image (PNG, JPEG, or SVG) across many elements - such as a logo on every label of a sheet - is now rendered and embedded once, so it no longer inflates the output PDF size
    • Two limits apply to image elements: the element's box is capped at 5000 x 5000 points, and an image fetched by URL is capped at 10 MB (any format). Exceeding either reports a per-element entry in errors while the rest of the PDF still renders. SVG documents containing entity declarations are rejected
    • A dpi option lets you choose the resolution the document is generated at
    • See the updated PDF Generate docs for the full limit table

✨ Improvements

  • Containers:
    • GET /v1/containers now supports filtering by updated_at with the full date-filter operator grammar: eq, !eq, gt, gte, lt, lte, bwe, bwi, !bwe, !bwi, in, !in. Values may be epoch seconds, epoch milliseconds, a full ISO datetime with a Z suffix, or RFC 3339 with a UTC offset. Fractional seconds must be either omitted or given as exactly three digits
    • GET /v1/containers now accepts an id filter, including a comma-separated batch form (?id=a,b,c), so several containers can be fetched in one call instead of one GET /v1/containers/:id call each
  • Date and number filters:
    • RFC 3339 datetimes carrying a UTC offset (such as +05:00) are now accepted where they were previously misread
  • Metadata filters:
    • Metadata list filters now accept a comparison operator as metadata=<key>:<operator>:<value> (and the dotted form metadata.<key>=<operator>:<value>), where the operator is equals (the default), lt, or gt. For example GET /v1/shipments?metadata=weight:gt:10
    • Values compare lexically, since metadata values are stored as strings. The existing metadata=<key>:<value> form still means equals, and filter values may now safely contain colons (for example timestamps or URLs)
  • Trackers:
    • Added live carrier tracking for eight carriers: OnTrac, Spee-Dee, Roadie, GLS US, LSO, UDS, Courier Express, and TForce. Trackers for these carriers now receive carrier tracking updates, and inbound EasyPost tracking webhooks for them are handled. Spee-Dee (speedee), Roadie (roadie), GLS US (gls_us), and TForce (tforce) are new provider ids. Shipping and rate creation for these carriers are not yet available.
    • Registered around 40 additional carrier provider ids (for example Pitney Bowes Global Ecommerce, GLS, Curri, Dispatch, Onfleet) as recognized values for future use. They are not yet wired for live carrier tracking (no EasyPost routing) or shipping, so they do not produce tracking updates or rates until wired individually.
    • New include_logs and logs_visibility query parameters on the tracker retrieve endpoint, and an option to include logs on the trackers list endpoint, so shipment logs can be fetched without a second call
    • POST /v1/trackers/:tracker_id accepts an optional disable_webhooks boolean. When true, the outgoing webhook for the resulting tracker.updated event is not delivered - intended for bulk corrections and for breaking webhook loops where an integration writes back to a tracker in response to a webhook it just received. It matches the existing flag on shipment update. The event is still recorded (with disable_webhooks true on the event row) and remains retrievable from the events API, so a suppressed delivery stays auditable, and recipient tracking notifications still send. It does not extend to tracker creation, to the nested events produced by a chaining.add or chaining.remove request, or to the downstream update emitted when current_shipment_id is set
  • Shipments:
    • You can now add a comment to a shipment's tracking timeline without providing a status. Send tracking_update.comment without tracking_update.status on the shipment create or update endpoints and a new timeline entry is created that repeats the shipment's current status and carries your comment. The shipment.updated webhook fires, but customer-facing pickup and delivery notifications are not re-sent. A 400 with code invalid:comment is returned when the shipment has no prior tracking update with a status
  • Documents:
    • Added a notes field to the Documents API
    • Added the packing_slip, bol, coa, and item_label document categories
    • Tripled the rate limits on document creation per IP, user, and organization
  • Parcels:
    • The parcel object's layout now includes name
  • Assets:
    • Batch updates of many assets sharing the same destination are markedly faster
  • Items:
    • GET /v1/items now respects a location's settings.items.show_zero_inventory in addition to the organization setting; either one can enable zero-inventory visibility
  • Events:
    • The event object now reports the processing steps it ran, each with a name (for example webhooks_list, log_write, user_push_notifications) and a status, so a step that was skipped or failed is visible on the event itself. steps is populated once the event has been processed
  • Integrations:
    • The outgoing_integration.error and incoming_webhook.error events now carry the full outgoing integration or incoming webhook object plus an error_notification object with count (errors counted in the current interval), limit (the configured failure limit that was exceeded), and created_at. These replace the top-level error_count and limit fields the events previously carried
  • Organizations:
    • settings.fulfillments.predefined_packages and settings.predefined_packages are returned in a stable order, so indexing into the array refers to the same package on every request
  • Shipping Label Inference:
    • A large or slow image_url is now bounded rather than open-ended: a stalled fetch is abandoned and reported as 408 file.timeout_error, an implausibly large file as 400 file.too_large, and a 5xx from the host serving the URL as 502 file.download, which is the one worth retrying. This applies to every endpoint that accepts a URL, not only inferences
  • Item Label Inference:
    • GET /v0/ai/inferences/images/item-labels now accepts carton_number, lot_number, item_numbers, and purchase_orders filters
    • Also accepts created_at, updated_at, created_by, updated_by, gtin, and sku filters, matching the shipping-labels endpoint
    • location_id now accepts a comma-separated list as well as null and !null, and order_by now accepts updated_at in addition to created_at
    • search now also matches on item name, item numbers, carton number, and lot number
  • Manifests:
    • Manifests can now be linked to a reason code with reason_code_id, returned as linked_reason_code
    • The legacy manifest reason_code string is deprecated in favor of reason_code_id
  • Reason Codes:
    • Added manifest as a reason code resource
  • Shipments:
    • refund_status is now documented as an enum: requested, refunded, or rejected

🐛 Bug Fixes

  • Fulfillments:
    • Only domestic service levels are now allowed for domestic fulfillments, and only international service levels for international ones
  • Templates:
    • Default margin_top and margin_bottom on POST /v1/templates/pdf/generate are reduced from 36pt to 18pt, so short custom label sizes fit without setting margins explicitly
    • An actionable 400 is returned when margin_top + margin_bottom leaves no printable area, naming the margins, their sum, and the page height
  • Webhooks:
    • Fixed webhooks being delivered out of order
  • Shipments:
    • Canceling an inbound parent or child shipment is no longer rejected by the parent/child status checks (invalid:parent_children_unresolved, invalid_parent_status)
  • Notification Templates:
    • Fixed the dashboard notification template preview failing on a Content Security Policy violation
  • Shipping Label Inference:
    • New unknown_provider value in errors, returned when the carrier on a scanned label is not recognized by the tracking provider
    • Outbound trackers for shipments with an unknown or unsupported provider (other), or with a PackageX-internal PKGX- tracking number, no longer attempt external carrier tracking

⚠️ Breaking Changes

  • Date filters (platform-wide):
    • Date-only values such as 2026-06-01 are now rejected with a 400 on every date filter across the API, instead of being silently misinterpreted as the epoch year 1970 (which returned unfiltered results). Send a full ISO datetime or an epoch value. This applies to list endpoints and also to POST /v1/exports and POST /v1/batches, which accept the same date-filter shapes in their request bodies
  • Containers, Shipments:
    • ?filter=refunded now returns a 400 on GET /v1/containers and GET /v1/shipments. It was never a real status group and previously returned an unfiltered list rather than narrowing results - the allowed values are completed, outstanding, and exception. On GET /v1/trackers the value is no longer advertised, but that endpoint does not validate its list parameters, so it continues to return a 200 with an unfiltered list
  • Containers:
    • A multi-word search value now matches containers with ANY of the terms by default, where ALL terms were previously required. Pass search_strategy=match_all to restore the old behavior
    • List parameter validation is stricter: page, limit, search, layout_path, location_id, and metadata now return 400 on invalid input where they previously failed silently or were ignored. Specifically, status values are no longer repaired before validation (a double-encoded comma or a space inside a value now returns 400), ?filter= returns 400 for any value outside the three allowed ones, and ?limit=none is no longer accepted - use limit=all for the maximum page size of 1000
    • The invalid_enum.* error codes are replaced. The status is still 400 in every case, but there are now three response shapes, so read code rather than parsing errors: validation.failed with a field path for page, limit, search, layout_path, order_by, direction and filter; validation.failed with an empty string in errors for the value filters (id, status, location_id, layout_id, and an unrecognized updated_at operator); and param.invalid for parameter-level errors such as a rejected date value
  • Contacts:
    • Contact matching now treats punctuation as equivalent, which can change auto-match outcomes. A contact whose name differs from the query only in punctuation previously could score 0 and dropped the field; it now matches
  • Shipping Label Inference:
    • image_url must name a public host over HTTPS. A URL is now checked before it is fetched, so one that names an address rather than a host is rejected with 400 instead of being requested by the server. A request that previously succeeded now fails if its image_url is a bare IPv4 or IPv6 literal (inference.url), is localhost or the cloud metadata host (inference.hostname), or uses a scheme other than https (inference.protocol). If you post images from somewhere not reachable over public HTTPS, send the image inline as a base64 data URL instead - both parameters accept one and data URLs are exempt. Note this checks the URL as written, not where it resolves to: a hostname that resolves to a private address is still fetched
    • For organizations that default create_automatically to true: an options.tracker object naming no type no longer forces create_automatically to false for that request. Previously a partial object such as { tracker: {} } resolved to an explicit false that overrode the organization setting, so no tracker was created. An omitted create_automatically now falls back to the organization setting like any other omitted key. Organizations on the default of false are unaffected, and an explicit create_automatically: false is still honored

5th September, 2026

🚀 API Key Features

  • Shipping Label Inference:
    • Contact matching has a new scorer that ranks candidates on three separate axes - how similar the names are, how much of the name is accounted for, and whether the words appear in the same order - instead of a single opaque relevance number. Each candidate now returns that breakdown under _search (combined, best, and a per_field entry per searched field)
    • Optional typo tolerance: set search_fuzziness to "AUTO:4,9" (per request, or per organization under the shipping-label match settings) to match names with spelling mistakes; "0" keeps matching exact. New organizations are created with typo tolerance on; existing organizations stay exact until they enable it via POST /v1/organizations/:organization
    • New brand match marker: configured business/brand phrases (name_ignore_terms) are now removed from the candidate contact's own name before scoring, so a contact saved as "John Doe Adidas" is no longer penalized against a label reading "John Doe Adidas". The brand marker then breaks the resulting tie in favor of the contact that carries the brand. Treat match_markers and matching_decision.matched_by as non-exhaustive when you branch on them
    • matching_decision.best_score reports how the leading candidates compared: tied_above_threshold for an exact tie, and tied_within_tolerance when the top two score within a small margin of each other. Both route to review instead of auto-matching, unless a confirming signal separates them - so a few inferences that used to auto-match the top candidate now surface for review. Treat the value set as non-exhaustive
    • Three new read-only inspection endpoints for tuning and verifying matching: GET .../search (score a name or group against your contact book and see the per-field breakdown), POST .../match (dry-run the whole matcher on a supplied recipient or sender without saving anything), and GET .../compare?ids= (re-run matching on existing inferences and diff the result). These are debug tools, not part of the stable API - they may change or be removed without notice

✨ Improvements

  • Contacts, Shipments, Trackers:
    • Nickname matching now works in both directions through one shared dictionary, so "Rob" finds "Robert" and "Robert" finds "Rob". Previously the direction depended on how the dictionary happened to be ordered and some pairs were silently missed (for example "Sam" did not reach "Samuel", and "Alex" did not reach "Alexandra"). Names written with a title, a generational suffix, or in Last, First form are also normalized before nickname lookup, so "Dr Robert Jones" and "Smith, John" now expand correctly where they previously produced nothing
    • Because wider nickname matching can also surface a different person, a nickname match now carries the same weight as a literal name match - organizations relying on automatic assignment may see slightly more shipping-label inferences routed to review on affected first names
    • Existing records pick up the improved matching after their next search re-index; until then they keep the terms they were indexed with
  • Trackers:
    • Tracker name search no longer produces bogus nickname expansions. Nicknames were previously found by substring matching, so any name starting with "Dr" was indexed against "Alexandra" and "Ric" against "Frederick". Expansion is now an exact dictionary lookup. As a trade-off, seven short forms that only worked by that accident - don, ed, leo, jo, vin, abi, cass - no longer expand to their longer names
  • Shipping Label Inference:
    • Recipient and sender names are now automatically cleaned of leading titles (Dr, Mr, Mrs, Prof, etc.) and trailing generational suffixes (Jr, Sr, II-IV, etc.) before contact matching, so "Dr. Mark Moore" now matches a contact named "Mark Moore"
    • New name_ignore_terms setting (configurable per organization and per request) strips configured business/brand phrases out of the searched name, falling back to a group/business search so a brand pulled out of a name can still match a contact
    • Phone number and apartment/unit line (line2) are no longer used in the match score; instead they, along with title and suffix agreement, act as strong confirming signals that help select or rule out a candidate when the name score alone is inconclusive (a close call, a tie, or below threshold)
    • Each recipient and sender now carries a structured matching_decision (matches, error, best_score, matched_by, unmatched_by, and a plain-language reason) explaining how the match was decided
    • New manual_match error: a single-word name competing with multiple candidate contacts is no longer auto-matched to the wrong fuller name unless a candidate is confirmed by a strong signal (matching line2 or phone); the inference is otherwise flagged for manual review with its candidates kept as suggestions
    • All candidate contacts are now returned as suggestions (including ones below the matching threshold), each carrying match_markers and match_marker_points showing why it was ranked where it was
    • New observability fields on recipient/sender: extracted_name, searched_name, extracted_business, and searched_business, showing what was read off the label versus what was actually searched
    • Identifying a contact by id or email now keeps the prior candidate suggestions in matches (the identified contact first), instead of replacing the list with only that contact
    • A field that matched nothing no longer drags a candidate's score down: the combined score now ignores non-matching fields, so a strong match on the name is not diluted by an unrelated field
    • Contact matching is measurably faster - each candidate was being scored twice, and the redundant pass has been removed
  • Contacts:
    • relevance_score on contacts search results now reflects the title/suffix-cleaned score instead of the raw score. The previous raw score is available separately as relevance_score_v3, and _search.relevance_score_v4 carries the new score on the contact itself. Both are transitional, kept for comparison and slated for removal in a future release - integrate against relevance_score

⚠️ Breaking Changes

  • Shipping Label Inference:
    • _searchV2 on each candidate is reduced to { scores, matches }; the contact sub-object and the per-field highlight strings are gone. The _coverage axis was also rescaled from 0-100 to 0-1 - a threshold comparison against it will keep working and silently give the opposite answer. Inferences created before this release replay the old shape and the old scale, so both can appear in the same integration. Of the score fields, only _search.relevance_score is stable; build against that
    • A per-field channel (search.name, search.names, search.groups) is now absent from _searchV2.matches when that field matched nothing, rather than present with a score of 0
    • The match order_by values are now _relevance, _rank, and _precedence. The old _similarity and _coverage are still accepted but resolve to _precedence, which is also the new default - an organization that never set one now reports _precedence. _relevance also now genuinely sorts by raw search-engine relevance, where it previously behaved like _rank
    • The organization-level "use legacy scoring" setting is no longer applied on its own; legacy scoring now runs only when a request explicitly asks for it. Organizations that relied on the stored setting will match with the new scorer
  • Contacts:
    • The contacts list no longer supports the trackers_as_recipient / trackers_as_sender sort values or the inbound_trackers_statuses / outbound_trackers_statuses filters. Requests using the removed sort values now fail validation
    • _inbound_trackers and _outbound_trackers are now always null on GET /v1/contacts and on contact exports, so a saved export template selecting those columns produces empty columns. Use the trackers endpoints instead - note GET /v1/contacts/:contact does not populate them either, and never did
  • Contacts, Shipments, Shipping Label Inference (list endpoints):
    • Search results that tie on relevance are now ordered deterministically by record id. This shifts which records land on which page, once, for tied results - most noticeably on filter-only requests where every record scores the same. The result set and totals are unchanged; re-fetch rather than assuming a page holds the same records as before

31st July, 2026

🚀 API Key Features

  • Assets:
    • Assets now carry a free-form notes field, settable on POST /v1/assets and POST /v1/assets/:asset_id and returned on the asset model (see Model). Holds up to 16,000 characters
    • Notes are available as an opt-in CSV export column and as a CSV import column, and the downloadable asset import template now includes it
    • Any change to notes is recorded in the asset's log trail, with the previous and new value, retrievable via GET /v1/logs?resource_id=:asset_id
    • Send null to clear the notes. An empty string is ignored and leaves the existing notes unchanged. Notes are not matched by the search parameter

30th June, 2026

🚀 API Key Features

  • Cloud Printing:
    • Expanded label paper size support from 5 to 39 sizes - the full set of standard label and full-page formats is now available via configuration.paper_size on print job creation (see Models for all supported values)
    • The printer page_size response object now includes the new label sizes as boolean capability flags (e.g. label_5x4, label_8_5x11), so a printer can advertise exactly which label formats it supports
    • New page_size_custom paper size with custom_dimensions (width and height, in inches) on print jobs. It prints at the printer's configured size and bypasses capability matching, so it requires print_station_id and printer_name

✨ Improvements

  • Shipments:
    • Shipments can now be found by searching for their tracker's destination contact - searching by the destination contact's name, nickname, or email via the search parameter on GET /v1/shipments will now return matching shipments

🐛 Bug Fixes

  • Cloud Printing:
    • Print job creation now returns a 400 print_job.paper_size_required error when the paper size cannot be determined from the document and configuration.paper_size is not supplied. Previously such jobs proceeded best-effort and were matched against any available printer, which could result in mismatched output. Migration: pass an explicit configuration.paper_size on any job where the document size may be ambiguous (e.g. PDFs from external sources).

⚠️ Breaking Changes

  • Print Jobs:
    • scaling is now a decimal factor bounded to 0.25-3.0 with a default of 1.0, instead of a percentage. Legacy values are normalized on read: a percentage-era 25-300 is divided by 100, and anything else is clamped to the nearest bound
    • The timeout status is replaced by unreported - the station could not determine the printer outcome, with an optional reason - and timed_out
    • reverse_order is removed

8th June, 2026

🚀 New Features

  • Documents API - Introduced a new Documents API for uploading, managing, and linking files to resources:
    • POST /v1/documents - Create a document by providing a name, visibility (public/private), and optionally a category. Pass a base64-encoded content field to upload the file inline, or omit it to receive a pre-signed upload_url for direct GCS upload
    • GET /v1/documents - List documents with filtering by resource_type, resource_id, category, mime_type, visibility, status, and full-text search via ?search= (searches filename and metadata)
    • GET /v1/documents/:id - Retrieve a document. Pass ?include_document_url=true to get a 15-minute signed download URL for private documents
    • POST /v1/documents/:id - Update a document's name, category, visibility, metadata, or linked resources
    • DELETE /v1/documents/:id - Soft-delete a document and all its resource links
    • GET /v1/documents/links and GET /v1/documents/:id/links - List resource links for documents, filterable by resource_type, resource_id, and document_id
    • Documents can be linked to assets, shipments, manifests, fulfillments, and items using add/remove/set semantics on the resources field
    • Requires documents:read scope for read operations and documents:write scope for write operations

✨ Improvements

  • Audits:
    • Added metadata field support to audits and audit tasks
    • Added update_inventory flag to audit operations
  • Workflows:
    • Added location_id filter to GET /v1/workflows and GET /v1/workflows/sync - narrows the list to workflows usable at a given location, supporting comma-separated multiple locations
    • Added allowed_locations field to workflow list and sync responses so clients can perform client-side location filtering
    • Added ?status=draft filter to GET /v1/workflows to retrieve draft-bearing workflows directly from the list endpoint
    • Workflow writes (create/update) no longer delete existing secrets; secret removal now requires an explicit DELETE /:id/secrets/:key call
    • Tightened workflow_id validation - IDs must now start with an alphanumeric character and be between 3 and 50 characters in length

🐛 Bug Fixes

  • Workflows:
    • Fixed workflow version block routes silently returning 404 when the version segment used a v-prefixed format (e.g. /versions/v1/blocks/...)
    • Fixed deleting the latest workflow version being incorrectly rejected - the delete now re-points latest_version to the previous version in the same transaction
    • Fixed workflow secret values that resembled base64 or hex strings being corrupted on save due to automatic encoding detection
    • Fixed creating a new workflow version failing for workflows that contain block groups
    • Fixed deleting a workflow's only version leaving behind an empty, unusable workflow base - the whole workflow is now removed and the response includes workflow_deleted: true
    • Fixed a race condition in version deletion where a concurrent version creation could have its latest_version bump silently rolled back

14th May, 2026

🚀 API Key Features

  • Item Segmentation - Added support for the Item Segmentation inference model via SDK

🐛 Improvements

  • Exports:
    • Made processing of exports faster

9th May, 2026

✨ Improvements

  • Trackers:
    • Added shipment_is_parent filter on GET /v1/trackers to filter trackers by whether their associated shipments are parent shipments; accepts boolean aliases (true/false, 1/0, yes/no) with optional some: and none: prefixes
    • Added has_parent_shipment boolean field to the Tracker response model - true if any directly associated shipment has is_parent = true
    • Changed multi-shipment filter evaluation: when combining providers, tags, service_levels, shipping_label_inference_id, or shipment_recipient_contact_id filters on trackers with multiple shipments, each filter is now evaluated independently across the tracker's shipment set rather than requiring all conditions to be met by a single shipment
  • Parcels:
    • Added metadata field to the parcel public model
    • Added metadata filter support on parcel listings
  • Containers:
    • Added comment field support on container create and update
  • Workflows:
    • Added model and vsdk_version fields to the workflow device model

🐛 Bug Fixes

  • Workflows:
    • Fixed encryption handling for empty workflow secrets
  • Trackers:
    • Fixed Easypost tracker sync for shipments that were not purchased through the API
  • Parcels:
    • Fixed parcel properties not updating when a manifest is completed

24th April, 2026

✨ Improvements

  • Shipments:
    • shipping_label_inference.provider now surfaces the detected service_level, provider_service_level, tracking_number, and tracking_number_barcode extracted from the shipping label

18th April, 2026

✨ Improvements

  • Items:
    • Introduced item improvements including updated handling of transactional units - transactional units are now automatically deleted when an item's base unit changes

🚀 API Key Features

  • Cloud Printing - New cloud printing APIs for managing printers, stations, and print jobs:
    • Added printer management APIs
    • Added events for completed and failed print jobs
    • Added filters for station name, display name, and printer name
    • Added push notifications for printing events
    • Added manifests as a printable resource with location auth
  • Workflows:
    • Added checksum, platform, and interpreter_version properties
    • Added grouping options for workflow organization
    • Added email and ftp trigger support
    • Added device registry and cloud workflow proxy URLs
  • NetSuite Integration:
    • Enabled additional fields in Purchase Order interface
    • Added tax information to NetSuite data
    • Pick value from incoming sales order when available
  • Devices:
    • Added custom scopes to devices
  • Containers:
    • Added container batches API
  • Parcels:
    • Enabled standalone parcel creation

✨ Improvements

  • Fulfillments:
    • Allowed setting article value to 0
    • Added sales_order_number field
    • Exposed packing slip URL on shipping status
    • Merged duplicate input article quantities during creation
    • Enforced recipient address country code to match destination country
  • Items:
    • Added include_zero_inventory flag to items list
    • Added suffix search for item names
  • Shipments:
    • Populated paid and payment_intent_id within the main transaction
    • Added VAT/Tax ID field to international commercial invoices
  • Deliveries:
    • Added automatic update and filter for destination contact
  • Parcels:
    • Added predefined package name to parcels
  • Assets:
    • Added maintenance status filter
  • Devices:
    • Added updated_at query filter for device routes
  • Workflows:
    • Allowed triggering proxied API workflows with workflow:read scopes
    • Used key lookup for workflow secrets instead of id
  • Stations:
    • Station listing now shows only the user's stations

🐛 Bug Fixes

  • Assets:
    • Fixed serial number advanced search
    • Fixed asset updates across batches
    • Fixed search not functioning as expected
    • Fixed missing fields when bulk creating serialized assets
    • All attributes in asset imports now accept strings
  • Fulfillments:
    • Fixed article levels moving to "others" for unpicked items
  • Items:
    • Fixed layout code not updating on item page
    • Fixed pagination in items list location filter
    • Fixed error in item image upload API
  • Shipments:
    • Fixed status and delivery estimates changing when added to a container
    • Fixed purchase error when encountering null values
  • Stations:
    • Fixed access check in stations list
    • Fixed user's station disappearing after removing another user
  • Print Jobs:
    • Allowed status update for non-queued jobs
  • Events:
    • Fixed create error where argument message was missing
  • Parcels:
    • Parcel name is now mandatory when creating a parcel
  • Workflows:
    • Fixed draft status filtering

8th November, 2025

🚀 API Key Features

✨ Improvements

🐛 Bug Fixes

11th October, 2025

✨ Improvements

  • Batches:
    • Added an option to save a JSON file with the results of successfully processed resources
    • Added an option to apply batch operations on resources that are filtered via an interface that is the same as exports interface
  • Imports:
    • Added ability to process rows related to a single item
  • Shipments:
    • Added provider service level filter for shipments and added provider service level in shipment response rate model
    • Exposed an option to make label PDF generation asynchronous
    • Enabled logs
  • Shipping Label Inference:
    • Allowed the use of individual (new default) or composite (previous behavior) scores when checking for matching threshold
    • Enabled logs
  • Trackers:
    • Allowed creating a tracker from a shipment ID
  • Fuzziness can now be set in all APIs supporting the V2 search
  • Added a new coverage scoring method for V2 search results

🐛 Bug Fixes

  • Analytics:
    • Assets analytics are are available
  • Shipping Label Inference:
    • Fixed issue where a user was unable to retrieve a previous shipment created on a location which they do not have access to when scanning on their location
  • Trackers:
    • Fixed tracker deletion on chaining
    • Fixed propagation of estimated_delivery_at when container containing shipment is updated
    • Fixed wrong status of tracker where added_to_container and removed_from_container were being assigned as tracker statuses
  • Fixed metadata field queries not working on number fields

2nd August, 2025

🚀 API Key Features

  • Revamped search across Contacts, Shipments, Deliveries and Shipping Label Inferences APIs. Allows targeted and advanced search, along with fuzzy matching.
  • Array filters e.g. tags can now be called with different operations instead of the default (implied) AND. Prefix the comma separated list with AND:, OR:, !AND: or !OR:.

✨ Improvements

  • email filter for Contacts List API
  • Negation values can be used for errors filter in Shipping Label Inference List API e.g. AND:no_matches,!duplicate
  • Added contact notes in shipment response model
  • Added additional notes field in fulfillments
  • Added ability to assign layouts to multiple parcels in one fulfillment call
  • Added ability to assign container to shipments when creating shipments via batches
  • Item levels import now available
  • Added breakdown by reason type in audits analytics
  • Added item_id filter for item listing in fulfillments

🐛 Bug Fixes

  • Fixed fulfillment articles not returning layout
  • Fixed the image_urls in item imports
  • Fixed tracker status not reflecting the status of its last tracking update

8th July, 2025

🐛 Bug Fixes

  • Fixed contact name not reflecting in order details
  • Added fix where only packages with picked=true should be on packing slip
  • Audit is not created if available quantity on one of the levels is 0

30th June, 2025

✨ Improvements

  • Added created_by in Shipping Label Inferences.

🐛 Bug Fixes

  • fix for parcel weight is required error even when organization default weight exists

29th June, 2025

🚀 API Key Features

  • Audits Analytics API - New analytics capabilities for audit data analysis and reporting
  • Parcel Templates - Streamlined template system for parcel configuration and management
  • Reason Codes - Added positive and negative reason code support for better tracking and categorization
  • Packing Slips - Generate packing slips for fulfillments with packages
  • Email Reports - Implement completion and rejection email reports for packages
  • Automated Receiving - Automate creating a receiving/manifests on the recipient location when a fulfillment is created

✨ Improvements

  • Shipments: Added contact groups support in Shipment model for better contact organization
  • Layouts: Improved layout search response model for better data structure and consistency
  • Fulfillments:
    • Added organization settings for fulfillment configuration
    • Implemented new fulfillment filters for enhanced data management
    • Fixed manifest arrival date synchronization with fulfillment completion
    • Added reason code object support for fulfillments with "void" status
    • Added additional notes field for better fulfillment documentation
  • Parcels:
    • Enhanced parcel model with order number support and fixed order_type field
    • Added ability to filter parcels by multiple layouts
    • Implemented search functionality on external container ID
  • Sequences: Added search and filtering capabilities for sequence management
  • Shipping Label Inferences: Added organization settings for ignore terms in SL-INF matching
  • Error Handling: Enhanced error handling with wrapped errors when attempting to delete items with associated assets

🐛 Bug Fixes

  • Fulfillments: Fixed layout display issue for packages when layout is assigned to parcel
  • Fulfillments: Resolved listing visibility and status display issues
  • Packages: Fixed tags removal when receiving is completed
  • Manifests: Prevented arrival marking until fulfillment completion
  • Parcels: Fixed layout unsetting logic to only occur when parcel is picked for fulfillment
  • Internal Fulfillments: Fixed recipient location handling

11th May, 2025

API Key Features

  • Added Audits API
  • Auth

    • Added access request and waitlist feature
  • Notifications

    • Added custom notification templates and rules along with global default templates and rules
  • Exports

    • added Shipping label Inferences export
    • added Assets export
  • Imports

    • Item Import added
    • Asset Import added

Improvements

  • Addresses

    • added support for unsupported regions
  • Shipping Label Inferences

    • create Tracker for outbound shipping label inferences
    • use { "exceptions": null } in the update APi call to unset exceptions
    • { "options" { "match": { "required_properties" : "" } } } will not work now and throws a validation error
    • Added ignore terms in inference matching for group search
    • Only firstname is used for nicknames when searching for matched contacts
  • Containers:

    • prevent duplicate shipment update events in container tracking updates
  • Shipments

    • add purchased filter to list shipments API
    • added ability to disable/enable auto-close outstanding shipment configuration along with the number of days to be set.
  • Trackers

    • added recipient_contact_id filter
    • added ability to add trackers from unsupported providers

Bug Fixes

  • Auth

    • fixed issue when user that has a profile with organization with sso enabled tires to log in with code
  • Tracker

    • fixed error parcel weight is required error on create tracker
  • Contacts:

    • fixed error when removing locations and groups (associated with those location) from contacts-location-from
  • Groups:

    • fixed updating group with large number of children that caused update failure
  • Containers

    • fixed database error when fetching large number of containers

17th April, 2025

Improvements

  • Tweaked relevance score calculation for Contacts search
  • Allow asset serial number update

Bug Fixes

  • Fixed update asset search response model to include barcode

8th April, 2025

Improvements

  • Added support for middle mile detection in Shipping Label Inferences
  • Allow asset serial number update

Bug Fixes

  • Updated asset search response model to include barcode

27th March, 2025

Improvements

  • Added support for middle mile providers in Shipping Label Inference
  • Identify barcode from which tracking number is extracted in Shipping Label Inference

Bug Fixes

  • prevent location associations from persisting when updating Contact secondary addresses

14th March, 2025

Bug Fixes

  • Assets
    • barcodes default to serial number for assets
    • receiving are enabled for all new orgs
    • new completed status added
    • allow asset statuses to be enabled or disabled

5th March, 2025

Bug Fixes

  • Fix manifest tracker type

21st February, 2025

Bug Fixes

  • Prioritize coordinates from payload for delivery update
  • Fix api response for default layout deletion

14th February, 2025

Improvements

  • Added support for unsupported regions in Address Parser

Bug Fixes

  • fix bugs in asset API (status and layout)

8th February, 2025

API Key Features

  • Contacts API Check Contacts API for more details.

    • Added ability to set alternate names
    • Added ability to add tagged alternate addresses
    • Added ability to add tagged alternate emails
    • Added ability to add tagged alternate phone numbers
  • Manifest:

    • Parcel statuses and quantities
    • Manifest Emails
    • Add search to parcels, overdue status to fulfillment and manifests
  • Analytics APIs for:

    • Fulfillments
    • Items
    • Assets
    • Manifests
  • Templates

    • Added support for location based label templates
    • Added ability to upload custom logo per template
  • Imports API

    • Build on top of Batches API, exposes a user friendly way to import the following resources via CSV:
      • Group
      • Contact
  • Exports API

    • Simplified CSV exports.
    • Added ability to specify exported columns and values
    • Added ability to specify timezone for date fields (default to location or organization if not provided)
    • Exported CSV files are directly importable using the new Imports API for supported resources
    • Added support for setting default exported columns on the Organization
    • Added ability to configure how long after which export files are deleted (defaults to 1 day, can set via API or set default on the Organization)
    • Shipments and Trackers exports improvements
  • Gain deeper insights into your assets with new analytics breakdowns by category.

  • Efficiently manage maintenance schedules based purely on maintenance status for improved accuracy.

  • Analyze asset data with greater precision using the new timezone adjustment option for by_maintenance_day analytics.

  • Bulk update asset quantities to streamline inventory management.

  • Filter assets by multiple assignees for enhanced tracking and reporting.

  • The "unorganized items" view in Items analytics now defaults to a more intuitive and organized layout.

  • Gain deeper insights into your assets with new analytics breakdowns by category.

  • Efficiently manage maintenance schedules based purely on maintenance status for improved accuracy.

  • Analyze asset data with greater precision using the new timezone adjustment option for by_maintenance_day analytics.

  • Added breakdown for maintenance scheduled/overdue to Asset analytics

  • Bulk update asset quantities to streamline inventory management.

  • Filter assets by multiple assignees for enhanced tracking and reporting.

  • The "unorganized items" view in Items analytics now defaults to a more intuitive and organized layout.

  • Mark overdue manifests

Improvements

  • Date filters for the following resources/APIs:

    • assets
    • shipments
    • trackers
    • shipping label inference
  • Contacts:

    • Allow to remove locations and groups in single request
    • Add ability to add groups on contact creation or updation
  • Groups:

    • Ability to filter groups on multiple location ids
    • Ability to include the tracker count in groups
    • Added handling for contact and groups dis-association
  • Shipments & Trackers:

    • External tracking updates improvements
    • add rma_number, invoice_number, order_number, po_number and ref_number in shipment update
    • shipment status changes after old tracking updates
    • hashing duplicate fix for external tracker creation
    • contact groups addition, layout_id updation in shipments, updated fields should be nullable
    • service_level_name should get translation to shipments and trackers
  • Shipping Label Inference:

    • Added columns for extracted names
    • Add layout_id in inferences and in shipments too while transforming
    • Ability to filter inferences by "inbound" or "outbound"
    • fix: assigned tracker status is not updated when creating a tracker with a pre-fed status
    • Inference matching now uses targeted search on just the contact name and group
    • Inference exceptions
    • Allow inference matching to be optional or mandatory
  • Layouts:

    • Added search to Layout name and nested name
  • Bill of Lading

    • BoL Inference match Manifest and items using matching API
    • BOL: Add a configurable search threshold to manifest and items match
  • Sort assets more effectively with the new "maintenance status" option in the asset list.

  • API responses for DateTime fields now include a header specifying the return type and precision for improved clarity and integration.

  • Sort assets more effectively with the new "maintenance status" option in the asset list.

  • API responses for DateTime fields now include a header specifying the return type and precision for improved clarity and integration.

Bug Fixes

  • Resolved an issue where updates were incorrectly created from EasyPost tracker creation when the status didn't exist in the system.
  • Organization provider IDs are now accurately transformed from inferences in internal shipments.
  • Fixed a bug preventing the accurate update of shipment statuses to "exception".
  • Addressed a problem where users couldn't set all exceptions to false in Shipping Label Inferences.
  • Ensured that the "Create tracker" function has proper access to location data.
  • Resolved an issue where manufacturer numbers were being nullified during manifest article updates if not explicitly provided.
  • Fixed a bug where active_special_handling_tags were incorrectly set to null when not enabled.
  • Fix missing pagination and sorting options in Users List API
  • Contacts:
    • limit contacts to be added to groups with the same locations as the contact's location
    • contacts get disassociated when updating a group
  • Shipping Label Inferences:
    • concurrent delete inference calls causing errors
    • location_id and recipient_contact_id not transforming in test tracking numbers
  • Resolved an issue where updates were incorrectly created from EasyPost tracker creation when the status didn't exist in the system.
  • Organization provider IDs are now accurately transformed from inferences in internal shipments.
  • Fixed a bug preventing the accurate update of shipment statuses to "exception".
  • Addressed a problem where users couldn't set all exceptions to false in Shipping Label Inferences.
  • Ensured that the "Create tracker" function has proper access to location data.
  • Resolved an issue where manufacturer numbers were being nullified during manifest article updates if not explicitly provided.
  • Fixed a bug where active_special_handling_tags were incorrectly set to null when not enabled.
  • Fix missing pagination and sorting options in Users List API
  • Fix manifest by due status breakdown in manifest analytics API
  • fixed media url processing in Shipping Label Inference delete
  • fixed address autocomplete error when processing complete address strings

December 15, 2024

Bug Fixes

  • Fix the issue of tracker destination contact being overwritten when the delivery status is updated
  • Layouts array limit increased to 400

November 26, 2024

Bug Fixes

  • Reduced duplicate tracking updates

November 20, 2024

Improvements

  • Added type filter to Shipments API to allow filtering by inbound/outbound shipments
  • Inference matching improvements:
    • inference status is now error with the error multiple_matches if there is more than one contact that is matched above the matching threshold
    • a partial_matches error is now returned when more than one contacts match below the matching threshold
    • best match works only when the matched contact is above the matching threshold, in which case the highest relevance contact is matched unless there are multiple contacts with the same highest relevance score
    • best match setting is ignored if there is only 1 matched contact with a relevance score above the matching threshold
    • if there are matched contacts both below & above the matching threshold, then the result will only display the contacts that are above the matching threshold
    • address line2 and phone weight is now considered in the relevance score of the matched contacts

Bug Fixes

  • Fixed inconsistent error message when creating contact (which was reported when setting secondary_address to null) missing errors files
  • Fixed missing errors in batches error file
  • Fixed missing tracking updates from external shipments

October 13, 2024

API Key Features

  • Webhook Queues:
    • each resource gets its own queue to process outgoing webhooks.
    • additionally, resources that are modified via the Batches API get a separate queue per resource, in addition to the regular queue, for outgoing webhooks.
  • Templates API:
    • Custom Item Labels added
    • Custom Asset Labels added
  • Analytics:
    • Contact Shipment Analytics API
    • Additional breakdowns in Shipment Analytics API
  • Bill of Lading, Document Classification & Item Label Inference Beta (v0) APIs are available. Documentation will be provided on request
  • Sequences API
  • UPS SurePost account support added

Improvements

  • Added ability to specify the order of search results (previously they were always ordered by relevance) across all APIs

  • Verifying EasyPost carrier account's validity when adding Carrier account details

  • Assets:

    • add oan ption to specify the serial number as a prefix by using the Sequences API
    • added layout code to levels
  • Batches:

    • each error line in the errors file has an additional property called phase identifying the phase in which the error occurred
    • duplicate_handling is saved in the DB and returned as part of the batch
  • Events & Webhooks:

    • we automatically delete webhooks where the URLs are invalid
    • Event model exposes initial_webhooks, attempted_webhooks, and pending_webhooks and these are updated in real-time
    • events expire after 30 days by default. An option is exposed in the Organizations Update API body as { "settings": {"events": { "expire_after" : "days_1" | "days_3" | "days_7" | "days_14" | "days_30" | "days_90" | "days_180" | "days_365" }}}. Please note that retaining events beyond 30 days will result in additional charges.
  • Trackers:

    • layout property containing the Layout model is present on all tracking updates
  • Shipments:

    • layout property containing the Layout model is present on all tracking updates
    • added ability to filter deliveries by container_id=null
    • EasyPost rates are consistent across the EasyPost and PX accounts when using direct integration
  • Shipping Label Inferences:

    • allow inference matching errors to be thrown or ignored:
      • this setting is exposed both at the organization level and at the inference level
      • there is a separate setting for recipient and sender
      • Organization setting can be updated by setting these booleans in the Organization Update API body: settings.inferences.shipping_labels.match.throw_recipient_match_error and settings.inferences.shipping_labels.match.throw_sender_match_error
      • The default or Organization setting can be overridden at the Inference API level by setting these booleans in the Inference Create API body: options.match.throw_sender_match_error and options.match.throw_recipient_match_error
      • Added sender and recipient business as searchable fields and also added provider_name and service_level_name as filter

Bug Fixes

  • Addresses:
    • fixed missing Coordinates in address parsing
  • Assets:
    • fixed validation error when updating an asset
  • Shipping Label Inferences:
    • fixed a bug where inference was automatically being transformed
  • Shipments:
    • fixed a bug where getting frayt rates resulted in an exception
  • Webhooks:
    • fixed profiles webhooks and events

October 7, 2024

API Key Features

  • Added account_id for Shipping Label Inference as a new extracted field
  • Exposed an API parameter ("status": "extracted") to prevent Shipping Label Inferences from moving to completed state on update
  • Allow filtering of shipments by container_id=null query parameter

Bug fixes and improvements

  • Fixed missing "data" in layout deletion event
  • Fixed missing coordinates in address parsing
  • Fixed missing owners in the location user list
  • Fixed inability to get new rates for a shipment when the rates for fulfillment are expired

September 16, 2024

Bug fixes and improvements

  • User Location List Discrepancy: Resolved an issue where the 'user' location list differed from the 'location' user list
  • API Update Restriction: Implemented a fix to prevent users from updating quantities for manifests that have been marked as completed
  • Refund Functionality: Addressed a bug that prevented users from processing refunds for shipments

September 11, 2024

API Key Features

  • EasyPost API key configuration: Enables users to configure EasyPost API keys for direct integration.
  • Customs integration in shipments: Facilitates the inclusion of customs information within shipments to ship to Puerto Rico and Virgin Islands.
  • Provider and rate type filters in fulfillments: Allows users to filter fulfillments based on provider and rate type.
  • Export schemas: Provides predefined schemas for exporting data in different formats.

Bug fixes and improvements

  • Added service levels for international shipments: Expands shipping options for international destinations (Puerto Rico and Virgin Islands)
  • Fixed batch webhooks events: Ensures 'data' is not null in batch webhook events and adds resource_id & org_id to 'data' for deletion events.
  • Prevented raw recipient name population: Corrected the issue of raw recipient names from inferences being used in shipments.
  • Fixed payment default wallet: Corrected issues related to the default payment wallet.
  • Improved handling inferences: Ensured contact id is not associated with inferences when multiple matches occur.
  • Filtered deleted contacts in groups db listener: Enhanced the filtering of deleted contacts in the groups database listener.
  • Stored address from contacts in manual matches: Enabled storing addresses from contacts during manual matches.
  • Improved tracking number search: Enhanced the search query for tracking numbers, particularly for the middle portion.
  • Handled asset serial numbers for existing strings: Improved the handling of asset serial numbers when existing serial number strings are present.
  • Ensured asset serial numbers start at user input: Corrected the starting point for asset serial numbers to align with user input.

Web Key Features

  • Enhanced fulfillments table
  • Improved web fulfillment creation
  • Restricted API searching to a minimum of 3 characters
  • Fixed address autofill in shipment creation

Bug fixes and improvements

  • Resolved matching search string in the contacts table
  • Fixed contact id displayed instead of the name in the interface detail section
  • Ensured serialized items only show assets and standard items
  • Fixed default selection in radio filters and the location link
  • Corrected tags in the table view of inferences
  • Enabled un-associating a group from a location
  • Fixed the removal of SKU and GTIN fields from fulfillment creation
  • Fixed GTIN print functionality
  • Restricted the address when only updating contact information

Overall, these changes enhance the API's functionality, address various bugs, and improve the user experience by providing more control and flexibility in managing shipments, contacts, and data exports and these changes aim to improve the user experience, address functionality issues, and enhance data accuracy within the web application.