---
title: "POST /v1/projects/{project_id}/actions/{action_id}/declaration"
method: POST
path: "/v1/projects/{project_id}/actions/{action_id}/declaration"
tags: ["actions"]
---

# POST /v1/projects/{project_id}/actions/{action_id}/declaration

`POST /v1/projects/{project_id}/actions/{action_id}/declaration`

## Request

- Base URL: `https://api.citeladder.com`
- URL: `https://api.citeladder.com/v1/projects/{project_id}/actions/{action_id}/declaration`
- Auth: HTTP bearer

## Path parameters

- `project_id` string, uuid, required
- `action_id` string, uuid, required

## Headers

- `Idempotency-Key` string, required

## Request body

- object
  - `recommendation_ids` string[]
  - `output_revision_id` string, uuid, nullable
  - `declared_implemented_at` string, date-time, required

## Response `200`

Successful Response

- ActionDeclaration
  - `id` string, uuid, required
  - `action_id` string, uuid, required
  - `output_revision_id` string, uuid, nullable, required
  - `member_opportunity_ids` string[], required
  - `opportunity_snapshot_id` string, uuid, required
  - `target_site_url_ids` string[], required
  - `target_external_url` string, nullable, required
  - `declared_implemented_at` string, required
  - `expected_checks` ExpectedCheck[], required
    - union
      - KeywordPresenceExpectedCheck
        - `kind` 'keyword_presence', required
        - `keyword` string, required
        - `query_key` string, required
        - `owned_origin` string, required
        - `location_code` integer, nullable, required
        - `language_code` string, required
      - object
        - `kind` 'contextual_link', required
        - `recommendation_id` string, uuid, required
        - `internal_link_run_id` string, uuid, required
        - `target_site_url_id` string, uuid, required
        - `target_url` string, required
        - `anchor_text` string, required
        - `source_analysis_id` string, uuid, required
        - `source_artifact_id` string, uuid, required
        - `target_analysis_id` string, uuid, required
        - `target_artifact_id` string, uuid, required
        - `extractor_version` string, required
      - object
        - `kind` 'site_rule', required
        - `target_site_url_id` string, uuid
        - `rule_id` string, required
        - `expected_outcome` 'pass' | 'fail' | 'partial', required
      - object
        - `kind` 'traffic_metric', required
        - `metric` string, required
        - `direction` 'increase' | 'decrease' | 'equal', required
        - `scope` 'page' | 'query'
        - `scope_key` string
        - `min_delta` number
        - `baseline_traffic_snapshot_id` string, uuid
        - `baseline_value` number
        - `baseline_window_days` integer
        - `expected_value` number
        - `tolerance` number
      - object
        - `kind` 'visibility_metric', required
        - `metric` string, required
        - `direction` 'increase' | 'decrease' | 'equal', required
        - `min_delta` number, required
        - `tolerance` number, required
        - `target_prompt_id` string, uuid, nullable, required
        - `baseline_metric_snapshot_id` string, uuid
        - `baseline_value` number
  - `state` 'declared' | 'observed' | 'verified' | 'contradicted', required
  - `limitations` string[], required
  - `verification_events` VerificationEvent[], required
    - `id` string, uuid, required
    - `observation_kind` 'observed' | 'verified' | 'contradicted', required
    - `observed_at` string, required
    - `crawl_id` string, uuid, nullable, required
    - `audit_id` string, uuid, nullable, required
    - `source_analysis_ids` string[], required
    - `source_rule_evaluation_ids` string[], required
    - `source_metric_ids` string[], required
    - `result` object, required
    - `verifier_version` string, required
    - `limitations` string[], required
    - `created_at` string, required
  - `legs` MeasurementLeg[], required
    - `leg` 'next_visibility_run' | 'next_search_console_window' | 'next_crawl', required
    - `state` 'waiting' | 'not_scheduled' | 'sync_needed' | 'observed', required
    - `due_at` string, nullable, required
    - `last_evidence_at` string, nullable, required
    - `source_id` string, uuid, nullable, required
  - `checks` DeclarationCheck[], required
    - `index` integer, required
    - `kind` string, required
    - `leg` 'next_visibility_run' | 'next_search_console_window' | 'next_crawl', required
    - `state` 'waiting' | 'met' | 'unmet' | 'unavailable', required
    - `reason` string, nullable, required
    - `observed_at` string, nullable, required
    - `source_kind` string, nullable, required
    - `source_id` string, nullable, required
    - `subject` string, nullable, required
    - `prompt_id` string, uuid, nullable
  - `measured_until` string, required
  - `created_at` string, required

## Other responses

- `201`: Successful Response

---

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