Create messages
Says one thing in a room, as the caller.
POST /v1/team/rooms/{id}/messages
| Address | https://api.hanzo.ai/v1/team/rooms/{id}/messages |
| Method | POST |
| Operation | post_team_rooms_by_id_messages |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Says one thing in a room, as the caller.
The write goes through the SAME applyTx path the Team client's own messages take and is broadcast to every connected client of the space, so a message sent here appears live in an open room rather than on the next reload. It answers the message as the store now HOLDS it.
<@account-uuid> in the text is stored as the platform's mention, so the
person is notified in their inbox. Mentioning one of the org's agents — or
writing in a direct message with one — wakes it: it runs as itself, on behalf
of the caller, and posts its answer into the same room. The caller must be
able to see the room, and an archived room refuses new messages (409).
Request
9 fields, body application/json (required).
| Field | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | yes | ID is the room to say it in, from the path. |
files | body | team.teamFileIn[] | — | Files attaches blobs already uploaded to the space. |
files[].file | body | string | — | File is the blob id — the uuid the file was uploaded under with POST /v1/team/files/{space}. |
files[].name | body | string | — | Name is the file's name as a person should see it. |
files[].size | body | integer (int64) | — | Size is the file's length in bytes. |
files[].type | body | string | — | Type is the file's media type, e.g. "image/png". |
id | body | string | — | ID is the room to say it in, from the path. |
space | body | string | — | Space names the space holding the room. |
text | body | string | — | Text is what to say, as plain text. |
Response
| Status | Body | Meaning |
|---|---|---|
201 | team.teamMessage | created |
default | problem-details | refused |
201 body — 21 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
author | body | string | — | Author is the team account uuid that wrote it. |
createdOn | body | integer (int64) | — | CreatedOn is unix MILLIseconds, which is what the platform stamps. |
doc | body | string | — | Doc is the document this message is a comment on. |
editedOn | body | integer (int64) | — | EditedOn is when the author last edited the message, unix milliseconds. |
files | body | team.teamFile[] | — | Files are the files attached to the message. |
files[].file | body | string | — | File is the blob id, readable at GET /v1/team/files/{space}/{name}?file={file}. |
files[].id | body | string | — | ID is the attachment document's own id. |
files[].name | body | string | — | Name is the file's name as the person uploaded it. |
files[].size | body | integer (int64) | — | Size is the file's length in bytes, as the uploader stated it. |
files[].type | body | string | — | Type is the media type the uploader declared. |
id | body | string | — | ID is the message document's own id. |
lastReply | body | integer (int64) | — | LastReply is when the thread was last answered, unix milliseconds. |
mentions | body | string[] | — | Mentions are the account uuids the message @-mentions — exactly the people notify.go told they were mentioned. |
reactions | body | team.teamReaction[] | — | Reactions are the emoji people reacted with, one entry per emoji, in the order each emoji was first used. |
reactions[].accounts | body | string[] | — | Accounts are the account uuids that reacted with it, earliest first. |
reactions[].count | body | integer (int64) | — | Count is how many people reacted with it. |
reactions[].emoji | body | string | — | Emoji is the reaction itself, as the person picked it. |
replies | body | integer (int64) | — | Replies is how many replies the message's thread holds. |
room | body | string | — | Room is the room it was said in — the same id the room listing answers with, so a caller holding a message can name its room without a second read. |
text | body | string | — | Text is the message as PLAIN TEXT. |
thread | body | string | — | Thread is the message this one replies to. |
Failure carries the platform error shape — see Errors.
Examples
hanzo team rooms messages create <id>import { Configuration, TeamApi } from 'hanzoai';
const api = new TeamApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postTeamRoomsByIdMessages({ id: 'id', files: [{"file":"<file>","name":"<name>","size":0,"type":"<type>"}], id: "<id>" });from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import TeamApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = TeamApi(client).post_team_rooms_by_id_messages(id='id', files=[{"file":"<file>","name":"<name>","size":0,"type":"<type>"}], id="<id>")cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)
resp, _, err := client.TeamAPI.PostTeamRoomsByIdMessages(context.Background()).Execute()
if err != nil {
return err
}use hanzo_client::apis::{configuration::Configuration, team_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = team_api::post_team_rooms_by_id_messages(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.TeamApi;
ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));
var result = new TeamApi(client).postTeamRoomsByIdMessages();curl -X POST https://api.hanzo.ai/v1/team/rooms/<id>/messages \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"files": [
{
"file": "<file>",
"name": "<name>",
"size": 0,
"type": "<type>"
}
],
"id": "<id>"
}'MCP reaches team through the team tool, which names its 33 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe",
"arguments": {
"op": "list_team_account_providers"
}
}
}'