Skip to main content

Query Reactor Logs

Query the runtime-log records a Reactor produced. See Runtime Logs for what is captured and how to enable it.

List Reactor Logs​

Get a page of individual runtime-log records for one Reactor, newest first.

reactor.log events returned by List Events contain batches of records. This endpoint returns individual records for one Reactor, so you can search by message without receiving the neighboring records in the same batch. Records come from the same search backend as events, so searchable history, consistency, and availability work as described for Events.

GET
https://api.basistheory.com/reactors/{id}/logs
Copy

Permissions​

log:read

A Basis Theory user token with log:read and tenant:read is also accepted. See Events authentication for the credential rules.

Request​

curl --globoff "https://api.basistheory.com/reactors/<REACTOR_ID>/logs?message[search_words]=payment%20failed" \
-H "BT-API-KEY: <PRIVATE_API_KEY>"

URI Parameters​

ParameterRequiredTypeDefaultDescription
idtrueuuidnullThe ID of the Reactor. A Reactor that does not exist or belongs to another Tenant returns an empty page.

Query Parameters​

ParameterRequiredTypeDefaultDescription
start_datefalsedate24 hours before end_dateReturns records whose occurred_at is greater than or equal to this value. Same format and clamping as List Events.
end_datefalsedateTime of the requestReturns records whose occurred_at is less than this value. A future value is lowered to the time of the request.
sizefalseinteger20Maximum number of unique records to return, from 1 to 100.
startfalsestringnullCursor from a previous response's pagination.next.
sourcefalsestringnullExact record origin: application or platform.
record_typefalsestringnullExact record kind: log or lifecycle.
trace_idfalsestringnullExact, case-sensitive trace ID.
levelfalsestringnullExact, case-sensitive level, such as error.
eventfalsestringnullExact, case-sensitive lifecycle event, such as execution.completed.
outcomefalsestringnullExact, case-sensitive outcome, such as timeout.
messagefalsestringnullExact, case-sensitive message. An empty string is a valid value.
message[search_words]falsestringnullReturns records whose message contains all of these words, in any order, ignoring case. Leading and trailing whitespace is trimmed and repeated whitespace collapsed; the result must not be empty and is limited to 256 characters. Punctuation-only input matches nothing.

All filters combine with AND, and message and message[search_words] can be used together. transform_type is rejected on this endpoint. Each parameter accepts a single value; unknown or repeated parameters return 400. A request accepts at most 36 query parameters. Values are limited to 1,024 characters, except start, which allows 12,000.

Ordering and Pagination​

Records are sorted by occurred_at, newest first, then by the record's position within its invocation, then by id. Responses use the cursor paginated object. pagination.page_size is the number of records returned, pagination.next is null when there are no more results, and no total count is returned.

To get the next page, send pagination.next as the start parameter. The cursor carries the original filters, dates, and size, so start alone is enough; if you send those parameters again, they must match. Cursors are opaque and bound to your Tenant, this endpoint, and the Reactor that issued them. A short page can still have a next cursor, so keep paging until next is null. Each page re-checks your permissions and current searchable history. An invalid or expired cursor returns 400 with errors.start set; restart the query without start.

Each page suppresses repeated record IDs, but polling for late-arriving records can return a record more than once; deduplicate by id. Records written before runtime-log search was activated for your Tenant's region are not available.

Response​

Returns a cursor paginated object with the data property containing an array of runtime-log records. Returns an error if the records could not be retrieved; the statuses and formats are the same as for Events.

{
"data": [
{
"id": "3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d",
"occurred_at": "2026-09-16T12:00:00.450Z",
"source": "platform",
"record_type": "lifecycle",
"event": "execution.completed",
"trace_id": "example-trace",
"outcome": "application_error",
"duration_ms": 412
},
{
"id": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb",
"occurred_at": "2026-09-16T12:00:00.310Z",
"source": "application",
"record_type": "log",
"level": "error",
"trace_id": "example-trace",
"message": "payment failed",
"attributes": {
"order": "order-1"
}
}
],
"pagination": {
"next": null,
"page_size": 2
}
}

Runtime Log Object​

A field is omitted when it does not apply to the record. See Runtime Logs for the values each field can take.

AttributeTypeDescription
idstringStable identifier of the record, 64 hexadecimal characters. It stays the same across retries and repeated delivery; use it to deduplicate. Not filterable.
occurred_atdateWhen the record occurred, in ISO 8601 format. start_date and end_date filter on this field.
sourcestringapplication for records from your code or platform for lifecycle records.
record_typestringlog for application records or lifecycle for platform records.
levelstring(Optional) Level of an application record.
eventstring(Optional) Lifecycle event, such as execution.started or execution.completed.
trace_idstring(Optional) Trace ID of the invocation.
transform_typestring(Optional) request_transform or response_transform. Proxy records only.
messagestring(Optional) Message of an application record. May be null.
outcomestring(Optional) Outcome of a completed invocation.
duration_msnumber(Optional) Execution time of a completed invocation, in milliseconds.
errorobject(Optional) Error details from an application record. Returned for display only; not searchable.
attributesobject(Optional) Structured attributes from an application record. Returned for display only; not searchable.