Skip to content

API logs

Every request you made, with both bodies and the reason it failed.

Every call to the API is recorded: the method, the path, the status, how long it took, the headers and both bodies. When a call did not do what you expected, this is the only place that can tell you what you actually sent.

API logsstatus: error

last 24 hours
MethodEndpointStatusDurationVersion
POST/payments201412 ms2026-09-01
POST/payments/trx_CSUGajfv9xh0XQ5wu2lx20088 ms2026-09-01
POST/transfers201690 ms2026-09-01
POST/payments/trx_9mWvL2xR7tB5nY4hC6dF4021203 ms2026-09-01
GET/balance20042 ms2026-09-01
POST/payments5005012 ms2026-08-01

Filters

Nine filters, all combinable, all reflected in the URL so a filtered view can be shared.

FilterWhat it matches
SearchFull text over the URL, the request id, the IP, the method and the error message
Statussuccess for under 400, error for 400 and above, or one exact code
MethodGET, POST, PUT, PATCH, DELETE
EndpointA substring of the URL
IP addressA substring of the caller's IP
Date start, date endWhole calendar days
Min duration, max durationMilliseconds, for finding the slow tail

There is no query language

Search is plain text, not a syntax. status:5xx matches nothing, because it is looked for literally. Use the status selector for codes and the search box for strings.

Results are paginated 50 at a time, newest first.

What a row carries

FieldNote
request_idThe correlation id, also returned to you as X-Request-Id
method, path, full_urlThe full URL includes the query string
status_code, status_label
duration_msServer side, excluding your network
ip_addressThe caller
error_messagePresent only when the call failed
api_versionThe version this call was served with
api_key_id, secret_key_id, sync_key_id, pulse_key_idWhich key was used
slave_team_idSet when the call acted on a connected account

The key columns are the fastest way to find calls made by a component you forgot about: an old worker still holding a rotated key shows up as its own key id.

The detail panel

Selecting a row opens the full record: request headers, response headers, request body, response body, user agent and, when the call threw, the error trace.

This is where you settle arguments with yourself. The body shown is what the API received, after your framework, your HTTP client and your serialiser had their turn with it.

What is hidden, and what is deliberately not

Secrets are redacted before the log is written, so nothing sensitive is stored at all.

RedactedKept visible
Authorization, X-API-Key, Cookie, Grant-Authorization, X-Sync headersEvery other header
password, cvv, cvc, pin, pan, private_keyphone, email, name, address
card.number at any depth, and a bare number fieldaccount_number, iban, phone_number
exp_month, exp_year, expiry_dateAmounts, currencies, metadata, references

The second column is a deliberate decision: business fields stay readable because a log you cannot read is a log you cannot debug with. Card data is the only thing masked on principle.

Your key is never in the log

If you are looking for which key made a call, use the key id columns. The Authorization header itself is stored as ***REDACTED***.

Correlating with your own logs

Every API response carries X-Request-Id. Log it on your side, and any support conversation or Konsole search becomes a single lookup instead of a hunt through timestamps.

curl -i https://api.wajub.com/payments \
-H "Authorization: sk.kZ3qP8mWvL2xR7tB5nY4hC6dF9jS1aG0eU3i…" \
-d amount=25000 -d currency=XAF \
| grep -i x-request-id

Export

The current filter set can be exported as CSV or JSON, capped at 10,000 rows per export. The CSV carries the id, method, path, status, duration, IP, error and timestamp; the JSON carries the full records.

Exports count against your plan's monthly max_exports allowance. Past it, the export returns a 403 telling you so rather than a truncated file.

What did you think of this content?