Skip to content

Logistics

Shippo
API integration

Ship Logistics features without building the integration. Full Shippo API access via Proxy and 70+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Talk to us
Shippo

Use Cases

Why integrate with Shippo

Common scenarios for SaaS companies building Shippo integrations for their customers.

01

Embed native shipping label generation in your platform

E-commerce platforms, OMS, and marketplaces can let merchants rate-shop carriers and purchase labels without leaving the product. Truto handles Shippo auth and request handling so you ship this in days, not quarters.

02

Power high-volume fulfillment for WMS and 3PL software

Warehouse management platforms can batch-generate hundreds of labels, support bring-your-own-carrier credentials, and produce end-of-day manifests. Truto lets you focus on the warehouse UX instead of maintaining Shippo API wrappers.

03

Automate return label workflows for returns SaaS

Returns platforms can issue return labels on demand, refund unused labels, and monitor return tracking events. Truto's connection management means each merchant's Shippo account stays isolated and auditable.

04

Offer white-labeled shipping to marketplace sellers

Marketplaces can provision managed Shippo sub-accounts for each seller at onboarding, then purchase discounted labels on their behalf. Truto routes requests per-connection so each seller's shipments stay cleanly separated.

05

Enable cross-border selling with automated customs

B2B commerce platforms can collect HS codes, item values, and country of origin, then push customs declarations to Shippo for paperless international shipments. Truto normalizes the request flow so you can expose a single customs UX across merchants.

What You Can Build

Ship these features with Truto + Shippo

Concrete product features your team can ship faster by leveraging Truto’s Shippo integration instead of building from scratch.

01

Multi-carrier rate shopping at checkout

Use live rates and shipment rate endpoints to display real-time carrier pricing and transit times inside your cart or order screen.

02

One-click label purchase with PDF/ZPL output

Create a shipment, select a rate, and purchase a transaction to return a printable label URL and tracking number to your UI.

03

Batch label generation for warehouse operations

Build bulk fulfillment workflows that create batches, add shipments, and purchase hundreds of labels asynchronously for pick-pack-ship teams.

04

End-of-day manifests and pickups

Generate SCAN forms via manifests and schedule carrier pickups so drivers can collect all packages with a single barcode scan.

05

Real-time tracking with webhook-driven notifications

Subscribe to Shippo webhooks and track resources to push delivery status updates into your app for SMS, email, or in-product alerts.

06

Bring-your-own-carrier settings page

Let enterprise merchants register and connect their own UPS, FedEx, or DHL accounts via carrier account endpoints so they ship on negotiated rates.

SuperAI

Shippo AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

list_all_shippo_addresses

List all address objects created in your Shippo account. Returns: object_id, is_complete, object_created, object_updated, object_owner, validation_results, name, company, street_no, street1, street2, street3, city, state, zip, country, longitude, latitude, phone, email, is_residential, metadata, test.

create_a_shippo_address

Create a new address in Shippo for use with shipments, rates, and orders. Returns: object_id, is_complete, object_created, object_updated, object_owner, validation_results, name, company, street_no, street1, street2, street3, city, state, zip, country, longitude, latitude, phone, email, is_residential, metadata, test. Requires: name, street1, city, state, zip, and country. Required: country.

get_single_shippo_address_by_id

Retrieve a single Shippo address by its object ID. Returns: object_id, is_complete, object_created, object_updated, object_owner, validation_results, company, street_no, street1, street2, street3, city, state, zip, country, longitude, latitude, phone, email, is_residential, metadata, test, name. Required: id.

shippo_addresses_validate

Validate an existing Shippo address by its object ID. Returns: object_id, is_complete, object_created, object_updated, object_owner, validation_results, name, company, street_no, street1, street2, street3, city, state, zip, country, longitude, latitude, phone, email, is_residential, metadata, test. Required: address_id.

create_a_shippo_batch

