API Response Codes

About our API response codes

In order to simplify integration, we have tried to standardize the response codes that we return across our APIs. While not every API will necessarily return every response code, every API will adhere to the same meanings for the same response codes and – for errors – the same response formatting and semantic content.

Success

In the case of success, you will need to see the documentation for each API to see details on how the response is formatted and what API-specific data each contains. A delivery date response is very different than a carrier selection response, for instance. You can find a list of our APIs with a brief description of what they do in Shipium's APIs.

All successes will have the same response codes.

Success responses

HTTP response code Meaning Contents
200 (OK) Success. The action you intended to take succeeded, and/or the data you requested will be available in the body of the response. API-specific JSON containing information pertaining to the specific request; each API's documentation will have more details about what the nature of this content is.
204 (No Content) Success with no response. This is a rare use case, but you should regard a 204 as a success and expect no additional content beyond headers. (None)

Client and server error responses

In the case of failures from any Shipium API, you will always get one of the following return codes for the cases described, though not every API necessarily returns all of the return codes based on its operation. Likewise, every error will return data in the same format, though additional data may also be passed for certain error cases.

Error responses

Error responses fall into two groups based on the nature of the issue:

HTTP response code Meaning Contents
400 (Bad Request) Missing required values or badly formatted input values Details about the nature of the missing or incorrect values encountered
401 (Unauthorized) You will receive a 401 most commonly if you attempt to either (1) access APIs without having first authenticated or (2) attempting to utilize a service that your company is not authorized to use (e.g., not paying for). Make sure that you are following the pattern laid out in Authentication.
403 (Forbidden) You will receive a 403 if you are authenticated but attempting to access data to which the authenticated credentials do not have access. For instance, if you authenticated as CompanyOne but tried to access a shipment that was part of CompanyTwo's account, you will receive a 403 response code. Make sure that you are following the pattern laid out in Authentication.
404 (Not Found) This is generally an issue with a bad ID (shipment ID, label ID, etc.) or a bad route. Details about the ID that could not be found
429 (Too Many Requests) You will only see a 429 if you have increased your call volume to a degree that it looks like a DDOS attack. You should not expect to see this in practice other than maybe as a pass-through from a carrier while running in test mode. Details about the volumes seen relative to allowable volumes
500 (Internal Server Error) A 500 means that something bad has happened and it was our fault. It is possible that retrying a 500 error will succeed. Details about the nature of the internal error; for 500 errors, an additional boolean field retry will exist with a value of true for those errors for which a retry is warranted and false if a retry is unlikely to succeed.
502 (Bad Gateway) A 502 may be returned if a required external resource is unavailable and no backup (cache, secondary resource, etc.) is available. Details about the nature of the external entity that returned this error
503 (Service Unavailable) A 503 may be returned during certain timeframes in which the service has been taken offline for some reason. This should be very rare. Details about why the service is unavailable and when it is expected to be available again, if known
504 (Gateway Timeout) Similar to a 502, but specifically related to timeouts from required external resources Details about the nature of the external entity that caused this error

Common error messages

This section documents frequently encountered error messages, their causes, and how to resolve them.

Configuration errors

Fulfillment context not found

Error message.Found 0 fulfillmentContextDetail matches of type customer for [parameters]

HTTP status. 400 Bad Request

Cause. No fulfillment context configuration exists for the combination of origin location, fulfillment type, and account settings specified in your request. The system requires exactly one matching configuration.

Note: The term fulfillmentContextDetail in this error message refers to your fulfillment context configuration in the Shipium Console. The [parameters] portion reflects the values you provided in your API request (such as origin postal code, country, and fulfillment type).

Resolution.

Multiple fulfillment context matches

Error message.Found 2 fulfillmentContextDetail matches of type customer for [parameters]

HTTP status. 400 Bad Request

Cause. Multiple fulfillment context configurations match your request parameters. The system requires exactly one match to determine shipping rules.

Note: This error indicates your Console has overlapping configurations. The [parameters] portion shows which request values matched multiple configurations.

Resolution.

Tenant not found

Error message.Tenant specified by [tenantId] does not exist

HTTP status. 404 Not Found

Cause. The tenant identifier in your request does not match any configured tenant in the Shipium system.

Resolution.

Carrier selection errors

No carrier available

Error message.Could not find a carrier to fulfill the request

HTTP status. 400 Bad Request

Cause. No carrier service method is available for the shipment based on the combination of origin, destination, package specifications, and delivery requirements.

