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-Keyheader. - 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
- Retries and failures — trace failed publishes you find in the log.
- Team and roles — see which teammate performed an action.
- Bulk imports (CSV and JSON) — audit
import.createdevents from your imports.
