1. Webhook
InboxKit
  • Introduction
  • Order
    • Place Order
      POST
  • Webhook
    • Webhook Integration & Signature Verification
      POST
    • Event: Domain Status Changed
      POST
    • Event: Mailbox Status Changed
      POST
    • Events: OAuth Consent & Client ID Changes
      POST
  • Account
    • Get account details
      GET
  • Workspaces
    • List workspaces
      GET
    • Get workspace details
      GET
    • Create workspace
      POST
    • Update workspace
      PUT
    • Delete workspace
      DELETE
    • Update workspace webhook
      POST
  • Domains
    • Domain Renewals
    • Search available domains
      POST
    • Check if domain is banned from registration
      GET
    • Check domain availability
      GET
    • Register domains
      POST
    • List domains
      POST
    • List assignable domains
      GET
    • Remove domains
      POST
    • Set domain forwarding
      POST
    • Set catch-all email
      POST
    • Remove catch-all email
      DELETE
    • Get nameservers for domain connection
      POST
    • Check nameservers propagation
      POST
    • Check Workspace Availability
      POST
    • Set DMARC Configuration
      POST
    • Remove DMARC Configuration
      DELETE
    • Regenerate Domain Nameservers
      POST
    • Request Domain Renewal
      POST
    • Check Renewal Status
      GET
  • Cloudflare Domains
    • Connect Cloudflare Domains
    • List Connected Cloudflare Domains
    • Get Domain Details
    • Disconnect Cloudflare Domains
    • List Cloudflare Zones
  • Mailboxes
    • List mailboxes
    • Add or update signature for mailboxes
    • Delete signature for mailboxes
    • Show mailbox credentials
    • Get mailbox details
    • Buy mailboxes
    • Check mailbox status
    • Cancel mailboxes
    • Update mailbox
    • Update mailbox profile picture
    • Generate TOTP
    • Change username
    • Change password
    • Check mailbox availability
    • Get Failure Reason
    • Uncancel mailboxes
  • DNS
    • Get DNS records
    • Add DNS records
    • Update DNS records
    • Delete DNS records
  • Sequencers
    • Export mailboxes status
    • List sequencer platforms
    • Get sequencer tags
    • List sequencers
    • Export mailboxes
    • Add sequencer
    • Update sequencer
    • Delete sequencers
  • Billing
    • Get pricing plans
    • Get subscription details
    • Change subscription plan
    • Cancel subscription
    • Get wallet details
    • Add credits to wallet
    • Update auto top-up settings
    • Get billing portal link
  • Warmup
    • List Warmup Subscriptions
    • Get Warmup Subscription Details
    • Add Warmup to Mailboxes
    • Pause Warmup for Mailboxes
    • Resume Warmup for Mailboxes
    • Cancel Warmup for Mailboxes
    • Get Warmup Statistics
    • Get Warmup Pricing
  • Client ID Requests
    • Initiate Client ID Request
    • Get Client ID Request Status
    • List Client ID Requests
  • Mailbox Forwarding
    • Setup Email Forwarding
    • Update Email Forwarding
    • Remove Email Forwarding
    • List Forwarding Jobs
  • Consent Request
    • Initiate Consent Request
    • Get Consent Request Status
    • List Consent Requests
  • Tags
    • Assign tags to domains or mailboxes
    • Get all tags
    • Create a new tag
    • Delete a tag
  • Prewarm
    • Search Domains
    • Search Mailboxes
    • Buy Prewarmed Mailboxes
    • Check Order Status
    • Check Availability
  • Inbox Placement
    • Tests
      • Create Test
      • List Tests
      • Get Test Results
    • Scheduled Tests
      • List Scheduled Tests
      • Get Scheduled Test
      • Pause Scheduled Test
      • Resume Scheduled Test
      • Delete Scheduled Test
  • InfraGuard
    • InfraGuard - Subscriptions
      • List protected domains
      • Get subscription details
      • Enable InfraGuard for domains
      • Cancel InfraGuard for domains
      • Get workspace statistics
      • Get pricing info
    • InfraGuard - Monitoring
      • Get blacklist check history
      • Get DNS check history
      • Get current bounce metrics
      • Get bounce check history
    • InfraGuard - Settings
      • Update subscription settings
      • Trigger manual check
    • InfraGuard - Alerts
      • List alerts
      • Acknowledge an alert
      • Resolve an alert
    • InfraGuard - Action Items
      • List action items
      • Get action item statistics
      • Resolve an action item
      • Dismiss an action item
  • Email Insight
    • Email Insights - Workspace
      • Get Workspace Overview
      • Get Mailboxes Health
      • Get High Bounce Mailboxes
      • Get Workspace Activity
    • Email Insights - Mailbox
      • Get Mailbox Stats
      • Get Mailbox Deliverability
      • Get Mailbox Health
      • Get Mailbox Trends
      • Get Mailbox Activity
      • Get Mailbox Bounce Events
      • Get Mailbox Top Recipients
      • Get Mailbox Top Recipient Domains
      • Get Mailbox Message Breakdown
      • Get Mailbox Subject Analysis
  • Domain Renewals
  • Schemas
    • Schemas
      • WebhookPayload
      • DomainStatusWebhook
      • Tag
      • DomainEventData
      • MailboxStatusWebhook
      • MailboxEventData
      • Domain
      • Mailbox
      • ChangeDetails
      • WebhookResponse
      • ErrorResponse
  1. Webhook