Resolution.

Understanding carrier exclusion reasons

When you include includeEvaluatedServiceMethodIds: true in your request, the response includes an evaluatedServiceMethods array showing why each carrier service was considered or rejected. This is your primary troubleshooting tool for carrier selection issues. You can find additional information in Evaluated Service Methods.

Reason Type Description Recommended action
UNSUPPORTED_DELIVERY_AREA Permanent Carrier does not service the destination address. Verify address is correct; consider alternative carriers.
NO_CARRIER_TO_FULFILL_REQUEST Permanent Carrier cannot handle the shipment due to dimensions, weight, or service restrictions. Review package specs against carrier limits.
TIMEOUT Transient Request to carrier API timed out. Retry the request; implement exponential backoff in your integration.
SERVER_ERROR Transient Carrier API returned a server-side error. Retry the request; if persistent, contact Support.
EDD_MISMATCH Permanent Carrier's estimated delivery date does not match your requested date. Adjust delivery date or use a different service level.
SHIP_DATE_IN_PAST Permanent Calculated ship date has already passed. See note below about carrier cutoff times.

About SHIP_DATE_IN_PAST: This error commonly occurs when a request is submitted late in the day after the carrier's pickup cutoff time has passed. Each carrier has specific cutoff times (often early-to-mid afternoon) after which shipments are scheduled for the next business day. If your desiredDeliveryDate cannot be met with a next-day ship date, the carrier is excluded. Consider submitting requests earlier in the day or adjusting your delivery expectations for late-day orders.

Transient errors: Errors marked as Transient indicate temporary issues that are likely to resolve on retry. Your integration should implement retry logic with exponential backoff (for example: wait 1 second, then 2 seconds, then 4 seconds between attempts). If transient errors persist after 3-5 retries, contact Shipium Support.

Date and time errors

Delivery date in past

Error message.desiredDeliveryDate is too far in the past

HTTP status. 400 Bad Request

Cause. The desiredDeliveryDate specified in the request is a past date that cannot be fulfilled.

Resolution.

Address validation errors

Invalid address

Error message.Unable to validate address

HTTP status. 400 Bad Request

Cause. The destination or origin address could not be validated against postal databases.

Resolution.

Common address formatting issues:

Issue Problem Fix
Secondary info in Address Line 1 123 Main St Apt 4B in a single field Move Apt 4B to Address Line 2.
Inconsistent abbreviations Street vs St vs ST mixed usage Use consistent formatting; standard abbreviations are preferred.
City/State mismatch City name doesn't match the provided state Verify the city is actually in the specified state.
Postal code format Wrong format for country (e.g., missing leading zeros for US) US: 5 digits or 5+4; CA: A1A 1A1 format

Invalid location

Error message.Invalid [address type] location at country [code] and postal [code]

HTTP status. 400 Bad Request

Cause. The postal code is not valid for the specified country, or the combination does not exist in postal databases.

Resolution.

Carrier-specific errors

When Shipium communicates with carrier APIs, some error messages are passed through from the carrier. This section documents common carrier-specific errors and their resolutions.

UPS errors

UPS error codes typically appear in the format [code] -> [message]. The following are common UPS errors you may encounter:

Error code Message Cause Resolution
120100 Invalid inquiry number Tracking number is not valid. Verify the tracking number is correct and complete.
120101 Missing or invalid inquiry number Tracking number not provided or has an invalid format. Ensure a valid tracking number is included in the request.
120106 Tracking information is not available Valid tracking number but no scan data exists yet. Wait and retry; the shipment may not have been picked up or scanned yet.
120108 Invalid Ship From postal code Origin postal code is invalid or malformed. Verify the origin address postal code format and value.
120109 Invalid Ship To address Destination address is invalid or incomplete. Verify the recipient's address is complete and correctly formatted.
120110 Invalid Ship To postal code Destination postal code is invalid or malformed. Verify the recipient's postal code format and value.

Note: Some UPS error codes indicate configuration issues that require Shipium Support assistance. If you encounter an error code not listed above, contact Support with the full error message and shipment details.

DHL errors

DHL errors often relate to address field length requirements or communication issues.

Address field length errors

Error pattern.[field]: expected maxLength: [limit], actual: [length]

Cause. DHL has strict field length requirements. Address fields exceeding these limits are rejected.

Resolution. Ensure address fields meet DHL's maximum length requirements:

