> ## Documentation Index
> Fetch the complete documentation index at: https://docs.peec.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Action

> One action in full: what to do, the fields the customer owns on it — notes, priority, assignee, due date, tags and repeat — the steps to work through, the content brief when there is one with its sections, the competitor demand behind it, the prompts it affects and the terms competitors use on the topic. A site audit action carries no brief and no opportunity, and its description and steps are the whole fix. An id this project has no published action for is a 404, whether it belongs to another project, to an action type this API does not publish for the project, or to nothing at all. A content optimisation carries its article, suggestions and score on the optimize content endpoint instead.



## OpenAPI

````yaml https://api.peec.ai/customer/v1/openapi/json post /actions/detail
openapi: 3.0.3
info:
  title: Peec AI Customer API
  description: Development documentation
  version: 1.0.0
  contact:
    name: Peec AI Team
    email: support@peec.ai
servers:
  - url: https://api.peec.ai/customer/v1
security: []
paths:
  /actions/detail:
    post:
      tags:
        - Actions
      summary: Get Action
      description: >-
        One action in full: what to do, the fields the customer owns on it —
        notes, priority, assignee, due date, tags and repeat — the steps to work
        through, the content brief when there is one with its sections, the
        competitor demand behind it, the prompts it affects and the terms
        competitors use on the topic. A site audit action carries no brief and
        no opportunity, and its description and steps are the whole fix. An id
        this project has no published action for is a 404, whether it belongs to
        another project, to an action type this API does not publish for the
        project, or to nothing at all. A content optimisation carries its
        article, suggestions and score on the optimize content endpoint instead.
      operationId: postActionsDetail
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                project_id:
                  description: Required if using a company api key
                  example: or_f45b94ba-5e35-4982-93ed-285e72ee14eb
                  type: string
                action_id:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                  example: 01a0422f-e0c4-7820-85a1-31515a321f15
              required:
                - action_id
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                project_id:
                  description: Required if using a company api key
                  example: or_f45b94ba-5e35-4982-93ed-285e72ee14eb
                  type: string
                action_id:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                  example: 01a0422f-e0c4-7820-85a1-31515a321f15
              required:
                - action_id
          multipart/form-data:
            schema:
              type: object
              properties:
                project_id:
                  description: Required if using a company api key
                  example: or_f45b94ba-5e35-4982-93ed-285e72ee14eb
                  type: string
                action_id:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                  example: 01a0422f-e0c4-7820-85a1-31515a321f15
              required:
                - action_id
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                        pattern: >-
                          ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                        example: 01a0422f-e0c4-7820-85a1-31515a321f15
                      type:
                        type: string
                        enum:
                          - TEMPLATE_ACTION
                          - CONTENT_BRIEF
                          - CATEGORY_SITUATION_BRIEF
                          - CONTRADICTIONS_EXTERNAL_SOURCES
                          - CONTRADICTIONS_OWNED_SOURCES
                          - SEO_ISSUE
                          - ROBOTS_TXT
                          - PDP_OPTIMISATION
                          - MANUAL_ACTION
                          - CONTENT_OPTIMISATION
                      status:
                        type: string
                        enum:
                          - PENDING
                          - ACCEPTED
                          - REJECTED
                          - COMPLETED
                      title:
                        type: string
                        example: Add a pricing comparison table to the plans page
                      group:
                        type: string
                        enum:
                          - OWNED
                          - EDITORIAL
                          - REFERENCE
                          - UGC
                          - OTHER
                      category:
                        nullable: true
                        example: EDITORIAL_PITCH
                        description: >-
                          The off-site playbook a template action follows, or
                          the audit check an `SEO_ISSUE` came from — normally
                          one of the values the `categories` filter accepts.
                          Null on content briefs and `ROBOTS_TXT` actions.
                        type: string
                      target:
                        type: string
                        enum:
                          - owned
                          - earned
                      archetype:
                        nullable: true
                        description: >-
                          The kind of page a content brief says to create. Null
                          on template actions, and on content briefs generated
                          before Peec recorded it.
                        type: string
                        enum:
                          - HOMEPAGE
                          - CATEGORY_PAGE
                          - PRODUCT_PAGE
                          - LISTICLE
                          - COMPARISON
                          - PROFILE
                          - ALTERNATIVE
                          - DISCUSSION
                          - HOW_TO_GUIDE
                          - ARTICLE
                          - OTHER
                      platform:
                        nullable: true
                        example: reddit.com
                        description: >-
                          Registrable domain of the third-party site. Null on
                          own-site actions.
                        type: string
                      topic_id:
                        nullable: true
                        example: to_a1b2c3
                        type: string
                      source:
                        type: string
                        example: https://example.com/pricing
                        description: >-
                          The page the action targets. Not always a url: a
                          content brief describes a page that does not exist yet
                          and carries the sentinel `content-brief`
                          (`situation-brief` on a `CATEGORY_SITUATION_BRIEF`),
                          an `SEO_ISSUE` names the audit that raised it and puts
                          its target in `domain`, and a `ROBOTS_TXT` action
                          carries a bare hostname.
                      domain:
                        nullable: true
                        example: example.com
                        description: >-
                          The site an `SEO_ISSUE` was raised against, which is
                          what it applies to rather than a single page. Null on
                          every other type.
                        type: string
                      country_codes:
                        type: array
                        items:
                          type: string
                        description: >-
                          Markets the action is scoped to. Empty when it applies
                          to every market the project tracks.
                      model_channel_ids:
                        type: array
                        items:
                          type: string
                          enum:
                            - openai-0
                            - openai-1
                            - qwen-0
                            - openai-2
                            - perplexity-0
                            - perplexity-1
                            - google-0
                            - google-1
                            - google-2
                            - google-3
                            - google-4
                            - anthropic-0
                            - anthropic-1
                            - anthropic-2
                            - anthropic-3
                            - deepseek-0
                            - meta-0
                            - meta-1
                            - xai-0
                            - xai-1
                            - microsoft-0
                            - amazon-0
                            - mistral-0
                            - mistral-1
                            - naver-0
                            - openai-3
                            - openai-4
                            - openai-5
                      impact:
                        type: string
                        enum:
                          - VERY_LOW
                          - LOW
                          - MEDIUM
                          - HIGH
                          - VERY_HIGH
                        description: >-
                          How much the action is expected to gain if it is
                          completed, banded against every action in the project,
                          so it reads the same whatever the filters are. On an
                          `SEO_ISSUE` the band comes from the issue's severity
                          instead. This is the impact the app shows, and the
                          only measure of expected gain the API publishes.
                      step_count:
                        type: number
                        description: How many steps the action has.
                      completed_step_count:
                        type: number
                      created_at:
                        type: string
                        example: '2026-08-20T10:12:00.000Z'
                      status_updated_at:
                        nullable: true
                        description: >-
                          When the status last changed. Null while still
                          `PENDING`.
                        type: string
                      created_by:
                        type: string
                        enum:
                          - peec
                          - customer
                        description: >-
                          Who wrote the action. Only a `customer` one can be
                          deleted or have its `kind` changed; a `peec` one is
                          declined through the status endpoint instead.
                      priority:
                        nullable: true
                        description: >-
                          How much the customer says the action matters. It
                          fills the same bars `impact` fills on a generated
                          action, and is null on one nobody has set.
                        type: string
                        enum:
                          - none
                          - low
                          - medium
                          - high
                      assignee_user_id:
                        nullable: true
                        description: >-
                          The project member the work is on. Null when
                          unassigned.
                        type: string
                      due_on:
                        nullable: true
                        example: '2026-10-31'
                        description: Calendar day in the project's timezone.
                        type: string
                      tag_ids:
                        type: array
                        items:
                          type: string
                        description: Tags the customer filed the action under.
                      description:
                        type: object
                        properties:
                          text:
                            type: string
                          sources:
                            type: array
                            items:
                              type: string
                        required:
                          - text
                          - sources
                      kind:
                        nullable: true
                        description: >-
                          What the customer wrote the action as, which is what
                          decided its type and group. Null on an action Peec
                          generated, whose shape came from what it found rather
                          than from a choice.
                        type: string
                        enum:
                          - CONTENT_OPTIMIZATION
                          - CONTENT_CREATION
                          - MENTION
                          - TECHNICAL
                          - PRODUCT_PAGE
                          - OTHER
                      notes:
                        nullable: true
                        description: Working notes the customer keeps beside the action.
                        type: string
                      page_url:
                        nullable: true
                        example: https://example.com/pricing
                        description: >-
                          The page the action lands on, where `source` can
                          instead carry a sentinel or a hostname. Null when the
                          action names no page.
                        type: string
                      language_codes:
                        nullable: true
                        description: Null when the action is not scoped to a language.
                        type: array
                        items:
                          type: string
                      repeat:
                        nullable: true
                        description: How often the work comes round again.
                        type: object
                        properties:
                          every:
                            type: number
                          unit:
                            type: string
                            enum:
                              - day
                              - week
                              - month
                              - year
                        required:
                          - every
                          - unit
                      time_range:
                        nullable: true
                        description: >-
                          The window the action's own measurements are read
                          over.
                        type: string
                        enum:
                          - 7d
                          - 28d
                          - 90d
                          - all
                      steps:
                        description: >-
                          The work to do on a template action, and on a content
                          brief the material it was written from. This endpoint
                          always returns it; the MCP tool omits it unless asked.
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            status:
                              type: string
                              enum:
                                - PENDING
                                - ACCEPTED
                                - REJECTED
                                - COMPLETED
                            group_title:
                              nullable: true
                              description: >-
                                Heading for a multi-option step. Null on a
                                single-option step, which stands alone.
                              type: string
                            gap_type:
                              nullable: true
                              example: community_phrases
                              description: >-
                                What a content brief's step holds — the fan-out
                                prompts, the community phrases, themes or
                                discussions, the winning sources, the brand
                                context, or the brief's own points. A brief's
                                steps are the material it was written from
                                rather than work to do, and this is the only
                                thing that says which is which. Null on a
                                template action, whose steps are the work
                                itself.
                              type: string
                            options:
                              type: array
                              items:
                                type: object
                                properties:
                                  id:
                                    type: string
                                  label:
                                    type: string
                                  text:
                                    type: string
                                  score:
                                    type: number
                                  completed:
                                    type: boolean
                                required:
                                  - id
                                  - label
                                  - text
                                  - score
                                  - completed
                          required:
                            - id
                            - status
                            - group_title
                            - gap_type
                            - options
                      content_brief_outline:
                        nullable: true
                        description: >-
                          Content briefs only, and null on a brief written
                          before Peec recorded an outline. Everything past
                          `points` arrived together and is null or empty on an
                          outline written before that.
                        type: object
                        properties:
                          title:
                            type: string
                          points:
                            type: array
                            items:
                              type: string
                            description: >-
                              The points to cover as plain headings, parallel to
                              `outline_points` and in the same order.
                          brief:
                            nullable: true
                            description: The whole brief as one markdown document.
                            type: string
                          summary:
                            nullable: true
                            description: One line on what the page is for.
                            type: string
                          overview:
                            nullable: true
                            type: string
                          h1_options:
                            type: array
                            items:
                              type: string
                            description: Headlines to choose between.
                          meta_title:
                            nullable: true
                            type: string
                          meta_description:
                            nullable: true
                            type: string
                          usp:
                            nullable: true
                            description: >-
                              How the brand should sound: the argument to hold
                              to, the proof to cite, and the terms to avoid.
                            type: object
                            properties:
                              spine:
                                type: string
                              proof_points:
                                type: array
                                items:
                                  type: string
                              never_write_terms:
                                type: array
                                items:
                                  type: string
                              register_lines:
                                type: array
                                items:
                                  type: string
                            required:
                              - spine
                              - proof_points
                              - never_write_terms
                              - register_lines
                          brand_context:
                            type: array
                            items:
                              type: object
                              properties:
                                label:
                                  type: string
                                value:
                                  type: string
                              required:
                                - label
                                - value
                            description: >-
                              First-party facts the writer may draw on.
                              Competitors are deliberately absent.
                          language:
                            nullable: true
                            type: object
                            properties:
                              code:
                                type: string
                                example: de
                                description: ISO 639-1.
                              name:
                                type: string
                                example: German
                            required:
                              - code
                              - name
                          outline_points:
                            description: >-
                              The brief section by section: what each one
                              argues, the questions it answers and the evidence
                              behind it. This endpoint always returns it; the
                              MCP tool omits it unless asked.
                            type: array
                            items:
                              type: object
                              properties:
                                plan_index:
                                  type: number
                                  description: >-
                                    1-based position of the plan point this was
                                    written from.
                                label:
                                  type: string
                                direction:
                                  type: string
                                angle:
                                  type: string
                                questions:
                                  type: array
                                  items:
                                    type: string
                                bullets:
                                  type: array
                                  items:
                                    type: string
                                brand_grounding:
                                  type: string
                                  description: >-
                                    The only first-party brand claim this point
                                    may make.
                                evidence:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      kind:
                                        type: string
                                        example: winning_source
                                      source:
                                        nullable: true
                                        description: >-
                                          Null for the evidence kinds carrying no
                                          attribution.
                                        type: string
                                      text:
                                        type: string
                                    required:
                                      - kind
                                      - source
                                      - text
                              required:
                                - plan_index
                                - label
                                - direction
                                - angle
                                - questions
                                - bullets
                                - brand_grounding
                                - evidence
                        required:
                          - title
                          - points
                          - brief
                          - summary
                          - overview
                          - h1_options
                          - meta_title
                          - meta_description
                          - usp
                          - brand_context
                          - language
                      opportunity:
                        nullable: true
                        description: >-
                          The competitor demand behind a content brief. Null on
                          other types.
                        type: object
                        properties:
                          target_citation_count:
                            type: number
                          page_type:
                            type: string
                            enum:
                              - HOMEPAGE
                              - CATEGORY_PAGE
                              - PRODUCT_PAGE
                              - LISTICLE
                              - COMPARISON
                              - PROFILE
                              - ALTERNATIVE
                              - DISCUSSION
                              - HOW_TO_GUIDE
                              - ARTICLE
                              - OTHER
                          page_type_label:
                            type: string
                          topic_name:
                            type: string
                        required:
                          - target_citation_count
                          - page_type
                          - page_type_label
                          - topic_name
                      impacted_prompts:
                        description: >-
                          The prompts this action affects. For source-correction
                          actions, own_coverage_score is the owned domains'
                          share of all citations for that prompt in the action's
                          analysis window. Other types use their documented
                          page-coverage score. This endpoint always returns the
                          field; the MCP tool omits it unless asked.
                        type: array
                        items:
                          type: object
                          properties:
                            prompt_id:
                              type: string
                            prompt_text:
                              type: string
                            own_coverage_score:
                              type: number
                            source_coverage_score:
                              nullable: true
                              type: number
                          required:
                            - prompt_id
                            - prompt_text
                            - own_coverage_score
                            - source_coverage_score
                      ngrams:
                        description: >-
                          Terms competitors use on this topic that the brand's
                          own pages do not. This endpoint always returns it; the
                          MCP tool omits it unless asked.
                        type: array
                        items:
                          type: object
                          properties:
                            gram:
                              type: string
                            count:
                              type: number
                          required:
                            - gram
                            - count
                    required:
                      - id
                      - type
                      - status
                      - title
                      - group
                      - category
                      - target
                      - archetype
                      - platform
                      - topic_id
                      - source
                      - domain
                      - country_codes
                      - model_channel_ids
                      - impact
                      - step_count
                      - completed_step_count
                      - created_at
                      - status_updated_at
                      - created_by
                      - priority
                      - assignee_user_id
                      - due_on
                      - tag_ids
                      - description
                      - kind
                      - notes
                      - page_url
                      - language_codes
                      - repeat
                      - time_range
                      - content_brief_outline
                      - opportunity
                required:
                  - data
                description: Success
        '404':
          description: Response for status 404
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                required:
                  - message
      security:
        - APIKeyHeader: []
        - APIKeyQuery: []
        - BearerAuth: []
components:
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
    APIKeyQuery:
      type: apiKey
      in: query
      name: api_key
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````