Many companies use FedEx to ship goods to their customers and they will often connect to FedEx APIs to
fulfil those needs. One challenge developers and testers face early on and then throughout the product lifecycle
is testing that the application integrates well with the FedEx APIs.
Diagram 1: Application connects to FedEx APIs
We hear many developers and testers complain about the FedEx Sandbox API environment. Their challenges include that the FedEx Sandbox API environment can have issues without an estimated time to be fixed, return intermittent errors, issues with test data, intermittent downtime and others. There are also issues with performance testing. See “Appendix A - FedEx Sandbox Typical Integration Issues” below.
Diagram 2: Development and Testing with FedEx Sandbox APIs
To work around that problem, we see companies use one of the following options:
They continue testing with FedEx Sandbox APIs.
They test with production FedEx APIs.
This has its drawbacks, as you are actually executing real business transactions inside FedEx systems like ordering shipments etc. Although it's easy to get started with, it is typically not sustainable long term if you plan to test your moderate to high complexity applications, particularly if you have automated regression test suites.
They build FedEx API mocks or stubs in-house.
They rely on third-party vendor solutions such as Traffic Parrot FedEx Sandbox environment that provides FedEx API mocks but also more.
Diagram 3: Using Traffic Parrot FedEx Sandbox and ready-made APIs
| Pros | Cons | Risks |
Continue testing with FedEx Sandbox APIs. | Supported directly by FedEx. | Has a negative impact on development testing costs and schedules.
Minimal hypothetical situation testing capabilities.
Slows projects as complexity grows.
Can get costly as complexity grows. | Schedule slips due to intermittent FedEx Sandbox issues.
Risk of not following the testing pyramid. |
Test with production FedEx API | Supported directly by FedEx.
Better uptime and availability than the FedEx Sandbox environment. | Impacts production business transactions, which need to be rolled back.
Need to pay for production API usage.
Minimal hypothetical situation testing capabilities.
Slows projects as complexity grows.
Can get costly as complexity grows. | Risk of committing to real business transactions, impacting real customers or inventories.
Risk of not following the testing pyramid. |
Build FedEX API mocks or stubs in-house. | Hypothetical scenarios can increase your test coverage. | Need in-house development and maintenance efforts.
Need in-house infrastructure to host the mocks.
Re-inventing the wheel, off-the-shelf solutions are available. | Developing in-house puts schedules at risk, as your team has to develop and maintain mocks.
Developers and testers that work under pressure often do not have time to work on additional tools, they would rather use a ready-made solution. |
Rely on third party vendor solutions such as Traffic Parrot FedEx Sandbox environment | Quick to get started with, ready within 10-40 minutes.
Provide not just mocks but a full Sandbox environment, for more details see “Diagram 4: In-house development of mocks vs. using Traffic Parrot Sandbox environments” | Need a purchase from a third party vendor. | |
For a detailed comparison between mocks and simulators/sandbox environments, please review Testing Microservices: Examining the Tradeoffs of Twelve Techniques - Part 2.
Diagram 4: In-house development of mocks vs. using Traffic Parrot Sandbox environments
Next steps
Contact us to schedule a free 30-minute call so we can discuss the best option for your situation.
Appendix A - FedEx API Sandbox Environment Typical Integration Issues
Service Unavailable
HTTP/1.1 503 Service Unavailable
X-API-Mode: Sandbox
Content-Encoding: gzip
Content-Type: application/json;charset=UTF-8
Content-Length: 236
Server: Layer7-API-Gateway
Date: Mon, 18 Apr 2022 13:59:07 GMT
Connection: close
Vary: Accept-Encoding
Server-Timing: cdn-cache; desc=MISS
Server-Timing: edge; dur=105
Server-Timing: origin; dur=6067
{
"transactionId": "18b5df2b-2786-41f3-83e2-22f1307f2672",
"errors": [
{
"code": "SERVICE.UNAVAILABLE.ERROR",
"message": "The service is currently unavailable and we are working to resolve the issue. We apologize for any inconvenience. Please check back at a later time."
}
]
}
Unknown tracking number
HTTP/1.1 200 OK
X-API-Mode: Sandbox
Content-Encoding: gzip
Content-Type: application/json
Content-Length: 301
Server: Layer7-API-Gateway
Date: Tue, 19 Apr 2022 12:29:04 GMT
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: JSESSIONID=7A3EB75A8A39D3F4C5231A03786A1EC8; Path=/track/v1; Secure; HttpOnly; Domain=apis-sandbox.fedex.com
Set-Cookie: __VCAP_ID__=e063ffd3-0bf4-41a1-6598-4e4f; Path=/track/v1; HttpOnly; Secure; Domain=apis-sandbox.fedex.com
Server-Timing: cdn-cache; desc=MISS
Server-Timing: edge; dur=93
Server-Timing: origin; dur=197
{
"transactionId": "a6a9dbff-7d26-477d-bdbd-688645a9585f",
"customerTransactionId": "22467615-2115-4c0b-b169-fade80e11aec",
"output": {
"completeTrackResults": [
{
"trackingNumber": "920241085725456",
"trackResults": [
{
"trackingNumberInfo": {
"trackingNumber": "920241085725456",
"trackingNumberUniqueId": "",
"carrierCode": ""
},
"error": {
"code": "TRACKING.TRACKINGNUMBER.NOTFOUND",
"message": "Tracking number cannot be found. Please correct the tracking number and try again."
}
}
]
}
]
}
}
System unavailable
HTTP/1.1 200 OK
X-API-Mode: Sandbox
Content-Encoding: gzip
Content-Type: application/json
Content-Length: 262
Server: Layer7-API-Gateway
Date: Tue, 19 Apr 2022 12:31:05 GMT
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: JSESSIONID=1CA447C0AC9255093CB82E169C292684; Path=/track/v1; Secure; HttpOnly; Domain=apis-sandbox.fedex.com
Set-Cookie: __VCAP_ID__=f54d4735-4d59-46e2-7967-6877; Path=/track/v1; HttpOnly; Secure; Domain=apis-sandbox.fedex.com
Server-Timing: cdn-cache; desc=MISS
Server-Timing: edge; dur=92
Server-Timing: origin; dur=5235
{
"transactionId": "1378803b-d312-4014-af90-a7ad734dd4a8",
"customerTransactionId": "c5dd0962-7c96-436d-8a6b-35dea6c32f08",
"output": {
"completeTrackResults": [
{
"trackingNumber": "568838414941",
"trackResults": [
{
"trackingNumberInfo": {
"trackingNumber": "568838414941",
"trackingNumberUniqueId": "",
"carrierCode": ""
},
"error": {
"code": "SYSTEM.UNAVAILABLE.EXCEPTION",
"message": "default.error"
}
}
]
}
]
}
}
Ambiguous message Invalid Account Number
Fedex API Rates and Transit Times API + LTL Freight: Account Number Invalid
400: ACCOUNT.NUMBER.INVALID
Lacking clarity which credentials to use
Rating is temporarily unavailable - Error in FEDEX
“Error returned in processing transaction
Severity: FAILURE
Source: crs
Code: 7
Message: Rating is temporarily unavailable, please try again later.
LocalizedMessage: Rating is temporarily unavailable, please try again later.”
“try using production credentials. I did has the same issue with test server ans was able to resolve it through production credentials”
General Failure when servers are down
fedex General Failure
“when the FedEx servers are down, you get "General failure" as the error message”
Fedex Sandbox has limited number of test credentials
fedex shipping web service, test account authentication failed
“appears Fedex has not gotten their act together regarding their test credentials. I was told by someone in Web services tech support that there is a limited array of test credentials and there are some that are simply not valid. Turns out, once you get test credentials with your user account, they will always be the same when requested from that account.”
FedEx Shipping Codes are not clear
FedEx Shipping Codes
“The problem is, the values your 3PL expects may not be the true "carrier" values so there is no way to provide you with such a list. These are the values that FedEx expects for Web Services which is the current list. The XML API has been retired and did not support all services.”
The courtesy rates service intermittent availability
Unable to obtain courtesy rates in Fed Ex Web Service
“Unable to obtain courtesy rates”
“There is nothing wrong in the code this is mainly due to website issue. I tried the same thing after few hours and it was working perfectly.”
Lack of clarity on available test data
How to get Fedex testing tracking number?
“** Every carrier (UPS, USPS, etc...) has lots of tracking numbers for lots of use-cases, but not FedEx... I find that very strange.
* Also... I am guessing FedEx expects you to use real tracking numbers even in their test environment. It's how I have been testing for multiple use-cases.
I hope this helps anyone, I have spent a while digging around.”