Default function timeout, in seconds. One second under API Gateway's
integration ceiling.
That ceiling is 29s and is NOT configurable for REST APIs. The previous
default of 30 sat ABOVE it, which is never right for an API-backed lambda: a
request in the 29-30s band returns 504 to the caller while the lambda keeps
running to completion and may still commit its work, so the caller retries
against work that already succeeded and nothing in the process records that
anyone saw an error. Exactly one such 504 (at 29,000ms, on
/v1/backoffice/events/utila/transactions) appears in the last 14 days of
prod access logs, alongside three Green Dot AUTH_COMMITs that failed the
same way on 2026-08-14. 28 makes the lambda lose first, so the outcome is one
thing rather than two, and the failure arrives as an exception Sentry can see.
18 of the 22 packages using this template put it behind LambdaRestApi, which
is why the ceiling belongs in the default rather than at each call site.
Anything that legitimately needs longer — and therefore cannot be behind a
REST API — passes timeout explicitly, as the backoffice reconciliation
handler already does at 60.
Default function timeout, in seconds. One second under API Gateway's integration ceiling.
That ceiling is 29s and is NOT configurable for REST APIs. The previous default of 30 sat ABOVE it, which is never right for an API-backed lambda: a request in the 29-30s band returns 504 to the caller while the lambda keeps running to completion and may still commit its work, so the caller retries against work that already succeeded and nothing in the process records that anyone saw an error. Exactly one such 504 (at 29,000ms, on
/v1/backoffice/events/utila/transactions) appears in the last 14 days of prod access logs, alongside three Green DotAUTH_COMMITs that failed the same way on 2026-08-14. 28 makes the lambda lose first, so the outcome is one thing rather than two, and the failure arrives as an exception Sentry can see.18 of the 22 packages using this template put it behind
LambdaRestApi, which is why the ceiling belongs in the default rather than at each call site. Anything that legitimately needs longer — and therefore cannot be behind a REST API — passestimeoutexplicitly, as the backoffice reconciliation handler already does at 60.