> For the complete documentation index, see [llms.txt](https://api-docs.helloaviary.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://api-docs.helloaviary.ai/actionlogs.md).

# ActionLogs

Audit trail of every configured action that ran on a call. External listings require `call_id` and are scoped to the caller's client; internal listings support broader filters.

## List action logs for one call (external)

> Returns the audit trail of configured actions that ran for a\
> specific call. \`call\_id\` is required — the endpoint won't list\
> across calls. Results are also filtered by the caller's client\_id\
> so a leaked call\_id from another client returns no rows rather\
> than 200.<br>

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"tags":[{"name":"ActionLogs","description":"Audit trail of every configured action that ran on a call. External\nlistings require `call_id` and are scoped to the caller's client;\ninternal listings support broader filters.\n"}],"servers":[{"url":"https://osprey.helloaviary.com/api","description":"Production"},{"url":"https://osprey-dev.helloaviary.com/api","description":"Development"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"API key for authentication"}},"parameters":{"Limit":{"name":"limit","in":"query","required":false,"description":"Page size (1-500). Default 50.","schema":{"type":"integer","minimum":1,"maximum":500,"default":50}},"Cursor":{"name":"cursor","in":"query","required":false,"description":"Opaque cursor returned in `meta.page.next_cursor` from the previous page.\nCurrently the last id of the previous page; treat as opaque.\n","schema":{"type":"string"}}},"schemas":{"ActionLogExternalListResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ActionLogExternal"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"ActionLogExternal":{"type":"object","required":["id","external_id","call_id","action_name","action_type","status","executed_at"],"description":"External slim projection of an action_logs row. Excludes\n`input_params_snapshot` and `output_result` because they can hold\nrendered customer PII or vendor API payloads.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"call_id":{"type":"integer","format":"int64"},"action_name":{"type":"string"},"action_type":{"type":"string"},"status":{"type":"string","description":"e.g. \"succeeded\", \"failed\", \"skipped\"."},"executed_at":{"type":"string","format":"date-time"},"error_message":{"type":"string","nullable":true}}},"ListMeta":{"type":"object","required":["request_id","page"],"properties":{"request_id":{"type":"string","format":"uuid"},"page":{"$ref":"#/components/schemas/PageInfo"}}},"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"$ref":"#/components/schemas/ErrorCode"},"message":{"type":"string"},"request_id":{"type":"string","format":"uuid"}}}}},"ErrorCode":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","conflict","internal_error","field_not_editable","call_already_started"]}}},"paths":{"/v1/action-logs":{"get":{"summary":"List action logs for one call (external)","description":"Returns the audit trail of configured actions that ran for a\nspecific call. `call_id` is required — the endpoint won't list\nacross calls. Results are also filtered by the caller's client_id\nso a leaked call_id from another client returns no rows rather\nthan 200.\n","operationId":"listActionLogsExternalV1","tags":["ActionLogs"],"parameters":[{"name":"call_id","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionLogExternalListResponse"}}}},"400":{"description":"Missing/invalid call_id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid X-Api-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}}}
```

## List action logs (internal, broad filters)

> Internal listing with optional filters across the whole table.\
> Time-range filters take a half-open \`\[from, to)\` interval to keep\
> adjacent pages from double-counting boundary rows. Both \`from\` and\
> \`to\` accept RFC3339 or YYYY-MM-DD.<br>

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"tags":[{"name":"ActionLogs","description":"Audit trail of every configured action that ran on a call. External\nlistings require `call_id` and are scoped to the caller's client;\ninternal listings support broader filters.\n"},{"name":"Internal","description":"Internal-only endpoints. Forbidden for external client keys."}],"servers":[{"url":"https://osprey.helloaviary.com/api","description":"Production"},{"url":"https://osprey-dev.helloaviary.com/api","description":"Development"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"API key for authentication"}},"parameters":{"Limit":{"name":"limit","in":"query","required":false,"description":"Page size (1-500). Default 50.","schema":{"type":"integer","minimum":1,"maximum":500,"default":50}},"Cursor":{"name":"cursor","in":"query","required":false,"description":"Opaque cursor returned in `meta.page.next_cursor` from the previous page.\nCurrently the last id of the previous page; treat as opaque.\n","schema":{"type":"string"}}},"schemas":{"ActionLogInternalListResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ActionLogInternal"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"ActionLogInternal":{"type":"object","required":["id","external_id","call_id","client_id","use_case_id","action_name","action_type","status","executed_at","created_at","updated_at"],"description":"Full action_logs row. `input_params_snapshot` and `output_result`\nare passed through as raw JSON so internal tooling can inspect\nwhatever the action handler stored.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"call_id":{"type":"integer","format":"int64"},"client_id":{"type":"integer","format":"int64"},"use_case_id":{"type":"integer","format":"int64"},"customer_id":{"type":"string","nullable":true},"action_attachment_id":{"type":"integer","format":"int64","nullable":true},"configured_action_id":{"type":"integer","format":"int64","nullable":true},"action_name":{"type":"string"},"action_type":{"type":"string"},"status":{"type":"string"},"executed_at":{"type":"string","format":"date-time"},"input_params_snapshot":{"nullable":true,"description":"Free-form JSONB snapshot of the action's input params at run time."},"output_result":{"nullable":true,"description":"Free-form JSONB result returned by the action handler."},"error_message":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"ListMeta":{"type":"object","required":["request_id","page"],"properties":{"request_id":{"type":"string","format":"uuid"},"page":{"$ref":"#/components/schemas/PageInfo"}}},"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"$ref":"#/components/schemas/ErrorCode"},"message":{"type":"string"},"request_id":{"type":"string","format":"uuid"}}}}},"ErrorCode":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","conflict","internal_error","field_not_editable","call_already_started"]}}},"paths":{"/internal/v1/action-logs":{"get":{"summary":"List action logs (internal, broad filters)","description":"Internal listing with optional filters across the whole table.\nTime-range filters take a half-open `[from, to)` interval to keep\nadjacent pages from double-counting boundary rows. Both `from` and\n`to` accept RFC3339 or YYYY-MM-DD.\n","operationId":"listActionLogsInternalV1","tags":["ActionLogs","Internal"],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"use_case_id","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"call_id","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"action_name","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","description":"RFC3339 timestamp or YYYY-MM-DD."}},{"name":"to","in":"query","required":false,"schema":{"type":"string","description":"RFC3339 timestamp or YYYY-MM-DD. Half-open upper bound."}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionLogInternalListResponse"}}}},"400":{"description":"Bad filter input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid X-Api-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"External key cannot reach internal scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://api-docs.helloaviary.ai/actionlogs.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
