---
title: "Get portal verifications"
method: POST
path: "/v2/portal.getVerifications"
tags: ["portal"]
---

# Get portal verifications

`POST /v2/portal.getVerifications`

Return a verification analytics timeseries for the authenticated portal
session's end user.

Authenticates only with a portal session cookie and always restricts results
to verification events attributed to the session's external identity. Unlike
`analytics.getVerifications`, this endpoint takes a fixed time window (no
query language) and returns a zero-filled, outcome-broken-out timeseries.
Bucket granularity is chosen automatically from the window size.

## Request body

- V2PortalGetVerificationsRequestBody
  - `startTime` integer, required — Start of the query window as a unix timestamp in milliseconds (inclusive).
  - `endTime` integer, required — End of the query window as a unix timestamp in milliseconds (exclusive). Bucket granularity (minute, hour, or day) is chosen automatically from the window size.
  - `keyId` string — Optional. Restrict results to a single key. The key must belong to the authenticated end user; results are always scoped to the session identity regardless of this value.

## Response `200`

Successfully retrieved verification analytics.

- V2PortalGetVerificationsResponseBody
  - `meta` Meta, required — Metadata object included in every API response. This provides context about the request and is essential for debugging, audit trails, and support inquiries. The `requestId` is particularly important when troubleshooting issues with the Unkey support team.
    - `requestId` string, required — A unique id for this request. Always include this ID when contacting support about a specific API request. This identifier allows Unkey's support team to trace the exact request through logs and diagnostic systems to provide faster assistance.
  - `data` V2PortalGetVerificationsDataPoint[], required — Zero-filled verification timeseries for the authenticated end user, ordered by time ascending. Buckets with no verifications are present with zero counts so the series is contiguous across the requested window.
    - `time` integer, required — Bucket start as a unix timestamp in milliseconds.
    - `total` integer, required — Total verifications in this bucket, across all outcomes.
    - `valid` integer, required — Verifications with a VALID outcome.
    - `rateLimited` integer, required — Verifications rejected because a rate limit was exceeded.
    - `insufficientPermissions` integer, required — Verifications rejected for insufficient permissions.
    - `forbidden` integer, required — Verifications rejected as forbidden.
    - `disabled` integer, required — Verifications rejected because the key was disabled.
    - `expired` integer, required — Verifications rejected because the key was expired.
    - `usageExceeded` integer, required — Verifications rejected because remaining usage was exhausted.

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `429` — Too Many Requests
- `500` — Internal server error

---

[API](https://skmtc.net/unkeyed/apis/unkey-api.md) · [All operations](https://skmtc.net/unkeyed/apis/unkey-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/unkeyed/unkey-api/versions/fa78aafac89c/schema)
