Request logs

Every call your keys make is recorded and shown to you, on your own dashboard, with enough to work out what happened and nothing that should not be stored.

What a line holds

FieldWhat it is
WhenThe moment the gateway saw it.
Request idA stable identity for the call. Safe to send anybody, and the thing to quote in a support request.
ProjectWhich project the key belonged to.
Network and methodWhat was asked, and where.
OutcomeANSWERED, or one of seven refusals: malformed, unauthenticated, forbidden, rate limited, quota exceeded, refused, unavailable.
Status and latencyWhat the caller got, and how long the gateway took end to end.

What it can never hold

No request body. No response body. No headers. No API key, in any form. This is not a redaction step that could be forgotten — the usage record has never had fields for any of them, so there is nothing to strip and no way for a later change to start including one.

A request id identifies a call. A request body contains one. That is the whole distinction, and it is why quoting an id in a support request is safe and pasting a body is not.

Reading a refusal

The outcome tells you whose problem it is:

  • FORBIDDEN — usually OUT_OF_SCOPE: the key does not carry that network or that method. Look at the key, not the project.
  • RATE_LIMITED or QUOTA_EXCEEDED — a Beta limit. The refusal names which one and when it returns.
  • REFUSED — the engine understood and declined. The response carried detail.engine_said, which says what to change.
  • UNAVAILABLE — sources could not be reached. This one is about somebody else’s service, and backing off is the right response.

Retention

The log is bounded: the newest calls are kept and older ones are dropped. It is an operational record for working out what happened this week, not an archive and not a billing ledger. Nothing on this deployment is billed.

Where to find it

The usage page in your dashboard, under each project, alongside the counts of requests, answers, refusals and response bytes. An operator sees the same records through the operator console; the fields are identical, because it is the same record.

The error model → · Getting help →