Field Maximum length
Address Line 1 45 characters
Address Line 2 45 characters
Address Line 3 45 characters
City 45 characters
Company Name 70 characters

If your data exceeds these limits, abbreviate where possible or split long values across multiple address lines.

DHL communication errors

Error pattern.Error getting label or similar communication error

Cause. The DHL API returned an unexpected response. This is typically a transient issue.

Resolution.

FedEx SmartPost errors

FedEx SmartPost shipments have specific restrictions. You may see a note in error messages stating: NOTE:"USPS_DELIVERY_CONFIRMATION" was added to the smart post special services — this is expected behavior, as delivery confirmation is automatically included with SmartPost shipments.

Error Cause Resolution
HAZMAT not allowed with selected service Hazardous materials cannot ship via SmartPost. Use a different FedEx service that supports hazmat, or remove hazardous items from the shipment.
Dimensions exceed length and girth limit Package is too large for SmartPost size restrictions. Reduce package size or select a different FedEx service.
Special service DANGEROUS_GOODS is invalid Dangerous goods are not supported on SmartPost. Use a FedEx service that supports dangerous goods shipping.

Validation error patterns

Validation errors follow consistent patterns. Understanding these general patterns helps you quickly identify and fix request issues.

Error pattern Meaning
[field] must not be null Required field is missing from request.
[field] must not be blank Required string field is empty or contains only whitespace.
[field] must be greater than or equal to 0 Numeric field requires a non-negative value.
[field] must be a positive number Numeric field requires a value greater than zero.
[field] must be a 2 digit ISO 3166-1 alpha-2 country code Country code must be 2-letter format (US, CA, GB, etc.).
Both [param1] and [param2] must be either present or absent Fields must be provided together or both omitted.
[field] must not have more than [N] elements Array or collection exceeds maximum allowed size.
At most one of [fields] can be provided Fields are mutually exclusive; provide only one.

Error response format

All API error responses follow a consistent structure:

{
  "timestamp": "2026-01-15T12:00:00.000Z",
  "status": XXX,
  "error": "XXX STANDARD_HTTP_LABEL",
  "message": "Useful information",
  "path": "/api/v1/path/that/was/called"
}

Response fields

Field Description
timestamp ISO 8601 timestamp when the error occurred
status 3-digit HTTP status code
error HTTP status message
message Detailed error description and any relevant data or IDs associated with the failed request
path API endpoint that was called

Validation error responses

For validation errors (400 Bad Request), the response may include an additional errors array with details about each validation failure:

{
  "timestamp": "2026-01-15T12:00:00.000Z",
  "status": 400,
  "error": "Bad Request",
  "message": "Validation failed",
  "path": "/api/v1/deliveryexperience/carrierselection/shipment",
  "errors": [
    {
      "code": "NotNull",
      "field": "shipTo.address.postalCode",
      "message": "must not be blank"
    }
  ]
}

4xx vs 5xx responses

Status range Includes errors array Recommended action
4xx (Client Errors) Yes, when applicable Review and correct your request based on error details.
5xx (Server Errors) No Retry with exponential backoff (transient); contact Support if persistent.

Troubleshooting tips

General best practices

  1. Enable verbose responses. Use includeEvaluatedServiceMethodIds: true to see carrier selection details and understand why carriers were excluded.
  2. Validate addresses first. Use the Address Validation API before attempting to create shipments to catch address issues early.
  3. Check the Shipium Console. Many errors relate to configuration; verify your fulfillment contexts, carrier contracts, and selection rules match your API requests.
  4. Review recent changes. If errors appear suddenly, check for recent changes to carrier contracts, fulfillment contexts, or selection rules in the Console.
  5. Implement retry logic. For transient errors (TIMEOUT, SERVER_ERROR), implement exponential backoff in your integration.

When to contact Support

Contact Shipium Support when:

Information to include in Support requests

To help us resolve your issue quickly, include the following information (with sensitive data redacted):

Always include:

Redact before sending:

Example redacted request:

{
  "shipTo": {
    "address": {
      "addressLine1": "[REDACTED]",
      "city": "Seattle",
      "state": "WA",
      "postalCode": "98101",
      "countryCode": "US"
    },
    "contactInfo": {
      "name": "[REDACTED]",
      "phone": "[REDACTED]"
    }
  }
}

Resources

Your Shipium team member is available to help along the way. However, you might find these resources helpful:

Updated 6 months ago