Skip to main content
The Logs page shows API request history for the account. It is separate from Activity, which tracks administrative actions like key changes and webhook modifications. Use logs to debug integration issues, monitor endpoint usage, audit access patterns, and investigate incidents using status codes, error codes, and timestamps.

Access control

All roles can view and export logs. There are no create, edit, or delete actions for individual rows.

What is captured

FieldTypeDescription
API keystringKey name and prefix
MethodstringHTTP method (GET, POST, PUT, DELETE)
EndpointstringFull API path
ParamsstringSanitized query string, when present
Status codeintegerHTTP response status code
Error codestringBabySea error code, when the request failed
IP hashstringSHA-256 hash of the client IP — never the raw address
TimestampdatetimeWhen the request was recorded

IP privacy

BabySea never stores raw IPs. Every address is hashed with SHA-256 before storage — one-way and irreversible. The table shows the first 12 characters followed by . You can still correlate requests from the same source using the hash. See the IP hash correlation section below.

Log immutability

Logs cannot be edited or deleted from the console. They are removed automatically by the retention system or when the associated API key is permanently deleted. Aggregated statistics (usage charts, request counts) are preserved even after individual rows expire.

Viewing logs

Navigate to Logs in the sidebar. Use the fullscreen icon (top right) for more space when auditing wide data.

Table columns

ColumnDescription
SelectCheckbox for batch selection
APIKey name, prefix, and status icon
MethodHTTP method
EndpointFull API path
ParamsSanitized query string
StatusHTTP response status code, color-coded
Error codeBabySea error code if the request failed
IP hashSHA-256 hash of client IP
TimestampLocalized date and time

Status code colors

ColorRangeMeaning
Green2xxSuccess
Blue3xxRedirect
Amber4xxClient error
Red5xxServer error

Key status icons (API column)

StateColorMeaning
ActiveDefaultKey is active and healthy
RotatedIndigoKey was rotated — replacement is active
ExpiredRedKey passed its expiration date
InactivePinkKey is inactive
The search field filters the current page against: key name, key prefix, method, endpoint, params, status code, error code, and IP hash. Results update as you type.

Pagination and sorting

The table shows 500 rows per page. All columns are sortable. Batch selection and export apply to the current page only.

Reading a log entry

Successful request:
API: production-api (bye_AB12C...)  Method: POST
Endpoint: /v1/generate/image/flux-pro
Status: 200  Error code: —  Timestamp: Mar 6, 12:30
Failed request:
API: staging-key (bye_XY98Z...)  Method: POST
Endpoint: /v1/generate/image/flux-pro  Params: duration=5&resolution=720p
Status: 401  Error code: BSE1001  Timestamp: Mar 6, 14:15

Retention

Logs are retained based on your plan and automatically purged when they expire. Aggregated statistics are always preserved.
PlanRetention
Free1 day
Starter7 days
Pro30 days
Scale180 days
Enterprise1 year
Key deletion immediately removes all live log rows for that key, regardless of the retention period. Aggregated statistics are preserved before deletion. Plan changes apply the new retention window on the next cleanup pass. Rows already deleted under a shorter window cannot be recovered.
Deleting an API key permanently removes all its log history. Export before deleting if you need to preserve the data.

Export

Select rows using the checkbox column, then open the Actions menu.
SelectionHow
Single rowClick the row checkbox
Multiple rowsClick each row’s checkbox
All on pageClick the header checkbox

Export actions

ActionResult
Copy as CSVCopies selected rows as CSV to clipboard
Copy as JSONCopies selected rows as a JSON array to clipboard
Export as CSVDownloads a .csv file
Export as JSONDownloads a .json file
Use file export (not clipboard) for large datasets — clipboard operations may truncate.

Export formats

JSON:
[
  {
    "apikey_name": "production-api",
    "apikey_prefix": "bye_AB12C",
    "method": "POST",
    "endpoint": "/v1/generate/image/flux-pro",
    "query_params": null,
    "status_code": 200,
    "error_code": null,
    "ip_hash": "a1b2c3d4e5f6...",
    "timestamp": "2026-03-06T12:30:45.000Z"
  }
]
CSV:
apikey_name,apikey_prefix,method,endpoint,query_params,status_code,error_code,ip_hash,timestamp
production-api,bye_AB12C,POST,/v1/generate/image/flux-pro,,200,,a1b2c3d4e5f6,2026-03-06T12:30:45.000Z
staging-key,bye_XY98Z,POST,/v1/generate/image/flux-pro,duration=5&resolution=720p,401,BSE1001,f6e5d4c3b2a1,2026-03-06T14:15:22.000Z
Note: user_agent is not included in UI exports.

Export before deleting a key

1

Open Logs

Navigate to Logs in the console.
2

Filter by key

Search by key name or prefix.
3

Select all matching rows

Click the header checkbox. Repeat across pages if needed.
4

Download the export

Click Export as JSON or Export as CSV.
5

Delete the key

Navigate to API keys and delete.

Debugging and monitoring

Debugging a failed request

1

Find the request

Search by error code (e.g. BSE4006) or status code (e.g. 401).
2

Check the error code

BabySea error codes indicate the specific failure reason. See Error Codes.
3

Check the key status

If the key icon shows expired or revoked, that explains auth failures.
4

Check the endpoint and scope

Verify the path is correct and the key’s scope covers it. See Scopes.
5

Check the IP hash

If the key has an IP allowlist, compare the log’s IP hash with your expected source. Mismatches return 403. See IP allowlist.

Common error codes

CodeStatusDescription
BSE1001401Missing API key
BSE1002401Invalid or expired API key
BSE1003403Key does not have permission for this resource
BSE1004402Insufficient credits
BSE1007403IP not in allowlist

Error patterns to watch

PatternLikely cause
Spike in 401 responsesKey is invalid, expired, or revoked
Repeated 403 from one keyKey scope doesn’t match the endpoint
Burst of 429 responsesRate limiting or retry pressure
Increasing 500 responsesServer-side issue — check BabySea Status

Security review targets

TargetWhat to look for
Unauthorized access401/403 from unexpected IP hashes
Unusual endpointsRequests to paths your app shouldn’t use
Off-hours activityRequests when your application should be idle
Unknown key namesLog entries from keys you don’t recognize

IP hash correlation

Raw IPs are never stored, but you can hash a known IP to compare against exported log data:
TypeScript
import { createHash } from 'crypto';

const knownIp = '203.0.113.10';
const hash = createHash('sha256').update(knownIp).digest('hex');
const prefix = hash.substring(0, 12);

console.log(`Look for entries starting with: ${prefix}`);

Export schedule by plan

If your organization requires longer retention than your plan provides, export on a regular schedule before logs age out:
PlanRetentionRecommended export frequency
Free1 dayDaily
Starter7 daysWeekly
Pro30 daysMonthly
Scale180 daysQuarterly
Enterprise1 yearQuarterly
Store exported files in a secure, access-controlled location — they contain API key prefixes and endpoint patterns.