@easypost/api

中文文档
9.2.0发布于 2026/11/10MITTypeScriptESM + CJS构建来源已验证近 30 天下载 40.4万

EasyPost Node Client Library

原始使用文档
文档目录9 节
  1. Install
  2. Usage
  3. Options
  4. HTTP Hooks
  5. Documentation
  6. Support
  7. Development
  8. Typescript Definitions
  9. Testing

EasyPost Node Client Library

CI codecov npm version

EasyPost, the simple shipping solution. You can sign up for an account at https://easypost.com.

NOTE: This library is intended to be used in a backend Node service and not in a frontend Javascript project via the browser.

Install

npm install --save @easypost/api

You can alternatively download the various built assets from this project's releases page.

Usage

A simple create & buy shipment example:

const EasyPostClient = require('@easypost/api');

const client = new EasyPostClient(process.env.EASYPOST_API_KEY);

const shipment = await client.Shipment.create({
  from_address: {
    street1: '417 MONTGOMERY ST',
    street2: 'FLOOR 5',
    city: 'SAN FRANCISCO',
    state: 'CA',
    zip: '94104',
    country: 'US',
    company: 'EasyPost',
    phone: '415-123-4567',
  },
  to_address: {
    name: 'Dr. Steve Brule',
    street1: '179 N Harbor Dr',
    city: 'Redondo Beach',
    state: 'CA',
    zip: '90277',
    country: 'US',
    phone: '4155559999',
  },
  parcel: {
    length: 8,
    width: 5,
    height: 5,
    weight: 5,
  },
});

const boughtShipment = await client.Shipment.buy(shipment.id, shipment.lowestRate());

console.log(boughtShipment);

Options

You can construct an API instance with certain options:

const client = new EasyPostClient(process.env.EASYPOST_API_KEY, {
  timeout: 120000,
  baseUrl: 'https://api.easypost.com/v2/',
  useProxy: false,
  httpMiddleware: (f) => f,
  httpClient: fetch,
  requestMiddleware: (r) => r,
});

timeout

Time in milliseconds that should fail requests.

baseUrl

Change the base URL that the API library uses. Useful if you proxy requests from a frontend through a server.

useProxy

Disable using the API key. Useful if you proxy requests from a frontend through a server.

httpMiddleware

Function that wraps the underlying HTTP transport function.

const wrapFetch = (f) => (input, init) => {
  // custom behavior here
  return f(input, init);
};

const client = new EasyPostClient('my-key', {
  httpMiddleware: wrapFetch,
});

httpClient

Function used for HTTP requests. Defaults to built-in fetch (Node 18+). You can override this for custom environments, testing, or instrumentation.

requestMiddleware

Function that takes a compatibility request object and returns it. Existing middleware patterns that use auth, query, and send are still supported.

const client = new EasyPostClient('my-key', {
  requestMiddleware: (r) => {
    r.set({ 'X-Custom-Header': 'my-value' });
    return r;
  },
});

HTTP Hooks

If you would need or want to view what requests are being made to the EasyPost API behind the scenes, you can provide functions to listen for the request and/or responses. This can be done with helper functions on the created client.

const client = new EasyPostClient('my-key');

const logOutgoingRequest = (request) => console.log('Outgoing:', request);
const logResponse = (response) => console.log('Response:', response);

// optionally add your hook to listen for outgoing requests
client.addRequestHook(logOutgoingRequest);
// and optionally the hook for the response
client.addResponseHook(logResponse);

// ...do other stuff

// remove that request hook
client.removeRequestHook(logOutgoingRequest);
// and the response one
client.removeResponseHook(logResponse);
// or clear all the hooks at once
client.clearRequestHooks();
client.clearResponseHooks();

Note: You cannot edit or otherwise affect the requests using these hooks. They are purely for debugging or logging purposes.

Documentation

API documentation can be found at: https://docs.easypost.com.

Library documentation can be found on the web at: https://easypost.github.io/easypost-node/ or by building them locally via the just docs command.

Upgrading major versions of this project? Refer to the Upgrade Guide.

Support

New features and bug fixes are released on the latest major release of this library. If you are on an older major release of this library, we recommend upgrading to the most recent release to take advantage of new features, bug fixes, and security patches. Older versions of this library will continue to work and be available as long as the API version they are tied to remains active; however, they will not receive updates and are considered EOL.

