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 |