---
title: EasyPost API Integration on Truto
slug: easypost
category: Logistics
canonical: "https://truto.one/integrations/detail/easypost/"
---

# EasyPost API Integration on Truto



**Category:** Logistics  
**Status:** Beta

## MCP-ready AI tools

Truto exposes 106 tools for EasyPost that AI agents can call directly.

- **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.

## How it works

1. **Link your customer's EasyPost account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach EasyPost.** The Proxy API is a 1-to-1 mapping of the EasyPost API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **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

- **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.

## FAQs

### 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.
