Table of Contents

  • Retrieving Rates

  • Creating a Shipment

  • Enabling B2B for Shipment

  • B2B vs B2C RFE Statements

  • Pick Up Process

  • Webhooks for Tracking and Updates

  • Tracking API

  • Conclusion

Additional Guides

B2B International Shipping Guide

Welcome to the comprehensive guide on streamlining your B2B international shipments. Navigating the intricate landscape of global commerce can be a complicated process, and FlavorCloud empowers your business with the tools and insights necessary to effortlessly manage international shipments. This guide will show you how to leverage our API to seamlessly implement and empower your international B2B shipping operations, making development easier and enhancing your international B2B shipping processes. By facilitating smoother development, this guide enables the achievement of optimized cost management, streamlined customs compliance, improved delivery experiences, and heightened operational efficiency. 

For a more granular look at requests in this guide, see our API reference.

Before starting, you will need to sign up for a FlavorCloud account and acquire your API credentials. In the FlavorCloud Admin under API, click New credential set to generate an Application ID and Rest API Key.

Retrieving Rates

Before shipping internationally, it's critical to provide your business customers with accurate shipping methods, terms of trade. FlavorCloud offers two key Incoterms: Delivered Duty Paid (DDP) and Delivered Duty Unpaid (DDU)

Additionally, business customers can choose from shipping methods such as Standard and Express. When you have the full address, parcel, and package information for a shipment, you can use the Rates endpoint to calculate accurate total costs. 

It is important to note the weight of the combined pieces should not exceed the weight of the entire package. If these differ, we will use the higher weight between the package and the combined weight of the pieces. To retrieve rates for B2B 

Shipments is similar to B2C shipments. Before seeing the full example of a rate request, let's start by paying attention to the two address components in the example below:

Example

Request

