---
title: "Save an open-source capability candidate without invoking the orchestrator model"
method: POST
path: "/api/v1/monitor/capability-refinery/candidates"
tags: ["Operator capability refinery"]
---

# Save an open-source capability candidate without invoking the orchestrator model

`POST /api/v1/monitor/capability-refinery/candidates`

## Request

- Base URL: `https://api.daystruct.ai`
- URL: `https://api.daystruct.ai/api/v1/monitor/capability-refinery/candidates`
- Auth: HTTP basic

Acceptance persists a candidate even if model configuration or build budget is unavailable. Missing ownership remains needs_details. autoBuild dispatches through the existing isolated build/test/review engine. publishWhenReady is explicit. Never treat HTTP 202 as publication.

## Request body

- object
  - `repoUrl` string, uri, required: Public https://github.com/owner/repository
  - `suggestedHandle` string: @owner/slug; dotted suggested slugs are normalized to hyphens
  - `ownerHandle` string
  - `slug` string
  - `notes` string, required
  - `category` string
  - `mode` 'source_package'
  - `sourceRef` string
  - `sourcePaths` string[]
  - `conversationRef` string
  - `idempotencyKey` string, required
  - `autoBuild` boolean
  - `publishWhenReady` boolean
  - `maxCostUsd` number

## Response `200`

Candidate progress, blockers, summaries, checks and published URL in a data envelope

## Other responses

- `202`: Durably accepted; poll the returned candidate link
- `401`: Monitor Basic authentication required
- `409`: Idempotency conflict or action not allowed for this stage

---

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