Create a Shippo batch for purchasing shipping labels for many shipments at once. Batches are created asynchronously, so the response won't include the batch shipments yet — retrieve the batch later to verify its shipments are valid. Returns: object_id, object_created, object_updated, object_owner. Required: default_carrier_account, default_servicelevel_token, batch_shipments.

get_single_shippo_batch_by_id

Retrieve a Shippo batch by id. Returns: object_id, object_created, object_updated, object_owner. Batch shipments are displayed 100 at a time, paginated with page and filterable with object_results. Required: id.

shippo_batches_add_shipments

Add shipments to an existing Shippo batch. Returns the updated batch object including object_id, object_created, status, and batch_shipments. Required: batch_id.

shippo_batches_purchase

Purchase a Shippo batch that has a status of VALID. The batch status moves to PURCHASING, then to PURCHASED once all shipments are bought and a batch_purchased webhook is sent. Returns the batch object including object_id, object_created, object_updated, status, and batch_shipments. Required: batch_id.

shippo_batches_remove_shipments

Remove shipments from an existing Shippo batch. Returns the updated batch object including object_id, object_created, status, and batch_shipments. Required: batch_id.

list_all_shippo_carrier_accounts

List all carrier accounts connected to your Shippo account, including both Shippo carrier accounts and your own connected carrier accounts. Returns: object_id, carrier, object_owner, account_id, test, active, is_shippo_account, metadata, service_levels. Pass service_levels=true to append service levels to each account.

create_a_shippo_carrier_account

Create a new carrier account in Shippo or connect an existing carrier account to your Shippo account. Returns the created account object with object_id, carrier, account_id, parameters, active, test, and metadata. Required: account_id, carrier, parameters.

get_single_shippo_carrier_account_by_id

Get a single Shippo carrier account by its object id. Returns: object_id, carrier, object_owner, account_id, test, active, is_shippo_account, metadata, service_levels. Required: id.

update_a_shippo_carrier_account_by_id

Update an existing Shippo carrier account by id. The account_id and carrier cannot be changed because together they form the unique identifier. Returns the updated account object with carrier, object_id, account_id, parameters, active, test, and metadata. Required: id, account_id, carrier.

shippo_carrier_accounts_initiate_signin

Initiate OAuth 2.0 sign-in to set up or reconnect a carrier account with carriers that support OAuth 2.0. Redirects the user to the carrier's login page to approve the authorization. Required: carrier_account_id, redirect_uri.

shippo_carrier_accounts_register

Register a new Shippo carrier account by submitting the carrier token (e.g. usps, ups, fedex, canada_post) and its carrier-specific credentials in parameters. Returns the created carrier account: carrier, object_id, account_id, active, is_shippo_account, test, parameters, metadata, and object_owner.

shippo_carrier_accounts_registration_status

Get the registration status of your Shippo account for a given carrier (ups, usps, or canada_post). Returns the carrier account details: carrier, object_id, account_id, active, is_shippo_account, test, parameters, metadata, and object_owner. Required: carrier.

list_all_shippo_customs_declarations

List all Shippo customs declarations for your account. Returns each declaration with object_id, object_created, object_updated, contents_type, certify, certify_signer, incoterm, and items. Supports page and results query parameters (results defaults to 5 per page).

create_a_shippo_customs_declaration

Create a new Shippo customs declaration for international shipments. Returns: object_id, object_created, object_updated, object_owner, is_complete, validation_results, metadata. Required: certify, certify_signer, contents_type, items, non_delivery_option.

get_single_shippo_customs_declaration_by_id

Get an existing Shippo customs declaration by its object ID. Returns the declaration object with object_id, object_created, object_updated, contents_type, certify, certify_signer, incoterm, and items. Required: id.

list_all_shippo_customs_items

List all customs items.

create_a_shippo_customs_item

Create a new customs item. Required: description, mass_unit, net_weight, origin_country, quantity, value_amount, value_currency.

