List a source's log entries
curl "https://api.summerbase.com/v1/sources/:source_id/log" \ -H "Authorization: Bearer sb_..."const response = await fetch("https://api.summerbase.com/v1/sources/:source_id/log", { headers: { Authorization: "Bearer sb_...", },})const data = await response.json()One source’s log, newest first. Entries are kept for thirty days.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The source whose log to read.
Example
0198f1a3-0b7c-7e25-9f41-6a2d8c3e5b19Query Parameters
Section titled “Query Parameters”How many records to return, 1 to 100. Defaults to 20.
The next_cursor of the previous page, to read the page after it.
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.
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.
Response
Section titled “Response”Returns a list of the source’s log entries, newest first.
A page of results.
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
The entry’s unique identifier.
How much it should worry the person reading it.
What happened, in a sentence.
The object’s type, always source_log_entry.
When it happened.
The source whose log this is. Expandable.
object
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.
When the source was added.
The source’s unique identifier. Records are identified by its slug.
When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.
How far the running import has got, from 0 to 1, or empty while it does not know yet.
When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.
What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.
When the last import finished, or empty when none has.
What the source is called, for people reading a screen.
The object’s type, always source.
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.
The project the source belongs to.
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.
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.
Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.
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.
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.
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.
The source whose log this is.
The record the entry is about, as source:id, when it is about one.
What kind of record subject_ref names, when the entry is about one.
Whether another page follows this one.
Pass back as cursor to fetch the next page. Null on the last page.
How many records match altogether, counting every page. Only present when include_total_count=true was sent, on the first page.
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}