Base URLs
- Production:
https://app.synthpop.ai/public/v1 - Staging:
https://stage.synthpop.ai/public/v1
$SYNTHPOP_JWT_TOKEN holds a valid
bearer token. If you don’t have one yet, see the
Quickstart and Authentication.Example task type. These examples use
hst_validation_bin — validating a
sleep-study (HST) referral packet — as a concrete, real value. Your
organization’s validation task types are provisioned during onboarding; swap in
the one you were given. There is no endpoint that lists them.1
Create the validation Task
POST /task/create is a multipart/form-data request. Set task_type to your
provisioned validation type and attach the referral or order document(s) under
uploads. You can attach several files in one request — a whole packet at once.TaskDetails object. It comes back right away with
status: "pending" and empty verdicts — nothing has been evaluated yet:uuid. If you passed an external_id, you can also read the Task by
that instead.2
Poll until the Task reaches a terminal status
GET /task/get returns the current TaskDetails. Supply exactly one of uuid
or external_id (neither or both returns 400). Poll until the Task settles.The terminal statuses are completed, failed, and invalid. A Task can also
stop at waiting, which means it needs more input from you (next step);
pending and processing both mean “keep polling.”3
Handle a Task that stops at `waiting`
Validation often finds a required document missing. Instead of failing, the Task
stops at Add the missing files with
status: "waiting" and lists what it needs in issues — here, a missing
face-to-face visit note and insurance carrier:POST /task/{uuid}/upload (the Task must be in
waiting to accept them), then go back to polling. The Task resumes on its own.For the full resume loop — including what to do when the Task keeps asking for
more — see Responding to waiting tasks.
4
Interpret the completed result
Once the Task is Read the three fields together:For a not-approved code, this prints the exact blocking reasons — for example:That’s the full intake loop: create, poll, resolve
completed, read the decision from three fields. Here is a
completed validation result for our example packet:verdict_summaries— the plain-Englishconclusionpercode. Show this to a human reviewer.verdicts— the machine-readable decision percode:approvedtrue or false, and anissueslist.issues— the flat list of everything flagged. Each entry has akey(its type) and a human-readablemessage.
verdict’s issues are indices into the top-level issues array, not the
issues themselves. When a code is not approved, resolve each index to explain why:waiting, and interpret the
verdict. Wire the same pattern behind your own intake queue.Related
Intake overview
How the capability maps to the API and what a result contains.
Multi-patient submissions
When one packet holds several patients and splits into child Tasks.
Results: verdicts & issues
Every issue
key and the full verdict shape.Working with async results
Polling versus callbacks, and load backpressure.