get_single_shippo_customs_item_by_id

Retrieve a customs item. Required: id.

create_a_shippo_embedded_authze

Create a short-lived Shippo JWT that client-side applications can use to authenticate without exposing a long-lived API token. Returns: token, expiresIn. The returned token is valid for 12 hours. Required: scope.

create_a_shippo_live_rate

Create a live rates request in Shippo to fetch carrier rates at checkout. Returns: object_id. Required: address_to, line_items.

list_all_shippo_settings_parcel_templates

Get the currently configured default parcel template for live rates in Shippo. Returns the default parcel template setting including its object_id, object_created, object_updated, and name.

shippo_settings_parcel_templates_bulk_update

Update the default parcel template for live rates in Shippo. Pass the object_id of the user parcel template to set as the new default in the request body. Returns the updated setting including its object_id, object_created, object_updated, and name.

shippo_settings_parcel_templates_bulk_delete

Clear the currently configured default parcel template for live rates in Shippo. Returns an empty 204 response on success.

list_all_shippo_manifests

List all manifests.

create_a_shippo_manifest

Create a new manifest. Required: carrier_account, shipment_date, address_from.

get_single_shippo_manifest_by_id

Retrieve a manifest. Required: id.

list_all_shippo_orders

List all Shippo orders, filterable by status, shop app, and placed-date range. Returns each order's object_id, order_status, placed_at, order_number, to_address, line_items, and total_price. Optional filters: order_status[], shop_app, start_date, end_date.

create_a_shippo_order

Create a new Shippo order with the recipient address and line items. Returns the created order object including object_id, order_status, placed_at, to_address, line_items, and total_price. Required: placed_at, to_address.

get_single_shippo_order_by_id

Retrieve an existing Shippo order by its object ID. Returns the order object including object_id, order_status, placed_at, to_address, line_items, and total_price. Required: id.

list_all_shippo_parcel_templates

List all Shippo carrier parcel template objects, optionally filtered by carrier (e.g. fedex, usps) and by whether templates come from user-added or enabled carriers. Returns: name, token, carrier, is_variable_dimensions, length, width, height, distance_unit.

get_single_shippo_parcel_template_by_id

Get a single Shippo carrier parcel template by its token. Returns: name, token, carrier, is_variable_dimensions, length, width, height, distance_unit.g. FedEx_Box_Small_1). Required: id.

list_all_shippo_parcels

List all Shippo parcels. Returns parcel objects with fields like object_id, object_created, length, width, height, distance_unit, weight, mass_unit, template, and metadata. Pagination is handled automatically.

create_a_shippo_parcel

Create a new Shippo parcel, either from package dimensions or from a carrier parcel template. Returns the created parcel object including object_id, object_created, length, width, height, distance_unit, weight, mass_unit, and metadata. Requires either the package dimensions (length, width, height, distance_unit, weight, mass_unit) or a template token.

get_single_shippo_parcel_by_id

Get an existing Shippo parcel by id. Returns parcel details including object_id, object_created, length, width, height, distance_unit, weight, mass_unit, and template. Note: parcel details are not returned for un-purchased shipment or rate parcel object IDs. Required: id.

create_a_shippo_pickup

Create a Shippo pickup so a carrier comes to a specified location to collect packages for shipping. Only USPS and DHL Express pickups are supported, for eligible shipments you have already created. Returns the pickup object including object_id, location, requested_start_time, and requested_end_time. Required: carrier_account, location, requested_end_time, requested_start_time, transactions.

get_single_shippo_rate_by_id

Get a single Shippo rate by id. Returns the rate object including its object_id, amount and amount_local pricing with currency and currency_local, provider, carrier_account, servicelevel_name, servicelevel_token, and object_created/object_updated timestamps. Rates older than 390 days are not returned. Required: id.

create_a_shippo_refund

Create a refund. Required: transaction.

list_all_shippo_refunds

