Skip to main content
POST
/
api
/
signals
/
generate
Generate Messages
curl --request POST \
  --url https://app.puffle.ai/api/signals/generate \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "items": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "dm": true,
      "comment": true
    }
  ]
}
'
{
  "results": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "dm": {
        "text": "<string>",
        "profileUrl": "<string>",
        "messagingUrl": "<string>"
      },
      "comment": {
        "text": "<string>",
        "sourceUrl": "<string>"
      },
      "error": "<string>"
    }
  ]
}
CLI:
puffle signal generate --items <items>

Overview

Generates outreach drafts for a batch of signals. For each item, the handler can produce a DM draft, a public comment draft, or both. Drafts persist on the signal row so later GET /api/signals calls return them as dmText and commentText. Use this after a user has reviewed a signal and wants Puffle to suggest a first-draft message. Per-item failure does not fail the request.

AI agent notes

Each item must set at least one of dm: true or comment: true.Concurrency. Concurrent calls for the same (signalId, kind) short-circuit with error: "already_in_flight" on the affected side. Wait for the in-flight draft to finish, then retry.Saving edits. Persist user edits via Update Signals with dmText or commentText.Response shape. { results: [{ signalId, dm?, comment?, error? }] }. Successful items include dm.text + dm.profileUrl + dm.messagingUrl (or the comment equivalents).

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
items
object[]
required
Required array length: 1 - 20 elements

Response

Per-item results.

results
object[]
required