App Installations
App Installation Created
Sent to your app's own webhooks when an account installs your app, including when an account that removed it installs it again. A reinstall keeps the installation's id, created_at, and metadata. The envelope's account_id is the installing account
Required permissions:
- webhook_receive:app_installations
postWebhookapp_installation.created
Headers
webhook-idstring required
A unique identifier for this webhook request
Example:msg_xxxxxxxxxxxxxxxxxxxxxxxx
webhook-signaturestring required
The signature of the webhook request with the webhook version prepended
Example:v1,BASE64ENCODEDSIGNATURE
webhook-timestampstring required
The timestamp in seconds since the Unix epoch that the webhook was sent at on the server
Example:1727606400
Payload
Example payload
{
"account_id": "biz_xxxxxxxxxxxxxx",
"api_version": "v1",
"api_version_date": "2026-07-20",
"data": {
"account": {
"id": "biz_xxxxxxxxxxxxxx",
"title": "Acme Bookkeeping"
},
"app": {
"developer": {
"id": "biz_xxxxxxxxxxxxxx",
"title": "Acme Bookkeeping"
},
"icon": {
"url": "https://pub-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.r2.dev/custom-perk-icon.svg"
},
"id": "app_xxxxxxxxxxxxxx",
"name": "Other App"
},
"created_at": "2026-01-01T12:00:00.000Z",
"external_id": "acme-books",
"id": "aag_xxxxxxxxxxxxxx",
"metadata": {
"last_synced_at": "2026-01-01T12:00:00.000Z",
"quickbooks_realm_id": "9341452712"
},
"updated_at": "2026-01-01T12:00:00.000Z"
},
"id": "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
"timestamp": "2025-01-01T00:00:00.000Z",
"type": "app_installation.created"
}Response
Return a 200 status to indicate that the data was received successfully
Changes
Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.