Skip to content
EasyPost Shipping API Client Library for Node
Branch: master
Clone or download
Latest commit 8315857 Feb 15, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Add propTypes to user (#109) Sep 11, 2018
.eslintrc Upgrade packages, publish multiple versions Nov 1, 2017
.gitignore gitignore /easypost.js, not all easypost.js Jul 18, 2017
LICENSE Provide superagentMiddleware and requestMiddleware hooks (#104) Jul 20, 2018
easypost.6-lts.js v3.6.6 Feb 15, 2019
easypost.8-lts.js v3.6.6 Feb 15, 2019
index.js Upgrade packages, publish multiple versions Nov 1, 2017
package.json v3.6.6 Feb 15, 2019
repl.js Include info about node versions in readme Nov 1, 2017
webpack.config.js Rebuild with no-mangling for classnames Jul 2, 2018

EasyPost Node Client Library

EasyPost is a simple shipping API. You can sign up for an account at

Build Status


npm install --save @easypost/api

Note: if you are using a version of Node less than 6.9, you will need to install and include a polyfill, such as babel-polyfill, and include it in your project:

npm install --save babel-polyfill

In your file:

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

To test out the API, you can run npm install -g @easypost/api and run easypost. you can also clone this repository, npm install to install dependencies, npm run build to build the project, and run API_KEY=yourkey ./repl.js --local easypost.js to try out an interactive CLI. (Replace easypost.js with whatever compatabile version you wish, as defined below.)


By default, @easypost/api works with Node v6 LTS. To include for other versions of node, you can use:

  • require('@easypost/api/easypost.8-lts.js') (Node 8.9+
  • require('@easypost/api/easypost.6-lts.js') (Node 6.9+)
  • require('@easypost/api/easypost.legacy.js') (Node 0.10+)


const apiKey = 'cueqNZUb3ldeWTNX7MU3Mel8UXtaAMUi';
const EasyPost = require('@easypost/api');

const api = new EasyPost(apiKey);

// set addresses
const toAddress = new api.Address({
  name: 'Dr. Steve Brule',
  street1: '179 N Harbor Dr',
  city: 'Redondo Beach',
  state: 'CA',
  zip: '90277',
  country: 'US',
  phone: '310-808-5243'

const fromAddress = new api.Address({
  name: 'EasyPost',
  street1: '118 2nd Street',
  street2: '4th Floor',
  city: 'San Francisco',
  state: 'CA',
  zip: '94105',
  phone: '415-123-4567'

/* es5 with promises: */ => {

/* es2017 with async/await: */


You can construct an API instance with certain options:

const api = new Api("mykey", {
  timeout: 120000,
  baseUrl: "",
  useProxy: false,
  superagentMiddleware: s => s,
  requestMiddleware: r => r,


Time in MS that should fail requests.


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


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


Function that takes superagent and returns superagent. Useful if you need to wrap superagent in a function, such as many superagent libraries do.

import superagentLib from 'some-superagent-lib';

const api = new Api("my-key", {
  superagentMiddleware: s => superagentLib(s),


Function that takes a superagent request and returns that request. Useful if you need to hook into a request:

import superagentLib from 'some-superagent-lib';

const api = new Api("my-key", {
  requestMiddleware: r => {
    return r;

Note on ES6 Usage

You can import specific versions of the compiled code if you're using later verisons of node. import "@easypost/api/src/easypost" imports the un-transformed es6, or you can import @easypost/api/easypost.6-lts, @easypost/api/easypost.8-lts, or @easypost/api/easypost.legacy.js (v0.10) to import mininally transformed versions.

You can’t perform that action at this time.