Logistics · Beta
EasyPost
API integration
Ship Logistics features without building the integration. Full EasyPost API access via Proxy and 100+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Built for specific customer use cases. Issues are resolved quickly.
Talk to usUse Cases
Why integrate with EasyPost
Common scenarios for SaaS companies building EasyPost integrations for their customers.
Embed multi-carrier shipping in your e-commerce or OMS platform
Give merchants native access to USPS, UPS, FedEx, DHL and dozens of regional carriers without maintaining individual carrier integrations. Truto handles the EasyPost connection so your team can focus on the fulfillment UX.
Automate reverse logistics for a returns management product
Generate return labels on demand using your end-users' own EasyPost accounts, so each merchant's return shipments are billed and tracked under their carrier contracts.
Power post-purchase tracking and WISMO workflows
Ingest standardized tracking events across every carrier through EasyPost webhooks and trackers, so your platform can trigger delivery notifications, SLA alerts, and support automations from a single data model.
Enable international shipping for domestic-only merchants
Programmatically create customs info and customs items so your merchants can start selling cross-border without learning HS codes or commercial invoice formatting.
Scale high-volume fulfillment for WMS and 3PL customers
Use EasyPost batches and scan forms to generate thousands of labels asynchronously and consolidate end-of-day manifests, letting your WMS customers handle peak-season volumes without rewriting your fulfillment stack.
What You Can Build
Ship these features with Truto + EasyPost
Concrete product features your team can ship faster by leveraging Truto’s EasyPost integration instead of building from scratch.
Rate-shop checkout widget
Call create_a_easy_post_shipment or create_a_easy_post_rate to surface live carrier rates and transit times at checkout, letting buyers choose cheapest or fastest options.
Address verification on form submit
Use easy_post_addresses_create_and_verify to validate deliverability and detect residential flags before an order is accepted, eliminating carrier address-correction surcharges.
SLA-aware delivery date picker
Leverage easy_post_shipments_list_smartrates and easy_post_shipments_list_smartrate_precision_shipping to show percentile-backed delivery estimates and guarantee arrival dates for subscription or scheduled shipments.
Batch label generation for pick/pack workflows
Aggregate orders with create_a_easy_post_batch, purchase with easy_post_batches_buy, and retrieve a consolidated PDF via easy_post_batches_generate_label — all triggered from your fulfillment UI.
Unified tracking dashboard with BYOT support
Use easy_post_trackers_create_batch to track shipments created outside EasyPost (3PL, dropshippers) alongside native shipments in a single tracking view.
White-labeled merchant onboarding
Provision isolated sub-accounts with create_a_easy_post_user or create_a_easy_post_referral_customer and let merchants connect their own carrier accounts via create_a_easy_post_carrier_account.
SuperAI
EasyPost AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
create_a_easy_post_shipment
Create a shipment in EasyPost with a destination address, origin address, and parcel; valid values automatically populate shipping rates. Returns the created Shipment including its id, status, rates, parcel, to_address, and tracking_code. Requires shipment containing to_address, from_address, and parcel.
list_all_easy_post_shipments
List all shipments in EasyPost. Returns each Shipment including its id, status, tracking_code, rates, parcel, and created_at.
get_single_easy_post_shipment_by_id
Get a single EasyPost shipment by id. Returns the full Shipment object including its id, status, rates, parcel, postage_label, and tracking_code. Required: id.
easy_post_shipments_buy
Buy a Shipment in easypost by purchasing one of its returned rates, generating the postage label and tracking code. Returns the purchased Shipment object including its id, status, tracking_code, selected_rate, postage_label, fees, and rates. Required: id (the shipment, e.g. shp_...) and either a rate_id or the carrier and service pair.
easy_post_shipments_insure
Insure a Shipment in easypost by declaring the value of its contents; coverage costs 1.0% of the declared value with a $1.00 minimum, and claims are paid within 10 days. The shipment must already be bought and insured before the carrier begins handling the package. Returns the updated Shipment object including its id, status, tracking_code, insurance, postage_label, and rates. Required: id (the…
easy_post_shipments_refund
Refund an EasyPost shipment label by id. Returns the updated Shipment object including its id, status, refund_status (submitted, refunded, rejected, or not_applicable), tracking_code, rates, and postage_label. Required: shipment_id. USPS labels can be refunded within 30 days of generation and UPS/FedEx within 90 days; refund processing takes at least 15 days.
easy_post_shipments_list_smartrates
List EasyPost SmartRates for a shipment by id, with time-in-transit predictions for every associated rate. Returns rate records including id, carrier, service, rate, currency, delivery_days, est_delivery_days, and time_in_transit percentiles. Required: shipment_id. Only available for US domestic shipments.
easy_post_shipments_list_smartrate_delivery_dates
List EasyPost estimated delivery dates for every rate on a shipment. Returns one rate record per carrier service with carrier, service, rate, and time_in_transit percentile estimates. Required: shipment_id, planned_ship_date. US domestic shipments only.
easy_post_shipments_list_smartrate_precision_shipping
List EasyPost precision shipping recommendations that suggest the best ship date per carrier service to meet a desired delivery date. Returns one rate record per carrier service with carrier, service, rate, and time_in_transit percentile estimates. Required: shipment_id, desired_delivery_date. US domestic shipments only.
create_a_easy_post_address
Create an address in EasyPost with street, city, state, zip, and country details (ISO 3166 country codes supported). Returns the created address object including id, street1, city, zip, country, residential flag, and verifications. Address objects are immutable after creation.
easy_post_addresses_verify
Verify an existing EasyPost address to check deliverability, correct minor formatting issues, and set residential status. Returns the address object including id, street1, zip, residential, and verifications. Required: addresse_id.
easy_post_addresses_create_and_verify
Create an address in EasyPost and verify it in a single call. Returns the address object including id, street1, city, zip, country, residential flag, and verifications. Address objects are immutable after creation.
list_all_easy_post_addresses
List all EasyPost addresses. Returns each address object including id, street1, city, zip, country, residential flag, and created_at.
get_single_easy_post_address_by_id
Get a single EasyPost address by id. Returns the full address object including id, street1, city, zip, country, residential flag, and verifications. Required: id.
create_a_easy_post_batch
Create a Batch in easypost with or without shipments; batch operations run asynchronously and fire a webhook Event when the state change completes. Returns: id, object, mode, state, num_shipments, reference, created_at, updated_at, scan_form, shipments, status, pickup, label_url. Keep batches under 1,000 shipments to avoid timeout errors during batch buying.
easy_post_batches_add_shipments
Add shipments to an easypost Batch at any point in its life cycle; the state change is asynchronous and fires a webhook Event when completed. Returns: id, object, mode, state, num_shipments, reference, created_at, updated_at, scan_form, shipments, status, pickup, label_url. Required: batche_id.
easy_post_batches_remove_shipments
Remove shipments from an easypost Batch. Returns: id, object, mode, state, num_shipments, reference, created_at, updated_at, scan_form, shipments, status, pickup, label_url. Required: batche_id.
easy_post_batches_buy
Buy an easypost Batch, enqueuing a background job that purchases postage for its shipments and generates labels asynchronously via webhooks. Returns: id, object, mode, state, num_shipments, reference, created_at, updated_at, scan_form, shipments, status, pickup, label_url. Required: batche_id.
easy_post_batches_generate_label
Generate a consolidated label for all shipments in an easypost Batch. Returns: id, object, mode, state, num_shipments, reference, created_at, updated_at, scan_form, shipments, status, pickup, label_url. Required: batche_id, file_format.
easy_post_batches_create_scan_form
Create a ScanForm for an EasyPost Batch, consolidating its purchased shipments into a single carrier manifest. Returns the Batch including scan_form, state, num_shipments, shipments, and status counts. Required: batche_id. Scan form creation is asynchronous and completes via webhook.
list_all_easy_post_batches
List EasyPost Batches, with pagination handled automatically. Returns each Batch with id, state, num_shipments, shipments, status counts, label_url, and created_at/updated_at timestamps.
get_single_easy_post_batch_by_id
Get a single EasyPost Batch by id, useful for polling the asynchronous state changes of a Batch. Returns: id, object, mode, state, num_shipments, reference, scan_form, shipments, status, pickup, label_url, created_at, updated_at. Required: id.
delete_a_easy_post_batch_by_id
Delete an EasyPost Batch by id. Returns the deleted Batch record including id, state, num_shipments, shipments, and status counts. Required: id.
create_a_easy_post_tracker
Create an EasyPost tracker to track a package that was not purchased through EasyPost. Returns the tracker object including id, tracking_code, status, carrier, est_delivery_date, tracking_details, and carrier_detail. Requires a tracker object with tracking_code and carrier. EasyPost returns the existing tracker if the same tracking_code and carrier were submitted within the previous three months.
list_all_easy_post_trackers
List EasyPost trackers with their current package status and full scan history. Returns: id, object, mode, tracking_code, status, status_detail, signed_by, weight, est_delivery_date, shipment_id, carrier, tracking_details, carrier_detail, public_url, fees, created_at, updated_at.
get_single_easy_post_tracker_by_id
Retrieve a single EasyPost Tracker by id. Returns the full Tracker object including its id, tracking_code, status, status_detail, carrier, tracking_details scan history, carrier_detail, fees, and public_url. Required: id.
easy_post_trackers_create_batch
Create Trackers in bulk in EasyPost for bring-your-own tracking of packages. Creation is asynchronous: the call returns a BatchJob used to track the batch creation, including its id, created_at, and updated_at. Required: an array of tracker payloads, each with tracking_code and carrier.
create_a_easy_post_order
Create a multi-parcel Order in easypost from an order object containing to_address, from_address, and one shipment with a parcel per package. Returns: id, object, mode, reference, is_return, options, messages, customs_info, to_address, from_address, return_address, buyer_address, shipments, rates, created_at, updated_at. Required: order. Multi-parcel only; carriers: AustraliaPost, DHLExpress,…
get_single_easy_post_order_by_id
Get a single easypost Order by id, including its shipments, rates, and address objects. Returns: id, object, mode, reference, is_return, options, messages, customs_info, to_address, from_address, return_address, buyer_address, shipments, rates, created_at, updated_at. Required: id. Only works with AustraliaPost, DHLExpress, DPD, DPDUK, Fastway, FedEx, UPS, Purolator, and LoomisExpress carriers.
easy_post_orders_buy
Buy postage for every shipment in an easypost Order using the chosen carrier and service level; each shipment is updated with its postage_label and tracker. Returns: id, object, mode, reference, is_return, options, messages, customs_info, to_address, from_address, return_address, buyer_address, shipments, rates, created_at, updated_at. Required: order_id, carrier, service. Only works with…
easy_post_orders_buy_one
Buy postage for a single shipment within an easypost Order using the chosen carrier and service level. Returns: id, object, mode, reference, is_return, options, messages, customs_info, to_address, from_address, return_address, buyer_address, shipments, rates, created_at, updated_at. Required: order_id, shipment_id, carrier, service.
create_a_easy_post_parcel
Create a parcel in easypost representing the physical container being shipped, defined either by dimensions or a predefined package. Returns: id, object, created_at, updated_at, length, width, height, predefined_package, weight, mode. Required: weight. Weights are in ounces and dimensions in inches, to one decimal point; the parcel object is immutable after creation.
get_single_easy_post_parcel_by_id
Get a parcel in easypost by its id. Returns: id, object, created_at, updated_at, length, width, height, predefined_package, weight, mode. Required: id. Rarely needed in automated solutions, since a parcel's id can be inlined directly into the creation calls of other objects.
create_a_easy_post_pickup
Create a Pickup in easypost to schedule a carrier pickup for a purchased Shipment or Batch at an address; PickupRates are fetched automatically for supported carriers. Returns the created Pickup including id, status, min_datetime, max_datetime, and pickup_rates.
get_single_easy_post_pickup_by_id
Get a single Pickup in easypost by id (pickup_...) or reference. Returns: id, object, mode, status, reference, min_datetime, max_datetime, is_account_address, instructions, messages, confirmation, shipment, address, carrier_accounts, pickup_rates, created_at, updated_at. Required: id.
easy_post_pickups_buy
Buy a Pickup in easypost to schedule it with a carrier by selecting one of its PickupRates. Returns the updated Pickup including id, status, confirmation, address, and pickup_rates. Required: pickup_id, carrier, service.
easy_post_pickups_cancel
Cancel a scheduled Pickup in easypost; its status becomes canceled. Returns the updated Pickup including id, status, min_datetime, max_datetime, and pickup_rates. Required: pickup_id.
list_all_easy_post_pickups
List Pickups in easypost. Returns Pickup records including id, status, min_datetime, max_datetime, address, and pickup_rates.
create_a_easy_post_insurance
Create standalone insurance in EasyPost for a package shipped outside EasyPost, verified via its tracking code. Returns the created Insurance object: id, status, amount, provider, tracking_code, to_address, from_address, fee, created_at. Required: tracking_code.
list_all_easy_post_insurances
List all Insurance objects in EasyPost, including insurance purchased via the API and registered third-party packages. Returns each insurance with id, status, amount, tracking_code, provider, tracker, addresses, and created_at.
get_single_easy_post_insurance_by_id
Get a single EasyPost Insurance by id. Returns the full insurance object including id, status, amount, tracking_code, provider, to_address, from_address, tracker, and fee. Required: id.
easy_post_insurances_list_shipment_rates
List available insurance rates for an EasyPost shipment. Returns Rate quotes including id, carrier, service, rate, currency, delivery_days, and carrier_account_id. Required: shipment_id.
create_a_easy_post_rate
Retrieve stateless shipping rates from EasyPost without creating a Shipment object — ideal for displaying or comparing carrier prices. Returns a rates array whose entries include carrier, service, rate, currency, retail_rate, list_rate, and delivery_days. Requires shipment containing to_address, from_address, and parcel. Returned Rate objects do not include IDs.
create_a_easy_post_carrier_account
Create a CarrierAccount in EasyPost to store your credentials with a carrier. Returns: id, object, type, clone, description, reference, readable, billing_type, logo, fields, credentials, test_credentials, created_at, updated_at. Required: type (the CarrierType name, e.g. DhlEcsAccount).
list_all_easy_post_carrier_accounts
List all CarrierAccounts in EasyPost, including the automatically provided USPS account. Returns each account with id, type, fields, credentials, description, and created_at. Filter by type (e.g. UpsAccount).
get_single_easy_post_carrier_account_by_id
Get a single CarrierAccount in EasyPost by id. Returns: id, object, type, clone, description, reference, readable, billing_type, logo, fields, credentials, test_credentials, created_at, updated_at. Required: id.
update_a_easy_post_carrier_account_by_id
Update a CarrierAccount in EasyPost by id, e.g. its description, reference, or credentials. Returns: id, object, type, clone, description, reference, readable, billing_type, logo, fields, credentials, test_credentials, created_at, updated_at. Required: id. When clone is true, only reference and description can be updated.
delete_a_easy_post_carrier_account_by_id
Delete a CarrierAccount in EasyPost by id, e.g. when the credentials become out of date or are no longer useful. Returns an empty 204 response on success. Required: id.
list_all_easy_post_carrier_types
List all EasyPost CarrierType objects, which describe the credential fields required to create each type of CarrierAccount. Returns: object, type, readable, logo, fields. The list is unpaginated and only changes when a new carrier is added to EasyPost.
list_all_easy_post_carrier_metadata
List carrier metadata for all carriers available on the EasyPost platform, including service levels, predefined packages, supported features, and shipment options. Returns a carriers array whose entries include name, human_readable, service_levels, and predefined_packages. Optionally filter with carriers and types.
create_a_easy_post_claim
Create a new insurance claim in EasyPost for a lost, damaged, or stolen shipment. Returns the created claim object including its id, status, tracking_code, requested_amount, history, and attachments. Required: tracking_code, type. If the submitted amount exceeds the purchased insurance coverage, requested_amount is capped at that coverage.
list_all_easy_post_claims
List all insurance claims submitted through EasyPost. Returns claim objects including id, status, tracking_code, requested_amount, and created_at, with statuses progressing through submitted, in_review, approved, approved_partial, rejected, cancelled, or needs_action.
get_single_easy_post_claim_by_id
Get a single EasyPost insurance claim by id. Returns the full claim object including id, status, tracking_code, requested_amount, history, and attachments. Required: id.
create_a_easy_post_usps_claim
Create a test-mode USPS Claim in easypost for an eligible purchased label. Returns: id, object, mode, tracking_code, shipment_id, claim_type, status, product_value, claimable_amount, description, recipient, shipment_date, filing_window_closes_at, missing, submitted_at, approved_at. Requires tracking_code and claim_type. Test mode only — production claims are auto-created from eligible labels.
list_all_easy_post_usps_claims
List all USPS Claims in easypost. Returns records with: id, tracking_code, claim_type, status, product_value, claimable_amount, missing, and submitted_at.
easy_post_usps_claims_list_needs_info
List USPS Claims in easypost that need additional information before they can be filed. Returns records with: id, tracking_code, status, product_value, claimable_amount, and missing (fields still required, e.g. product_value).
get_single_easy_post_usps_claim_by_id
Get a single USPS Claim in easypost by id. Returns: id, object, mode, tracking_code, shipment_id, claim_type, status, product_value, claimable_amount, description, recipient, shipment_date, filing_window_closes_at, missing, submitted_at, approved_at. Required: id.
easy_post_usps_claims_submit_evidence
Submit evidence for a USPS Claim in easypost by providing the declared product_value; description and recipient are not accepted on evidence submit. Returns the updated claim: id, status, product_value, claimable_amount, missing. Required: usps_claim_id, product_value.
easy_post_usps_claims_submit_evidence_bulk
Submit USPS claim evidence in bulk to EasyPost for a batch of USPS claims, supplying each claim's product value so EasyPost can file with USPS. Returns the updated claim fields (id, tracking_code, status, product_value, claimable_amount, missing, submitted_at) plus failed_claims when some items fail (207 partial success). Required: claims (each item needs id and product_value).
create_a_easy_post_webhook
Create an EasyPost webhook that receives an Event via HTTP POST at the given url whenever a tracked object updates. Returns: id, object, mode, url, created_at, disabled_at, custom_headers. Required: url. Optionally secure it with webhook_secret (HMAC) and up to three custom_headers.
list_all_easy_post_webhooks
List all EasyPost webhooks associated with the API key. Returns each webhook's id, url, mode, created_at, disabled_at, and custom_headers. The list is unpaginated.
get_single_easy_post_webhook_by_id
Get a single EasyPost webhook by id. Returns: id, object, mode, url, created_at, disabled_at, custom_headers. Required: id.
update_a_easy_post_webhook_by_id
Update an EasyPost webhook to re-enable a disabled webhook or rotate its webhook_secret and custom_headers. Returns: id, object, mode, url, created_at, disabled_at, custom_headers. Required: id. custom_headers are replaced wholesale, not merged.
delete_a_easy_post_webhook_by_id
Delete an EasyPost webhook by id. Returns an empty 204 response on success. Required: id.
list_all_easy_post_events
List EasyPost events triggered by changes to your objects, such as batch, tracker, report, and payment activity. Returns: id, object, mode, description, previous_attributes, result, status, pending_urls, completed_urls, created_at, updated_at.
get_single_easy_post_event_by_id
Get a single EasyPost event by id. Returns: id, object, mode, description, previous_attributes, result, status, pending_urls, completed_urls, created_at, updated_at. Required: id. The associated result object is not returned when retrieving events directly.
list_all_easy_post_event_payloads
List all webhook delivery payloads for an EasyPost event. Returns a payloads array of delivery-attempt records including id, request_url, request_headers, response_code, and total_time. Required: event_id.
get_single_easy_post_event_payload_by_id
Get a single webhook delivery payload for an EasyPost event by id. Returns the Payload object including id, mode, request_url, request_body, response_code, and total_time. Required: id and event_id.
easy_post_billing_create_client_secret
Create a Stripe SetupIntent client secret in EasyPost for securely collecting credit card details via Stripe.js (step 1 of adding a card). Returns: client_secret, id. Production only; applies to ReferralCustomers and Parent User account management.
easy_post_billing_create_credit_card
Store a credit card payment method in EasyPost using the Stripe payment method id from a confirmed SetupIntent (step 3 of the card flow). Returns: id, priority. Required: credit_card. Production only; applies to ReferralCustomers and Parent User account management.
easy_post_billing_create_financial_connections_session
Create a Stripe Financial Connections session in EasyPost so the customer can securely link a bank account for ACH payments (step 1 of the bank account flow). Returns: client_secret, id. Required: return_url. Production only.
easy_post_billing_create_bank_account
Store a bank account payment method in EasyPost from a Stripe Financial Connections session (step 3 of the ACH flow). Returns: id, priority. Required: financial_connections_id, priority. Production only.
easy_post_billing_charge_credit_card
Fund the EasyPost Wallet by charging a credit card payment method. Returns: id, amount. Required: credit_card_id and amount. Amount must be greater than or equal to the current balance. Production only.
easy_post_billing_charge_bank_account
Charge a bank account on file to fund the EasyPost wallet. Returns an empty 204 response on success. Required: bank_account_id, amount.
easy_post_billing_list_payment_methods
List the payment methods (credit cards and bank accounts) associated with the EasyPost account. Returns: credit_cards, bank_accounts. Production environments only.
easy_post_billing_delete_credit_card
Delete a credit card payment method from the EasyPost account by id. Returns an empty 204 response on success. Required: credit_card_id.
create_a_easy_post_scan_form
Create a ScanForm in EasyPost from an array of shipments so one scanned document can mark all included tracking codes as "Accepted for Shipment" by the carrier. Returns: id, object, created_at, updated_at, tracking_codes, address, status, message, form_url, form_file_type, batch_id, confirmation. Required: shipments (all must share the same origin_address and carrier account; keep each form under…
list_all_easy_post_scan_forms
List all ScanForms in EasyPost associated with the API key. Returns ScanForm objects including id, status, tracking_codes, address, form_url, and batch_id.
get_single_easy_post_scan_form_by_id
Get a single ScanForm in EasyPost by its id. Returns: id, object, created_at, updated_at, tracking_codes, address, status, message, form_url, form_file_type, batch_id, confirmation. Required: id.
create_a_easy_post_refund
Create EasyPost refunds in bulk for one or more shipping label tracking codes. Returns a list of Refund objects including id, status, carrier, tracking_code, confirmation_number, and shipment_id. USPS labels must be refunded within 30 days; UPS/FedEx within 90. Required: refund (with carrier and tracking_codes).
list_all_easy_post_refunds
List all EasyPost Refunds associated with your API key. Returns: id, object, created_at, updated_at, tracking_code, confirmation_number, status, carrier, shipment_id.
get_single_easy_post_refund_by_id
Get a single EasyPost Refund by id. Returns: id, object, created_at, updated_at, tracking_code, confirmation_number, status, carrier, shipment_id. Required: id (begins with "rfnd_").
create_a_easy_post_report
Create an EasyPost Report of the given type — a CSV log of all objects created within a date range. Returns: id, object, mode, status, start_date, end_date, include_children, url, url_expires_at, columns, utc_offset, created_at, updated_at. Required: report_type, start_date, end_date (the two dates must be less than 31 days apart).
get_single_easy_post_report_by_id
Get a single EasyPost Report by id. Returns the Report object including its id, status, mode, start_date, end_date, and url. Required: id (prefixed by report type, e.g. plrep_).
list_all_easy_post_reports
List all EasyPost Reports associated with the API key. Returns each Report's id, object, status, start_date, end_date, and url. Paginated.
get_single_easy_post_user_by_id
Get a User in EasyPost by id. Returns the full User object including id, name, email, phone_number, balance, recharge_threshold, cc_fee_rate, insurance_fee_rate, and nested children. Required: id. The id must be the authenticated User's id or the id of one of its Child Users.
update_a_easy_post_user_by_id
Update a User in EasyPost by id. Partial update — only passed attributes are changed. Returns the updated User including id, name, email, balance, recharge_threshold, and children. Required: id. Pass current_password when updating email or password; Child Users may only have their name updated.
delete_a_easy_post_user_by_id
Delete a Child User in EasyPost by id, removing it from its parent account. Returns an empty 204 response on success. Required: id.
create_a_easy_post_user
Create a Child User in EasyPost under the authenticated account; billing flows through the parent. Returns the created User including id, name, parent_id, created_at, and children. name is the only settable attribute and is optional — one is generated automatically when omitted.
easy_post_users_list_children
List all Child Users in EasyPost associated with the authenticated account. Returns Child User records including id, name, parent_id, phone_number, verified, created_at, and nested children.
easy_post_brands_bulk_update
Update a user's Brand in easypost to customize the public tracking page with a logo, ad, brand colors, and theme. Returns the Brand object including id, color, background_color, logo, logo_href, name, theme, and user_id. Required: user_id.
list_all_easy_post_api_keys
List EasyPost API keys for the authenticated user, including both test and production keys plus all child users. Returns: id, keys, children.
create_a_easy_post_api_key
Create a new test or production API key in EasyPost for the authenticated user and its children. Returns the updated API keys object: id, keys, children. Required: mode. Only usable by Referral Customers or for managing Child User accounts.
easy_post_api_keys_disable
Disable an EasyPost API key by id, immediately rendering it unusable. Returns the updated API keys object: id, keys, children. Required: api_key_id. Only usable by Referral Customers or for managing Child User accounts.
easy_post_api_keys_enable
Enable a previously disabled EasyPost API key by id. Returns the updated API keys object: id, keys, children. Required: api_key_id. Only usable by Referral Customers or for managing Child User accounts.
create_a_easy_post_end_shipper
Create an EndShipper in EasyPost: the party a platform buys postage on behalf of, who is legally responsible for the package contents. Requires a US address with street1, city, state, zip, country, phone, email, and at least one of name or company. Store the returned id to pass when buying shipments. Only available to accounts enabled for the EndShipper API. Returns the EndShipper object with id, object, mode, created_at, updated_at, and the address fields.
get_single_easy_post_end_shipper_by_id
Retrieve a single EasyPost EndShipper by id (begins with es_). Only available to accounts enabled for the EndShipper API. Returns: id, object, mode, created_at, updated_at, name, company, street1, street2, city, state, zip, country, phone, email. Required: id.
update_a_easy_post_end_shipper_by_id
Update an EasyPost EndShipper by id. Partial updates are not supported: send the complete address again with every field required at creation (street1, city, state, zip, country, phone, email, and name or company). Only available to accounts enabled for the EndShipper API. Returns the updated EndShipper object. Required: id, end_shipper.
create_a_easy_post_referral_customer
Create a ReferralCustomer (a white-label User with its own billing methods) in easypost. Returns the created User object with its id, object, name, email, phone_number, created_at, and updated_at; the ReferralCustomer's API keys are included in this one-time response and cannot be retrieved later. Required: user. Production only; the object is immutable after creation.
easy_post_referral_customers_add_payment_method
Add a payment method for a ReferralCustomer in easypost via Stripe (a card_... credit card or ba_... bank account reference). Returns the stored payment method record with its id and payment-method attributes. Required: payment_method. Beta endpoint, only used with the Forge Decentralized integration; both a primary and secondary payment method can be set.
list_all_easy_post_referral_customers
List all ReferralCustomers in easypost — white-label users that can have their own billing methods. Returns each record's id, name, email, phone_number, balance, and created_at.
easy_post_referral_customers_send_email_byot
Send a Bring-Your-Own-Tracker (BYOT) email invitation to a ReferralCustomer in easypost. Returns an empty 204 response on success. Required: user_id.
create_a_easy_post_customs_info
Create a CustomsInfo in EasyPost holding customs items and declaration details used to generate customs forms for international shipments. Returns the created object including id, contents_type, customs_certify, eel_pfc, restriction_type, and nested customs_items. Required: customs_info. The object is immutable after creation; UPS accepts at most 100 customs items.
get_single_easy_post_customs_info_by_id
Get a single EasyPost CustomsInfo by id. Returns the full object including id, contents_type, customs_certify, eel_pfc, restriction_type, and nested customs_items. Required: id.
create_a_easy_post_customs_item
Create a CustomsItem in EasyPost describing goods in an international shipment, and store the returned id for later use in a CustomsInfo object. Returns: id, object, created_at, updated_at, description, hs_tariff_number, origin_country, quantity, value, weight, code, mode, manufacturer, currency, eccn, printed_commodity_identifier. Required: description, quantity, value, weight, origin_country.…
get_single_easy_post_customs_item_by_id
Get a single CustomsItem by id in EasyPost. Returns the customs item including its id, description, quantity, value, weight, hs_tariff_number, origin_country, and created_at. Required: id.
Why Truto
Why use Truto’s MCP server for EasyPost
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 800+ integrations.
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.
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.
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.
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.
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.
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 EasyPost in under an hour. No boilerplate, no maintenance burden.
Link your customer’s EasyPost account
Use Truto’s frontend SDK to connect your customer’s EasyPost account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
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.
Call our API, we call EasyPost
Truto’s Proxy API is a 1-to-1 mapping of the EasyPost API. You call us, we call EasyPost, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate EasyPost’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about EasyPost on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
How does authentication work for connecting end-user EasyPost accounts?
EasyPost uses API key authentication. Through Truto's connection flow, your end-users provide their EasyPost API key (or you provision child users / referral customers under your parent account), and Truto securely stores and injects credentials on every request.
Can my merchants bring their own carrier contracts (UPS, FedEx) rates?
Yes. Use create_a_easy_post_carrier_account to attach a merchant's negotiated carrier credentials to their EasyPost account. All subsequent rate and label calls will return and bill against their contracted rates.
How do we receive real-time tracking updates?
Register endpoints with create_a_easy_post_webhook to subscribe to EasyPost events, then consume them via list_all_easy_post_events and get_single_easy_post_event_payload_by_id. Truto normalizes delivery of these webhooks so you don't have to manage per-tenant endpoint registration manually.
Does the integration support international shipping and customs?
Yes. Use create_a_easy_post_customs_info and create_a_easy_post_customs_item to attach HS codes, origin countries, and declared values to shipments, enabling programmatic generation of commercial invoices and customs declarations.
How do we handle high-volume label printing without blocking our app?
Use the batch endpoints (create_a_easy_post_batch, easy_post_batches_add_shipments, easy_post_batches_buy, easy_post_batches_generate_label) to process hundreds or thousands of shipments asynchronously, then listen for batch completion webhooks to retrieve the consolidated label PDF.
Can we issue refunds or insure shipments programmatically?
Yes. easy_post_shipments_refund submits a label refund request to the carrier, easy_post_shipments_insure adds insurance to an existing shipment, and create_a_easy_post_insurance / create_a_easy_post_claim / create_a_easy_post_usps_claim support standalone insurance and claims workflows.
EasyPost
Get EasyPost integrated into your app
Our team understands what it takes to make a EasyPost integration successful. A short, crisp 30 minute call with folks who understand the problem.