---
title: "Add an attributed product knowledge document"
method: POST
path: "/api/v1/organizations/{organization_id}/verify/knowledge"
tags: ["organizations"]
---

# Add an attributed product knowledge document

`POST /api/v1/organizations/{organization_id}/verify/knowledge`

## Request

- Base URL: `https://composal.com` (the document declares no server; this is the origin it was published from)
- URL: `https://composal.com/api/v1/organizations/{organization_id}/verify/knowledge`
- Auth: HTTP bearer

## Path parameters

- `organization_id` string, required

## Request body

- object
  - `project_id` string, required
  - `title` string, required
  - `markdown` string, required

## Response `201`

Document saved

- VerifyKnowledgeDocument
  - `id` string, required
  - `title` string, required
  - `kind` 'discovery' | 'operator' | 'learning', required
  - `markdown` string, required
  - `content_digest` string, required
  - `observed_at` string, date-time, required
  - `project_id` string, required
  - `project_name` string, required
  - `source` object, required
    - `run_id` string, nullable, required
    - `exploration_id` string, nullable, required
    - `environment_name` string, nullable, required
    - `account_id` string, nullable, required
    - `status` string, nullable, required
    - `editor_name` string, nullable
    - `edited_at` string, nullable
    - `creator_name` string, nullable, required
  - `content_json` object, required
    - `body` string
    - `product` object
      - `summary` string, required
      - `users` string[], required
      - `concepts` string[], required
    - `flows` object[]
      - `name` string, required
      - `purpose` string, required
      - `entry_url` string, required
      - `prerequisites` string[], required
      - `steps` string[], required
      - `expected_behavior` string, required
      - `observed_behavior` string, required
      - `expectation_source` 'explicit' | 'inferred', required
      - `coverage` 'observed' | 'partial' | 'blocked', required
      - `gaps` string[], required
    - `pages` object[]
      - `url` string, required
      - `title` string, required
      - `description` string, required
      - `controls` object[], required
        - `label` string, required
        - `attempted` boolean, required
        - `destination` string, nullable, required
    - `unvisited` string[]
    - `cleanup` string[]
    - `stopping_reason` string

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `422`: Unprocessable entity

---

[API](https://skmtc.dev/composal/apis/vex-api.md) - [All operations](https://skmtc.dev/composal/apis/vex-api/llms.txt) - [OpenAPI document](https://skmtc.dev/composal/apis/vex-api/revisions/74298a24e040?raw)
