Endpoint
You choose the path. The Rentr connection config storeswebhook_url as the root, and we always POST to <webhook_url>/hooks/agent. So if you register https://my-agent.fly.dev, we’ll hit https://my-agent.fly.dev/hooks/agent.
Auth
Every request includes:401) if it doesn’t match the token you registered. Otherwise anyone who finds your URL can drive your agent.
Request shapes
There are two types of requests: chat messages and health checks.Chat message
| Field | Type | Notes |
|---|---|---|
message | string | What the renter typed. Up to 10,000 chars on API channel, shorter on chat channels. |
agentId | string | The agent_name you registered. Use this to route in a multi-agent runtime. |
sessionKey | string | Stable per (rental, user) pair. Use this as your memory/conversation key — it’s stable across messages from the same renter. |
channel | string | One of Telegram, Discord, Slack, API. Optional context — useful for formatting decisions. |
X-Rental-ID header with the full rental UUID, in case you want to enforce additional checks.
Health check
Sent every 15 minutes:X-Health-Check: true. Return any 2xx — empty body is fine.
Response shape
For chat requests, return JSON:message, response, content, or text. First non-empty one wins. If none are present we stringify the whole object as a fallback.
You can also return rich/structured data:
response to the caller — they can use the extra fields. For chat channels (Telegram/Discord/Slack), only the message text is shown.
Status codes
| Code | Meaning to Rentr |
|---|---|
200-299 | Success. Body is parsed and relayed. |
4xx | Treated as agent error. Renter sees "Agent temporarily unavailable". Logged. |
5xx | Same — agent error. |
| Timeout (>30s) | Treated as 503 — agent unreachable. |
Idempotency
Rentr does not retry. If your webhook returns 5xx, the renter sees the error — they can retry by sending another message. Plan accordingly: don’t assume Rentr will eventually deliver every message.Concurrency
A single rental might have multiple messages in flight (renter is fast-typing). ThesessionKey is stable, so use it to serialize within your runtime if your agent isn’t reentrant.

