filename and the fields of the JSON key file from the Firebase console as top-level fields, or send the whole key file under service-account. type must be service_account, and private_key must be a readable RSA key; a masked value is refused.filename must be lowercase and end in .json. Start it with the app's SIP User-Agent first word, lowercased with dashes removed, because that is how devices are matched to accounts (see GET /firebase). If the name overlaps another account's, so a device could match both, the account is still stored and the response carries a warning. A file that already exists is refused with 409; replace it with PUT /firebase/{filename}.202: the account is accepted and stored shortly after.Authorization: Bearer ********************curl --location 'https://awqacore01.crexendocloud.com/ns-api/v2/firebase' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"filename": "example-project.json",
"type": "service_account",
"project_id": "example-project",
"private_key_id": "{{private_key_id}}",
"private_key": "{{private_key}}",
"client_email": "firebase-adminsdk@example-project.iam.gserviceaccount.com",
"client_id": "100000000000000000001",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk%40example-project.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}'{
"code": 202,
"message": "Accepted"
}