Past Changelog

This page contains the past changelog. For the changelog of the current version, please refer to this page.

2025-04 (2025-04-10)

CHANGEBEFOREAFTER
Base URLhttps://api.aftership.com/commerce/2025-01https://api.aftership.com/commerce/2025-04
CHANGEBEFOREAFTER
as-store-id value format updatedThe UUID generated by AfterShip (The store.id for the version 2025-01 and earlier)Use store.source_id as the value, you can also retrieve the store.id from the Store resource with the latest 2025-04 API

In the version 2025-04, we introduced Customizable ID across all resources in Commerce API, when creating the resource, you can optionally provide your ID as the resource ID, instead of forcibly using our system-generated ID, and hence provide a much better experience for the case such as being unable to store AfterShip resource ID in your system.

Quick Overview

AspectBefore (2025-01)After (2025-04)
Create ResourcePOST /{resources}
Request:
{ "source_id": "custom-id-123" }
POST /{resources}
Request:
{ "id": "custom-id-123" }
Get ResourceGET /{resources}/ef123...789ef
(system-generated UUID)
GET /{resources}/custom-id-123
(value of the id field)
Update ResourcePATCH /{resources}/ef123...789ef
(system-generated UUID)
PATCH /{resources}/custom-id-123
(value of the id field)
System Generated IDAlways generates UUID as resource identifierGenerates UUID only if id not provided
  • Maximum length: 128 characters
  • Allowed pattern: ^[a-zA-Z0-9_-]+$
  • Immutable after creation
  • If not provided, a system-generated UUID will be assigned

In 2025-04, you can optionally provide your ID when creating the resource. Take creating an order as an example:

Request

preparing...

Response

preparing...

If you do not provide the id when creating the resource, AfterShip will generate an ID for you, similar to the earlier API versions:

Request

preparing...

Response

preparing...

Same as previous API version, you need to use the ID field returned by the API when creating the resource, to retrieve or update the resource by ID.

Example

preparing...

For all resources created in earlier API versions, you need to use the resource's original source_id value as the id in version 2025-04 to access the resource. You can no longer use the UUID style ID found in the previous API version to access the resource starting from 2025-04 API.

Example

For a resource created in 2025-01 API:

preparing...

In 2025-01 and earlier versions, the resource could be accessed with the id:

preparing...

From 2025-04 you can only access this resource with the source_id (now id from 2025-04):

preparing...
  1. The field has been renamed from source_id to id
  2. The id can no longer start with the reserved prefix app- when creating a new store
  3. The id must be unique within the organization

Affected Endpoints (Request and Response Body)

  • POST /stores

Affected Endpoints (Response Body)

  • GET /stores
  • GET /stores/{id}
  • PATCH /stores/{id}
ParameterBEFOREAFTER
Filter by IDssource_ids[]ids[]

Affected Endpoints

  • GET /stores

The field has been renamed:

BEFOREAFTER
source_idid
items.*.source_product_iditems.*.product_id
items.*.source_variant_iditems.*.product_variant_id
customer.source_idcustomer.id

Affected Endpoints (Request and Response Body)

  • POST /orders
  • POST /orders/{id}/items
  • PATCH /orders/{id}/items/{item_id}

Affected Endpoints (Response Body)

  • GET /orders
  • GET /orders/{id}
  • GET /orders/{id}/items/{item_id}
ParameterBEFOREAFTER
Filter by IDssource_ids[]ids[]

Affected Endpoints

  • GET /orders

Affected Endpoints

  • POST /orders/:id/items

When creating the order item with an ID which is already exist in any one of the existing item in the order, the API response error code has been updated, together with the response body meta.code:

CodeBEFOREAFTER
HTTP Status code422409
response_body.meta.code4220040900
BEFOREAFTER
source_idid
variants.*.source_idvariants.*.id

Affected Endpoints (Request and Response Body)

  • POST /products
  • PATCH /products/{id}

Affected Endpoints (Response Body)

  • GET /products
  • GET /products/{id}

New endpoints for managing product variants are added. For the detailed endpoint specification, please refer to the API endpoint reference.

  1. Product variant management endpoints:
    • POST /products/{id}/variants
    • GET /products/{id}/variants/{variant_id}
    • PATCH /products/{id}/variants/{variant_id}
    • DELETE /products/{id}/variants/{variant_id}
  2. Product listing endpoint with pagination support:
    • GET /products

The endpoint now supports updating all variants of a product in a single request:

  • Added variants array field in the request body

If variants are provided in the request body, this array will replace all existing variants. Also, variants could not be an empty array if provided in the request body.