Events: OAuth Consent & Client ID Changes

POST
https://api.inboxkit.com/webhook
Maintainer:Not configured

Events: consent_request.status_changed & client_id_request.status_changed#

Two events that together track the OAuth onboarding dance between InboxKit, the customer, and Google Workspace or Microsoft 365 admin consoles.
🔗 For the shared HTTP contract, headers, signature verification, and retry logic, see the Webhook Integration & Signature Verification page.

Why both events are on one page#

consent_request.status_changed and client_id_request.status_changed are the two halves of the OAuth onboarding flow for new mailboxes. They share the same status enum, the same lifecycle, and are typically handled by the same piece of your code. Documenting them together makes the flow clearer.
EventWhat it tracksPlatforms
consent_request.status_changedThe customer opening and completing an OAuth consent URL to authorize InboxKit to access their workspaceGoogle Workspace & Microsoft 365
client_id_request.status_changedThe customer adding a specific Google OAuth Client ID to their Google Workspace Admin Console (domain-wide delegation)Google Workspace only

Shared status lifecycle#

Both events use the same enum. Happy path runs left-to-right:
queued → pending → processing → completed
                              ↘ failed
                              ↘ errored
                              ↘ cancelled
StatusWhat it means
queuedRequest created, waiting to be picked up by the worker.
pendingWorker has picked it up; the URL / instructions are ready for the customer. Surface this to your user.
processingInboxKit is verifying completion (polling Google/Microsoft APIs).
completed✅ Successfully finished. Onboarding can proceed.
failedThe request failed for a reason we can explain (e.g. permissions). Check status_text / status_reason.
erroredThe request errored unexpectedly. Check status_text / status_reason.
cancelledThe customer or an admin cancelled the request.

Headers (reminder)#

POST /your-path HTTP/1.1
Content-Type: application/json
User-Agent: InboxKit-Webhook/1.0
X-InboxKit-Event: consent_request.status_changed   # or client_id_request.status_changed
X-InboxKit-Timestamp: 2024-01-10T17:05:00.000Z
X-InboxKit-Signature: sha256=<hex>

consent_request.status_changed#

When it fires#

When a customer needs to grant InboxKit OAuth consent to operate on their Google Workspace or Microsoft 365 tenant, InboxKit creates a consent_request. This event fires whenever that request's status changes — from the moment it's queued, through pending (the customer has a URL to open), to completed/failed.

Payload envelope#

{
  "event": "consent_request.status_changed",
  "timestamp": "<ISO 8601 UTC>",
  "team_id": "<your team uid>",
  "team_name": "<your team name>",
  "data": {
    "consent_request": { /* see fields below */ },
    "metadata": { /* see fields below */ }
  }
}

data.consent_request fields#

Every field InboxKit sends in a consent_request.status_changed webhook is listed below.
FieldTypeNullableDescription
uidstringnoUnique, stable identifier for this consent request. Use as idempotency key.
statusenumnoNew status. See the shared lifecycle table above.
previous_statusstring | nullyesPrevious status before this transition.
consent_urlstringnoThe URL the customer needs to open to grant consent. Valid while status is pending.
status_textstringno (may be empty)Human-readable short status message.
status_reasonstringno (may be empty)Machine-friendly reason code for failures (e.g. user_denied, scope_mismatch).
retry_countintegernoHow many times InboxKit has retried this request.
max_retriesintegernoRetry cap before the request goes terminal.
completed_atISO 8601 | nullyesWhen the request reached a terminal state (completed, failed, errored, cancelled).

data.metadata fields#

FieldTypeDescription
updated_atISO 8601When the consent request document was last updated.
workspace_idstringInternal workspace identifier.
mailbox_idstringInternal identifier of the mailbox the consent request is for.

UX tip#

