Prerequisites
- An Origami account on a paid plan
- An API key (create one in Settings → Developers)
curlandjq
Step 1: Start a search
POST /leads/searches creates a list,
sources leads, and researches them — all from one sentence. The brief is the
steer; there is no filter DSL, so say what you’d say to a researcher.
202 Accepted with a Job already running. Nothing is finished yet —
keep id, that’s what you poll next.
Step 2: Poll the Job
PollGET /jobs/{job_id} until status is no longer
queued or running. Honor next_poll_at (or the Retry-After header).
Polling faster than the hint is served from a short-lived cache — it costs you
requests without surfacing progress sooner.
running with phase: "enriching" until the cells it owns
finish, so succeeded genuinely means done — result counts won’t move
afterwards. Expect a few minutes for 25 leads.
job.succeeded and
read the Job when the event arrives.
Step 3: Read the rows
result.row_ids are exactly the rows this run added, so you can read them
without paging the whole list. Reads are free. Cap is 100 ids per call.
format=csv on the same endpoint.
What’s next
You now have a list with 23 researched rows in it. From here:Build a list
Go deeper on the same search, bring your own rows, add research columns.
Run a campaign
Enroll this list in an email or LinkedIn sequence.
The Job object
Cancelling, credits, and the questions a Job can ask you.
Conventions
Paging, errors, idempotency, and destructive-call previews.