Upgrading from v1.x?

The v2.0 release contains breaking changes to authentication, the case model, and the exception hierarchy. See the migration guide for a step-by-step upgrade path.

v2.0.0 March 2026 Major release
  • Breaking Authentication: api_key parameter renamed to match environment variable (api_key= still works but logs a deprecation warning). OAuth 2.0 client credentials are now the recommended auth method for production — see the authentication guide.
  • Breaking Case model: case.type renamed to case.case_type (Python) / case.caseType (Node.js) to avoid shadowing Python's built-in type. All serialized JSON uses case_type.
  • Breaking Exception hierarchy: CaseForgeAPIError renamed to APIError. CaseForgeRateLimitError renamed to RateLimitError. All exceptions now live under caseforge.exceptions (Python) or the root module (Node.js).
  • Breaking cases.list() now returns an iterable object instead of a plain list. Use list(cases) in Python or spread ([...cases]) in Node.js if you need random access.
  • New SAR filing API: client.sars.create() and client.sars.submit() — structured FinCEN Form 111 field mapping with server-side validation.
  • New Watchlist screening: client.watchlists.screen() — screen entities against all active watchlists in a single call, with confidence scoring.
  • New Transaction search: client.transactions.search() — full-text and field-level search across a subject's transaction history.
  • New Idempotency key support on all write operations. Pass idempotency_key= (Python) or idempotencyKey: (Node.js) to make retries safe.
  • New TypeScript: Full type definitions are now bundled with the Node.js package. @types/caseforge is no longer needed.
  • Fixed Pagination: cases.list() cursor pagination no longer skips the last item on page boundaries when limit is an exact multiple of the page size.
v1.3.0 February 2026
  • New Built-in retry logic for 429 and 503 responses. Configure with max_retries= (default: 2) and retry_backoff_factor= (default: 0.5).
  • New Case history endpoint: client.cases.history(case_id) returns a full audit trail of status changes, notes, and assignments.
  • Deprecated client.cases.fetch() is deprecated. Use client.cases.get() instead. fetch() will be removed in v2.0.
  • Fixed Node.js: Fix a race condition in token refresh where two concurrent requests could both attempt to acquire a new OAuth token simultaneously.
  • Fixed Python: ValidationError.param now correctly returns None instead of raising AttributeError when the error is not field-specific.
v1.2.1 January 2026 Patch
  • Fixed Python: cases.create() raised a KeyError when the API response did not include the optional assigned_to field. The field now defaults to None.
  • Fixed Node.js: timeout configuration value was ignored when using OAuth authentication. Timeout is now applied to both the token request and the subsequent API call.
v1.2.0 January 2026
  • New Case tagging: cases.create() and cases.update() now accept a tags list for classification and search filtering.
  • New Bulk case closure: client.cases.close_bulk(case_ids, resolution=) closes up to 100 cases in a single API call.
  • Fixed Python: Resolved a UnicodeDecodeError when case summaries contained non-ASCII characters in the response body on Windows.
v1.1.0 December 2025
  • New Case assignment: cases.assign(case_id, analyst_id) and cases.unassign(case_id) — dedicated methods for queue management.
  • New Python: The SDK now supports Python 3.9, 3.10, 3.11, and 3.12. Python 3.8 is no longer supported.
  • Fixed Requests to paginated list endpoints no longer include a redundant offset=0 query parameter on the first page.
v1.0.0 November 2025 Initial release
  • NewInitial SDK release for Python 3.9+ and Node.js 18+.
  • NewCase management: create, get, list, update, and close cases.
  • NewSubject management: create and retrieve subject profiles.
  • NewAPI key authentication with environment variable support.
  • NewFull typed exception hierarchy with request_id on every error for support escalation.