Observability
Every connector has an Observability tab that shows runtime events for token and trigger lifecycles: who requested a token, which project used it, when a trigger arrived, and where it was forwarded.
Observability is available on all plans. Enterprise teams also get connector audit logs and longer event retention.
The Observability tab shows five event types:
| Event Type | Description |
|---|---|
| Token Request | A getToken call or CLI vercel connect token invocation that returned a provider token. |
| Completed Authorization Request | A user or app completed an OAuth authorization flow and obtained a grant. |
| Revoked Token Request | A token was revoked from the dashboard, CLI, or REST API. |
| Inbound Trigger | A webhook event arrived directly from the provider (e.g., Slack). |
| Forward Trigger | Connect forwarded the inbound trigger to a registered project destination. |
Use the filter menu to narrow the event list by fields like:
- Timeline: Select a time range from 30 minutes to 30 days, depending on your plan's retention window.
- Event Type: Show only token requests, triggers, authorizations, or revocations.
- Status: Filter by delivery status (for forward triggers).
- Environment: Filter by deployment environment (
production,preview,development). - Project ID: Show events from a specific linked project.
- Subject Type: Filter by token subject (
app,user, orjwt-bearer). - Installation ID: Narrow to a specific installation (for multi-tenant connectors).
You can also use the search bar to find events by any field value, such as a token ID or authorization ID.
Each event carries stable identifiers you can use to trace the lifecycle of a single token or trigger across events and match Connect events to your own systems:
tokenId: Identifies a specific issued token.authorizationId: Links to the OAuth authorization that produced the token.tokenGroupId: Groups tokens that share the same authorization context (same client, subject, environment, scopes, audience, and resources). Tokens within a group differ only in their credential values and expiry.triggerRequestId: Correlates an inbound trigger with its forwarded deliveries.
Select any event row to open the detail panel, where you can copy these IDs or click the filter icon to filter the event list by that value.
The Activity button in the Observability toolbar opens the team Activity Log pre-filtered to show configuration changes for the connector, such as when the connector was created, edited, or linked to a project.
How long events are retained depends on your plan:
| Plan | Retention |
|---|---|
| Hobby | 12 hours |
| Pro | 3 days |
| Enterprise | 30 days |
The timeline filter adapts to your plan. On Hobby, the maximum range is 12 hours. On Pro, the maximum is 3 days. On Enterprise, the maximum is 30 days.
To retain Connect events beyond your plan's retention window, forward them to an external endpoint by adding a Drain. Connect drains deliver each event as a JSON webhook payload to any custom HTTP endpoint you configure.
This lets you:
- Store Connect events in your own logging or SIEM system
- Build custom dashboards and alerts around token activity
- Meet compliance requirements for long-term audit trails
To add a drain, click Add Drain in the Observability toolbar and provide a webhook URL. See Working with Drains for setup details and Pricing for drain costs.
Each event delivered to a drain or shown in the detail panel includes the following common fields:
| Field | Type | Required | Description |
|---|---|---|---|
eventType | string | yes | One of the five event types listed below. |
timestamp | number | yes | Unix timestamp in milliseconds. |
ownerId | string | yes | The ID of the Vercel owner (also known as teamId). |
clientId | string | yes | The ID of the Connect client. |
clientType | string | yes | The type of the Connect client (e.g., slack, oauth). |
projectId | string | no | The ID of the Vercel project if included in the request. |
Logged when a token is requested through getToken (SDK), vercel connect token (CLI), or the REST API.
| Field | Type | Required | Description |
|---|---|---|---|
subjectType | string | yes | The type of the subject, e.g., app or user. |
subjectId | string | no | The ID of the subject associated with the token request. |
authorizationId | string | no | The authorization ID associated with the token. |
tokenGroupId | string | no | Groups tokens that share the same authorization context. Tokens within a group were issued for the same client, subject, environment, scopes, audience, and resources, and differ only in their credential values and expiry. |
tokenId | string | no | Internal ID of the requested token. Used to deduplicate counts. |
scopes | string | no | The scopes associated with the token request. |
environment | string | no | The project environment. |
userId | string | no | The Vercel user ID associated with the request. |
installationId | string | no | The ID of the client installation associated with the token request. |
expiresAt | number | no | The token expiration timestamp. |
refreshTokenExpiresAt | number | no | The expiration timestamp of the refresh token. |
Logged when a user or app completes an OAuth authorization flow and obtains a grant.
| Field | Type | Required | Description |
|---|---|---|---|
subjectType | string | yes | The type of the subject, e.g., app or user. |
subjectId | string | no | The ID of the subject. |
authorizationId | string | no | The authorization ID. |
tokenGroupId | string | no | Groups tokens that share the same authorization context. Tokens within a group were issued for the same client, subject, environment, scopes, audience, and resources, and differ only in their credential values and expiry. |
scopes | string | no | The scopes granted in the authorization. |
environment | string | no | The project environment. |
userId | string | no | The Vercel user ID associated with the request. |
installationId | string | no | The ID of the client installation. |
externalTenantId | string | no | The external tenant ID from the provider. |
refreshTokenExpiresAt | number | no | The expiration timestamp of the refresh token. |
Logged when a token is revoked from the dashboard, CLI, or REST API.
| Field | Type | Required | Description |
|---|---|---|---|
subjectType | string | yes | The type of the subject, e.g., app or user. |
subjectId | string | no | The ID of the subject. |
authorizationId | string | no | The authorization ID. |
tokenId | string | no | Internal ID of the revoked token. |
tokenGroupId | string | no | Groups tokens that share the same authorization context. Tokens within a group were issued for the same client, subject, environment, scopes, audience, and resources, and differ only in their credential values and expiry. |
scopes | string | no | The scopes associated with the revoked token. |
environment | string | no | The project environment. |
userId | string | no | The Vercel user ID associated with the request. |
installationId | string | no | The ID of the client installation. |
tokenExpiresAt | number | no | The expiration timestamp of the revoked token. |
refreshTokenExpiresAt | number | no | The expiration timestamp of the refresh token. |
revokedAt | number | yes | The timestamp when the token was revoked. |
Logged when a webhook event arrives from the provider (e.g., a Slack event).
| Field | Type | Required | Description |
|---|---|---|---|
triggerRequestId | string | yes | Internal ID for the processed event. |
bodySize | number | yes | The body size of the event in bytes. |
externalEventId | string | no | The event ID from the incoming request. |
externalEventType | string | no | The event type from the incoming request. |
Logged when Connect forwards an inbound trigger to a registered project destination.
| Field | Type | Required | Description |
|---|---|---|---|
triggerRequestId | string | yes | Internal ID for the processed event. |
bodySize | number | yes | The body size of the event in bytes. |
destinationProjectId | string | no | Project ID the event is being relayed to. |
destinationPath | string | no | Path for the project the event is being relayed to. |
externalEventId | string | no | The event ID from the incoming request. |
externalEventType | string | no | The event type from the incoming request. |
status | string | yes | The outcome of the forward trigger delivery (success or error). |
reason | string | no | The reason for the status outcome, e.g., failure reason. |
statusCode | number | no | The HTTP status code returned by the destination. |
Was this helpful?