Changelog
Notable changes to the TEALCA API.
[Unreleased]
Security
POST /label: only generates labels for shipments the caller can access. A shipment outside that access now returns the shipment not found error, the same asGET /shipment/{shipment_identification}/label.
[1.5.0] - 2026-09-29
Added
POST /shipment/price-calculationandGET /shipment/{shipment_identification}/price-calculation: every entry ofquoteincludes theis_invoicedfield, true if the amount was already invoiced for the shipment, false if it is a quote calculated at request time.
Changed
POST /shipment,POST /preshipmentandPOST /warehouse/delivery-order: now matches an existing account even if the identification has trailing spaces or different letter case, instead of creating a duplicate account.- On those same endpoints,
shipper_phoneandconsignee_phonein the response are now always the normalized phone number. POST /label: theshipment_identificationsfield accepts at most 20 items per request.
Fixed
POST /shipment,POST /shipment/price-calculation,POST /preshipment,POST /warehouse/delivery-order,GET /customer/{customer_identification}/shipments,POST /documentandPOST /manifest: an identification, phone number or driver identification with a trailing line break is now rejected instead of accepted.POST /shipment,POST /preshipmentandPOST /warehouse/delivery-order: a shipment or preshipment missing a phone number or email for the shipper or consignee now returns a clear validation error instead of failing unexpectedly. It also reuses a phone number or email already given for the same account elsewhere in the request.- On those same endpoints, sending the same new customer more than once in a request no longer gets it rejected or stored with the literal name "None".
- On those same endpoints, sending the same shipper or consignee address more than once in a request no longer creates duplicate addresses.
POST /shipment,POST /shipment/price-calculation,POST /preshipmentandPOST /warehouse/delivery-order: a corporate client with no agreement configured now gets a clear error identifying it, instead of an unexpected error.POST /shipment/price-calculation,GET /shipment/{shipment_identification}/price-calculationandPOST /shipment: agreement item exceptions and inclusions scoped to a store or a store type are now applied correctly.quote[].itemsand the shipment's total price now reflect only the charges that apply to the shipment's real stores.POST /label: the barcode printed on the label now stays within the printer's dot grid for shipments with long location codes. It no longer includes a trailing space from the location code.
[1.4.0] - 2026-09-15
Added
GET /store,GET /store/{code}andGET /store/coverage: every store includes theis_platformfield.POST /shipment,GET /shipment/{shipment_identification},POST /shipment/cancel,GET /customer/{customer_identification}/shipments,POST /preshipmentandGET /preshipment/{preshipment_identification}:origin_storeanddestination_storeinclude theis_platformfield.GET /location:default_destination_storeincludes theis_platformfield.GET /store/coverage: new optionallocation_codeparameter. When the coordinates do not resolve to a single store of that location, the endpoint returns the platform store that serves it.
Changed
GET /location:default_destination_storeis resolved with the new coverage algorithm, so it can be a different store, it can be a platform, and it is null when the location has no coverage.POST /shipment,POST /preshipment,POST /shipment/price-calculation,GET /shipment/{shipment_identification}/price-calculation,POST /warehouse/delivery-orderandPOST /shipment-bulk/{header_id}/execute: whenorigin.storeordestination.storeis omitted for an office service, the store is always resolved by coverage, so the assigned store may differ from the one linked to the location and may be a platform.- On those same endpoints, a store resolved by coverage is also validated against locked stores, so a shipment that reaches a locked store without naming it is now rejected.
- On those same endpoints, coverage errors are reported by reason, which includes uncovered areas, inactive stores, locked stores, stores outside the catalog and locations covered by several stores without a platform. The message lists the candidate stores.
POST /shipment,POST /document,POST /manifestandPOST /preshipment: the response list keeps the order of the list sent in the request.GET /store/coverage: alocation_codethat does not exist is reported with the nonexistent location error, and a point outside coverage is reported as not being within a TEALCA coverage area.
Fixed
POST /shipment,POST /preshipment,POST /shipment/price-calculation,GET /shipment/{shipment_identification}/price-calculation,POST /warehouse/delivery-orderandPOST /shipment-bulk/{header_id}/execute: sendingorigin.coordinatesordestination.coordinatesfor home pickup or home delivery no longer causes a server error.- On those same endpoints, each shipment is priced with the zone that corresponds to it, which prevents a shipment from being priced with another shipment's zone.
[1.3.0] - 2026-09-09
Changed
POST /shipment,POST /preshipmentandPOST /document: the name of a natural person must contain at least two words, and the name of a juridic account also accepts the+character.
Fixed
POST /shipment,POST /preshipmentandPUT /shipment/{shipment_header_id}/shipment-parcel: the error message when creating shipments for corporate customers with a volumetric factor of zero or less now indicates the billing account code and the configured factor, instead of being a generic message.POST /shipment,POST /preshipmentandPOST /document: the error message for invalid names distinguishes between natural and juridic accounts.
[1.2.0] - 2026-09-03
Changed
GET /tracking/shipment/{shipment_identifier_list}: each shipment in the response includes thepreshipment_numberandshipment_partner_idfields, empty when the shipment has none.POST /shipment,POST /preshipment, andPOST /warehouse/delivery-order: theshipment_list,preshipment_list, anddelivery_order_listfields accept at most 20 items per request.
Fixed
POST /shipment: theshipper.nameandconsignee.namefields accept the charactersñandÑ.
[1.1.0] - 2026-08-27
Added
- All endpoints are also available under the
/api/v1/prefix. - New endpoint
GET /customer/{customer_identification}/shipments: lists the shipments where the customer is the shipper or the consignee, with cursor-based pagination.
Changed
- Registering a POD (proof of delivery) through
POST /podalso updates the shipment's status and tracking information. POST /pod: theaccount_idfield accepts a UUID in any standard format. Malformed values are rejected during request validation instead of causing a server error.POST /shipment: creation of corporate shipments is rejected when the destination store (destination.store) is not available, or is blocked, for the billing account's agreement. The error message identifies the shipment, the store, and the reason.
Deprecated
- Routes without the
/api/v1/prefix will be removed soon. Switching to the versioned routes is recommended.
Fixed
PUT /shipment/{shipment_header_id}/shipment-parcel: the path parameter accepts either the shipment ID or the shipment number.POST /shipment:shipment_header_referencevalues used by canceled or replaced shipments can be reused on new shipments.
[1.0.0] - 2026-08-20
Added
- New endpoint
GET /preshipment: returns the preshipments created betweendate_fromanddate_to, each with its shipper, consignee, current status, the date each stage was reached, and the declared, validated, and charged weights. Results are paginated withcursorandpage_size. The maximum range per query is 31 days. - New
/shipment-bulkendpoints for the new bulk shipment upload process in MiTealca:POST /shipment-bulk,GET /shipment-bulk/list,GET /shipment-bulk/{header_id},GET /shipment-bulk/{header_id}/progress, andGET /shipment-bulk/{header_id}/file.
Changed
GET /tracking/shipment/{shipment_identifier_list}: each tracking record includes theevent_idfield, along witheventandevent_category, so consuming systems can react without depending on the text.
Fixed
- Bug fixes in price calculation (
POST /shipment/price-calculationandGET /shipment/{shipment_identification}/price-calculation), shipment creation (POST /shipment), and the public documentation at/api/docs.