Skip to content

Delete a session (refund unless analysis succeeded)

DELETE
/api/sessions/{id}/
curl --request DELETE \
--url http://localhost:8000/api/sessions/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/ \
--header 'Authorization: Bearer <token>'

Removes the Session. Quota refund rule, by status at the moment of DELETE:

  • PENDING / PROCESSING — credits an offsetting session_delete_refund entry so the slot is reused, unless the session already delivered a report at least once (processed_at set, i.e. it was re-analyzed after completing). A delivered analysis keeps its slot however the session later leaves COMPLETED; otherwise analyze → reanalyze → delete would be the free-session loop below with one extra hop.
  • FAILED — normally already refunded at failure time (session_failed_refund), so the DELETE is a ledger no-op. A session’s debit is credited back at most once, whatever the reason, so a failed-then-deleted session returns one slot, not two.
  • COMPLETEDno refund. The pipeline ran and the team consumed compute. Refunding here would make create → analyze → delete a free-session loop.

Idempotent under concurrent DELETEs — the row lock serialises racing requests. The annotated mp4 in storage is NOT eagerly removed; it gets garbage-collected by the team-wide sweep. Returns 204. Demo sessions and other teams’ sessions return 404.

id
required
string format: uuid

No response body

Media typeapplication/json
object
detail
required

Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).

string
Examplegenerated
{
"detail": "example"
}
Media typeapplication/json
object
detail
required

Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).

string
Examples
Example404—NoSuchSessionOnThisTeam

Absent, or owned by another team (collapsed to 404)

{
"detail": "session_not_found"
}