1. Inferences
  2. Retrieve shipping labels

Inferences

Retrieve shipping labels

Once you have scan the shipping label, you can query for them in the API. If you have the developer or owner role, you're able to also view the scans on your dashboard at https://cloud.packagex.io/inferences/shipping-labels.

Retrieve Scan

GET
`/v1/inferences/shipping_labels/:inference`

Get a single scan using its id.

js
        const response = await fetch("https://api.packagex.io/v1/inferences/shipping_labels/inf_sl_2s8fmK1UBvCdMj4KsFtgpB", {
  method: "GET",
  headers: {
    "PX-API-KEY": process.env.PX_API_KEY,
    "Content-Type": "application/json",
  },
});

const scan = response.data;

      

List Shipping-Labels

Example

GET
`/v1/inferences/shipping_labels`

When you want to retrieve multiple shipping-labels, your data property on the result will always be an array even if you don't have any shipping-labels. The shipping-labels are returned in descending order, meaning the latest scan that was created will be first.

js
        const response = await fetch("https://api.packagex.io/v1/inferences/images/shipping_labels", {
  method: "GET",
  headers: {
    "PX-API-KEY": process.env.PX_API_KEY,
    "Content-Type": "application/json",
  },
}).then((res) => res.json());

const shipping_labels = response.data;
const pagination = response.pagination;

      

Pagination

If the has_more property on the pagination object is set to true, you know there are more scans in the database that have not been returned to you. The pagination object also has a page property indicating your current offset and a limit property. The total_count property in pagination returns the the total number of scans in the database.

By default the page is set to 1 and the limit is 10.

If we want to query for scans 11 - 20, we would request page 2 with a query parameter.

js
        const response = await fetch("https://api.packagex.io/v1/inferences/images/shipping_labels?page=2&limit=25", {
  method: "GET",
  headers: {
    "PX-API-KEY": process.env.PX_API_KEY,
    "Content-Type": "application/json",
  },
}).then((res) => res.json());

const shipping_labels = response.data; //the array of scans 11 - 20
const pagination = response.pagination; //the pagination object

      

Filter

  1. Location Filtering
  • Scans with a location_id property can be filtered by location.
js
        const response = await fetch("https://api.packagex.io/v1/inferences/images/shipping_labels?location_id=loc_jZ1fYiQobeWthjbhme3vDX", {
  method: "GET",
  headers: {
    "PX-API-KEY": process.env.PX_API_KEY,
    "Content-Type": "application/json",
  },
}).then((res) => res.json());

const shipping_labels = response.data;
const pagination = response.pagination;

      
  1. Provider filtering:
  • You can now filter by provider_name.
  1. Service level filtering:
  • Filtering options include service_level_name.
  1. Privider service level filtering:
  • Inferences can be filtered through original service level by provider with provider_service_level_id param. Following values are allowed

FedEx

  • fedex_ground
  • fedex_home_delivery
  • ground_home_delivery
  • fedex_2_day
  • standard_overnight
  • priority_overnight
  • first_overnight
  • fedex_2_day_am
  • fedex_express_saver
  • express
  • express_international_economy
  • international_economy
  • international_priority
  • international_first
  • international_connect_plus
  • smart_post
  • same_day

UPS

  • ground
  • 2nd_day_air_am
  • 2nd_day_air
  • 3_day_select
  • mail_innovations
  • next_day_air_saver
  • next_day_air_early_am
  • next_day_air
  • standard
  • saver
  • sure_post
  • sure_post_over_1_lb
  • sure_post_under_1_lb
  • expedited
  • day_definite_by_end_of_day
  • express
  • express_plus
  • express_saver
  • international_economy
  • international_priority
  • international_first
  • world_wide_express
  • world_wide_express_plus
  • world_wide_express_freight_midday
  • world_wide_express_freight
  • world_wide_saver
  • world_wide_express_expedited
  • world_wide_express_economy

USPS

  • first_class_package
  • first_class_mail
  • first_class_package_return_service
  • first_class_package_international
  • priority_mail
  • priority
  • media_mail
  • ground_advantage
  • ground_return_service
  • priority_mail_n_day
  • priority_mail_international
  • express
  • library_mail
  • parcel_select
  • parcel_select_lightweight

