Home / Docs / Activity logs

Activity logs

The activity log records what happened in your project: who published, who changed settings, and what billing or integration events occurred. This page shows how to query it, filter it, and page through results.

Prerequisites

  • Your API key in the X-API-Key header.
  • How far back the log goes depends on your plan (see Retention).

The endpoint

GET /v1/activity-logs
curl "https://api.pinbridge.io/v1/activity-logs?limit=50" \
  -H "X-API-Key: $PINBRIDGE_API_KEY"

Expected response (trimmed):

{
  "items": [
    {
      "action": "pin.publish_succeeded",
      "category": "publishing",
      "status": "success",
      "actor_type": "api_key",
      "resource_type": "pin",
      "created_at": "2026-09-11T10:15:00Z"
    }
  ],
  "next_cursor": "eyJ...",
  "current_retention_days": 90,
  "current_retention_label": "90 days"
}

current_retention_days and current_retention_label reflect your plan’s retention window.

Retention per plan

Each log entry stamps its own retention window and expiry at write time, based on the plan in effect. Retention is not a flat 90 days.

Plan Retention
Playground (Free) 7 days
Starter 30 days
Growth 90 days
Agency 180 days
Enterprise 365 days

The 90-day figure is only the Growth default. Entries older than your window are not returned.

Categories

Every entry has one category:

  • security — sign-in, email verification, and similar account-security events.
  • publishing — pin publishes, deletes, retries, imports, and schedules.
  • billing — plan and payment events.
  • configuration — settings changes such as API keys and webhooks.
  • integration — Pinterest account connect, revoke, and related events.

Statuses and actors

  • Statuses: success, failed, queued, canceled.
  • Actor types: user, api_key, system, worker, admin, billing. This tells you whether a human, an API key, or a background worker performed the action.

action is a free-form string, for example pin.publish_succeeded, pin.publish_failed, pin.deleted, import.created, webhook.created, asset.uploaded, schedule.created, or pinterest.account_connected.

Filters

All filters are query parameters:

Parameter Notes
limit 1 to 200, default 50.
cursor Opaque cursor for the next page (see below).
category One of the categories above.
action Exact action string, 1 to 128 characters.
status One of the statuses above.
resource_type Resource type string, 1 to 64 characters (e.g. pin, webhook).
since ISO 8601 datetime; returns entries with created_at >= since.

Example: only failed publishes in the last day.

curl -G "https://api.pinbridge.io/v1/activity-logs" \
  -H "X-API-Key: $PINBRIDGE_API_KEY" \
  --data-urlencode "category=publishing" \
  --data-urlencode "status=failed" \
  --data-urlencode "since=2026-09-10T00:00:00Z"

Pagination is cursor based

Activity logs use cursor (keyset) pagination, not offset pagination. Results are ordered newest first. When a response includes a non-null next_cursor, pass it back as the cursor parameter to fetch the next page. Stop when next_cursor is null.

# Page 2, using next_cursor from page 1
curl -G "https://api.pinbridge.io/v1/activity-logs" \
  -H "X-API-Key: $PINBRIDGE_API_KEY" \
  --data-urlencode "cursor=eyJ..." \
  --data-urlencode "limit=50"

There is no total, offset, or page-number field. Keep following next_cursor to walk the full history.

Python SDK

from pinbridge_sdk import PinbridgeClient

with PinbridgeClient(api_key="pb_your_api_key") as client:
    cursor = None
    while True:
        page = client.activity_logs.list(
            limit=100,
            cursor=cursor,
            category="publishing",
            status="failed",
        )
        for entry in page["items"]:
            print(entry["created_at"], entry["action"])
        cursor = page.get("next_cursor")
        if not cursor:
            break

client.activity_logs.list accepts limit, cursor, category, action, status, resource_type, and since.

Next steps

Last updated September 13, 2026Was this page helpful? Tell us →