Send files. Receive scores, bands and reports. The models never leave the house.
The connector is a small web service. Each call carries your files and a few settings, runs one job and returns the finished deliverables with a record of what was sent and what came back.
One key, one job per call, one synchronous answer.
- 1.Criterica issues a key for your connection. Send it on every call in the header X-Criterica-Key. The key is tied to your organization and to the job types connected to it.
- 2.Send one job per call as multipart form data: your files under the field names for that job type, and settings as form fields. Anything not listed for the job type is rejected.
- 3.Every call is synchronous. A job takes seconds to about a minute and returns the finished job.
- 4.A successful call returns the job id, the status, the outputs (name, sha256, page count, download path), the method version that produced them and your usage for that job type this quarter.
- 5.Every call is recorded. Results are visible only to the key that requested them.
Five calls.
| Method | Path | What it does |
|---|---|---|
| POST | /v1/jobs/{job_type} | Upload files and settings as multipart form data. Returns the finished job. |
| GET | /v1/jobs/{job_id} | The record of one job: what was sent, when, what came back. |
| GET | /v1/jobs/{job_id}/files/{name} | Download one deliverable. |
| GET | /v1/usage?quarter=2026Q4 | Your statement for a quarter. Defaults to the current quarter. |
| GET | /v1/health | Service version and the job types it offers. |
Uploads are limited to 50 MB per call, one job per call. Dates are written YYYY-MM-DD.
What you can send and what comes back.
Files are sent under the field names below and settings as form fields. Defaults are shown in brackets.
| Job type | Files (field names) | Settings (default) | Comes back |
|---|---|---|---|
| closed_tape_read | tape | hurdle (0.20), hurdle_basis (total or annual; total), servicing (0.02), cutoff (auto or a date; auto) | Closed-tape read, PDF |
| closed_docket_read | docket | cutoff (auto) | Closed-docket read for a law firm, PDF |
| product_economics | tape | hurdle (0.20), hurdle_basis (total), servicing (0.02), cutoff (auto) | Product economics, PDF |
| decline_rules | tape | hurdle (0.20), cutoff (auto) | Decline rules read, PDF |
| snapshot | schedule, evidence | matter (required), cutoff | One-matter snapshot, PDF |
| underwrite | schedule, evidence | matter (required), cutoff | One-matter underwriting memo, PDF |
| portfolio | schedule, evidence | advance_pct (0.20), rate (0.18), cutoff | Portfolio report, PDF, plus the model and scenarios CSVs |
| capital | model; optional scenarios | advance (0.20), rate (0.18), fee (0.02), servicing (0.01), maturity (36 months), compounding (false), sweep (0), sweep_trigger (1.0), funder, cutoff | Capital pack, PDF |
| marks | model, prior_model; optional scenarios, prior_scenarios | quarter (required), fund, cohort_field (filing_date), cutoff, prior_cutoff | Mark pack, PDF |
| monitor_run | watchlist | as_of (required), source (live) | Alert files for the day |
| monitor_pack | watchlist | as_of (required), prior (required), source (live) | Monitor pack, PDF, plus alert files |
| read_judge | evidence | matter (optional; must match the evidence file) | Judge intelligence, PDF |
| read_counsel | evidence | matter (optional; must match the evidence file) | Opposing counsel and defendant profile, PDF |
| read_settlement_window | evidence | matter (optional; must match the evidence file) | Settlement window and comparables, PDF |
| read_venue | evidence | matter (optional; must match the evidence file) | Venue and forum analysis, PDF |
| read_motion | evidence | matter (optional; must match the evidence file) | Motion read, PDF |
| read_trial | evidence | matter (optional; must match the evidence file) | Trial read, PDF |
| read_defendant | evidence | matter (optional; must match the evidence file) | Defendant read, PDF |
| read_international | evidence | matter (optional; must match the evidence file) | International read, PDF |
| deep_dive | schedule, evidence, questions | matter (required) | One-matter deep dive with question scenarios, PDF |
| reunderwrite | schedule, evidence, prior_schedule, prior_evidence | cutoff (required), prior_cutoff (required), advance_pct (0.20), rate (0.18) | Portfolio re-underwriting against the prior pack, PDF |
| collateral_read | facility, terms | none | Collateral read for a lender facility, PDF |
| lien_read | tape_lien | none | Lien read, PDF |
| closing_note | log | engagement (required) | Financing support closing note, PDF |
What each file must look like.
The intake specifications are named below. Each spec is sent with your key.
| File | Specification |
|---|---|
| tape | The Criterica intake spec "Funder tape" (sent with your key). Also used by product_economics and decline_rules. |
| docket | The Criterica intake spec "Firm docket". |
| schedule | The Criterica intake spec "Matter schedule". |
| evidence | The evidence pack JSON, schema criterica.evidence_pack.v1, supplied or agreed with Criterica. |
| watchlist | The Criterica watchlist spec. |
| evidence (read_* jobs) | One matter’s applied-read evidence JSON, per the reads evidence spec (sent with your key). |
| questions (deep_dive) | A JSON list of questions, each with question_id, question, category and an evidence block. |
| prior_schedule, prior_evidence (reunderwrite) | The schedule and evidence pack from the earlier cutoff. |
| facility, terms (collateral_read) | The Criterica intake spec "Lender facility" and its terms JSON. |
| tape_lien | The Criterica intake spec "Lien tape". |
| log (closing_note) | The question log CSV (date_received, type, question, answer_summary, sources, date_answered). |
| model, scenarios (capital, marks) | The two CSVs a portfolio job returns; send them back unchanged. |
A file that fails the intake check is not run.
The call returns status 422 with the problems in plain words, for example missing columns: law_firm or resolved_date: 3 rows are blank or not a date (use YYYY-MM-DD). Fix the file and send it again. Rejected files are not billed.
{
"job_id": "<job id>",
"status": "rejected",
"problems": ["missing columns: law_firm"],
"method_version": "<method version>"
}| Status | Meaning |
|---|---|
| 401 | A valid X-Criterica-Key header is required. |
| 403 | This key is not connected to that job type. |
| 404 | Unknown job type, no such job or no such file. |
| 413 | Upload exceeds 50 MB. |
| 415 | Send files and parameters as multipart/form-data. |
| 422 | The file did not pass the intake check. The problems are listed in plain words. Rejected files are not billed. |
Every call leaves a record you can check.
For each job the record holds the job id, your key id, the job type, when it was received, the names, sizes and sha256 of every file you sent, the settings used, the outcome (rejected, done or failed), the problems if any, the name, sha256 and page count of every deliverable, the method version, and start and finish times.
The record is kept in an append-only ledger. Compare the sha256 of a downloaded file with the record to confirm it is the file that was issued.
Your statement for the quarter.
A call to the usage endpoint returns, for each job type on your key, the number of jobs delivered in the quarter, your allowance and any overage, plus the matters and advances counted, for example matters under watch. Work past the allowance is not blocked. It is flagged overage: true on the job and billed on the statement. Only delivered jobs count. Rejected and failed jobs are not billed.
A request and a response.
curl -X POST "https://<connector host, sent with your key>/v1/jobs/closed_tape_read" \ -H "X-Criterica-Key: <your key>" \ -F "tape=@funder_tape.csv" \ -F "hurdle=0.20" \ -F "hurdle_basis=total" \ -F "servicing=0.02" \ -F "cutoff=auto"
{
"job_id": "<job id>",
"status": "done",
"outputs": [
{
"name": "<deliverable file name>",
"sha256": "<sha256 of the file>",
"pages": "<page count>",
"url": "/v1/jobs/<job id>/files/<deliverable file name>"
}
],
"method_version": "<method version>",
"usage": "<your usage for this job type this quarter>",
"overage": false
}Placeholders in angle brackets are filled by the service or by you. The download path in each output retrieves the deliverable with your key.
What the service says plainly.
- Live monitoring reads federal dockets only. Matters outside that coverage are listed as not covered; nothing is estimated for them.
- A matter without evidence in the pack is returned as not rated. It is never filled in.
- Deliverables are analytical work product, not guarantees of outcome, value, financing or timing.
Your files stay yours. The models stay here.
- Your files are used to produce your results and do not train a generalized model without a separate written agreement.
- Results are visible only to the key that requested them.
- You receive results: reports, bands, scores and the files listed for your job. You do not receive, and the service cannot return, the models, their settings, the rules behind a rating or anything else that is not a deliverable of your job.
- Retention follows your agreement with Criterica.
Ask for a key.
Tell us which job types you want to connect and what you plan to send. We reply within one business day.
Connect your files to the record.
Questions
It takes your files and a few settings in one call, runs one job and returns the finished deliverables, such as a PDF report, with a record of what was sent and what came back. Every call is synchronous.
Criterica issues a key for your connection. Send it on every call in the header X-Criterica-Key. The key is tied to your organization and to the job types you have connected.
A file that fails the intake check is not run. The call returns status 422 with the problems in plain words, for example missing columns. Fix the file and send it again. Rejected files are not billed.
No. You receive results: reports, bands, scores and the files listed for your job. The models, their settings and the rules behind a rating are not deliverables, and the service cannot return them.
Your files are used to produce your results and do not train a generalized model without a separate written agreement.