BEFOREAFTER
source_idid
source_order_idorder_id
line_items.*.source_product_idline_items.*.product_id
line_items.*.source_product_variant_idline_items.*.product_variant_id

Affected Endpoints (Request and Response Body)

  • POST /fulfillments

Affected Endpoints (Response Body)

  • GET /fulfillments
  • GET /fulfillments/{id}
  • PATCH /fulfillments/{id}
ParameterChanges
source_idRemoved. Use ids[] parameter instead
ids[]Now accepts values that were previously used in source_id parameter
source_order_idRenamed to order_id

Affected Endpoints

  • GET /fulfillments

The field value limitation of some fields across multiple resources has been updated accordingly to provide a better using experience.

FieldTypeBeforeAfter
order_totalNumberNo specific limitationAccepting values >= 0 only.
shipping_totalNumberNo specific limitationAccepting values >= 0 only.
tax_totalNumberNo specific limitationAccepting values >= 0 only.
discount_totalNumberNo specific limitationAccepting values >= 0 only.
subtotalNumberNo specific limitationAccepting values >= 0 only.
items.*.quantityNumberAccepting values < 0 or > 0Accepting values > 0 only.
items.*.unit_weight.valueNumberNo specific limitationAccepting values >= 0 only.
items.*.unit_price.amountNumberNo specific limitationAccepting values >= 0 only.
items.*.discountNumberNo specific limitationAccepting values >= 0 only.
items.*.taxNumberNo specific limitationAccepting values >= 0 only.
items.*.returnable_quantityNumberNo specific limitationAccepting values >= 0 only.
customer.emails[].*StringNo specific limitationMax string length: 256
Must be a valid email address following RFC5322.
shipping_address.emailStringMax string length: 254Max string length: 256
Must be a valid email address following RFC5322.
billing_address.emailStringMax string length: 254Max string length: 256
Must be a valid email address following RFC5322.
FieldTypeBeforeAfter
variants.*.available_quantityNumberNo specific limitationAccepting values >= 0 only.
variants.*.priceNumberNo specific limitationAccepting values >= 0 only.
variants.*.compare_at_priceNumberNo specific limitationAccepting values >= 0 only.
variants.*.weight.valueNumberNo specific limitationAccepting values >= 0 only.
FieldTypeBeforeAfter
support_emailStringMax string length: 254Max string length: 256
Must be a valid email address following RFC5322.
owner_emailStringMax string length: 254Max string length: 256
Must be a valid email address following RFC5322.
FieldTypeBeforeAfter
ship_to_location.address.emailStringMax string length: 254Max string length: 256
Must be a valid email address following RFC5322.

2025-01 (2025-01-09)

CHANGEBEFOREAFTER
Base URLhttps://api.aftership.com/commerce/2024-10https://api.aftership.com/commerce/2025-01
BEFOREAFTER
order.items.*.source_idorder.items.*.id

Affected Endpoints (Request and Response Body)

  • POST /orders (request_body.items.*.id)

Affected Endpoints (Response Body)

  • GET /orders
  • GET /orders/{id}
  • PATCH /orders/{id}
BEFOREAFTER
order.items.*.fulfillable_quantityField deleted

Affected Endpoints (Request and Response Body)

  • POST /orders

Affected Endpoints (Response Body)

  • GET /orders
  • GET /orders/{id}
  • PATCH /orders/{id}
FIELDBEFOREAFTER
order.items.*.product_titleField value is optionalField value is now required
order.items.*.product_variant_titleField value is requiredField value is now optional

Affected Endpoints (Request Body)

  • POST /orders

The following fields are added to the request body to provide more control to the endpoint. The specification of each of the fields are the same as the model.

  • currency
  • order_total
  • shipping_total
  • tax_total
  • discount_total
  • subtotal
FIELDBEFOREAFTER
titleField value is requiredField value is optional

Affected Endpoints (Request body)

  • POST /products
BEFOREAFTER
fulfillment.line_items.*.source_idfulfillment.line_items.*.id

Affected Endpoints (Request and Response Body)

  • POST /fulfillments (request_body.line_items.*.id)

Affected Endpoints (Response Body)

  • GET /fulfillments
  • GET /fulfillments/{id}
  • PATCH /fulfillments/{id}
  • POST /fulfillments/{id}/update-status
  • POST /fulfillments/{id}/ship

New endpoints for manipulating order.items (OrderItem resource) are added. As the OrderItem resource is a subresource of Order, order.id is required during the request, which would be specified in the URL.