{json

"ShipFromAddress": { 

      "Name": "The Tap Inc.", 

      "AttentionName": "Jimmy Owens", 

      "AddressLine1": "2100 Olson Street", 

      "City": "San Francisco", 

      "State": "CA", 

      "Country": "US", 

      "Zip": "30320", 

      "Phone": "4049300178", 

      "Email": "jimmy.owens@tap.com" 

    }, 

    "ShipToAddress": { 

      "Name": "American Retail", 

      "AttentionName": "Lacy Reed", 

      "AddressLine1": "305 Water St", 

      "AddressLine2": "", 

      "AddressLine3": "", 

      "City": "Vancouver", 

      "State": "BC", 

      "Country": "CA", 

      "Zip": "V6B 1B9", 

      "Phone": "1111111111", 

      "Email": "lacy.reed@american.com" 

    }

Regarding the `ShipFromAddress`, the `Name` field we reference above is where the business name should be placed. In our example that is "The Tap Inc.". 

While FlavorCloud acts as Importer of Record, the `AttentionName` is still relevant for other logistical aspects of the shipment process. Providing the correct `Name` and `AttentionName` ensures that the shipment is in full compliance with import  and export regulations in the destination country. Accurate sender details help customs authorities accurately identify the sender and the nature of the goods, facilitating smooth customs clearance processes. 

The `Name` and `AttentionName` of the `ShipToAddress` is of similar importance. The `Name` is the consignee business name, and the accurate `AttentionName` ensures that the package is delivered to the intended person or department within the consignee organization, avoiding any potential confusion or misdelivery. 

  In addition, clear and accurate labelling of the consignee's details helps customs authorities identify the correct consignee and ensure that the shipment meets all regulatory requirements. Incorrect or incomplete information can lead to delays in customs clearance and potential fines. 

  With each rate retrieval and fulfillment of your shipment, your `ReasonForExport` should state **Sold / Commercial Transaction**. This is a declaration to import and export authorities that the shipment is for commercial use. Customs duties and taxes are also often calculated differently for commercial shipments. 

  Our network offers insurance option on all shipments. We highly recommend insured option as a best practice for all high value B2B shipments. If interested, read more about FlavorCloud insurance

Key Takeaways

  • The provided `Name` of both sender and consignee should be the business names
  • The `AttentionName` of both sender and consignee should be specific. For example "Shipping and Receiving Department" or "Mr. Carlos Rodriguez"
  • Your `ReasonForExport` should be "Sold / Commercial Transaction"

 

Below you can see what the full request looks like for your rate retrieval:

Example

Request

bash 

curl -X POST \ 

  --url 'https://partnerapi.flavorcloud.com/Rates' \ 

  -H 'Accept: application/json' \ 

  -H 'Content-type: application/json' \ 

  --data-raw

{

"AppID": "{{APP ID}}",

"RestApiKey": "{{RestApiKey}}",

"Reference": "TestOutbound2",

"Label Format": "PDF",

"WeightUnit": "LB",

"Currency": "USD",

"DimensionUnit": "IN",

"Insurance": "Y",

"ServiceCode": "[Express]",

"TermsOfTrade": "["DDP", "DDU"]"

"IsReturn":"N",

"IncludeLandedCost":"true",

"ShipFromAddress": {

"Name": "The Tap Inc.",

"AttentionName": "Jimmy Owens",

"AddressLine1": "2 Folsom Street",

"City": "San Francisco",

"Country": "US",

"State": "US",

"Zip": "30320",

"Phone": "5555555555",

"Email": "jimmy.owens@tap.com"

},

"ShipToAddress":{

"Name": "Company Name",

"AttentionName": "Reciever Name",

"AddressLine1": "2412A Victoria Ave.",

"City": "Brandon",

"State": "MB",

"Country": "CA",

"Zip": "R7B 0M5",

"Phone": "5555555555",

"Email": "test@test.com"

},

"ReasonForExport": "Sold/Commercial Transaction"

"Piece": [

{

"Quantity": 1,

"Weight": 0.4,

"SalePrice": 29.00,

"HSCode": "920994",

"OriginCountryCode": "US",

"Description": "Blue Polyester T-Shirt "

}

],

"Package": {

"Reference": "124",

"Weight": 1.25,

"Length": 1,

"Width": 1,

"Height": 1

}

}

Response

json

{

"RateId": 13837265,

"Reference": "123456789",

"Currency": "USD",

"Express": {

"DDP": {

"HashKey": "19aj87d3-fbe3-487d-0389-2987djk7s1e3",

"ShippingCost": 29.47,

"ActualShippingCost": 29.47,

"Insurance": 0,

"DiscountedShippingCost": 29.47,

"Days": "3-4 business days",

"Carrier": "FlavorCloud",

"LandedCostDetail": {

"AIT": 0,

"Duty": 0,

"SalesTax": 0,

"LandedCost": 0,

"DutyHashKey": "a9837dj2-9288-09de-0d92-d5lsjaid9bd",

"ActualAIT": 0,

"ActualDuty": 0,

"ActualSalesTax": 0,

"ActualLandedCost": 0

}

},

"DDU": {

"HashKey": "aejs873k-kos7-f838-b8s2-92jdkl98s730",

"ShippingCost": 22.97,

"ActualShippingCost": 22.97,

"Insurance": 0,

"DiscountedShippingCost": 22.97,

"Days": "3-4 business days",

"Carrier": "FlavorCloud"

}

},

"Standard": {

"DDP": {

"HashKey": "a893h52k-9fe7-74ga-cc6h-4921kdi9l8y2",

"ShippingCost": 14.83,

"ActualShippingCost": 14.83,

"Insurance": 0,

"DiscountedShippingCost": 14.83,

"Days": "8-16 business days",

"Carrier": "FlavorCloud",

"LandedCostDetail": {

"AIT": 0,

"Duty": 0,

"SalesTax": 0,

"LandedCost": 0,

"DutyHashKey": "h23dj97f-cse8-1f23-6a8h-29ujsdc7v985",

"ActualAIT": 0,

"ActualDuty": 0,

"ActualSalesTax": 0,

"ActualLandedCost": 0

}

},

"DDU": {

"HashKey": "z90sde12-7ufr-dk32-7a8s-9ei7d8m4q215",

"ShippingCost": 14.83,

"ActualShippingCost": 14.83,

"Insurance": 0,

"DiscountedShippingCost": 14.83,

"Days": "8-16 business days",

"Carrier": "FlavorCloud"

}

},

"RootRequestId": "kfdjiq93-3j29-d93k-j9as-1sd9j8a8s7k2"

}

After receiving rates, you can tailor how the rates are displayed at checkout. You can also choose how to invoice your customers using the provided rates through our API. For instance, you can modify the shipping cost based on your business's pricing approach.

Each shipping rate comes with a unique `HashKey`, which is important to maintain the accuracy of the chosen rate as orders are fulfilled through the FlavorCloud API. For businesses new to logistics, we recommend starting with DDP rates. These rates cover taxes, duties, and fees upfront, preventing any surprise costs for customers and providing a smoother experience.

Creating a shipment

For B2B shipments the fulfillment process involves generating a shipment based on your chosen rate. This is where you'll use the associated `HashKey` to ensure the accuracy of the selected rate from FlavorCloud's network. 

Consistency is vital during shipment creation to make sure the shipment's components and packaging align precisely with the previously requested rate. 

Additionally, you should assign a unique reference for each shipment, preferably your order number. This unique reference is mandatory for your shipment. 

 Shipments created without a `HashKey` will be rated based on the provided `ServiceCode` and `TermsOfTrade`. 

Enabling B2B

All of your shipment request info will look very similar to the rate request with subtle differences we should apply. 

  

  •  `B2b` 
  •  `LocationName` 
  •  `FederalTaxId` 
  •  `StateTaxId` 

  

First, we need to set the `B2b` flag to true in our request stating this is a B2B shipment.  This flag drives specific verbiage on the commercial invoice indicating the products are to be used for commercial purposes.  “REASON FOR EXPORT: Sold / Commercial Transaction” 

 

Reason for Export Statement Overview: There's no actual regulatory requirement to list reason for export/shipment/import statement, but it does help customs understand why the goods are being sent to facilitate entry, what type of shipment it is (gift, replacement, sample, etc.), how duty/tax is to be assessed, and what type of entry under which it should be lodged.

B2B vs B2C RFE Statements

There isn't any specific statement for B2B shipments vs B2C shipments, rather the statement depends on what values are passed to us via API, for example: 

"If the 'ReasonForExport' field in the API is any of 'documents' or 'merchandise', then we should show "Sold / Commercial Transaction" for the "Reason For Export" field on the commercial invoice we generate." 

In the case that no values are passed to us in this API field, we will default to "Merchandise" or "Sold/Commercial Transaction" per your research. Presumably then, if the B2B flag is selected and there's no value passed to us in the RFE API field, it would then default to the fallback option. 

Next is the `LocationName` field. Businesses with multiple shipping locations should establish a naming convention for those locations and have them stored within 

your own systems. A great example of that would be   

- **SanFrancisco-CA-1** 

Here we've used the city, followed by the state, and the location number for that region where multiple distribution centers or warehouses may exist. 

For the `FederalTaxId` and `StateTaxId` field. The `FederalTaxId` field will act as the primary field for any country level tax identifier. If you're shipping to Great Britain and provide a UTR (Unique Tax Reference) it will be in this field. Many countries have specific regulations and requirements for importing goods,  especially for commercial purposes. When Flavorcloud acts as the importer of record, it assumes the responsibility for customs  declarations and compliance with those import regulations. Providing the federal tax ID or state tax ID respectively and as applicable of the receiving business helps  accurately identify the importer for customs purposes. 

Request

```bash

 

curl -X POST \

--url 'https://partnerapi.flavorcloud.com/Shipments' \

-H 'Accept: application/json' \

-H 'Content-type: application/json' \

--data-raw '{

"AppID": "<AppID HERE>",

"RestApiKey": "<RestApiKey HERE>",

"Reference": "123456789",

"ServiceCode": "STANDARD",

"ReasonForExport": "Sold / Commercial Transaction",

"WeightUnit": "LB",

"Currency": "USD",

"DimensionUnit": "IN",

"TermsOfTrade": "DDP",

"B2b": true

"ShipFromAddress": {

"Name": "The Tap Inc.",

"AttentionName": "Jimmy Owens",

"AddressLine1": "2 Folsom Street",

"City": "San Francisco",

"State": "CA",

"Country": "US",

"Zip": "30320",

"Phone": "4049300178",

"Email": "jimmy.owens@tap.com"

},

"ShipToAddress": {

"Name": "American Retail",

"AttentionName": "Lacy Reed",

"AddressLine1": "305 Water St",

"AddressLine2": "",

"AddressLine3": "",

"City": "Vancouver",

"State": "BC",

"Country": "CA",

"Zip": "V6B 1B9",

"Phone": "1111111111",

"Email": "lacy.reed@american.com",

"FederalTaxId": "123456789RP0001"

"StateTaxId": ""

}

"Shipments": [

{

"Piece": [

{

"Quantity": 1,

"Weight": 0.01,

"SalePrice": 18.99,

"HSCode": "610910",

"OriginCountryCode": "US",

"Description": "T-Shirt",

"SKU": "124"

}

],

"Package": {

"Weight": 2,

"Length": 3,

"Width": 3,

"Height": 3

},

}

],

"HashKey": "a893h52k-9fe7-74ga-cc6h-4921kdi9l8y2",

"DutyHashKey": "h23dj97f-cse8-1f23-6a8h-29ujsdc7v985"

}'

Response

json 

{ 

  "ShipmentID": "linepb5i5si", 

  "Reference": "123456789", 

  "TrackingNumber": "1683927652812", 

  "LabelUrl": ["https://cdn.flavorcloud.com/s-1683927652812-label.pdf"], 

  "Carrier": "APC LAX", 

  "TrackingUrl": "https://app.flavorcloud.com/brandedTracking?ref=123456789&tr_no=1683927652812&carrier=APC%20LAX&destination=Vancouver,%20CA", 

  "SubmittedElectronically": true, 

  "CustomsInvoiceURL": "https://cdn.flavorcloud.com/s-12345678946341683927652812-invoice.pdf", 

  "RootRequestId": "z0x9c8v7-6b5n-4m3s-2a1s-d9f8g7h6j5k" 

} 

The response contains relevant shipping information, with the most important being the `LabelUrl` for sending off your package. 

At FlavorCloud as your Importer of Record we electronically file your customs documents on your behalf, however some countries do not except this in which case, your `CustomsInvoiceURL must be attached to the shipment. You will know  that it was not electronically filed because your `LabelUrl` will provide you with a merged label which consists of 2 pages, the first being the label, and the second being a copy of the commercial invoice. 

Pick Up Process

FlavorCloud takes care of every aspect of the shipping process, including first mile, global mile, and last mile. If you don't already have scheduled pickup arrangements with the carrier, you can follow this guide for setting up pickup.

Webhooks for Tracking and Updates

In the realm of B2B shipments, tracking is pivotal for several reasons. It fosters trust by assuring partners of timely deliveries, enhances the efficiency of intricate supply chains by offering real-time visibility, and safeguards valuable goods against potential risks. 

At FlavorCloud we advise customers to leverage our webhook events for subscribing to tracking updates. This way communication of shipment updates can be communicated to your downstream systems and customers efficiently and in a streamlined manner. Our API offers different events which you can subscribe to and can find here. Below is an example of how you can subscribe to our  TRACKING_UPDATES event. Each request to subscribe requires you provide the `EventName` which you want to subscribe to, in our case TRACKING_UPDATES, and a `URL` where you can receive data relevant to the event you've subscribed too. 

Request

bash 

curl -X POST \ 

  --url 'https://partnerapi.flavorcloud.com/Webhooks/Subscribe' \ 

  -H 'Accept: application/json'\ 

  -H 'Content-type: application/json' \ 

  --data-raw '{ 

  "AppID": "<AppID Here>", 

  "RestApiKey": "<RestApiKey Here>", 

  "WebHooksList": [ 

    { 

      "EventName": "TRACKING_UPDATES", 

      "URL": "<URL Here>" 

    } 

  ] 

}' 