When you receive status: "pending" with a consent_url, surface that URL to your end user immediately — that's the signal that they need to click through the Google / Microsoft consent screen. A typical pattern is:
1.
Show a "Waiting for OAuth consent" banner with a "Open consent page" button linking to data.consent_request.consent_url.
2.
When a status: "completed" event arrives for the same uid, hide the banner and move on to the next onboarding step.
3.
If status: "failed" / errored, show status_text to the user so they know what went wrong.

client_id_request.status_changed#

When it fires#

For Google Workspace mailboxes, InboxKit needs the customer to add a specific OAuth Client ID to their Google Workspace Admin Console (Security → API controls → Domain-wide delegation). This request exists while that setup is in progress, and this event fires whenever its status changes.
Google-only. There is no Microsoft equivalent of this flow. If you only integrate with Microsoft 365 mailboxes, you will never see this event.

Payload envelope#

{
  "event": "client_id_request.status_changed",
  "timestamp": "<ISO 8601 UTC>",
  "team_id": "<your team uid>",
  "team_name": "<your team name>",
  "data": {
    "client_id_request": { /* see fields below */ },
    "metadata": { /* see fields below */ }
  }
}

data.client_id_request fields#

Every field InboxKit sends in a client_id_request.status_changed webhook is listed below.
FieldTypeNullableDescription
uidstringnoUnique, stable identifier for this client-id request. Use as idempotency key.
statusenumnoNew status. See the shared lifecycle table above.
previous_statusstring | nullyesPrevious status before this transition.
domain_namestringnoThe Google Workspace domain the Client ID is being added to.
client_idstringnoThe Google OAuth Client ID that needs to be (or was) added — e.g. 1234567890-abcdefgh.apps.googleusercontent.com.
status_textstringno (may be empty)Human-readable short status message.
status_reasonstringno (may be empty)Machine-friendly reason code for failures.
retry_countintegernoHow many times InboxKit has retried this request.
max_retriesintegernoRetry cap before the request goes terminal.
completed_atISO 8601 | nullyesWhen the request reached a terminal state.

data.metadata fields#

FieldTypeDescription
updated_atISO 8601When the client-id request document was last updated.
workspace_idstringInternal workspace identifier.

UX tip#

When status becomes pending and you have a client_id, surface instructions to the customer along the lines of:
"Please add this OAuth Client ID <client_id> to Security → API controls → Domain-wide delegation in your Google Workspace Admin Console."
Then wait for the completed event to proceed.

Example receiver (Node.js)#

Examples#

Use the selector on the right-hand side to see different realistic transitions. Examples are tagged by event type.

Request

Authorization
Provide your bearer token in the
Authorization
header when making requests to protected resources.
Example:
Authorization: Bearer ********************
Header Params

Body Params application/json

Examples

Responses

🟢200OK
application/json
Webhook received successfully. InboxKit will mark the delivery as complete and will not retry.
Body

🟠400Bad Request
🟠401Unauthorized
🔴500Server Error
Request Request Example
Shell
JavaScript
Java
Swift
cURL
curl --location --request POST 'https://api.inboxkit.com/webhook' \
--header 'X-InboxKit-Signature: sha256=b0344c61d8db38e0f469e85fc6e8c055e0742e8d9a9c5a9e8e4d3f7c5a8b9c0d' \
--header 'X-InboxKit-Event: domain.status_changed' \
--header 'X-InboxKit-Timestamp: 2024-01-10T15:30:45.123Z' \
--header 'User-Agent: InboxKit-Webhook/1.0' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "event": "consent_request.status_changed",
    "timestamp": "2024-01-10T17:05:00.000Z",
    "team_id": "ABC-123-DEF-TEAM",
    "team_name": "Marketing Team",
    "data": {
        "consent_request": {
            "uid": "ABC-123-DEF-CONSENT-REQUEST",
            "status": "completed",
            "previous_status": "pending",
            "consent_url": "https://accounts.google.com/o/oauth2/v2/auth?client_id=...&scope=...",
            "status_text": "Consent granted",
            "status_reason": "",
            "retry_count": 0,
            "max_retries": 3,
            "completed_at": "2024-01-10T17:05:00.000Z"
        },
        "metadata": {
            "updated_at": "2024-01-10T17:05:00.000Z",
            "workspace_id": "ABC-123-DEF-WORKSPACE",
            "mailbox_id": "ABC-123-DEF-MAILBOX-ID"
        }
    }
}'
Response Response Example
200 - Success
A minimal 200 response body is enough. The body content is not inspected by InboxKit — any 2xx status code counts as success.
{
  "received": true,
  "message": "Webhook processed successfully"
}
Modified at 2026-04-10 19:43:00
Previous
Event: Mailbox Status Changed
Next
Get account details
Built with