Get started with Elements
ShipEngine Elements can be integrated into your application in two ways: as an SDK or as a suite of React components.
Regardless of the integration method you choose, you'll need to generate a ShipEngine Platform token and establish a new ShipEngine Partner account.
To learn more about ShipEngine Platform tokens, refer to the Platform token documentation. For more information about ShipEngine Partner accounts, visit the Partners API documentation.
The code presented in this video is from a previous version of Elements. Use the code samples provided in the Elements SDK or React Components sections for the current version.
Step 1: Creating a ShipEngine Account
To create a ShipEngine Elements JWT, a ShipEngine Account ID (also known as a ShipEngine Seller ID or tenant in some cases) is required. To make a new ShipEngine Seller, run the following curl
request. To learn more about creating ShipEngine accounts, check out the ShipEngine account documentation.
You will use the account_id
field on the ShipEngine account creation response that the above curl request to sign a ShipEngine Elements JWT.
Step 2: Signing your JWT
The following pieces of information are required to sign ShipEngine Platform JWT.
- ShipEngine Partner ID: You should have received this after you had completed partner onboarding with your ShipEngine technical contact. This is a unique identifier for your ShipEngine Partner account.
- Tenant ID: The ID of the ShipEngine account that was created. This is also known as the ShipEngine Seller ID you may have been given during partner onboarding.
- Public/Private RSA keys: You should have registered the public key with ShipEngine during partner onboarding. We recommend you store the private RSA key you created in a secure container format, like .pem.
- Platform Token Key ID: You should have received this after you had completed partner onboarding with your ShipEngine technical contact. This will be the name of the platform token key you registered with ShipEngine during partner onboarding.
- Scope: You should have received this after you had completed partner onboarding with your ShipEngine technical contact. The scope enforces the usage of a specific subset of ShipEngine API endpoints.
- Platform Token Issuer: You should have received this after you had completed partner onboarding with your ShipEngine technical contact.
The following is an example of one possible way of generating a ShipEngine Platform JWT. Keep in mind, the same sample JWT application we mentioned earlier can be used to sign your JWT's.
Step 3: Using Elements
Determine your preferred integration method:
React Components
For React developers who want more flexibility and customizability.
If you're just getting started with ShipEngine Elements, it's helpful to know that by default, a ShipEngine Seller does not have warehouses (ship from locations) or carriers (USPS, UPS, DHL Express) attached to the seller account. These are required to purchase a label.
We recommend starting your users (ShipEngine Sellers) with the onboarding workflow via the Onboarding Element to set up their warehouse and carrier accounts.
Updates to warehouse and carrier accounts created during onboarding can be made through the Account Settings Element.
Connecting Carrier Accounts
Elements integrates with the leading global shipping carriers. Check out the complete carriers documentation to learn more about ShipEngine carriers.
To enable ShipEngine carrier accounts, you must explicitly list them in the globalFeatures.enabledShipEngineCarriers
array within the features prop when initializing Elements.
Supported ShipEngine Carriers
- USPS:
stamps_com
- DHL Express:
dhl_express_worldwide
- Yodel:
yodel_walleted
- Evri:
hermes
- DPD:
dpdwallet
- GlobalPost:
globalpost
- Aramex Australia:
aramex_au_walleted
- Sendle:
sendle_walleted
- CouriersPlease :
couriersplease_walleted
Supported External Carriers
To enable external carrier connections, you must explicitly list them in the globalFeatures.enabledExternalCarriers
array within the features prop when initializing Elements. To learn more about connecting your external carriers checkout the Connect External Carrier Element.
For an in depth overview of the global features
object, please review the Configuring Elements Features step in either the ElementsProvider or the Elements SDK guides.
Migration Guide to Elements v2
1. ShipEngine Alchemy is no longer a required package
To better address our partner's bundle size requirements in their applications, we have removed the need for the @shipengine/alchemy
package. The core functionality of @shipengine/alchemy
has been baked into the @shipengine/elements
package. Similarly rather than wrapping your app in the <AlchemyProvider/>
in v2, we have exposed the new <ElementsProvider/>
.
To learn more about getting started with the Elements React components, check out the Elements React Components documentation.
2. Elements name changes
Some of the Elements names have be changed to better align the Elements with proper naming conventions.
v1 Name | v2 Name |
---|---|
ManageWalletWorkflow | CarrierServices |
ShipEngineCarriers | ManageCarriers |
ConnectCarrier | ConnectExternalCarrier |
ExternalCarriers | ManageExternalCarriers |
WalletHistory | TransactionHistory |
PurchaseLabelWorkflow | LabelWorkflow |
ViewShipment | ShipmentSummary |
3. Features added to the Elements Provider and Elements SDK constructor
To improve the developer experience while implementing Elements, we have added a features
prop to the Elements Provider and a features
parameter to the Elements SDK constructor. In essence, this new features object rolls all the features throughout the Elements project into one object. For organizational purposes, we nested each Element's features under the Element's respective key within the object.
Features used throughout the Elements project, especially those pertaining to carriers like enabledShipEngineCarriers
were hoisted up to a global features object shared throughout the project.
Any Element, in v1, whose only features are related to carriers i.e. enabledShipEngineCarriers
or enabledExternalCarriers
, have been moved up to the global features context. Below is the list of Elements which were affected by this change.
Onboarding
: No longer has afeatures
prop.ManageExternalCarriers
: No longer has afeatures
prop.ManageCarriers
: No longer has any props.CarrierServices
: No longer has any props.ConnectExternalCarrier
: No longer has afeatures
prop.AccountSettings
: No longer requires carriers in itsfeatures
prop.VoidLabel
: No longer has afeatures
prop.
We recommend configuring the features you want to use in the Elements Provider or the SDK constructor for the Element. However, if you need to override features for a specific Element, you can use the feature prop for that Element, provided the Element supports it.
Learn more about each elements respective features.
4. Elements SDK improvements
In a effort to more closely align the Elements SDK with the functionality provided by the Element React components, we have made significant improvement to the Elements SDK.
Mount Elements anywhere in the DOM
Using the new create
method on the Elements SDK class, you can now pass an HTML ID attribute or HTML element to the mount
method to mount any Elements anywhere in your application HTML document. See here to learn more about mounting Elements.
Rendering in a Side Panel
Methods like elements.onboardUser
or elements.purchaseLabel
, accessible via the Elements SDK class, have been deprecated in Elements v2 and will be removed in future versions. We have replaced these methods with the renderSidePanel
method, which is available in the returned object via the create
method. Please follow the recommended workflow in the Elements Render Methods section to render elements in a Side Panel.
If you wish to temporarily continue using these methods, the parameter signatures have changed from v1, and will need to be updated. Rather than passing three parameters for Element properties, side panel properties, and header properties respectively, the methods take a single object argument with these values as properties:
Furthermore, some of the method names have been updated to correspond with the updated Element names. All others remain the same:
v1 Name | v2 Name |
---|---|
purchaseLabelWorkflow | labelWorkflow |
viewShipment | shipmentSummary |
Destroy method
In v1 of the Elements SDK, the unmount
method, available via the SDK class, removed the React root and the HTML element to which the SDK attached the side panel. This method has been renamed destroy
.