For additional support, see our org-wide support policy.

Development

# Install dependencies
just install

# Install style guides (Unix only)
just install-styleguide

# Update dependencies
just update

# Build the project
just build

# Lint the project
just lint
just lint-fix

# Run tests (these will be transpiled on the fly)
EASYPOST_TEST_API_KEY=123... EASYPOST_PROD_API_KEY=123... just test
EASYPOST_TEST_API_KEY=123... EASYPOST_PROD_API_KEY=123... just coverage

# Run security analysis
just scan

# Generate library documentation
just docs

# Update submodules
just update-examples-submodule

Typescript Definitions

Starting with v5.3.0, this project has Typescript definitions included.

Current definitions are generated from source and published with the package at dist/types. No consumer configuration changes are required when importing @easypost/api from the package root.

Typescript Exclusions

  • We do not provide a DefinitelyTyped version of these definitions at this time
  • Predefined packages (see Carrier Metadata in our docs for more details)
  • Carrier service levels (see Carrier Metadata in our docs for more details)
  • Carrier list (see Carrier Types in our docs for more details)
  • We do not require parameters or properties comprehensively in this library. See our documentation for more details on what is required per request

Testing

The test suite in this project was specifically built to produce consistent results on every run, regardless of when they run or who is running them. This project uses Pollyjs (AKA: VCR) to record and replay HTTP requests and responses via "cassettes". When the suite is run, the HTTP requests and responses for each test function will be saved to a cassette if they do not exist already and replayed from this saved file if they do, which saves the need to make live API calls on every test run. If you receive errors about a cassette expiring, delete and re-record the cassette to ensure the data is up-to-date.

Sensitive Data: We've made every attempt to include scrubbers for sensitive data when recording cassettes so that PII or sensitive info does not persist in version control; however, please ensure when recording or re-recording cassettes that prior to committing your changes, no PII or sensitive information gets persisted by inspecting the cassette.

Making Changes: If you make an addition to this project, the request/response will get recorded automatically for you. When making changes to this project, you'll need to re-record the associated cassette to force a new live API call for that test which will then record the request/response used on the next run.

Test Data: The test suite has been populated with various helpful fixtures that are available for use, each completely independent from a particular user with the exception of the USPS carrier account ID (see Unit Test API Keys for more information) which has a fallback value of our internal testing user's ID. Some fixtures use hard-coded dates that may need to be incremented if cassettes get re-recorded (such as reports or pickups).

Unit Test API Keys

The following are required on every test run:

  • EASYPOST_TEST_API_KEY
  • EASYPOST_PROD_API_KEY

Some tests may require an EasyPost user with a particular set of enabled features such as a Partner user when creating referrals. We have attempted to call out these functions in their respective docstrings. The following are required when you need to re-record cassettes for applicable tests:

  • USPS_CARRIER_ACCOUNT_ID (eg: one-call buying a shipment for non-EasyPost employees)
  • PARTNER_USER_PROD_API_KEY (eg: creating a referral user)
  • REFERRAL_CUSTOMER_PROD_API_KEY (eg: adding a credit card to a referral user)

版本与发布记录

@easypost/api 共发布 98 个版本,首次发布于 2017/04/26;过去 12 个月发布了 10 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
9.2.0latest2026/11/103 天前
9.1.02026/10/3014 天前
9.0.02026/10/2816 天前
9.0.0-rc.12026/09/092 个月前
8.9.02026/06/264 个月前
8.8.02026/03/048 个月前

关于 @easypost/api 的常见问题

@easypost/api 是什么?

EasyPost Node Client Library

如何安装 @easypost/api?

在项目目录运行 npm install @easypost/api,或使用 pnpm add / yarn add / bun add。

@easypost/api 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@easypost/api 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@easypost/api 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 18.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@easypost/api 可以商用吗?

@easypost/api 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@easypost/api 的下载量有多少?

根据 npm 官方下载统计,@easypost/api 在 2026/10/13 – 2026/11/11 这 30 天内被下载 404,379 次,日均约 13,479 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@easypost/api 还在维护吗?

最新版本 9.2.0 发布于 2026/11/10(3 天前);至今共发布 98 个版本,其中过去 12 个月发布了 10 个;首次发布于 2017/04/26。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。