---
title: "Get activity"
method: GET
path: "/api/v1/activity/{id}"
tags: ["Activity"]
---

# Get activity

`GET /api/v1/activity/{id}`

## Request

- Base URL: `https://xquik.com`
- URL: `https://xquik.com/api/v1/activity/{id}`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Returns 1 activity of the account with its full technical record. It covers every kind of activity the Activity log shows. The record holds the request, the caller, the charge, every timestamp in UTC and related activity. It never holds an API key value, a webhook secret or another account's data. Only a signed-in dashboard session sees an `api_key` record, so an API key or an OAuth app gets 404 for its ID.

## Path parameters

- `id` string, required

## Response `200`

Activity record

- ActivityRecord: Full technical record of 1 activity. Timestamps are ISO 8601 in UTC to the millisecond.
  - `object` 'activity', required
  - `id` string, required: Activity ID.
  - `kind` 'write_action' | 'extraction' | 'monitor_change' | 'api_key' | 'billing' | 'giveaway_draw' | 'monitor_event' | 'media_download' | 'media_share' | 'support_ticket' | 'webhook_delivery' | 'webhook_endpoint' | 'x_account_connection', required: Kind of the activity. Only a signed-in dashboard session sees an `api_key` record.
  - `type` string, required: Type of the activity within its kind, the same as the type of its Activity log row. Examples are a write action type, an extraction tool type, a monitor change, a monitor event type or a ledger entry type.
  - `status` 'completed' | 'running' | 'failed' | 'canceled', required
  - `url` string, uri, required: Dashboard page of this activity.
  - `requestId` string, nullable, required: ID of the API request behind this activity.
  - `timestamps` object, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time
    - `completedAt` string, date-time
    - `confirmedAt` string, date-time
    - `expiresAt` string, date-time
    - `occurredAt` string, date-time
    - `discoveredAt` string, date-time
    - `postedAt` string, date-time
    - `firstAttemptedAt` string, date-time
    - `deliveredAt` string, date-time
    - `nextRetryAt` string, date-time
    - `exhaustedAt` string, date-time
    - `drawnAt` string, date-time
    - `lastUsedAt` string, date-time
    - `pausedAt` string, date-time
  - `request` object, nullable, required: The API request behind this activity. Null for activity from before Oct 30, 2026, and for activity no API request starts, such as a monitor event, a webhook delivery or a credit grant.
    - `method` 'DELETE' | 'PATCH' | 'POST' | 'PUT', required
    - `path` string, required
    - `httpStatus` integer, required
    - `durationMs` integer, required
    - `ipAddress` string, nullable, required
    - `userAgent` string, nullable, required
    - `at` string, date-time, required
  - `caller` object, required
    - `authMethod` 'api_key' | 'oauth' | 'session' | 'null', nullable, required
    - `apiKey` object, nullable, required: Name and prefix of the API key used. Never its value.
      - `name` string, required
      - `prefix` string, required
    - `oauthClient` object, nullable, required
      - `id` string, required
      - `name` string, required
  - `charge` object, nullable, required: Credits charged for this activity.
    - `credits` integer, required
    - `balanceAfter` integer, required
    - `at` string, date-time, required
  - `details` object, required: Fields of this kind of activity, such as its target. A field can hold JSON, such as the data of a monitor event or the payload of a webhook delivery.
  - `related` object[], required: Up to 5 other activities on the same subject within 7 days, newest first.
    - `id` string, required
    - `type` string, required
    - `status` 'completed' | 'running' | 'failed' | 'canceled', required
    - `createdAt` string, date-time, required
    - `url` string, uri, required

## Other responses

- `400`: Invalid input. A value past its maxLength gets this answer, & the message names the field & its limit. Bad input costs nothing, since it's refused before any read.
- `401`: Unauthenticated
- `403`: The API key lacks a scope this route needs. `requiredScope` names it. A paused API key gets `api_key_paused`, so resume it on the dashboard.
- `404`: Not found
- `429`: Too many requests right now. Each user gets 500 reads a second. Each minute allows 120 writes & 60 deletes. `x_api_rate_limited` means X limits this read for now. Neither answer costs anything. Wait for the seconds in `Retry-After`, then retry.
- `500`: Unexpected error.
- `default`: Unexpected error.

## Changes

- **2026-10-31** `2e8e935f1661`: 1 info
  - endpoint added
- **2026-10-31** `c57c57352955`: 1 breaking
  - api path removed without deprecation
- **2026-10-30** `6e0f8f7246b2`: 2 breaking, 10 warning, 11 info
  - added the pattern `^[A-Za-z0-9_-]{12}([A-Za-z0-9_-]{10})?$` to the `path` request parameter `id`
  - the `details/additionalProperties/` response's property type changed from `string, number, boolean, null` to `string, number, boolean, object, array, null` for status `200`
  - added the new `api_key` enum value to the `kind` response property for the response status `200`
  - added the new `billing` enum value to the `kind` response property for the response status `200`
  - …19 more
- **2026-10-30** `02f0b86fb58d`: 1 breaking
  - api path removed without deprecation
- **2026-10-30** `d7a994ca1067`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/xquik-dev/apis/xquik-api/changes/api/v1/activity/:id/get.md)

---

[API](https://skmtc.dev/xquik-dev/apis/xquik-api.md) - [All operations](https://skmtc.dev/xquik-dev/apis/xquik-api/llms.txt) - [OpenAPI document](https://skmtc.dev/xquik-dev/apis/xquik-api/revisions/2e8e935f1661?raw)
