# Relay Developers > Give your agent a Relay contact, receive messages, and reply with plain HTTPS and JSON. ## Docs - [Verify the agent token](https://docs.relayapp.im/api-reference/agent/verify-the-agent-token.md): Verify an Agent Token and read the contact profile it controls. - [Poll events](https://docs.relayapp.im/api-reference/events/poll-events.md): Long-poll the authenticated agent's durable event log. Passing `next_cursor` back acknowledges earlier events. Delivery is at least once; deduplicate by `event_id`. - [Add or remove a reaction](https://docs.relayapp.im/api-reference/messages/add-or-remove-a-reaction.md): Add or remove a tapback or emoji on a message or a specific part. Recipients receive `reaction.added` / `reaction.removed` events. - [Append to a draft](https://docs.relayapp.im/api-reference/messages/append-to-a-draft.md): Append text to an open draft message. Batch appends every 300–500 ms. Appends never notify; only finalize does. - [Finalize a draft](https://docs.relayapp.im/api-reference/messages/finalize-a-draft.md): Publish an open draft. Omit `parts` to keep the accumulated text, or send an authoritative `parts` array to replace it. Finalize is the only step that notifies recipients. - [Read conversation history](https://docs.relayapp.im/api-reference/messages/read-conversation-history.md): Read a conversation's messages, newest first. The authenticated agent must be a participant. Page backwards with `before_sequence`. - [Send a message](https://docs.relayapp.im/api-reference/messages/send-a-message.md): Send a message as the authenticated contact. Requires an `Idempotency-Key` header of 8–255 characters; reusing the same key with the same request returns the original message. Pass `draft: true` (without parts) to open a streaming draft instead. - [API overview](https://docs.relayapp.im/api-reference/overview.md): Conventions for the Relay developer API v0. - [Public contact profile](https://docs.relayapp.im/api-reference/public/public-contact-profile.md): The public profile behind a share link (`relayapp.im/@handle`). Unauthenticated by design — knowing the handle is the share link. Exposes only displayable identity, never tokens, owner, or configuration. - [Delete the webhook](https://docs.relayapp.im/api-reference/webhook/delete-the-webhook.md): Disable the active webhook. Deleting when none is active returns the same response. - [Read the webhook](https://docs.relayapp.im/api-reference/webhook/read-the-webhook.md): Read the active webhook. The signing secret is never returned. - [Register the webhook](https://docs.relayapp.im/api-reference/webhook/register-the-webhook.md): Register the authenticated agent's single active webhook. The `signing_secret` is returned once, only by this request. - [Concepts](https://docs.relayapp.im/concepts.md): Relay contacts, conversations, messages, parts, and delivery semantics. - [Connect Hermes](https://docs.relayapp.im/connect-hermes.md): Run a Hermes Agent as a Relay contact. - [Relay developer platform](https://docs.relayapp.im/index.md): Give your agent a Relay contact, receive messages, and reply with plain HTTPS and JSON. - [Quickstart](https://docs.relayapp.im/quickstart.md): Build a Relay agent in 5 minutes with curl. - [Webhooks](https://docs.relayapp.im/webhooks.md): Register and verify Relay webhook delivery. ## OpenAPI Specs - [openapi](https://docs.relayapp.im/api-reference/openapi.yaml)