List all refunds.

get_single_shippo_refund_by_id

Retrieve a refund. Required: id.

list_all_shippo_service_groups

List all service groups.

create_a_shippo_service_group

Create a new service group. Required: description, name, type, service_levels.

delete_a_shippo_service_group_by_id

Delete a service group. Required: id.

shippo_service_groups_bulk_update

Update an existing service group. Required: description, name, type, object_id, is_active, service_levels.

list_all_shippo_shipments

List all Shippo shipments. Returns shipment objects with object_id, address_to/address_from, parcels, rates, status, object_created, and test. Filter by creation date with object_created_gt/gte/lt/lte (ISO 8601 UTC, max 90-day range); shipments older than 390 days are not returned.

create_a_shippo_shipment

Create a new Shippo shipment. Returns the created shipment object including object_id, address_to, address_from, parcels, rates, status, object_created, and test. Requires address_to, address_from, and parcels; pass async=false to calculate rates synchronously. Required: address_from, address_to, parcels.

get_single_shippo_shipment_by_id

Get a single Shippo shipment by id (the shipment object_id). Returns the shipment object including object_id, address_to, address_from, parcels, rates, status, object_created, and test; shipments older than 390 days are not returned. Required: id.

list_all_shippo_shipment_rates

List Shippo rates calculated for a shipment. Returns a paginated list of rate objects including object_id, amount, amount_local, currency, provider, and servicelevel details. Rates for shipments older than 390 days are not returned. Required: shipment_id.

shippo_shipment_rates_list_in_currency

List Shippo rates for a shipment converted to a specific currency. Returns a paginated list of rate objects including object_id, amount, amount_local, currency, provider, and servicelevel details. Requesting rates in a new currency re-queues the shipment until status is SUCCESS; rates for shipments older than 390 days are not returned. Required: shipment_id, currency_code.

create_a_shippo_track

Register a tracking webhook in Shippo for a package to receive HTTP notifications when its status changes. Returns the tracking object including carrier, tracking_number, eta, tracking_status, and tracking_history. Required: carrier, tracking_number.

list_all_shippo_tracks

Get the current tracking status of a shipment in Shippo using a carrier name and tracking number. Returns the tracking object including carrier, tracking_number, eta, tracking_status, and tracking_history. Required: tracking_number, carrier.

list_all_shippo_transactions

List all Shippo shipping label (transaction) objects. Returns each transaction's object_id, status, object_state, tracking_number, tracking_status, rate, label_url, tracking_url_provider, and eta. Filter by rate, object_status, tracking_status, and creation date ranges (ISO 8601 UTC dates; at most one lower and one upper bound per request).

create_a_shippo_transaction

Create a shipping label (transaction) in Shippo by purchasing a previously-created rate object, or instantly by passing shipment details with an existing carrier_account and servicelevel_token. Returns the created transaction object including object_id, status, tracking_number, tracking_url_provider, label_url, and eta. The two body shapes (rate-based and instant) are mutually exclusive.

get_single_shippo_transaction_by_id

Get an existing Shippo shipping label (transaction) by id. Returns: object_id, object_created, object_updated, object_owner, test, metadata. Required: id.

list_all_shippo_user_parcel_templates

List all user parcel templates saved on the Shippo account. Returns: object_id, object_owner, object_created, object_updated, name, is_complete, validation_results, company, street_no, street1, street2, street3, city, state, zip, country, longitude, latitude, phone, email, is_residential, metadata, test.

create_a_shippo_user_parcel_template

Create a Shippo user parcel template — either from a preset carrier template token plus the weight fields, or fully custom with dimensions. Returns: object_id, object_owner, object_created, object_updated, name.

get_single_shippo_user_parcel_template_by_id

Get a Shippo user parcel template by its object id. Returns: object_id, object_owner, object_created, object_updated, test, name. Required: id.

update_a_shippo_user_parcel_template_by_id

