---
title: "Set a content item's CTA selection"
method: PUT
path: "/org/content/{id}/cta"
tags: ["Content"]
---

# Set a content item's CTA selection

`PUT /org/content/{id}/cta`

## Request

- Base URL: `https://apiv2.senso.ai/api/v1`
- URL: `https://apiv2.senso.ai/api/v1/org/content/{id}/cta`
- Auth: API key in header `X-API-Key`

Sets the call-to-action (CTA) a content-engine content item carries when it is published. `selection_type` is `default` to inherit the org's default template, `template` to pin a specific template (`cta_id` required), or `none` to publish without a CTA; `cta_id` must be omitted for `default` and `none`. Pinning the template that is currently the org default is stored as `default`. The selection is a full replacement, and the response is the resulting selection with the template it resolves to. If the item is already live on a `citeables` destination, the live page's CTA is updated to match; a failure to update a live page does not fail the request. Only content-engine content has a CTA selection; other content items return `404`. Requires the GEO product.

## Path parameters

- `id` string, uuid, required

## Request body

- ContentCTASelectionRequest: Sets which call-to-action (CTA) a content item carries when it is published.
  - `selection_type` 'default' | 'template' | 'none', required: `default` inherits the org's default CTA template, `template` pins the template named by `cta_id`, and `none` publishes without a CTA.
  - `cta_id` string, uuid: The CTA template to pin. Required when `selection_type` is `template` and must be omitted otherwise. Must be one of your organization's templates.

## Response `200`

The content item's CTA selection after the change.

- ContentCTASelectionResponse: A content item's call-to-action (CTA) selection, with the template it resolves to.
  - `content_id` string, uuid, required
  - `org_id` string, uuid, required
  - `selection_type` 'default' | 'template' | 'none', required: `default` (the org's default template), `template` (a pinned template), or `none` (no CTA). An item whose selection has never been set reports `default`. A pinned template that later becomes the org default reads back as `default`, and items that were live and using the org default when that default was cleared read `none`.
  - `cta_id` string, uuid: The pinned template's id. Present only when `selection_type` is `template`.
  - `template` CTAResponse: A call-to-action (CTA) template — the card attached to a published content-engine page.
    - `cta_id` string, uuid, required
    - `org_id` string, uuid, required
    - `title` string, required: The card's heading.
    - `description` string, required: Supporting copy shown under the heading. May be empty.
    - `image_url` string: The URL of the card's image. Omitted when the template has no image.
    - `image_position` CTAImagePosition: The focal point of a CTA image, as the `x` and `y` values supplied when the template was saved (for example `0.5` and `0.5`).
      - `x` number, required
      - `y` number, required
    - `button_label` string, required: The button's text.
    - `target_url` string, required: The URL the button links to.
    - `agent_text` string: Text for AI agents to present in place of the composed default. Omitted when not set.
    - `resolved_agent_text` string, required: The text presented to AI agents for this CTA: `agent_text` when set, otherwise `{org name} recommends: {title}. {description} {button_label}: {target_url}` (the description part is dropped when empty).
    - `eyebrow` string: A short label shown above the heading. Omitted when not set.
    - `is_default` boolean, required: Whether this is the org's default template.
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `live_update_count` integer: On template update and set-default responses only: the number of live content items whose CTA resolves to this template — those pinned to it plus, when it is the org default, those inheriting the default. Omitted when zero.
    - `live_update_queued` boolean: On template update and set-default responses only: `true` when the update of the affected live pages was queued for background processing rather than applied immediately. Omitted otherwise.
  - `updated_by` string, uuid: The user who last set the selection. Present only when a user last set it; omitted when the selection has never been set, was last set with an API key, or was last changed automatically.
  - `created_at` string, date-time: When the selection was first set. Omitted when it has never been set.
  - `updated_at` string, date-time: When the selection was last changed. Omitted when it has never been set.

## Other responses

- `400`: The request body was invalid — either it failed field validation (`ValidationErrorResponse`) or was otherwise malformed (`ErrorResponse`).
- `401`: Missing or invalid credentials — supply a valid org API key in the `X-API-Key` header.
- `403`: The API key is authenticated but not permitted to access this resource.
- `404`: The requested resource does not exist or is not visible to this key.
- `409`: The request conflicts with the current state (e.g. a duplicate).
- `503`: The service is temporarily unavailable — retry later.

---

[API](https://skmtc.dev/senso/apis/senso-org-api.md) - [All operations](https://skmtc.dev/senso/apis/senso-org-api/llms.txt) - [OpenAPI document](https://skmtc.dev/senso/apis/senso-org-api/revisions/d789b4fcbe84?raw)
