Skip to content

List a source's log entries

GET
/v1/sources/:source_id/log
curl "https://api.summerbase.com/v1/sources/:source_id/log" \
-H "Authorization: Bearer sb_..."

One source’s log, newest first. Entries are kept for thirty days.

source_id
required
string format: uuid

The source whose log to read.

Example

0198f1a3-0b7c-7e25-9f41-6a2d8c3e5b19
limit
integer
default: 20 >= 1 <= 100

How many records to return, 1 to 100. Defaults to 20.

cursor
string

The next_cursor of the previous page, to read the page after it.

include_total_count
boolean

Whether to add total_count, how many records match altogether. On the first page only: it is the same number on every page of one list, so keep the first page’s, and it is refused beside a cursor.

expand[]
Array<string>
<= 10 items
Allowed values: source

Relationships to include in the response instead of fetching separately. A dotted path expands what an expanded record can expand in turn — at most 4 deep, 10 paths a request, and never back to a record already on the path.

Returns a list of the source’s log entries, newest first.

Media typeapplication/json

A page of results.

object
data
required
Array<object>

A source log entry is one line of a source’s log: something a person setting up or watching the integration should know, such as how an import went or a record that could not be written.

object
id
required

The entry’s unique identifier.

string format: uuid
level
required

How much it should worry the person reading it.

string
Allowed values: info warning error
message
required

What happened, in a sentence.

string
>= 1 characters <= 2000 characters
object
required

The object’s type, always source_log_entry.

string
Allowed values: source_log_entry
recorded_at
required

When it happened.

string format: date-time
source

The source whose log this is. Expandable.

object
connected_at

When a provider source was given its credential, or empty: a provider source that has not been connected yet or has been disconnected, and every source that is not a provider’s.

string format: date-time
created_at
required

When the source was added.

string format: date-time
id
required

The source’s unique identifier. Records are identified by its slug.

string format: uuid
import_failed_at

When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.

string format: date-time
import_progress

How far the running import has got, from 0 to 1, or empty while it does not know yet.

string format: decimal
import_started_at

When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.

string format: date-time
import_step

What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.

string
imported_at

When the last import finished, or empty when none has.

string format: date-time
name
required

What the source is called, for people reading a screen.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always source.

string
Allowed values: source
priority
required

Where this source sits when resolving name and email. Lower wins, and the project’s own source starts at the top so a manual correction outranks a provider sync. It orders nothing else — every other property is namespaced by source and never arbitrated.

integer
project_id
required

The project the source belongs to.

string format: uuid
provider_account_id

The provider’s own id for the account the source is connected to: acct_… for Stripe. Kept through a disconnect, so that connecting again is checked against it.

string
provider_code
required

The code of the system the source pulls from. custom is a source you write to yourself, and the only one that accepts writes; stripe is connected with connect_stripe and fetches for itself.

string
Allowed values: custom stripe summerbase
sandbox

Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.

boolean
slug
required

How this source’s records are identified — the stripe in stripe:cus_123. Lowercase letters, digits, hyphens and underscores; unique within the project and fixed once the source exists, because integrations hard-code it. A reference shaped like an id is read as one, so a slug may not look like a UUID.

string
>= 1 characters <= 100 characters
webhook_installed_at

When the provider’s webhook was installed for this source — by the connection, or by hand and registered with register_stripe_webhook — or empty: nothing is connected, or the source is connected without a webhook and its changes arrive with the hourly reconcile.

string format: date-time
webhook_url

Where the provider posts this source’s events: the address of the endpoint a connection installs, and of one to install by hand. Empty for a source whose provider posts no webhooks.

string
source_id
required

The source whose log this is.

string format: uuid
subject_ref

The record the entry is about, as source:id, when it is about one.

string
<= 320 characters
subject_type

What kind of record subject_ref names, when the entry is about one.

string
Allowed values: customer subscription subscription_item plan price
has_more
required

Whether another page follows this one.

boolean
next_cursor

Pass back as cursor to fetch the next page. Null on the last page.

string
object
required
string
Allowed values: list
total_count

How many records match altogether, counting every page. Only present when include_total_count=true was sent, on the first page.

integer

Example

{
"data": [
{
"id": "019a0c11-3d4e-7f5a-9b6c-7d8e9f0a1b2c",
"level": "info",
"message": "Subscription stripe:sub_1QhT5uV7wX9yZ2aB updated: items.",
"object": "source_log_entry",
"recorded_at": "2026-06-12T15:47:11Z",
"source_id": "0198f1a3-0b7c-7e25-9f41-6a2d8c3e5b19",
"subject_ref": "stripe:sub_1QhT5uV7wX9yZ2aB",
"subject_type": "subscription"
}
],
"has_more": false,
"next_cursor": null,
"object": "list",
"total_count": 1
}