File a signal
Files one by hand. A title already on the list is refused out loud with signal_exists, naming the twin.
POST
/signalsAuthorization
AuthorizationBearer token · headerrequired`MEDIAN_KEY` from Settings under API, or an MCP OAuth access token. A key acts as the organization; a token acts as the person who approved it.
Request body
requiredapplication/jsonkindstringrequiredAllowed:
bugsuggestiontitlestringrequiredbodystringprioritystringrequiredAllowed:
urgenthighmediumlowconversationIdstringThe inbox conversation it came out of, when it did. The customer in that thread becomes the signal's first reporter and is told when it ships.
Responses
200Created.
idstring400The request is malformed, and the message names the field.
errorobjectShow propertiesHide properties
codestringmessagestring401The bearer token is missing, revoked, or expired.
errorobjectShow propertiesHide properties
codestringmessagestring409It already exists, or it was already settled.
errorobjectShow propertiesHide properties
codestringmessagestring429Too many requests. Wait the seconds in `Retry-After`. Limits depend on the plan. See [rate limits](/api/errors-and-limits#rate-limits).
errorobjectShow propertiesHide properties
codestringmessagestringRequest
curl -X POST "https://api.median.sh/v1/signals" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"kind": "bug",
"title": "Export breaks past 10k rows",
"body": "The CSV export times out for large workspaces.",
"priority": "high"
}'const response = await fetch("https://api.median.sh/v1/signals", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
"kind": "bug",
"title": "Export breaks past 10k rows",
"body": "The CSV export times out for large workspaces.",
"priority": "high"
})
});Response
{
"id": "string"
}{
"error": {
"code": "string",
"message": "string"
}
}{
"error": {
"code": "string",
"message": "string"
}
}{
"error": {
"code": "string",
"message": "string"
}
}{
"error": {
"code": "string",
"message": "string"
}
}