---
title: "Set a quest done"
method: POST
path: "/quests/{id}/complete"
tags: ["Quests"]
---

# Set a quest done

`POST /quests/{id}/complete`

## Request

- Base URL: `https://api.epovest.com/v1`
- URL: `https://api.epovest.com/v1/quests/{id}/complete`
- Auth: HTTP bearer

The move happened. Replayable; the last move is what the file remembers.

## Response `200`

The quest, done.

- QuestEnvelope
  - `quest` Quest, required
    - `id` string, uuid, required
    - `project_id` string, uuid, required
    - `project` string, required: The name of the project.
    - `title` string, required
    - `notes` string, nullable, required
    - `status` 'open' | 'done' | 'dismissed', required: A quest opens as `open` and closes as `done` (the move happened) or `dismissed` (the customer set it aside); both stay readable as history, and both reopen.
    - `author` string, nullable, required
    - `created_at` string, date-time, required
    - `closed_at` string, date-time, nullable, required
    - `journal_entries` integer, required: How many actions were recorded against this quest.
    - `last_entry_at` string, date-time, nullable, required

## Other responses

- `401`: `unauthenticated`: missing, unknown or revoked key.
- `403`: `insufficient_scope`: the credential may not do this, either because the key lacks the scope, or, on a one-click connection, because the person lacks the role the action needs (manager, or owner to start, pause and top up). On that path, read it as "this person may not do this" and tell them which role the action needs.
- `404`: `not_found`: unknown for this account.
- `429`: `rate_limited`: 120 requests per minute per credential, sliding window. Retry after `Retry-After` seconds.

---

[API](https://skmtc.dev/epovest/apis/epovest-api.md) · [All operations](https://skmtc.dev/epovest/apis/epovest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/epovest/apis/epovest-api/revisions/7a78ee27ecbb?raw)