For the detailed endpoint specification, please refer to the API endpoint reference.

  1. Create an order item (POST /orders/{id}/items)
    • Create a new order item to an existing order.
  2. Get order item by ID (GET /orders/{id}/items/{item_id})
    • Get an existing order item by order ID and order item ID.
  3. Update order item by ID (PATCH /orders/{id}/items/{item_id})
    • Update an existing order item by order ID and order item ID.
  4. Delete order item by ID (DELETE /orders/{id}/items/{item_id})
    • Delete an existing order item by order ID and order item ID.

2024-10 (2024-10-10)

CHANGEBEFOREAFTER
Base URLhttps://api.aftership.com/commerce/2024-07https://api.aftership.com/commerce/2024-10

The status_timestamps field enables you to record the exact timestamp when an order status occurs, such as when the order is canceled or placed.

When order.status is set to canceled, the timestamp recorded in order.status_timestamps.canceled_at will be displayed on the history route of the branded tracking page, indicating the time when the order was canceled.

For detailed information about the model, please refer to the full specifications.

The new custom_fields feature allows you to store limited metadata for orders using your preferred key-value pairs. This functionality provides greater control over the notification workflow, enabling you to use custom fields as triggers to determine specific branches of the notification flow.

2.2 Create an Order (POST /orders)

New Request Fields

  • order.status_timestamps
  • order.custom_fields

Response

See Order Resource changes.

New Request Fields

  • order.status_timestamps
  • order.custom_fields

Response

See Order Resource changes.

Response

See Order Resource changes.

Response

See Order Resource changes.

2024-07 (2024-07-11)

CHANGEBEFOREAFTER
Base URLhttps://api.aftership.com/commerce/2024-04https://api.aftership.com/commerce/2024-07
  • The fulfillment related features support BOPIS (Buy Online, Pick up In Store) scenario
  • Support next_couriers for AfterShip Tracking

New resource fulfillment is added. The Fulfillment model encapsulates the details of processing and delivering orders in an eCommerce context. It includes information such as fulfillment status, shipment tracking, the items to be fulfilled, and so on.

For the detailed endpoint specification, please refer to the API endpoint reference.

  1. Create a Fulfillment (POST /fulfillments)
    • Supports the creation of different delivery_methods of fulfillments, including pickup and shipping .
  2. Update a Fulfillment (PATCH /fulfillments/{id})
    • Allows updating the information of a fulfillment with the fulfillment ID.
  3. Update Status (POST /fulfillments/{id}/update-status)
    • Allows updating the status based on the delivery_method of fulfillment.
  4. Ship Fulfillment (POST /fulfillments/{id}/ship)
    • Allows shipping operations for a fulfillment with a specified ID.
  5. Get Fulfillments (GET /fulfillments)
    • Retrieves a list of all fulfillments for an order.
  6. Get Fulfillment by ID (GET /fulfillments/{id})
    • Retrieves detailed information about a specific fulfillment using its ID.
  • order.delivery_method (Required)
  • order.pickup_location
  • order.pickup_info
  • order.items.*.product_title
  • order.shipments
  • order.shipping_address.tax_number
  • order.shipping_address.source_id
  • order.shipping_address.description
  • order.billing_address.tax_number
  • order.billing_address.source_id
  • order.billing_address.description
ObjectBEFOREAFTER
order.shipping_address
order.billing_address
address_line_1
address_line_2
address_line_3
street_1
street_2
street_3
order.items.*titleproduct_variant_title
CHANGEBEFOREAFTER
Structure of
order.items.*.unit_price
String
e.g. 1.2
Object
e.g. {"currency": "USD", "amount": "1.2"}

4.5 Create an order (POST /orders) Changes

In earlier versions, API users could invoke the POST /orders endpoint with an existing order ID to perform an "upsert" operation, which updates an existing order if it already exists. Starting from version 2024-07, this behavior has been deprecated. To update an existing order, please use the PATCH /orders/{order_id} endpoint.

  • order.delivery_method (Required)
  • order.pickup_location
  • order.pickup_info
  • order.shipments
  • order.shipping_address.tax_number
  • order.shipping_address.source_id
  • order.shipping_address.description
  • order.billing_address.tax_number
  • order.billing_address.source_id
  • order.billing_address.description
ObjectBEFOREAFTER
order.shipping_address
order.billing_address
address_line_1
address_line_2
address_line_3
street_1
street_2
street_3
order.items.*titleproduct_variant_title
CHANGEBEFOREAFTER
Structure of
order.items.*.unit_price
String
e.g. 1.2
Object
e.g. {"currency": "USD", "amount": "1.2"}

See Order Resource changes.

  • order.shipments
  • order.shipping_address.tax_number
  • order.shipping_address.source_id
  • order.shipping_address.description
  • order.billing_address.tax_number
  • order.billing_address.source_id
  • order.billing_address.description

