Scoring responses and webhooks now include criteriaVersionId
Scoring job HTTP responses and score.completed / score.failed webhook payloads now include criteriaVersionId. Use this field to identify which criteria snapshot was used for scoring, and fetch it via GET /v1/jobs/{jobId}/criteria/versions/{criteriaVersionId}.This is an additive change. No existing fields were removed or renamed.Criteria version endpoints moved under /criteria/versions
Criteria version operations now use a nested URL structure:GET /v1/jobs/{jobId}/criteria/versions/currentGET /v1/jobs/{jobId}/criteria/versionsGET /v1/jobs/{jobId}/criteria/versions/{criteriaVersionId}
Bucket-based rate limiting
Rate limiting now uses a per-bucket, per-second model scoped by partner and environment. Every authenticated/v1/* request is classified into one of five buckets, each with its own limit:| Bucket | Limit | Endpoints |
|---|---|---|
criteria_ai | 2 req/s + 4 concurrent | Question sets, criteria generations |
scoring_intake_batch | 1 req/s | Scoring batches |
scoring_intake_single | 10 req/s | Single scoring jobs |
read_and_ops | 20 req/s | All other reads and operations |
rate_limit_status | 2 req/s | Rate limit status endpoint |
- All endpoints are now rate-limited, not just scoring endpoints
- New headers:
X-RateLimit-Bucketidentifies which bucket a request was classified into,X-RateLimit-Degradedsignals when rate limiting is operating in degraded mode GET /v1/rate-limit-statusnow returns per-bucket breakdown with in-flight concurrency status. No longer requiresX-Tenant-Id- Scoring batch size reduced from 100 to 25 applications per request
- Fail-open posture: if the rate limiting backend is temporarily unavailable, requests pass through rather than being blocked
Get Score by Application: Look up scores without a scoring job ID
New endpointGET /v1/jobs/{jobId}/applications/{applicationId}/score retrieves the latest scoring result using just the job ID and application ID. No need to persist Nova’s scoringJobId.Use it when your integration doesn’t store scoring job IDs, after a rescore to get the latest result, or to build dashboards that show scores by application.Learn more →Simplified scoring status values
Scoring job and batchstatus values are now simplified to a 3-state model:pending: Not finished yetcompleted: Finished successfullyfailed: Finished with an error. For batches, this includes partial failures
- Scoring job
statusno longer returnsPROCESSING - Batch
statusno longer returnsIN_PROGRESSorPARTIAL_FAILURE batch.completedwebhook payloadstatusnow usescompletedorfailed
Criteria Library: Store and reuse criteria across jobs
Build a library of reusable screening criteria at the tenant level. Save commonly-used criteria once, then add them to any job with a single API call.New endpoints:GET /v1/criteria-library- List library criteriaGET /v1/criteria-library/{criterionId}- Get a library criterionPOST /v1/criteria-library- Add a criterion to the libraryPATCH /v1/criteria-library/{criterionId}- Update a library criterionDELETE /v1/criteria-library/{criterionId}- Remove from library
- Tenant-scoped: Each of your customers has their own isolated library
- Reusable: Use library criteria as templates when building job-scoped criteria