Changelog
Versions of the API and the SDKs, newest first. The API version is the version of the published contract, which the interactive reference renders; an assessment states the version of its body shape in schema_version.
| Version | What it is |
|---|---|
1 |
The current contract. Five routes: POST /v1/assessments, GET /v1/assessments/{assessment_id}, POST /v1/assessments/{assessment_id}/outcomes, POST /v1/assessments/query and POST /v1/keys/rotate. Two webhook events: assessment.updated and endpoint.verification. Assessments, assessment pages and webhook payloads carry schema_version: "1". |
The reason code list, the enums and the field limits are part of the contract and change only with a new version of it. The policy that weighs the reasons is versioned separately in policy_version and can change between contract versions; branch on codes, not weights.
Every SDK is generated from the API contract, so a contract change reaches all of them in the same release. All are at 2.x.
| Language | Package | Install |
|---|---|---|
| Node | @noresponse/node |
npm install @noresponse/node |
| Python | noresponse |
pip install noresponse, source at github.com/noresponsehq/python |
| Go | github.com/noresponsehq/go/v2 |
go get github.com/noresponsehq/go/v2, source at github.com/noresponsehq/go |
| Java | com.github.noresponsehq:java |
Gradle or Maven through JitPack, see Java |
| C# | NoResponse |
From github.com/noresponsehq/dotnet, see C# |
| PHP | noresponse/noresponse-php |
Composer with a VCS repository, see PHP |
| Ruby | noresponse |
From github.com/noresponsehq/ruby, see Ruby |
The SDKs share one shape. This release breaks every 1.x integration; the changes are the same in each language.
- Methods moved onto resources.
assessbecameassessments.create,getAssessmentbecameassessments.get,queryAssessmentsbecameassessments.queryandrecordOutcomebecameassessments.recordOutcome, in each language’s casing. Node, Python and Go also have a wait helper for a pending assessment. - Requests nest their fields as the API does:
identifiersholds the email, username, phone, name and IP, andpolicy_contextholds the flow and region. - The client has defaults. The base URL is
https://api.noresponse.organd the key is read fromNORESPONSE_API_KEYwhen you do not pass one;NORESPONSE_BASE_URLoverrides the host. The per-request timeout default rose from 5 to 10 seconds. - The idempotency key is generated when you omit it and is reused across retries of that call.
- One error hierarchy with a class per status (
BadRequestError,AuthenticationError,PermissionDeniedError,NotFoundError,ConflictError,RateLimitError) and a general class for every other status. Every error carries the problemtitle,detail,code, request id and, on a 400, the invalid parameters. - Retries cover connection errors, timeouts and 408, 429 and 5xx answers, with backoff from 500 milliseconds to 8 seconds for at most 30 seconds in all.
Retry-Afteris honoured. assessments.queryreturns a page withitems, a next-page cursor and a way to iterate every item across pages.keys.rotateadded forPOST /v1/keys/rotate.- Response headers are exposed beside the returned model: the request id,
Retry-After,Locationand whether an idempotent request was replayed. - Webhook helpers verify the raw body and return a typed event. The expiry event is a distinct type rather than an error, and
endpoint.verificationhas a response helper. - Auth adapters turn verified WorkOS, Clerk, Auth0, Supabase, Firebase or generic OIDC claims into
auth_context. - Python: the import name is now
noresponse, matching the package name. Async code uses the same client with_asyncmethods. - Go: the module is public at
github.com/noresponsehq/go/v2and every call takes acontext.Contextfirst. - Node: the package ships ESM and CommonJS builds and runs on Node 20 or later.
The last release with the flat method surface, a single error class and a required base URL. Node and Python only.