Response

Response

json 

{ 

  "event": "tracking-updates", 

  "tracking_number": 2846127944637, 

  "appId": "2v5j8w3c6r4b9d7m1k0n3p2x786o24", 

  "shipmentId": 18672984, 

  "trackingHistory": [ 

    { 

      "status": "In Progress", 

      "status_detail": "Parcel Data Received, Shipment In Route To US Export Warehouse", 

      "status_date": "2022-04-10 17:15:57", 

      "location": "East Rutherford, NJ", 

      "country": "United States" 

    }, 

    { 

      "status": "In Progress", 

      "status_detail": "Shipment created and label generated APC NJ", 

      "status_date": "2022-04-09 12:41:12", 

      "location": "", 

      "address": "" 

    } 

  ] 

} 

Tracking API

FlavorCloud also offers a straightforward way to track your packages using our API. Make a GET request to the Tracking API, providing your AppID, RestApiKey, and the TrackingNumber of the shipment you wish to locate. When you need them, you'll get all the details to stay in the loop and keep your customers informed throughout the delivery process. 

GET /Tracking/{AppID}/{RestApiKey}/{TrackingNumber} 

json 

{ 

  "Reference": "123456789", 

  "TrackingNumber": "1683927652812", 

  "EstimatedDelivery": "2023-06-14T18:58:05", 

  "TrackingHistory": [ 

    { 

      "Location": "Los Angeles, California", 

      "StatusDate": "2023-05-31T18:58:05", 

      "StatusDetail": "Shipment created and label generated APC LAX", 

      "Status": "In Progress" 

    } 

  ], 

  

  "RootRequestId": "aqwe74se-8a9s-1b3c-d4ef-5g6h7i8j9k0l" 

} 

Conclusion

B2B shipments are the backbone of global commerce, driving supply chains and growth. Precision in these shipments is vital for strong relationships, meeting deadlines, and cost control. 

  FlavorCloud's API revolutionizes B2B shipping. Real-time insights empower proactive decisions. Accurate labeling and tracking ensure timely delivery, enhancing customer satisfaction. Compliance with international regulations reduces customs delays and costs. Integrating FlavorCloud's API means precise, efficient, and cost-effective B2B shipments, amplifying global success.