I'm getting the following error: Provide a properly configured and signed bearer token, and make sure that it has not expired. Learn more about Generating Tokens for API Requests https://developer.apple.com/go/?id=api-generating-tokens
I am using the correct key files and I have assigned the Admin permission. Any help would be greatly appreciated
import requests
import datetime
from authlib.jose import jwt
app = Flask(__name__)
# App Store Connect API information
KEY_ID = 'XXXXXXXXX'
ISSUER_ID = 'XXXXX-XXXXX-XXXX-XXXX-XXXXXXXX'
KEY_FILE = 'AuthKey_XXXXXXX.p8'
APP_ID = '12345678' # App Store Connect application ID
def generate_jwt_token():
""" Generate JWT token using authlib.jose """
header = {
'alg': 'ES256',
'kid': KEY_ID,
'typ': 'JWT'
}
payload = {
'iss': ISSUER_ID,
'aud': 'appstoreconnect-v1',
'exp': int(datetime.datetime.utcnow().timestamp()) + 1200 # token good for 20 min
}
with open(KEY_FILE, 'r') as key_file:
key = key_file.read()
token = jwt.encode(header, payload, key)
return token.decode('utf-8') # Ensure the token is a string
@app.route('/latest-build')
def latest_build():
token = generate_jwt_token()
headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
response = requests.get(
f'https://api.appstoreconnect.apple.com/v1/builds?filter[app]={APP_ID}&limit=1&sort=-uploadedDate',
headers=headers
)
if response.status_code != 200:
return jsonify({
'error': 'Failed to fetch data from API',
'status_code': response.status_code,
'response': response.json()
})
build_data = response.json()
try:
latest_build_version = build_data['data'][0]['attributes']['version']
return jsonify({'latest_build_version': latest_build_version})
except KeyError as e:
return jsonify({
'error': 'KeyError accessing response data',
'details': str(e),
'response': build_data
})
if __name__ == '__main__':
app.run(debug=True)