Shiplify API v2 Documentation
Shiplify API v2 Documentation
You are currently viewing the latest version of the API documentation (v2). View the previous
version (v1) here. (/docs/api/v1)
Overview
Use Cases
Process Implementation
Status
Dock Access
Forklift
Exemptions
Recommendations
When should I hit the API?
Technical Documentation
Overview
Authentication
Rate Limits
Tariff Items
Recommendations
Sample request
Parameters
Response body
https://tariffs.shiplify.com/docs/api/v2 1/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
Error handling
Sample request
Parameters
Response body
Error handling
Sample request
Parameters
Response body
Sample request
Parameters
Response body
Error handling
Sample request
Parameters
Response body
Error handling
Support
https://tariffs.shiplify.com/docs/api/v2 2/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
Upon implementation of our API, you will receive the following bene ts:
Invoicing
Immediately identify accessorial revenue opportunities
Reduce disputes and rebilling
Operations
Schedule next-day residential delivery appointments
Load shipments onto properly-equipped trucks
Identify miskeyed bills before sending a bad address to your routing and scheduling
system
Process Implementation
You send a request with information about a single shipment (primarily shipper/consignee address
information). Then Shiplify returns the following information (for both the shipper and consignee) to
help you determine whether an accessorial fee should be applied.
Status
Based on the information you send to us, we will return one of two statuses:
Complete
In most cases, our API will return a complete status. This means that we have nished processing
the shipment, and you will not receive further updates for it. We recommend you make a nal decision
about which accessorials to apply at this time, based on Shiplify’s provided recommendations.
Processing
Sometimes, our API will return a processing status. This means we’ve enqueued the shipment for
manual review, and you should wait for an update from Shiplify before updating your freight bill.
When this happens, we include possible accessorials that may apply to the shipment, in case this
information is helpful in other parts of your process. Please see the Recommendations section below.
Dock Access
https://tariffs.shiplify.com/docs/api/v2 3/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
We return dock access information for both the shipper and consignee location. This value will be
'yes' or 'no' with a corresponding con dence code.
When we do not have dock access information for a location, we will return an empty json object
( {} ).
Forklift
We return forklift information for both the shipper and consignee location. This value will be 'yes' or
'no' with a corresponding con dence code.
We will only return forklift information if we believe the location does not have access to a loading
dock.
Confidence Codes
Shiplify returns a con dence code with each attribute we identify. These are two-character codes that
represent our con dence in the corresponding attribute. The rst character (A or U) indicates
whether we were able to con rm the location of the provided address. The second character (1-4)
indicates our relative level of con dence in the accuracy of the attribute.
A blank result (an empty list of shipper or consignee tariff items) indicates that Shiplify is fully
con dent that no tariff items should be charged for the location in question.
https://tariffs.shiplify.com/docs/api/v2 4/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
NOTE: If our team is unable to verify either the location of the address or the location type at that
address, the shipper/consignee will retain its current con dence code and the shipment will be
updated to a status of complete .
A2 results (correct approximately 76% of the time) have been location-veri ed, and we have a strong
reason to believe that the corresponding attribute is likely, but we have not fully veri ed whether the
attribute should be applied.
A3 results (correct approximately 70% of the time) have been location-veri ed, and we have some
reason to believe that the corresponding attribute is likely, but we have not fully veri ed whether the
attribute should be applied.
A4 results indicate that we were able to verify the location, but received con icting predictions
about which attribute should be applied. For example, if we received data from one source indicating
that the location was a school (limited access tariff) and from another source that it was a residence
(residential tariff), Shiplify would return the result with an A4 con dence code. When an A4 result is
returned, it is approximately 76% likely that one of the predicted attribute should be applied (but we
have not yet veri ed which one).
A "U" result ( U1 - U4 ) can happen when the provided address was either invalid or ambiguous. Other
times it is because the address cannot be located. Consider correcting the address and re-sending the
shipment.
U1 results (correct approximately 89% of the time) have not been location-veri ed, but we have a
strong reason to believe that the corresponding attribute is likely.
U2 results (correct approximately 58% of the time) have not been location-veri ed, but we have
reason to believe that the corresponding attribute is possible.
U3 results (correct approximately 33% of the time) have not been location-veri ed, but we have
some reason to believe that the corresponding attribute is possible.
U4 results indicate that we were unable to verify the location, and received con icting predictions
about which attribute should be applied. When a U4 result is returned, it is approximately 80% likely
that one of the predicted attribute should be applied.
Exemptions
Shiplify allows users to exempt locations or customer codes within our Carrier Portal. If a shipment is
going to a location or customer with an exemption, we will return an exempt ag via the API.
Recommendations
We recommend that you apply a tariff item only when all of the following are true:
Many shipments with a status of complete will have no identi ed tariff items. This means that
Shiplify is fully con dent that no tariffs will apply to these shipments, and it's ok to nalize the freight
bill.
Often, once you re-submit the correct address information, we can provide fully-veri ed information.
(Note: when you re-submit a shipment, you will see multiple entries with the same pro number in the
shipments interface.)
Identifying invalid or incomplete address information earlier can prevent various operational issues.
Integrating these steps in your process can help you prevent headaches down the line.
Updated information
Sometimes corrections need to be made to shipment information after it has already been sent to us.
We recommend you resend any updated shipments. (Note: when you re-submit a shipment, you will
see multiple entries with the same pro number in the shipments interface.)
Technical Documentation
Shiplify’s API is a REST (https://en.wikipedia.org/wiki/Representational_state_transfer) API, receiving
and returns data in JSON (https://en.wikipedia.org/wiki/JSON) format. It requires authentication and
requests are subject to rate limits.
https://tariffs.shiplify.com/docs/api/v2 6/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
Overview
2. tariff_items contents
The v1 API returns tariff_items as an array of objects with the potential to have multiple
exemptions and con dence codes. The v2 API returns tariff_items as an object with the potential
to have multiple codes but only has 1 exemption and con dence code.
https://tariffs.shiplify.com/docs/api/v2 7/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
V1
{
"id": "4c0ec684-47a8-4d61-8749-f71985a79504",
"pro_number": "1234567890",
"pickup_date": "2000-01-01",
"dock_access": {
"shipper": {
"value": "yes",
"confidence": "A1"
},
"consignee": {
"value": "no",
"confidence": "A1"
}
},
"forklift": {
"shipper": {},
"consignee": {
"value": "no",
"confidence": "A1"
}
},
"tariff_items": {
"shipper": [],
"consignee": [
{
"code": "RESD",
"confidence": "A1",
"exempt": false
}
]
},
"status": "complete"
}
https://tariffs.shiplify.com/docs/api/v2 8/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
V2
{
"id": "4c0ec684-47a8-4d61-8749-f71985a79504",
"pro_number": "1234567890",
"pickup_date": "2000-01-01",
"shipper": {
"dock_access": {
"value": "yes",
"confidence": "A1"
},
"tariff_items": {
"codes": [],
"confidence": "A1",
"exempt": false
}
},
"consignee": {
"dock_access": {
"value": "no",
"confidence": "A1"
},
"forklift": {
"value": "no",
"confidence": "A1"
},
"tariff_items": {
"codes": ["RESD"],
"confidence": "A1",
"exempt": false
}
},
"status": "complete"
}
Authentication
All API requests require authentication via API key, sent as an X-Api-Token HTTP header. To
manage your API keys, please visit your dashboard.
Each key has a type of either Test or Live . Test keys allow you to test your API integration
without creating any shipment records. Responses for Test keys are samples only. When your
integration is fully tested, switch to a Live key to begin creating shipments and receiving live
responses.
Keys that have revoked status will receive a response of access denied.
https://tariffs.shiplify.com/docs/api/v2 9/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
Keep all your API keys secure and do not share them. Shiplify recommends you generate a separate
API key for each system that will be making API requests. That way if you need to revoke a key, it will
only affect access for a single system.
When an invalid API key is supplied, the following error message will be returned with a 401
Unauthorized HTTP status code:
{
"errors": {
"api_key": [
"Invalid API key"
]
}
}
Rate limits
API requests are rate-limited across the total number of requests you send, including both test and
live requests. When your API access is set up, Shiplify will con gure per-second and per-day rate
limits. Both limits are calculated on a rolling basis; for example per-day usage is calculated as the
number of requests in the last 24 hours (not the number of requests since midnight).
You can view your current rate limits on your API keys page (/api-keys). Contact your account
manager or email [email protected] (mailto:[email protected]) if you would like either rate
limit increased.
When you have exceeded either your per-day or per-second rate limit, the following error message
will be returned with a 429 Too Many Requests HTTP status code:
{
"errors": {
"rate_limit": [
"limit of 10 requests per second exceeded"
]
}
}
Host: tariffs.shiplify.com
Tells Shiplify’s web server that the request is meant for the tariffs.shiplify.com service.
Content-Type: application/json
Tells Shiplify’s application server that you are sending your request in JSON format, as required by the
billing API.
Accept: application/json
https://tariffs.shiplify.com/docs/api/v2 10/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
Tells Shiplify’s web server that you expect to receive your response in JSON format.
X-Api-Token: [your-api-token]
Provides your Test or Live API token, for authentication purposes.
Tariff items
Each API endpoint includes a list (array) of tariff_items for the shipper and consignee . The
tariff item code represents the tariff items that Shiplify is recommending. Each recommended tariff
item is returned with a two-character confidence_code .
A response with a 200 status means the request was valid and accepted by Shiplify.
Status codes in the 4XX range indicate a invalid request (an error by the requester). Codes in the
5XX range indicate that something failed on the server side (an error by Shiplify). 5XX requests can
(and should!) be re-tried at a later time.
200 OK
Everything worked.
401 Unauthorized
The request could not be authorized. The API key was either provided incorrectly or did not match
any active API keys.
403 Forbidden
You do not have permission for the request you have attempted.
https://tariffs.shiplify.com/docs/api/v2 11/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
This functionality is available for the Create Shipment and Search Shipments API endpoints.
Recommendations
https://tariffs.shiplify.com/docs/api/v2 12/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
Shiplify recommends setting up requests to the API using a job queue. This simpli es the process of
retrying requests in the event of an outage, as well as complying with rate limits.
Sample request
POST /api/v2/shipments
Host: tariffs.shiplify.com
Content-Type: application/json
Accept: application/json
X-Api-Token: [your-api-token]
{
"shipment": {
"pro_number": "1234567890",
"pickup_date": "2000-01-01",
"shipper_name": "SHIPLIFY",
"shipper_street_address": "1425 ELLSWORTH INDUSTRIAL BLVD",
"shipper_city": "ATLANTA",
"shipper_state": "GA",
"shipper_postal_code": "30318",
"shipper_customer_number": "8675309",
"shipper_requested_liftgate": 0,
"consignee_name": "VANDALEY INDUSTRIES",
"consignee_street_address": "129 W 81ST ST",
"consignee_city": "NEW YORK",
"consignee_state": "NY",
"consignee_postal_code": "10024",
"consignee_customer_number": "1675480",
"consignee_requested_liftgate": 1,
"include_dock_access": 1,
"include_tariff_items": 1,
"include_location_types": 0,
"weight": 500,
"transit_days": 1,
"pieces": 2
}
}
For your convenience, the above request can be made using cURL as follows. Add your Test API key
to this cURL request to test.
https://tariffs.shiplify.com/docs/api/v2 13/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
curl "https://tariffs.shiplify.com/api/v2/shipments" \
-X POST \
-H "Host: tariffs.shiplify.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Api-Token: [your-api-token]" \
-d '{"shipment":{"pro_number":"1234567890","pickup_date":"2000-01-01","sh
ipper_name":"SHIPLIFY","shipper_street_address":"1425 ELLSWORTH INDUSTRIAL
BLVD","shipper_city":"ATLANTA","shipper_state":"GA","shipper_postal_cod
e":"30318","shipper_customer_number":"8675309","shipper_requested_liftgat
e":0,"consignee_name":"VANDALEY INDUSTRIES","consignee_street_address":"129
W 81ST ST","consignee_city":"NEW YORK","consignee_state":"NY","consignee_po
stal_code":"10024","consignee_customer_number":"1675480","consignee_request
ed_liftgate": 1,"include_dock_access":1, "include_tariff_items":1,"weight":
500,"pieces":2,"transit_days":1}}'
Parameters
shipment.pro_number (required)
The pro number of the shipment
shipment.pickup_date (required)
The pickup date (YYYY-MM-DD)
shipment.shipper_name (required)
The shipper's name
shipment.shipper_street_address (required)
The shipper's street address (line 1)
shipment.shipper_street_address2
The shipper's street address (line 2)
shipment.shipper_city (required)
The shipper's city
shipment.shipper_state (required)
The shipper's state abbreviation
shipment.shipper_postal_code (required)
The shipper's postal code
shipment.shipper_customer_number
The shipper's customer number
shipment.shipper_terminal_code
The origin terminal code (pick-up terminal)
shipment.shipper_requested_liftgate
https://tariffs.shiplify.com/docs/api/v2 14/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
shipment.consignee_name (required)
The consignee's name
shipment.consignee_street_address (required)
The consignee's street address (line 1)
shipment.consignee_street_address2
The consignee's street address (line 2)
shipment.consignee_city (required)
The consignee's city
shipment.consignee_state (required)
The consignee's state abbreviation
shipment.consignee_postal_code (required)
The consignee's postal code
shipment.consignee_customer_number
The consignee's customer number
shipment.consignee_terminal_code
The destination terminal code (delivery terminal)
shipment.consignee_requested_liftgate
The shipment destination requires a liftgate as requested by customer
shipment.weight
The weight of the freight (in pounds)
shipment.pieces
The number of pieces included in the freight
shipment.transit_days
The number of transit days
Response body
https://tariffs.shiplify.com/docs/api/v2 15/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
Responses are returned in JSON format, with the following structure. (Dock access and forklift
information will only be returned for authorized users):
{
"id": "4c0ec684-47a8-4d61-8749-f71985a79504",
"pro_number": "1234567890",
"pickup_date": "2000-01-01",
"shipper": {
"dock_access": {
"value": "yes",
"confidence": "A1"
},
"tariff_items": {
"codes": [],
"confidence": "A1",
"exempt": false
}
},
"consignee": {
"dock_access": {
"value": "no",
"confidence": "A1"
},
"forklift": {
"value": "no",
"confidence": "A1"
},
"tariff_items": {
"codes": ["RESD"],
"confidence": "A1",
"exempt": false
}
},
"status": "complete"
}
Error handling
https://tariffs.shiplify.com/docs/api/v2 16/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
When invalid shipment data is supplied (for example, missing a required eld), one or more of the
following error messages will be included, with a 422 Unprocessable Entity HTTP status code:
{
"errors": {
"pro_number": [
"can't be blank",
"must be at least one character"
],
"shipper_name": [
"can't be blank"
],
"shipper_street_address": [
"can't be blank"
],
"shipper_city": [
"can't be blank"
],
"shipper_state": [
"can't be blank"
],
"shipper_postal_code": [
"can't be blank"
],
"consignee_name": [
"can't be blank"
],
"consignee_street_address": [
"can't be blank"
],
"consignee_city": [
"can't be blank"
],
"consignee_state": [
"can't be blank"
],
"consignee_postal_code": [
"can't be blank"
],
"pickup_date": [
"must be in YYYY-MM-DD format"
],
"webhook_url": [
"must start with https:// or http://"
]
}
}
https://tariffs.shiplify.com/docs/api/v2 17/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
You can activate webhook noti cations for a shipment by specifying a webhook_url as part of your
API request.
Webhook noti cations are sent as soon as Shiplify completes manual review of the shipment--as soon
as the status eld changes from processing to complete . If the status of the initial API response
was complete , a webhook noti cation will not be sent.
When using a Test API key and supplying a webhook_url , we will attempt to send a webhook
within 5 minutes of your initial request. The body of the test webhook request will be the same as the
response to your initial API request. You can use request stubbing to customize this response, for
testing purposes. If you are having trouble receiving webhook responses, check your network and
rewall rules, then feel free to contact [email protected] (mailto:[email protected]).
The format of the body of the webhook request matches the format of the original API response (with
updated values within tariff_items.shipper and tariff_items.consignee ).
https://tariffs.shiplify.com/docs/api/v2 18/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
POST https://www.example.com/path/to/webhook
Content-Type: application/json
Accept: application/json
X-Shiplify-Signature: sha1=[sample-signature]
{
"id": "4c0ec684-47a8-4d61-8749-f71985a79504",
"pro_number": "1234567890",
"pickup_date": "2000-01-01",
"shipper": {
"dock_access": {
"value": "yes",
"confidence": "A1"
},
"tariff_items": {
"codes": [],
"confidence": "A1",
"exempt": false
}
},
"consignee": {
"dock_access": {
"value": "no",
"confidence": "A1"
},
"forklift": {
"value": "no",
"confidence": "A1"
},
"tariff_items": {
"codes": ["RESD"],
"confidence": "A1",
"exempt": false
}
},
"status": "complete"
}
Checking signatures
In order to authenticate that a webhook noti cation you receive has in fact come from Shiplify
directly, Shiplify signs each webhook with a X-Shiplify-Signature header. This header is a hash of
the request body and your API Secret, found here (/api-keys). Note that your API Secret is the same
regardless of which API key you use to send requests.
To verify the signature of the request, you can compute the signature yourself as follows:
https://tariffs.shiplify.com/docs/api/v2 19/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
Your language and implementation details may differ from this code. There are a couple important
things to note, though:
The hash you receive will begin with sha1= , and will require your API Secret and the request
body (as a string).
We recommend against using simple == comparison, and instead recommend using something
like Rack::Utils.secure_compare to avoid vulnerability to certain timing attacks.
This endpoint allows searching for shipments using a pro_number and pickup_date , in order to
retrieve up-to-date status information about matching shipments.
Below are instructions and examples of how to connect to the Shipments API including the endpoint,
required / optional parameters and the response format.
Sample request
GET /api/v2/shipments?shipment[pro_number]=1234567890&shipment[pickup_date]
=2000-01-01
Host: tariffs.shiplify.com
Accept: application/json
Content-Type: application/json
X-Api-Token: [sample-api-token]
For your convenience, the above request can be made using cURL as follows. Add your Test API key
to this cURL request to test.
https://tariffs.shiplify.com/docs/api/v2 20/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
curl -g "tariffs.shiplify.com/api/v2/shipments?shipment[pro_number]=1234567
890&shipment[pickup_date]=2000-01-01" \
-X GET \
-H "Host: tariffs.shiplify.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Api-Token: [sample-api-token]"
Parameters
shipment.pro_number (required)
The pro number to search for
shipment.pickup_date (required)
The pickup date to search for in YYYY-MM-DD format
Response body
This endpoint returns an array of search results, in JSON format. When no shipments match the given
parameters, an empty JSON array is returned, with an HTTP status code of 200 OK .
https://tariffs.shiplify.com/docs/api/v2 21/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
[
{
"id": "4c0ec684-47a8-4d61-8749-f71985a79504",
"pro_number": "1234567890",
"pickup_date": "2000-01-01",
"shipper": {
"dock_access": {
"value": "yes",
"confidence": "A1"
},
"tariff_items": {
"codes": [],
"confidence": "A1",
"exempt": false
}
},
"consignee": {
"dock_access": {
"value": "no",
"confidence": "A1"
},
"forklift": {
"value": "no",
"confidence": "A1"
},
"tariff_items": {
"codes": ["RESD"],
"confidence": "A1",
"exempt": false
}
},
"status": "complete"
}
]
Error handling
When invalid request data is supplied (for example, missing a required eld), one or more of the
following error messages will be included, with a 422 Unprocessable Entity HTTP status code:
https://tariffs.shiplify.com/docs/api/v2 22/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
{
"errors": {
"pro_number": [
"can't be blank",
"must be at least one character"
],
"pickup_date": [
"must be in YYYY-MM-DD format"
]
}
}
This endpoint allows fetching info for a single shipment using the shipment's id , returned from the
original Create Shipment request where the shipment was created.
Sample request
The following is a sample request, assuming the id returned from the original Create Shipment
request was 4c0ec684-47a8-4d61-8749-f71985a79504 .
GET /api/v2/shipments/4c0ec684-47a8-4d61-8749-f71985a79504
Host: tariffs.shiplify.com
Accept: application/json
Content-Type: application/json
X-Api-Token: [sample-api-token]
For your convenience, the above request can be made using cURL as follows. Add your Test API key
to this cURL request to test.
curl -g "https://tariffs.shiplify.com/api/v2/shipments/4c0ec684-47a8-4d61-8
749-f71985a79504" \
-X GET \
-H "Host: tariffs.shiplify.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Api-Token: [sample-api-token]"
Parameters
https://tariffs.shiplify.com/docs/api/v2 23/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
The only parameter for this request is the id of the shipment, as returned from the Create Shipment
request. This parameter is included directly into the URL of the request (after
/api/v2/shipments/ ).
Response body
This endpoint returns a single result, in JSON format. The structure of the response is as follows:
{
"id": "4c0ec684-47a8-4d61-8749-f71985a79504",
"pro_number": "1234567890",
"pickup_date": "2000-01-01",
"shipper": {
"dock_access": {
"value": "yes",
"confidence": "A3"
},
"tariff_items": {
"codes": [],
"confidence": "A1",
"exempt": false
}
},
"consignee": {
"dock_access": {
"value": "no",
"confidence": "A2"
},
"forklift": {
"value": "no",
"confidence": "A2"
},
"tariff_items": {
"codes": ["RESD"],
"confidence": "A1",
"exempt": false
}
},
"status": "processing"
}
When no shipment matches the provided id, the response will have an HTTP status of 404 Not
Found , and the body will contain the following error message:
https://tariffs.shiplify.com/docs/api/v2 24/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
{
"errors": [
{
"shipment": "not found"
}
]
}
Rate limits for the quote API are separate from the shipment APIs. You can view your current rate
limits on your API keys page (/api-keys). Contact your account manager or email [email protected]
(mailto:[email protected]) if you would like either rate limit increased.
Sample request
POST /api/v2/quotes
Host: tariffs.shiplify.com
Content-Type: application/json
Accept: application/json
X-Api-Token: [your-api-token]
{
"quote": {
"reference_id": "1234567890",
"pickup_date": "2000-01-01",
"shipper_name": "SHIPLIFY",
"shipper_street_address": "1425 ELLSWORTH INDUSTRIAL BLVD",
"shipper_city": "ATLANTA",
"shipper_state": "GA",
"shipper_postal_code": "30318",
"shipper_customer_number": "8675309",
"consignee_name": "VANDALEY INDUSTRIES",
"consignee_street_address": "129 W 81ST ST",
"consignee_city": "NEW YORK",
"consignee_state": "NY",
"consignee_postal_code": "10024",
"consignee_customer_number": "1675480",
"include_dock_access": 1
}
}
For your convenience, the above request can be made using cURL as follows. Add your Test API key
to this cURL request to test.
https://tariffs.shiplify.com/docs/api/v2 25/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
curl "https://tariffs.shiplify.com/api/v2/quotes" \
-X POST \
-H "Host: tariffs.shiplify.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Api-Token: [your-api-token]" \
-d '{"quote":{"shipper_name":"SHIPLIFY","shipper_street_address":"1425 EL
LSWORTH INDUSTRIAL BLVD","shipper_city":"ATLANTA","shipper_state":"GA","shi
pper_postal_code":"30318","consignee_name":"VANDALEY INDUSTRIES","consignee
_street_address":"129 W 81ST ST","consignee_city":"NEW YORK","consignee_sta
te":"NY","consignee_postal_code":"10024"}}'
Parameters
quote.reference_id
A reference identi er for the quote, for your internal tracking purposes -- can include numbers,
letters, spaces, underscores, and hyphens
quote.pickup_date
The pickup date (YYYY-MM-DD)
quote.shipper_name (required)
The shipper's name
quote.shipper_street_address (required)
The shipper's street address (line 1)
quote.shipper_street_address2
The shipper's street address (line 2)
quote.shipper_city (required)
The shipper's city
quote.shipper_state (required)
The shipper's state abbreviation
quote.shipper_postal_code (required)
The shipper's postal code
quote.shipper_customer_number
The shipper's customer number
quote.shipper_terminal_code
The origin terminal code (pick-up terminal)
quote.consignee_name (required)
The consignee's name
quote.consignee_street_address (required)
https://tariffs.shiplify.com/docs/api/v2 26/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
quote.consignee_street_address2
The consignee's street address (line 2)
quote.consignee_city (required)
The consignee's city
quote.consignee_state (required)
The consignee's state abbreviation
quote.consignee_postal_code (required)
The consignee's postal code
quote.consignee_customer_number
The consignee's customer number
quote.consignee_terminal_code
The destination terminal code (delivery terminal)
quote.weight
The weight of the freight (in pounds)
quote.pieces
The number of pieces included in the freight
quote.transit_days
The number of transit days
Response body
Responses are returned in JSON format, with the following structure:
https://tariffs.shiplify.com/docs/api/v2 27/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
{
"id": "4c0ec684-47a8-4d61-8749-f71985a79504",
"reference_id": "123456",
"pickup_date": "2001-01-01",
"shipper": {
"dock_access": {
"value": "yes",
"confidence": "A1"
},
"tariff_items": {
"codes": [],
"confidence": "A1",
"exempt": false
}
},
"consignee": {
"dock_access": {
"value": "no",
"confidence": "A1"
},
"forklift": {
"value": "no",
"confidence": "A1"
},
"tariff_items": {
"codes": ["RESD"],
"confidence": "A1",
"exempt": false
}
}
}
Error handling
When invalid quote data is supplied (for example, missing a required eld), one or more of the
following error messages will be included, with a 422 Unprocessable Entity HTTP status code:
https://tariffs.shiplify.com/docs/api/v2 28/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
{
"errors": {
"shipper_name": [
"can't be blank"
],
"shipper_street_address": [
"can't be blank"
],
"shipper_city": [
"can't be blank"
],
"shipper_state": [
"can't be blank"
],
"shipper_postal_code": [
"can't be blank"
],
"consignee_name": [
"can't be blank"
],
"consignee_street_address": [
"can't be blank"
],
"consignee_city": [
"can't be blank"
],
"consignee_state": [
"can't be blank"
],
"consignee_postal_code": [
"can't be blank"
],
"pickup_date": [
"must be in YYYY-MM-DD format"
],
}
}
This API can optionally return location types, dock access and forklift information. You can turn this
feature on by passing a true ag in the include_location_types and include_dock_access
parameters. The include_dock_access parameter will also turn on the forklift information. The
forklift information will only return when the dock_access value is likely no .
https://tariffs.shiplify.com/docs/api/v2 29/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
Rate limits for the location API are separate from the shipment and quote APIs. You can view your
current rate limits on your API keys page (/api-keys). Contact your account manager or email
[email protected] (mailto:[email protected]) if you would like either rate limit increased.
Sample request
POST /api/v2/locations
Host: tariffs.shiplify.com
Content-Type: application/json
Accept: application/json
X-Api-Token: [your-api-token]
{
"location": {
"name": "VANDALEY INDUSTRIES",
"street_address": "129 W 81ST ST",
"city": "NEW YORK",
"state": "NY",
"postal_code": "10024",
"include_dock_access": 1,
"include_tariff_items": 1,
"include_location_types": 1
}
}
For your convenience, the above request can be made using cURL as follows. Add your Test API key
to this cURL request to test.
curl "https://tariffs.shiplify.com/api/v2/locations" \
-X POST \
-H "Host: tariffs.shiplify.com" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Api-Token: [your-api-token]" \
-d '{"location":{"name":"VANDALEY INDUSTRIES","street_address":"129 W 81S
T ST","city":"NEW YORK","state":"NY","postal_code":"10024","include_dock_ac
cess:"1","include_location_types:"1"}}'
Parameters
location.name (required)
The location's name
location.street_address (required)
The location's street address (line 1)
location.street_address2
The location's street address (line 2)
https://tariffs.shiplify.com/docs/api/v2 30/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
location.city (required)
The location's city
location.state (required)
The location's state abbreviation
location.postal_code (required)
The location's postal code
Response body
Responses are returned in JSON format, with the following structure:
{
"tariff_items": {
"confidence": 'A1',
"shipper": {
"codes": [ "LIMP" ]
},
"consignee":
"codes": [ "LIMD" ]
},
"exempt": false
},
"location_types": {
"values": [ "school" ],
"confidence": "A1"
},
"dock_access": {
"value": "no",
"confidence": "A1"
},
"forklift": {
"value": "no",
"confidence": "A1"
}
}
https://tariffs.shiplify.com/docs/api/v2 31/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
Error handling
When invalid quote data is supplied (for example, missing a required eld), one or more of the
following error messages will be included, with a 422 Unprocessable Entity HTTP status code:
{
"errors": {
"name": [
"can't be blank"
],
"street_address": [
"can't be blank"
],
"city": [
"can't be blank"
],
"state": [
"can't be blank"
],
"postal_code": [
"can't be blank"
],
}
}
https://tariffs.shiplify.com/docs/api/v2 32/33
3/21/23, 1:12 PM Shiplify - Shiplify API v2 Documentation
What is the maximum level we could increase our rate limit to?
Please contact [email protected] (mailto:[email protected]) to discuss increasing rate limits.
Will shipments sent to the API affect our current FTP batch process?
No. Everything with your current batch process will remain the same. Shipments sent to the API will
not appear in the batch result les.
Can I send the same shipment with duplicate pro numbers more than
once?
Yes.
Support
If you are experiencing issues with the API or other Shiplify services, rst check our support page
(https://status.shiplify.com) to see whether we are experiencing any known outages or planned
maintenance.
If you are experiencing an urgent outage and it is not reported on our support page
(https://status.shiplify.com), you may call 404-736-6551 (tel:+14047366551). Please only use this
phone number for urgent issues, for example to report a system outage that is holding up your billing
process.
https://tariffs.shiplify.com/docs/api/v2 33/33