Skip to main content
Dotportion assesses how engineers work with AI, not whether they can code without it. Candidates complete real-world challenges in their own editor, with an AI assistant on a server-enforced budget. Every prompt, edit, paste, terminal command and test run is captured, and the result is a hiring report you can defend in a debrief. This API is how you drive that from your own systems.

Quickstart

Mint a test key and make your first request in about two minutes.

API reference

Every endpoint, with an interactive playground.

Test mode

Build the whole integration against sample data before touching anything real.

Understanding reports

What a ship score, verdict and the four scored areas actually mean.

What you can build

The API covers the full hiring loop:
1

Pick a challenge

Browse the shared library plus any challenges private to your organization.
2

Create an assessment

An assessment is a posting: one challenge, a time limit, and the tasks you want graded.
3

Invite candidates

Each invitation returns a link. Send it yourself, or let us email it.
4

Collect submissions

Poll for submissions and read the report once grading finishes.
A typical ATS integration creates an assessment when a role opens, invites each candidate who reaches the technical stage, and writes the verdict and interview questions back onto the candidate record.

Design principles

Worth knowing before you write any code, because they explain choices that would otherwise look surprising.
A key resolves to exactly one organization and cannot see another. Requesting a resource that belongs to someone else returns 404, identical to a resource that doesn’t exist — the API will not confirm an id exists somewhere you can’t see.
Switch on error.code, never on the message. Codes are stable; messages are written for humans and may be reworded.
A sk_test_ key is served from a fixed dataset. Reads return realistic data, writes report success and change nothing. Same validation, same response shapes and same rate limits as live.
Hidden test paths, grading rubrics and the internal scoring taxonomy never appear in a response. You get the signal — ship score, verdict, the four scored areas, integrity flags — not the machinery that produced it.

Base URL and versioning

v1 gets additive changes only: new endpoints and new response fields, never a removal or a rename. Anything breaking would ship as v2. Treat unknown response fields as forward compatibility rather than an error. The machine-readable description lives at /api/v1/openapi.json — import it into Postman, or generate a client from it.
These pages are generated from the same code that serves the API. Every example response is real serializer output, so the same request with a test key returns what you see here, byte for byte.