Send typing
Shows the visitor’s typing indicator in your team’s inbox, and a no-op before the session’s first message. The signal expires on its own after a few seconds, so send it while the visitor types and let it lapse.
POST
/typingAuthorization
AuthorizationBearer token · headerrequiredA MEDIAN_KEY from Settings under API. It starts with `median_key_` and stays on your server. The tool endpoint routes also accept an OAuth access token (`median_oat_`) from `median login` or an MCP client, acting as the person who approved it. The messaging routes accept only a Median key.
Request body
requiredapplication/jsonsessionstringrequiredThe visitor's session token.
min length 8 · max length 128
isTypingbooleanrequiredWhether they are mid sentence.
Responses
200The signal was recorded.
okboolean400`invalid_json`: the body is not a JSON object. `invalid_request`: `session` is not a string or `isTyping` is not a boolean. `invalid_session`: the session is not 8 to 128 characters.
errorobjectrequiredShow propertiesHide properties
codestringrequiredBranch on this rather than on the message.
messagestringrequired401`missing_api_key`: no bearer token. `invalid_api_key`: the key matches no organization or was revoked. `publishable_key`: a `median_pk_` key was sent. An OAuth access token is refused here with `invalid_api_key`.
errorobjectrequiredShow propertiesHide properties
codestringrequiredBranch on this rather than on the message.
messagestringrequired429The organization's API allowance for this class of request is used up. Wait the `Retry-After` header's seconds. Limits depend on the plan. See [rate limits](/api/errors-and-limits#rate-limits).
errorobjectrequiredShow propertiesHide properties
codestringrequiredBranch on this rather than on the message.
messagestringrequiredRequest
curl -X POST "https://api.median.sh/v1/typing" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"session": "user_42",
"isTyping": true
}'const response = await fetch("https://api.median.sh/v1/typing", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
"session": "user_42",
"isTyping": true
})
});Response
{
"ok": true
}{
"error": {
"code": "invalid_request",
"message": "\"isTyping\" has to be true or false."
}
}{
"error": {
"code": "invalid_api_key",
"message": "That Median key does not match any organization. Copy the median_key_ key again from Settings under API."
}
}{
"error": {
"code": "rate_limited",
"message": "Your organization's API allowance is temporarily full. Please retry shortly."
}
}