Skip to main content
Both clients return a result containing the HTTP status, parsed page, not_modified (Python) / notModified (TypeScript), and selected response headers. APIError exposes status, problem code, request ID, structured problem and safe headers. Configuration/transport/protocol failures raise ClientError. No client automatically retries, logs a key or includes a raw response body in a transport exception. Transport timeouts or disconnects have an unknown delivery outcome. A completed data page may have been charged. Check free account usage by request ID where available; do not silently retry or create a fresh billing mutation UUID. Refunds and payment invoices are separate from API credit counters.

Conditional requests

Explicitly bounded pages

Use meta.next_cursor unchanged with the same filters. Cursors bind query, scope, namespace and semantic data. A 409 requires an explicit fresh traversal; the client never restarts it automatically. The helpers below stop at the requested bound, propagate errors, and detect cursor cycles. Each successful page costs one credit.
Only completed successful data deliveries consume a credit, including empty/insufficient pages. Errors, 304, account/control/coverage and WebSocket messages are free, including at zero quota. X-Oddswire-Credits-*, X-Oddswire-Credit-Cost, X-Oddswire-Usage-State and X-Request-ID are admission/delivery metadata; free usage introspection is the final account authority.