Prerequisites
To generate authentication credentials, you must have an account on the ShipBob dashboard. If you don’t have one, you can sign up:Supported Authentication Methods
ShipBob offers two authentication methods based on integration needs:Personal Access Token (PAT) Flow
If you’re building a single-user custom integration, use this method. It generates a ready-to-use bearer-type token with full access to the merchant’s account.- Generate credentials from the ShipBob dashboard:
OAuth Flow
If you are building a multi-user integration or an app listed on our App Store, you must use OAuth.- Generate credentials from the ShipBob dashboard:
All API authentication operates against the root user of the account. When requesting a PAT token or installing an OAuth app, do so against the root user.
Personal Access Token (PAT) Flow
When you request your first PAT, ShipBob automatically generates an application (“SMA” or single-merchant application) and channel to house all your future PATs. You can request multiple tokens and revoke them anytime. Generate your PAT from the ShipBob dashboard by going to Integrations > API Tokens > Generate New Token.These tokens do not expire, so exercise caution when sharing them.
Using Your PAT
To authenticate API requests, include the PAT in theAuthorization header:
OAuth Flow
To authenticate via OAuth, follow these steps:Step 1: Create App
Generate credentials from the ShipBob dashboard by going to Integrations > OAuth Apps > Create App. See more here.If you want to test on a sandbox account here is the link to create one.
Step 2: Request Permission to Access User Data
Once you have your client ID and secret, you can use them to get a user’s permission to access their account data. You start by making a request to the following endpoint:Use
https://authstage.shipbob.com/connect/authorize if on sandbox.| Parameter | Values | Required? |
|---|---|---|
client_id | Client id provided by step 1. | required |
scope | One or more scopes granted by step 1, space-separated. NOTE: if you want to take advantage of refresh tokens (aka offline access mode) you must additionally request the offline_access scope. | required |
redirect_uri | The callback URI ShipBob will call after the user responds to the request for consent. Must match one of the provided values from step 1. | required |
response_mode | If you include this query parameter with value form_post then we will make a POST request to your callback URL, instead of including the data as a fragment. | optional |
integration_name | Name of the integration for this particular user. We recommend that you know the user’s store name on your platform. If not provided, the user will be prompted to provide their name or choose one from a drop-down of options. | recommended |
state | Application-provided string to help prevent replay attacks. Echoed back to the application in the callback for validation. | recommended |
nonce | A random string you can send and we will send it back within the token, to prevent replay attacks, code substitutions, etc. | recommended |
Step 3: Implement Your Callback URI
When the user grants access, ShipBob redirects to your callback URI with the following parameters:Step 4: Obtain an Access Token
Exchange the authorizationcode for an access token by making a POST request:
Use
https://authstage.shipbob.com/connect/token if using sandbox.Step 5: Refresh Token
If usingoffline_access, a refresh_token will also be provided.
Use it to obtain new tokens without requiring user login:
refresh_token will be generated every time you create a new access_token.
Step 6: Retrieve Your Channel ID
Most of the POST requests on the ShipBob API require you to include ashipbob_channel_id in the header. Retrieve it via:
https://sandbox-api.shipbob.com/2025-07/channel.
You’re now ready to make authenticated API requests using ShipBob!