Handle errors by type
The SDK maps status codes to typed errors — AuthenticationError (401), ValidationError (400), NotFoundError (404), QuotaExceededError (429). A 429 is a monthly budget, so it is never retried; branch on the type and handle each.
1.Trigger a 404 and branch on the error
Fetching a non-existent id raises NotFoundError. Catch the base type to handle every case.
try {
await api.nba.teams.get(999999999)
console.log('unexpectedly found a team')
} catch (err) {
// Every SDK error is a StatApiError subclass carrying .status and .body.
// @stat-api/client also exports NotFoundError / AuthenticationError /
// ValidationError / QuotaExceededError for instanceof checks.
const e = err as { status?: number; body?: { message?: string } }
if (e.status === 404) console.log('404 NotFoundError: no such team')
else if (e.status === 401) console.log('401 AuthenticationError: bad or missing API key')
else if (e.status === 400) console.log(`400 ValidationError: ${e.body?.message ?? 'bad request'}`)
else if (e.status === 429) console.log('429 QuotaExceededError: monthly quota spent — never retried')
else throw err
}The complete program
Every step as one runnable file. It reads STAT_API_KEY from the environment, and is the same file that ships in the cookbook project for each SDK.
import { StatApi } from '@stat-api/client'
const api = new StatApi() // reads STAT_API_KEY from the environment
// Trigger a 404 and branch on the error
try {
await api.nba.teams.get(999999999)
console.log('unexpectedly found a team')
} catch (err) {
// Every SDK error is a StatApiError subclass carrying .status and .body.
// @stat-api/client also exports NotFoundError / AuthenticationError /
// ValidationError / QuotaExceededError for instanceof checks.
const e = err as { status?: number; body?: { message?: string } }
if (e.status === 404) console.log('404 NotFoundError: no such team')
else if (e.status === 401) console.log('401 AuthenticationError: bad or missing API key')
else if (e.status === 400) console.log(`400 ValidationError: ${e.body?.message ?? 'bad request'}`)
else if (e.status === 429) console.log('429 QuotaExceededError: monthly quota spent — never retried')
else throw err
}