Occurs when the status of an API key rotation changes:
completedwhen the new secret authenticates a request for the first time.expires_atshows when the old secret stops working.canceledwhen a newer rotation replaces it before its new secret is used.
api_key_rotation.created occurs when the rotation starts. If the rotation sets a new expiry date for the key, api_key.updated also occurs when the rotation is completed.
event_idstringrequired
Example:
evt_01gks14ge726w50ch2tmaw2a1xUnique Paddle ID for this event, prefixed with
evt_.Pattern:
^evt_[a-z\d]{26}$event_typestringrequired
Type of event sent by Paddle, in the format
entity.event_type.Values
address.createdAnaddress.createdevent.address.importedAnaddress.importedevent.address.updatedAnaddress.updatedevent.adjustment.createdAnadjustment.createdevent.adjustment.updatedAnadjustment.updatedevent.
+ Show all values− Hide values
api_key.createdAnapi_key.createdevent.api_key.expiredAnapi_key.expiredevent.api_key.expiringAnapi_key.expiringevent.api_key.revokedAnapi_key.revokedevent.api_key.updatedAnapi_key.updatedevent.api_key_exposure.createdAnapi_key_exposure.createdevent.api_key_rotation.createdAnapi_key_rotation.createdevent.api_key_rotation.updatedAnapi_key_rotation.updatedevent.business.createdAbusiness.createdevent.business.importedAbusiness.importedevent.business.updatedAbusiness.updatedevent.client_token.createdAclient_token.createdevent.client_token.revokedAclient_token.revokedevent.client_token.updatedAclient_token.updatedevent.customer.createdAcustomer.createdevent.customer.importedAcustomer.importedevent.customer.updatedAcustomer.updatedevent.discount.createdAdiscount.createdevent.discount.importedAdiscount.importedevent.discount.updatedAdiscount.updatedevent.discount_group.createdAdiscount_group.createdevent.discount_group.updatedAdiscount_group.updatedevent.meter.createdearly accessAmeter.createdevent.meter.updatedearly accessAmeter.updatedevent.payment_method.savedApayment_method.savedevent.payment_method.deletedApayment_method.deletedevent.payout.createdApayout.createdevent.payout.paidApayout.paidevent.price.createdAprice.createdevent.price.importedAprice.importedevent.price.updatedAprice.updatedevent.product.createdAproduct.createdevent.product.importedAproduct.importedevent.product.updatedAproduct.updatedevent.report.createdAreport.createdevent.report.updatedAreport.updatedevent.subscription.activatedAsubscription.activatedevent.subscription.canceledAsubscription.canceledevent.subscription.createdAsubscription.createdevent.subscription.importedAsubscription.importedevent.subscription.past_dueAsubscription.past_dueevent.subscription.pausedAsubscription.pausedevent.subscription.resumedAsubscription.resumedevent.subscription.trialingAsubscription.trialingevent.subscription.updatedAsubscription.updatedevent.transaction.billedAtransaction.billedevent.transaction.canceledAtransaction.canceledevent.transaction.completedAtransaction.completedevent.transaction.createdAtransaction.createdevent.transaction.paidAtransaction.paidevent.transaction.past_dueAtransaction.past_dueevent.transaction.payment_failedAtransaction.payment_failedevent.transaction.readyAtransaction.readyevent.transaction.revisedAtransaction.revisedevent.transaction.updatedAtransaction.updatedevent.usage_balance.depletedearly accessAusage_balance.depletedevent.
occurred_atstring (date-time)required
Example:
2024-10-12T07:20:50.52ZRFC 3339 datetime string of when this event occurred.
notification_idstringrequired
Example:
ntf_01ghbkd0frb9k95cnhwd1bxpvkUnique Paddle ID for this notification, prefixed with
ntf_.Pattern:
^ntf_[a-z\d]{26}$dataobjectrequired
New or changed entity.
idstringrequired
Example:
apkrot_01gm106t81w94gyjgsaqypkjklUnique Paddle ID for this API key rotation entity, prefixed with
apkrot_.Pattern:
^apkrot_[a-z\d]{26}$api_key_idstringrequired
Example:
apikey_01gm106t81w94gyjgsaqypkjklUnique Paddle ID for this API key entity, prefixed with
apikey_.Pattern:
^apikey_[a-z\d]{26}$statusstringrequired
Status of this API key rotation.
Values
pendingRotation was created and the new secret was issued, but it hasn't been used yet. The current secret still works.completedThe new secret was used and is now active. The old secret works untilexpires_at.canceledRotation was canceled or replaced by a newer rotation before the new secret was used.
grace_period_secondsintegerrequired
How long, in seconds, the old secret keeps working after the new secret is activated. The new secret is activated the first time it's used to authenticate a request. Set to
0 to stop the old secret working as soon as the new one is activated.Range: 0–86400
new_key_expires_atstring (date-time) | nullrequired
Example:
2024-10-12T07:20:50.52ZRFC 3339 datetime string of when the API key should expire after this rotation. Applied when the new secret is activated. If omitted, the API key keeps its current expiry.
expires_atstring (date-time) | nullrequired
Example:
2024-10-12T07:20:50.52ZRFC 3339 datetime string of when the old secret stops working.
null until the new secret is activated.created_atstring (date-time)required
Example:
2024-10-12T07:20:50.52ZRFC 3339 datetime string of when this entity was created. Set automatically by Paddle.
updated_atstring (date-time)required
Example:
2024-10-13T07:20:50.52ZRFC 3339 datetime string of when this entity was updated. Set automatically by Paddle.
{ "event_id": "evt_01jkdrb9yq2v6k4e1m3x8p7c5d", "event_type": "api_key_rotation.updated", "occurred_at": "2025-08-19T13:10:02.114209Z", "notification_id": "ntf_01jkdrba4hm0x2q8v6r9t3w1ye", "data": { "id": "apkrot_01jkas9tppn3bhadwpcyag45zd", "api_key_id": "apikey_01jkdpbhazdpn3wpcya45as9tg", "status": "completed", "grace_period_seconds": 3600, "new_key_expires_at": null, "expires_at": "2025-08-19T14:10:02.114209Z", "created_at": "2025-08-19T12:58:38.746382Z", "updated_at": "2025-08-19T13:10:02.114209Z" }}