See Order Resource changes.

See Order Resource changes.

  • store.address.coordinate
  • store.address.coordinate.latitude
  • store.address.coordinate.longitude
  • store.plan_name
  • store.address.latitude
  • store.address.longitude
ObjectBEFOREAFTER
store.addressaddress_line_1
address_line_2
address_line_3
street_1
street_2
street_3

2024-04 (2024-04-11)

CHANGEBEFOREAFTER
Base URLhttps://api.aftership.com/commerce/v1https://api.aftership.com/commerce/2024-04
as-api-version header’s valuewon’t return2024-04
The definition of as-store-id has changedThe identifier of your store. You need to generate it yourself. Note that this value must consist of numbers and letters (A-Z, a-z, 0-9), and special characters can only be hyphens (-) or underscores (_).The unique store identifier is generated by AfterShip. You can obtain this id by making a GET /stores call to get existing stores or a POST /stores to create a new store.
Support for listing data from ecommerce platformsYou can only list data that you import through the Commerce API.You can list data that you import through Integrations.
New store model field-source_id
platform
New order model field-store.id
New product model field-store.id

v1.12.0 (2024-03-12)

UpdateResources
add fileds returnable_quantity for order itemsorders

v1.11.1 (2023-10-10)

UpdateResources
add fileds service_type and ship_from_address for shipmentsorders
add GET /ordersorders
add GET/storesstores

v1.11.0 (2023-09-25)

UpdateResources
PATCH /orders/:id support to update status,financial_status,fulfillment_statusorders

v1.10.0 (2023-08-03)

UpdateResources
PATCH /orders/:id support to update shipmentsorders

v1.9.0 (2023-05-09)

UpdateResources
Add new field to order shipment: custom_fieldsorders

v1.8.0 (2023-04-04)

UpdateResources
Add new field to order shipment: source_delivered_atorders

v1.7.0 (2023-02-24)

UpdateResources
Remove required validation to the following fields of orders: financial_statusfulfillment_statusshipping_totaltax_totaldiscount_totalsubtotalsource_created_atsource_updated_atPOST /orders
Remove required validation to the following fields of orders.items: skuunit_weightunit_pricePOST /orders
Remove required validation to the following fields of orders.customers: first_nameemailsPOST /orders
Remove required validation to the following fields of orders.shipping_address and orders.billing_address: first_nameaddress_line_1citystatecountry_regionPOST /orders
Remove required validation to the following fields of products: slugsource_created_atsource_updated_atPOST /products
Remove required validation to the following fields of products.variants: image_urlscompare_at_priceallow_backorderoptionsPOST /products
Remove source_id of storesPOST /stores
Remove required validation to the following fields of stores: timezone_identifierurlPOST /stores

v1.6.0 (2022-11-17)

UpdateResources
Add new fields to order item: product_categoriesproduct_tagsorders

v1.5.0 (2022-08-03)

UpdateResources
Add new domain api.aftership.com to replace api.automizely.com-

v1.4.2 (2022-06-07)

UpdateResources
Add new header as-api-key to replace am-api-keyHeaders

v1.4.1 (2022-01-26)

UpdateResources
Add Snatshot fields validation to orders.item. Snatshot fields cannot be changed after creating in AutomizelyPOST /orders

v1.4.0 (2021-11-23)

UpdateResources
Add new header am-api-key to replace am-app-idHeaders

v1.3.0 (2021-10-29)

UpdateResources
New endpointsPATCH /products/:id
PATCH /orders/:id
PATCH /stores/:id

v1.2.0 (2021-10-08)

UpdateResources
Add required validation to the following fields of orders: source_idnumbercurrencystatusfinancial_statusfulfillment_statusorder_totalshipping_totaltax_totaldiscount_totalsubtotalsource_created_atsource_updated_atPOST /orders
Add required validation to the following fields of orders.items: source_idskuquantityunit_weightunit_pricetitlePOST /orders
Add required validation to the following fields of orders.shipments: tracking_numberPOST /orders
Add required validation to the following fields of orders.customers: first_nameemailsPOST /orders
Add required validation to the following fields of orders.shipping_address and orders.billing_address: first_nameaddress_line_1citystatecountry_regionPOST /orders
Add required validation to the following fields of products.variants: source_idskutitlepriceimage_urlscompare_at_priceallow_backorderoptionsPOST /products

v1.1.0 (2021-07-27)

UpdateResources
New endpointsPOST /gdpr
GET /stores/:id
GET /orders/:id
GET /products/:id

v1.0.0 (2021-06-02)

UpdateResources
Initial release-
New endpointsPOST /orders
POST /products
POST /stores
POST /uninstalls