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-labelsnow accepts up to 4 images in one request:imageandimage_urleach 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 returns400inference.too_many_images- New
options.images.classificationchooses how hard we work to identify which frame is the label:from_extraction_only(the default, no classifier),classifier_feeds_extraction, orclassifier_informs_selection - New
options.images.on_ambiguity:use_best(default) picks the strongest candidate,errorrefuses to guess. Newerrorsvaluesambiguous_label(two or more frames look like labels and cannot be reconciled) andmissing_label(no frame yielded a label). Both require 2 or more images, so single-image behavior is unchanged - New
options.images.barcodes_from_allcollects barcodes from every frame rather than only the winning one, andbarcode_valuesaccepts one list per image when you send several - New response field
images[], one entry per submitted image in submission order, withindex,image_url,document_classification,scores,selected,errorwhen that frame's model call failed. It isnullfor a single-image request. On anambiguous_labelresultselectedreports what we would have picked, not what was used - branch onstatus - New
options.tracker.create_synchronously(withcreate_automatically) creates the tracker inside the request, so the response already carriesstatus: "completed"and the tracker id and an integration working to a deadline does not have to poll. Failures still come back asstatus: "error"with the reason inerrors[]rather than as an HTTP error - When several images are sent,
media_urlsholds 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.imagesreference
- 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/bomsandPOST /v1/items/:item/boms- list and create bills of materials with component items and quantitiesGET /v1/items/:item/boms/:bom- retrieve BOM detail; passlocation_idto get per-componentavailable_qty, assembly item stock, andmax_buildable_qtyPOST /v1/items/:item/boms/:bomandDELETE /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 versionsPOST /v1/items/:item/boms/:bom/buildand.../unbuild- deduct components and raise assembly stock, or reverse it, atomicallyGET /v1/items/:item/assembly-ordersand.../assembly-orders/:order- build and unbuild history with quantities and component consumption- New
item_typeon item create and update (inventoryorassembly). 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_qtyis 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 anemailand a non-emptyeventsarray 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 goesactive.GET /v1/events/subscribersandGET /v1/events/subscribers/:subscriber- List and retrieve subscribers (notifications:read).POST /v1/events/subscribers/:subscriber- Update the subscribedevents,approvea verified subscriber, orresendthe 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=systemfor 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, andwebhook.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
POSTis sent to the URL, and the webhook returns toenabledif it succeeds - New fields on the webhook object:
disabled_atandenable_at,retry_mode,supersede, and astatsbreakdown carrying success, failure, and rate forlast_24h,previous_24h, andlast_48h.statusreportsenabled,suspended, ordisabled - Delivery now backs off automatically while an endpoint returns
429. ARetry-Afterfrom 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 usableRetry-After, theRateLimit-ResetandX-RateLimit-Resetheaders (and their-Aftervariants) are read instead - New
GET /v1/events/:event/outgoing-webhookslists the delivery attempts for an event. Each attempt includesretry_after_ms, the wait your endpoint asked for retry_modechooses the retry schedule:fast,slow, orbalanced(about 15 seconds, 1 minute, 3 minutes, and 8 minutes).balancedis 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
- New subscribable events
- Support:
- New
/v1/supportendpoints to file support requests by email, with list and retrieve, signed-URL attachment uploads, and tokenized attachment links
- New
- Documents on Resources:
- Added an optional
include_documentsquery 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). Passinclude_documents=trueto embed the resource's linked documents inline as a_documentsarray of document objects, avoiding a separate call to the Documents API. When the parameter is omitted,_documentsisnull.
- Added an optional
- Provider Detection:
- New
POST /v1/utils/providers/detectaccepts 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 singletracking_number, an array of them (for split shipping), or a comma-separated string; PackageX-internal (PKGX-) numbers are not supported - Each result carries a
resultsummary (external,ambiguous, orunknown) and acandidateslist. The tracking URL is the carrier's own page when known, a universal tracking page otherwise, andnullfor an unknown provider. Results are cached, so repeated lookups are fast
- New
- 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-countbase_uomon an asset item returns400 - Transactional units on asset items require whole-number conversion factors
item_transactional_unit_idis accepted on fulfillment articlerequested_qtyandpicked_qty, on fulfillment parcelcontents, and on inventory level writes; the conversion factor is applied before storage and the resolved unit is returned asitem_transactional_uniton each article- Converting an existing item to
is_asset: trueis 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, orgtininstead of requiringitem_id.
- Audits can now be created using an item's
- Templates:
POST /v1/templates/pdf/generateimage 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, omittingheightderives it from the image's aspect ratio, so a logo sent with only awidthkeeps 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
errorswhile the rest of the PDF still renders. SVG documents containing entity declarations are rejected - A
dpioption 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/containersnow supports filtering byupdated_atwith 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 aZsuffix, or RFC 3339 with a UTC offset. Fractional seconds must be either omitted or given as exactly three digitsGET /v1/containersnow accepts anidfilter, including a comma-separated batch form (?id=a,b,c), so several containers can be fetched in one call instead of oneGET /v1/containers/:idcall each
- Date and number filters:
- RFC 3339 datetimes carrying a UTC offset (such as
+05:00) are now accepted where they were previously misread
- RFC 3339 datetimes carrying a UTC offset (such as
- Metadata filters:
- Metadata list filters now accept a comparison operator as
metadata=<key>:<operator>:<value>(and the dotted formmetadata.<key>=<operator>:<value>), where the operator isequals(the default),lt, orgt. For exampleGET /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)
- Metadata list filters now accept a comparison operator as
- 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_logsandlogs_visibilityquery 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_idaccepts an optionaldisable_webhooksboolean. Whentrue, the outgoing webhook for the resultingtracker.updatedevent 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 (withdisable_webhookstrue 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 achaining.addorchaining.removerequest, or to the downstream update emitted whencurrent_shipment_idis set
- 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 (
- Shipments:
- You can now add a comment to a shipment's tracking timeline without providing a status. Send
tracking_update.commentwithouttracking_update.statuson the shipment create or update endpoints and a new timeline entry is created that repeats the shipment's current status and carries your comment. Theshipment.updatedwebhook fires, but customer-facing pickup and delivery notifications are not re-sent. A400with codeinvalid:commentis returned when the shipment has no prior tracking update with a status
- You can now add a comment to a shipment's tracking timeline without providing a status. Send
- Documents:
- Added a
notesfield to the Documents API - Added the
packing_slip,bol,coa, anditem_labeldocument categories - Tripled the rate limits on document creation per IP, user, and organization
- Added a
- Parcels:
- The parcel object's
layoutnow includesname
- The parcel object's
- Assets:
- Batch updates of many assets sharing the same destination are markedly faster
- Items:
GET /v1/itemsnow respects a location'ssettings.items.show_zero_inventoryin addition to the organization setting; either one can enable zero-inventory visibility
- Events:
- The event object now reports the processing
stepsit ran, each with aname(for examplewebhooks_list,log_write,user_push_notifications) and astatus, so a step that was skipped or failed is visible on the event itself.stepsis populated once the event has been processed
- The event object now reports the processing
- Integrations:
- The
outgoing_integration.errorandincoming_webhook.errorevents now carry the full outgoing integration or incoming webhook object plus anerror_notificationobject withcount(errors counted in the current interval),limit(the configured failure limit that was exceeded), andcreated_at. These replace the top-levelerror_countandlimitfields the events previously carried
- The
- Organizations:
settings.fulfillments.predefined_packagesandsettings.predefined_packagesare 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_urlis now bounded rather than open-ended: a stalled fetch is abandoned and reported as408file.timeout_error, an implausibly large file as400file.too_large, and a5xxfrom the host serving the URL as502file.download, which is the one worth retrying. This applies to every endpoint that accepts a URL, not only inferences
- A large or slow
- Item Label Inference:
GET /v0/ai/inferences/images/item-labelsnow acceptscarton_number,lot_number,item_numbers, andpurchase_ordersfilters- Also accepts
created_at,updated_at,created_by,updated_by,gtin, andskufilters, matching the shipping-labels endpoint location_idnow accepts a comma-separated list as well asnulland!null, andorder_bynow acceptsupdated_atin addition tocreated_atsearchnow 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 aslinked_reason_code - The legacy manifest
reason_codestring is deprecated in favor ofreason_code_id
- Manifests can now be linked to a reason code with
- Reason Codes:
- Added
manifestas a reason code resource
- Added
- Shipments:
refund_statusis now documented as an enum:requested,refunded, orrejected
🐛 Bug Fixes
- Fulfillments:
- Only domestic service levels are now allowed for domestic fulfillments, and only international service levels for international ones
- Templates:
- Default
margin_topandmargin_bottomonPOST /v1/templates/pdf/generateare reduced from 36pt to 18pt, so short custom label sizes fit without setting margins explicitly - An actionable
400is returned whenmargin_top + margin_bottomleaves no printable area, naming the margins, their sum, and the page height
- Default
- 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)
- Canceling an inbound parent or child shipment is no longer rejected by the parent/child status checks (
- Notification Templates:
- Fixed the dashboard notification template preview failing on a Content Security Policy violation
- Shipping Label Inference:
- New
unknown_providervalue inerrors, 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-internalPKGX-tracking number, no longer attempt external carrier tracking
- New
⚠️ Breaking Changes
- Date filters (platform-wide):
- Date-only values such as
2026-06-01are now rejected with a400on 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 toPOST /v1/exportsandPOST /v1/batches, which accept the same date-filter shapes in their request bodies
- Date-only values such as
- Containers, Shipments:
?filter=refundednow returns a400onGET /v1/containersandGET /v1/shipments. It was never a real status group and previously returned an unfiltered list rather than narrowing results - the allowed values arecompleted,outstanding, andexception. OnGET /v1/trackersthe value is no longer advertised, but that endpoint does not validate its list parameters, so it continues to return a200with an unfiltered list
- Containers:
- A multi-word
searchvalue now matches containers with ANY of the terms by default, where ALL terms were previously required. Passsearch_strategy=match_allto restore the old behavior - List parameter validation is stricter:
page,limit,search,layout_path,location_id, andmetadatanow return400on invalid input where they previously failed silently or were ignored. Specifically,statusvalues are no longer repaired before validation (a double-encoded comma or a space inside a value now returns400),?filter=returns400for any value outside the three allowed ones, and?limit=noneis no longer accepted - uselimit=allfor the maximum page size of 1000 - The
invalid_enum.*error codes are replaced. The status is still400in every case, but there are now three response shapes, so readcoderather than parsingerrors:validation.failedwith a field path forpage,limit,search,layout_path,order_by,directionandfilter;validation.failedwith an empty string inerrorsfor the value filters (id,status,location_id,layout_id, and an unrecognizedupdated_atoperator); andparam.invalidfor parameter-level errors such as a rejected date value
- A multi-word
- 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_urlmust 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 with400instead of being requested by the server. A request that previously succeeded now fails if itsimage_urlis a bare IPv4 or IPv6 literal (inference.url), islocalhostor the cloud metadata host (inference.hostname), or uses a scheme other thanhttps(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_automaticallytotrue: anoptions.trackerobject naming notypeno longer forcescreate_automaticallytofalsefor that request. Previously a partial object such as{ tracker: {} }resolved to an explicitfalsethat overrode the organization setting, so no tracker was created. An omittedcreate_automaticallynow falls back to the organization setting like any other omitted key. Organizations on the default offalseare unaffected, and an explicitcreate_automatically: falseis 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 aper_fieldentry per searched field) - Optional typo tolerance: set
search_fuzzinessto"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 viaPOST /v1/organizations/:organization - New
brandmatch 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". Thebrandmarker then breaks the resulting tie in favor of the contact that carries the brand. Treatmatch_markersandmatching_decision.matched_byas non-exhaustive when you branch on them matching_decision.best_scorereports how the leading candidates compared:tied_above_thresholdfor an exact tie, andtied_within_tolerancewhen 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), andGET .../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
- 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
✨ 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, Firstform 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
- 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
- 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
- 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 -
- 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_termssetting (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
recipientandsendernow carries a structuredmatching_decision(matches,error,best_score,matched_by,unmatched_by, and a plain-languagereason) explaining how the match was decided - New
manual_matcherror: 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 (matchingline2or 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_markersandmatch_marker_pointsshowing why it was ranked where it was - New observability fields on recipient/sender:
extracted_name,searched_name,extracted_business, andsearched_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
- Recipient and sender names are now automatically cleaned of leading titles (
- Contacts:
relevance_scoreon contacts search results now reflects the title/suffix-cleaned score instead of the raw score. The previous raw score is available separately asrelevance_score_v3, and_search.relevance_score_v4carries the new score on the contact itself. Both are transitional, kept for comparison and slated for removal in a future release - integrate againstrelevance_score
⚠️ Breaking Changes
- Shipping Label Inference:
_searchV2on each candidate is reduced to{ scores, matches }; thecontactsub-object and the per-fieldhighlightstrings are gone. The_coverageaxis 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_scoreis stable; build against that- A per-field channel (
search.name,search.names,search.groups) is now absent from_searchV2.matcheswhen that field matched nothing, rather than present with a score of0 - The match
order_byvalues are now_relevance,_rank, and_precedence. The old_similarityand_coverageare still accepted but resolve to_precedence, which is also the new default - an organization that never set one now reports_precedence._relevancealso 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_sendersort values or theinbound_trackers_statuses/outbound_trackers_statusesfilters. Requests using the removed sort values now fail validation _inbound_trackersand_outbound_trackersare now alwaysnullonGET /v1/contactsand on contact exports, so a saved export template selecting those columns produces empty columns. Use the trackers endpoints instead - noteGET /v1/contacts/:contactdoes not populate them either, and never did
- The contacts list no longer supports the
- 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
notesfield, settable onPOST /v1/assetsandPOST /v1/assets/:asset_idand 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
nullto clear the notes. An empty string is ignored and leaves the existing notes unchanged. Notes are not matched by thesearchparameter
- Assets now carry a free-form
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_sizeon print job creation (see Models for all supported values) - The printer
page_sizeresponse 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_custompaper size withcustom_dimensions(width and height, in inches) on print jobs. It prints at the printer's configured size and bypasses capability matching, so it requiresprint_station_idandprinter_name
- Expanded label paper size support from 5 to 39 sizes - the full set of standard label and full-page formats is now available via
✨ 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
searchparameter onGET /v1/shipmentswill now return matching 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
🐛 Bug Fixes
- Cloud Printing:
- Print job creation now returns a
400 print_job.paper_size_requirederror when the paper size cannot be determined from the document andconfiguration.paper_sizeis not supplied. Previously such jobs proceeded best-effort and were matched against any available printer, which could result in mismatched output. Migration: pass an explicitconfiguration.paper_sizeon any job where the document size may be ambiguous (e.g. PDFs from external sources).
- Print job creation now returns a
⚠️ Breaking Changes
- Print Jobs:
scalingis 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
timeoutstatus is replaced byunreported- the station could not determine the printer outcome, with an optional reason - andtimed_out reverse_orderis 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 aname,visibility(public/private), and optionally acategory. Pass a base64-encodedcontentfield to upload the file inline, or omit it to receive a pre-signedupload_urlfor direct GCS uploadGET /v1/documents- List documents with filtering byresource_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=trueto get a 15-minute signed download URL for private documentsPOST /v1/documents/:id- Update a document'sname,category,visibility,metadata, or linked resourcesDELETE /v1/documents/:id- Soft-delete a document and all its resource linksGET /v1/documents/linksandGET /v1/documents/:id/links- List resource links for documents, filterable byresource_type,resource_id, anddocument_id- Documents can be linked to assets, shipments, manifests, fulfillments, and items using
add/remove/setsemantics on theresourcesfield - Requires
documents:readscope for read operations anddocuments:writescope for write operations
✨ Improvements
- Audits:
- Added
metadatafield support to audits and audit tasks - Added
update_inventoryflag to audit operations
- Added
- Workflows:
- Added
location_idfilter toGET /v1/workflowsandGET /v1/workflows/sync- narrows the list to workflows usable at a given location, supporting comma-separated multiple locations - Added
allowed_locationsfield to workflow list and sync responses so clients can perform client-side location filtering - Added
?status=draftfilter toGET /v1/workflowsto 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/:keycall - Tightened
workflow_idvalidation - IDs must now start with an alphanumeric character and be between 3 and 50 characters in length
- Added
🐛 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_versionto 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_versionbump silently rolled back
- Fixed workflow version block routes silently returning 404 when the version segment used a
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_parentfilter onGET /v1/trackersto filter trackers by whether their associated shipments are parent shipments; accepts boolean aliases (true/false,1/0,yes/no) with optionalsome:andnone:prefixes - Added
has_parent_shipmentboolean field to the Tracker response model -trueif any directly associated shipment hasis_parent = true - Changed multi-shipment filter evaluation: when combining
providers,tags,service_levels,shipping_label_inference_id, orshipment_recipient_contact_idfilters 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
- Added
- Parcels:
- Added
metadatafield to the parcel public model - Added
metadatafilter support on parcel listings
- Added
- Containers:
- Added
commentfield support on container create and update
- Added
- Workflows:
- Added
modelandvsdk_versionfields to the workflow device model
- Added
🐛 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.providernow surfaces the detectedservice_level,provider_service_level,tracking_number, andtracking_number_barcodeextracted 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, andinterpreter_versionproperties - Added grouping options for workflow organization
- Added
emailandftptrigger support - Added device registry and cloud workflow proxy URLs
- Added
- 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_numberfield - 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_inventoryflag to items list - Added suffix search for item names
- Added
- Shipments:
- Populated
paidandpayment_intent_idwithin the main transaction - Added VAT/Tax ID field to international commercial invoices
- Populated
- Deliveries:
- Added automatic update and filter for destination contact
- Parcels:
- Added predefined package name to parcels
- Assets:
- Added maintenance status filter
- Devices:
- Added
updated_atquery filter for device routes
- Added
- Workflows:
- Allowed triggering proxied API workflows with
workflow:readscopes - Used
keylookup for workflow secrets instead ofid
- Allowed triggering proxied API workflows with
- 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
coveragescoring 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_atwhen container containing shipment is updated - Fixed wrong status of tracker where
added_to_containerandremoved_from_containerwere 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.
tagscan now be called with different operations instead of the default (implied)AND. Prefix the comma separated list withAND:,OR:,!AND:or!OR:.
✨ Improvements
emailfilter for Contacts List API- Negation values can be used for
errorsfilter 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_idfilter 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_byin 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_idfilter - added ability to add trackers from unsupported providers
- added
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
completedstatus 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
- Build on top of Batches API, exposes a user friendly way to import the following resources via CSV:
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_idandrecipient_contact_idnot 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
typefilter to Shipments API to allow filtering byinbound/outboundshipments - Inference matching improvements:
- inference status is now
errorwith the errormultiple_matchesif there is more than one contact that is matched above the matching threshold - a
partial_matcheserror 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
line2andphoneweight is now considered in the relevance score of the matched contacts
- inference status is now
Bug Fixes
- Fixed inconsistent error message when creating contact (which was reported when setting
secondary_addresstonull) 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
phaseidentifying the phase in which the error occurred duplicate_handlingis saved in the DB and returned as part of the batch
- each error line in the errors file has an additional property called
Events & Webhooks:
- we automatically delete webhooks where the URLs are invalid
- Event model exposes
initial_webhooks,attempted_webhooks, andpending_webhooksand 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:
layoutproperty containing theLayoutmodel is present on all tracking updates
Shipments:
layoutproperty containing theLayoutmodel 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_errorandsettings.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_errorandoptions.match.throw_recipient_match_error - Added sender and recipient business as searchable fields and also added
provider_nameandservice_level_nameas filter
- allow inference matching errors to be thrown or ignored:
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
fraytrates resulted in an exception
- fixed a bug where getting
- Webhooks:
- fixed profiles webhooks and events
October 7, 2024
API Key Features
- Added
account_idfor Shipping Label Inference as a new extracted field - Exposed an API parameter (
"status": "extracted") to prevent Shipping Label Inferences from moving tocompletedstate on update - Allow filtering of shipments by
container_id=nullquery parameter
Bug fixes and improvements
- Fixed missing "data" in layout deletion event
- Fixed missing
coordinatesin 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.