DHL

  • worldwide_express
  • express_envelope
  • express_easy
  • domestic_express
  • economy_select
  • break_bulk_express
  • break_bulk_economy
  • same_day
js
        const response = await fetch("https://api.packagex.io/v1/inferences/images/shipping_labels?provider_service_level_id=fedex_2_day,ground_advantage", {
  method: "GET",
  headers: {
    "PX-API-KEY": process.env.PX_API_KEY,
    "Content-Type": "application/json",
  },
}).then((res) => res.json());

const shipping_labels = response.data;
const pagination = response.pagination;

      
  1. Tracker filtering:
  • Filter inferences by tracker ID with tracker_id.
  1. Type filtering:
  • Filter by tracker type (inbound or outbound) with type.
  1. Date filtering:
  • Filter by created_at or updated_at using date operators. Date values should be in ISO 8601 format. You can use operators such as gt, gte, lt, lte, bwi, bwe for range queries.
js
        https://api.packagex.io/v1/inferences/images/shipping_labels?created_at=bwi:2024-01-01,2024-12-31

      
  1. Tags filtering:
  • Filter by tags with tags.
  1. Errors filtering:
  • Filter by error types with errors.
  1. Logs visibility filtering:
  • Filter by log visibility with logs_visibility.
  1. Package status filtering.
js
        https://api.packagex.io/v1/inferences/images/shipping_labels?statuses=completed

      

There are times when filtering is not enough and you want to find a specific inference by some other attribute. In this case, you can do a fuzzy, typo-tolerant search of every inference in the database.

Below are the properties that are supported by our full text search.

Searchable Properties

  • search.sender: the sender name, email and business
  • search.recipient: the recipient name, email and business
  • search.order_number
  • search.tracking_number
  • search.rma_number
  • search.reference_number
  • search.invoice_number
  • search.purchase_order
  • search.barcode_values
  • search.metadata: the custom metadata of the shipping label inference

To perform a general search, simply provide a string to search by using the search query param. The results will be order by the most relevant first. To perform a targeted search, or a mixture of targeted search and general search, or to use various modifiers to boost a particular field, refer to the general section on search, while using the searchable properties provided above

We provide a _searchV2 object that has a searchV2.scores property for scores and searchV2.shipping_label_inference property with all matches highlighted with <mark> handles; this object has the same structure as the shipping label inference object, except only those properties are present where there are highlights.

Ordering Search Results

By default, search results are ordered by relevance. However, if you include an order_by parameter along with your search query, the results will be ordered by the specified property instead of by relevance. Supported values for order_by are:

  • created_at — order by creation date
  • updated_at — order by last updated date
  • _relevance — order by search relevance score
  • _similarity — order by similarity score
  • _coverage — order by coverage score

Relevance Score

Relevance scores are included in the search results by default. Note that this could add up to 10ms of extra time to the request.

js
        const response = await fetch("https://api.packagex.io/v1/images/shipping-labels?search=john", {
  method: "GET",
  headers: {
    "PX-API-KEY": process.env.PX_API_KEY,
    "Content-Type": "application/json",
  },
}).then((res) => res.json());

const inference = response.data[0];
console.log(inference._search); //Special _search property

      

Delete Shipping Label Inference

DELETE
`/v1/inferences/images/shipping-labels/:inference_id`

Permanently deletes a shipping label inference and its associated media files (images, OCR data). Only inferences in a final state (completed, error, or exception) can be deleted. Attempting to delete an inference in any other status will return a 400 error.

This operation is irreversible. The inference record is removed from the database, and a inference.deleted event is published.

Required Scopes: inferences:write

Example

js
        const response = await fetch("https://api.packagex.io/v1/inferences/images/shipping-labels/inf_sl_2s8fmK1UBvCdMj4KsFtgpB", {
  method: "DELETE",
  headers: {
    "PX-API-KEY": process.env.PX_API_KEY,
    "Content-Type": "application/json",
  },
}).then((res) => res.json());

// response.data => { success: true }
// response.message => "Shipping Label Inference deleted successfully"

      

Response

Property Type Description
success boolean true if the inference was deleted successfully
message string A confirmation message