List Audit Log
Who or what changed state in the workspace, newest first.
https://api.foxreach.io/ api/ v1/ audit-logRequires an API key with the read scope.
The audit log merges three records FoxReach already keeps, read-only:
source | What it records |
|---|---|
campaign_status | Campaign state changes (campaign.state_changed) and sends blocked by a gate while a campaign stays active (campaign.send_blocked, one per reason, not one per attempt). |
account_connection | Email account connection changes (account.connection_changed) with the cause, including each failed attempt that counts toward disconnecting. |
event | Manual inbox thread changes (audit.inbox_thread.categorized, audit.inbox_thread.deleted), agency client changes (audit.agency_client.created, .renamed, .deleted), agency branding changes made with an API key (audit.agency_branding.updated), template sharing (audit.template.published, .unpublished), campaign changes made with an API key (audit.campaign.duplicated, .shared, .unshared, .leads_removed), team changes (audit.workspace_member.invited, .role_changed, .removed, audit.workspace_invite.revoked, .resent), API keys created or revoked (audit.api_key.created, .revoked), inbox notes added or deleted with an API key (audit.inbox_note.created, .deleted) and webhooks paused or resumed (webhook.paused, webhook.resumed). |
Only these event types are returned, and only the fields listed below. The actor is shown as stored: system, system:<source>, user:<id> or api_key:<id> (with :agency:<workspace> when the key was acting as a client workspace). Rows for an email account disappear when the account is deleted.
Paginate with the cursor: pass meta.nextCursor from one page as cursor on the next, until it is null. Rows that share a timestamp keep a stable order.
Query Parameters#
pageSizeintegerquerycursorstringquerymeta.nextCursor of the previous page.sourcestringquerycampaign_status, account_connection or event.sincestringqueryuntilstringqueryactorstringquerycampaignIdstringquerycampaign_status rows.accountIdstringqueryaccount_connection rows.Response#
dataarrayShow Entry
idstringatstringsourcestringcampaign_status, account_connection or event.typestringcampaign.state_changed.actorstringnull on rows written before actors were recorded.subjectobjectkind (campaign, email_account, reply, workspace, template, webhook, workspace_member, workspace_invite, api_key, inbox_note) and the id it points to.fromstringnull.tostringnull.reasonstringdetailstringnull.metaobjectpageSize and nextCursor (null on the last page).Entries are not edited or deleted by the API. Agency actions that created, renamed or deleted a client are recorded on the agency workspace; template and webhook rows on the workspace they belong to.
Errors#
| Status | Description |
|---|---|
401 | Missing, invalid, revoked or expired API key |
403 | API key does not have the required scope: read |
400 | cursor is not valid |
422 | source is not one of the three values, or pageSize is outside 1 to 100 |
Rate Limit#
- 300 requests per minute, shared by every
readcall in your workspace. Fixed 60-second window. - Every response includes
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset(unix epoch seconds) andX-RateLimit-Bucket(read). - A
429response includes aRetry-Afterheader (seconds until the bucket resets).
For client-side patterns, see Rate Limiting.