# Propose or save a distribution push

Create a push (omit pushId) or change one (only the fields you send change). Comment and DM pushes need a keyword; paid, comment, DM, link-in-bio and other pushes must deliver a live free asset with a link or an active offer to be active. From an agent this becomes a proposal a person accepts in Knowledge.

- Exact name: `ctapush_upsert`
- Category: Other
- Required access: write
- Allowed agent roles: admin, content_writer
- MCP endpoint: `https://api.funnels.akera.agency/`

## Annotations

- None declared

## Input JSON Schema

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "description": "The workspace id or slug (from workspace_list)."
    },
    "pushId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "mechanism": {
      "type": "string",
      "enum": [
        "paid_ad",
        "comment_keyword",
        "dm_keyword",
        "link_in_bio",
        "follow",
        "none",
        "other"
      ]
    },
    "keyword": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ]
    },
    "freeAssetId": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "offerId": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "funnelSteps": {
      "minItems": 1,
      "maxItems": 3,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "awareness",
          "connection",
          "selling"
        ]
      }
    },
    "line": {
      "type": "string",
      "maxLength": 300
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "paused"
      ]
    },
    "reason": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000
    }
  },
  "required": [
    "workspaceId",
    "reason"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
```

## Call shape

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ctapush_upsert",
    "arguments": {}
  }
}
```
