Update a push configuration
Renames, enables or disables a push notification configuration, or changes its settings.
Fields left out of configuration, credentials included, keep their stored values, so a provider can be enabled without sending its credential again. Enabling validates the settings, while a disabled configuration saves incomplete settings. The last update wins.
Guide: Push notifications
A project secret key: vh_sk_... for production, vh_sk_test_... for test. Keep it on your servers.
In: header
Path parameters
The project's id, proj_.... A secret key works only in the project it belongs to.
The configuration's id, push_conf_....
Request body
application/json
TypeScript definitions
Use the request body type in TypeScript.
The new display name.
Whether push notifications are sent through this service. Enabling validates the settings and credentials.
Settings to change; fields left out, credentials included, keep their stored values. FCM takes projectId, serviceAccountJson (the service account key file's contents), androidPriority (high or normal), androidTtl (such as 2419200s) and apnsPriority (5 or 10); APNs takes teamId, keyId, privateKeyContent (the .p8 key), bundleId and environment (production or sandbox).
Examples
curl -X PATCH "https://api.voidhash.com/api/v1/projects/proj_tz4a98xxat96iws9zmbrgj3a/push-notification-configurations/push_conf_m3n7b1v5c9x2z6l0k4j8h2g6" \ -H "Authorization: Bearer vh_sk_..." \ -H "Content-Type: application/json" \ -d '{ "isEnabled": true, "configuration": { "teamId": "A1B2C3D4E5", "keyId": "K9L8M7N6P5", "bundleId": "com.example.app", "environment": "production", "privateKeyContent": "-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----" } }'{ "id": "push_conf_m3n7b1v5c9x2z6l0k4j8h2g6", "projectId": "proj_tz4a98xxat96iws9zmbrgj3a", "type": "apns", "name": "Apple Push Notification service", "key": "com.example.app", "isEnabled": true, "configuration": { "teamId": "A1B2C3D4E5", "keyId": "K9L8M7N6P5", "bundleId": "com.example.app", "environment": "production", "hasPrivateKey": true }, "createdAt": "2026-02-05T09:00:00.000Z", "updatedAt": "2026-02-05T09:04:30.000Z"}{ "error": { "type": "invalid_request", "code": "invalid_push_notification_configuration", "message": "Expected a value with a length of at least 1\n at [\"keyId\"]", "param": "configuration" }}{ "error": { "type": "unauthenticated", "code": "invalid_api_key", "message": "This secret key is not valid." }}{ "error": { "type": "permission_denied", "code": "permission_denied", "message": "Insufficient permissions." }}{ "error": { "type": "not_found", "code": "project_not_found", "message": "There is no project proj_tz4a98xxat96iws9zmbrgj3a, or this credential cannot use it.", "param": "projectId" }}{ "error": { "type": "conflict", "code": "push_notification_configuration_key_taken", "message": "Another push notification configuration of this project uses these credentials.", "param": "configuration" }}{ "error": { "type": "internal", "code": "internal_error", "message": "Something went wrong on our side. Try again, and contact support with the Request-Id header if it keeps failing." }}Response body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
Errors
| Status | type | code | When |
|---|---|---|---|
| 400 | invalid_request | invalid_push_notification_configuration | When enabling with incomplete settings. |
| 409 | conflict | push_notification_configuration_key_taken | When another configuration of the project uses the same credentials. |
It can also fail with the errors every operation shares, such as unauthenticated; see Errors.
More in Push configurations
Something wrong or missing on this page? Tell us by email or on Discord.