API FedEX "INVALID.INPUT.EXCEPTION","message":"Invalid field value in the input"

Viewed 825

I'm trying to validade an address in FedEX API using Python 3.8 and it returns an error of invalid field value

First I connect to the Auth API

payload={"grant_type": "client_credentials",'client_id':Client_id,'client_secret':Client_secret}
url = "https://apis-sandbox.fedex.com/oauth/token"
headers = {'Content-Type': "application/x-www-form-urlencoded"}
response=requests.post(url, data=(payload), headers=headers)

And it returns a message with the Auth token correctly

{"access_token":"eyJhbGciOiJSUzI1NiIsInRM5U0F2eUs1ZVFBVTFzS5k","token_type":"bearer","expires_in":3599,"scope":"CXS SECURE"}

Then I just get the token to use it in next transactions

token = json.loads(response.text)['access_token']

Then I prepare the next payload for address validation API

payload_valid_address = {
    "addressesToValidate": [
        {
    "address":
            {
            "streetLines": ["7372 PARKRIDGE BLVD"],
            "city": "Irving",
            "stateOrProvinceCode": "TX",
            "postalCode": "75063-8659",
            "countryCode": "US"
            }
        }
    ]
}

And send the request to the new endpoint with the given token

url = "https://apis-sandbox.fedex.com/address/v1/addresses/resolve"
headers = {
    'Content-Type': "application/json",
    'X-locale': "en_US",
    'Authorization': 'Bearer '+ token
    }

response = requests.post(url, data=payload_valid_address, headers=headers)

print(response.text)

and get the error

<Response [422]>
{"transactionId":"50eae03e-0fec-4ec7-b068-d5c456b64fe5","errors":[{"code":"INVALID.INPUT.EXCEPTION","message":"Invalid field value in the input"}]}

I have made inumerous tests and I don't get the invalid field. Anyone know what is happening and can help?

3 Answers

I have fixed it

For any reason, convert the string payload_valid_address to Json in 2 steps doesn't work

payload_valid_address = {....}
payload = json.dumps(payload_valid_address)

But if made in just one step it pass the API request

payload_valid_address = json.dumps({....})

payload = json.dumps({input payload}) this works to prevent the response error 422 <Response [422]>

I also had this error and additionally had to use json.loads(json_string) when the json data contained key words like false, true or null.

import json

json_string = r'''{
  "accountNumber": {
    "value": "802255209"
  },
  "requestedShipment": {
    "shipper": {
      "address": {
        "postalCode": 75063,
        "countryCode": "US"
      }
    },
    "recipient": {
      "address": {
        "postalCode": "m1m1m1",
        "countryCode": "CA"
      }
    },
    "shipDateStamp": "2020-07-03",
    "pickupType": "DROPOFF_AT_FEDEX_LOCATION",
    "serviceType": "INTERNATIONAL_PRIORITY",
    "rateRequestType": [
      "LIST",
      "ACCOUNT"
    ],
    "customsClearanceDetail": {
      "dutiesPayment": {
        "paymentType": "SENDER",
        "payor": {
          "responsibleParty": null
        }
      },
      "commodities": [
        {
          "description": "Camera",
          "quantity": 1,
          "quantityUnits": "PCS",
          "weight": {
            "units": "KG",
            "value": 20
          },
          "customsValue": {
            "amount": 100,
            "currency": "USD"
          }
        }
      ]
    },
    "requestedPackageLineItems": [
      {
        "weight": {
          "units": "KG",
          "value": 20
        }
      }
    ]
  }
}'''

data = json.loads(json_string)
data
response = requests.request("POST", url, data=json.dumps(data), headers=headers)
Related