Update an existing Shippo user parcel template by its id — change its name, dimensions, or weight. Returns: object_id, object_owner, object_created, object_updated, name, is_complete, validation_results, company, street_no, street1, street2, street3, city, state, zip, country, longitude, latitude, phone, email, is_residential, metadata, test. Required: id, distance_unit, height, length, name, width.

delete_a_shippo_user_parcel_template_by_id

Delete a Shippo user parcel template by its object id. Returns an empty 204 response on success. Required: id.

list_all_shippo_shippo_accounts

List all Shippo managed accounts. Returns account objects including object_id, email, first_name, last_name, company_name, object_created, and object_updated.

create_a_shippo_shippo_account

Create a new Shippo managed account. Returns the created account object including object_id, object_owner, email, name, object_created, and object_updated. Takes email, first_name, last_name, and company_name in the request body.

get_single_shippo_shippo_account_by_id

Get a single Shippo managed account by id. Returns the account object including object_id, object_owner, email, name, object_created, and object_updated. Required: id.

update_a_shippo_shippo_account_by_id

Update a Shippo managed account by id. Returns the updated account object including object_id, object_owner, email, name, object_created, and object_updated. Takes email, first_name, last_name, and company_name in the request body. Required: id.

list_all_shippo_webhooks

List all Shippo webhooks you have created. Returns each webhook record with object_id, event, url, active, is_test, object_created, object_updated, and object_owner.

create_a_shippo_webhook

Create a Shippo webhook that sends notifications to a URL when a specific event occurs. Returns: object_id, event, url, active, is_test, object_created, object_updated, object_owner. Requires url and event.

get_single_shippo_webhook_by_id

Get a single Shippo webhook by id. Returns the webhook details: object_id, event, url, active, is_test, object_created, object_updated, and object_owner. Required: id.

update_a_shippo_webhook_by_id

Update an existing Shippo webhook by id. Returns: event, url. Requires id, url, and event. Required: id.

delete_a_shippo_webhook_by_id

Delete a Shippo webhook by id. Returns an empty 204 response on success. Required: id.

Why Truto

Why use Truto’s MCP server for Shippo

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 800+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Go live with Shippo in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s Shippo account

Use Truto’s frontend SDK to connect your customer’s Shippo account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Shippo

Truto’s Proxy API is a 1-to-1 mapping of the Shippo API. You call us, we call Shippo, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Shippo’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Shippo on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How do end users authenticate their Shippo account?

Shippo uses API token authentication. Through Truto, your users supply their Shippo API key during the connect flow, and Truto securely stores and injects credentials on every request so you never handle secrets directly.

Can we provision Shippo accounts for our users automatically?

Yes. Truto exposes the Shippo accounts endpoints (create, list, get, update), which lets platform partners programmatically create managed sub-accounts for merchants during onboarding without manual signup.

How do we handle real-time tracking updates instead of polling?

Use the webhook endpoints (create, list, get, update, delete) to subscribe to Shippo tracking events. Truto can relay these webhook payloads to your application so you can react to status changes like 'Out for Delivery' or 'Delivered' in real time.

Does the integration support international shipping and customs?

Yes. The customs items and customs declarations endpoints let you submit item-level values, weights, HS codes, and country of origin, which Shippo forwards to carriers electronically for paperless trade.

Can merchants connect their own negotiated carrier accounts?

Yes. The carrier account endpoints support creating, updating, registering, and checking registration status for carrier accounts, so merchants can bring their own UPS, FedEx, DHL, or other carrier credentials.

How do we void or refund an unused label?

Use the refund endpoints to create a refund against a transaction, list refunds, or check refund status. This is how returns platforms and OMS products reclaim funds on labels that were generated but never shipped.

Shippo

Get Shippo integrated into your app

Our team understands what it takes to make a Shippo integration successful. A short, crisp 30 minute call with folks who understand the problem.