Signals

Signals let you record user feedback on prompt outputs — tracking whether a particular response was helpful or not. This data helps you measure prompt quality over time.

Request

POST /api/v1/prompts/:prompt_id/signals

Path parameters

Parameter Type Description
prompt_id String The prompt's public ID (e.g. pmt_abc123...)

Request body

{
  "value": "positive",
  "metadata": {
    "session_id": "sess_abc123",
    "user_id": "usr_456",
    "response_length": 342
  }
}
Field Type Required Description
value String Yes positive or negative
metadata Object No Arbitrary JSON metadata for your own tracking

Response

{
  "data": {
    "id": 789,
    "value": "positive",
    "created_at": "2026-02-19T14:30:00Z"
  }
}

Status: 201 Created

Example

Thumbs up/down from your UI

When a user clicks a thumbs up or thumbs down button on an AI response in your application, send a signal:

async function sendSignal(promptId, sentiment) {
  await fetch(
    `https://promptdeploy.com/api/v1/prompts/${promptId}/signals`,
    {
      method: "POST",
      headers: {
        "Authorization": `Bearer ${process.env.PROMPTDEPLOY_API_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        value: sentiment, // "positive" or "negative"
        metadata: {
          session_id: currentSessionId,
          timestamp: new Date().toISOString(),
        },
      }),
    }
  );
}

Ruby

uri = URI("https://promptdeploy.com/api/v1/prompts/#{prompt_id}/signals")
req = Net::HTTP::Post.new(uri, "Content-Type" => "application/json")
req["Authorization"] = "Bearer #{ENV['PROMPTDEPLOY_API_KEY']}"
req.body = { value: "positive", metadata: { user_id: current_user.id } }.to_json

Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }

Signal limits

Signals are counted against your monthly limit:

Plan Monthly signal limit
Free 1,000
Team 10,000
Business 100,000

When the limit is reached, the API returns a 429 response. See Rate Limits.

Errors

Status Code Description
401 unauthorized Invalid or missing API key
404 not_found Prompt not found in your organisation
422 validation_error Invalid value (must be positive or negative)
429 rate_limited Monthly signal limit reached