amend is a human-in-the-loop layer for AI agents. Your agent submits content via a simple HTTP API, a human reviews it through a magic link (no login required), and the decision — along with any edits or comments — webhooks back to your agent.
It works with any agent that can make HTTP requests: Claude Code, Cursor, Codex, Amp, Gemini, or a custom script.
Three steps to get a human decision on AI-generated content:
/api/upload. You get back an amend_url.amend_url with the reviewer. They click it, read the content, leave comments, edit inline, and decide.summary_url from step 1 and paste it into your next prompt.Submit content for review. Returns an amend_url to send to the reviewer, a summary_url your agent can poll directly, and a resubmit_url to send a revised draft if changes are requested — none of these need to be constructed by hand.
POST https://www.amend.to/api/upload
Content-Type: application/json
{
"title": "Q2 product update",
"content": "We shipped three features this quarter...",
"content_type": "long_form",
"access": "comment_and_edit",
"author_email": "agent@example.com",
"reviewer_email": "human@example.com",
"webhook_url": "https://your-app.com/webhook/amend"
}Fields
| Field | Type | Description |
|---|---|---|
| title | string | Title shown to the reviewer |
| content | string | Markdown or plain text content |
| content_type | "long_form" | Content type (only long_form supported) |
| access | "comment_and_edit" | "comment" | Whether the reviewer can edit inline |
| author_email | string (optional) | Email of the agent/author |
| reviewer_email | string (optional) | Email shown on the review page |
| webhook_url | string (optional) | URL to POST the decision to when reviewer decides |
Response
{
"slug": "abc123",
"amend_url": "https://www.amend.to/abc123",
"summary_url": "https://www.amend.to/api/amend/abc123/summary",
"resubmit_url": "https://www.amend.to/api/amend/abc123/resubmit"
}Returns a markdown summary of the amend — status, final content, and all comments. Useful for polling or pasting directly into your next agent prompt.
GET https://www.amend.to/api/amend/[slug]/summaryExample response — approved
# Amend Summary: Q2 product update
**Status:** approved
**Revision:** 2
**Decided at:** 2026-07-01T10:23:00Z
## Final Content
We shipped three features this quarter...
## Comments
1. "Consider softening the tone in paragraph 2" (chars 45–89)
## Decision
Approved with minor edits applied inline.Example response — changes requested
When changes are requested, the summary includes a ## Next Step section with the exact resubmit_url to PATCH your revised content to — paste this whole response into your next prompt and the agent has everything it needs.
# Amend Summary: Q2 product update
**Status:** changes_requested
**Revision:** 1
## Comments (1)
1. On: "we dominated"
→ "Consider softening the tone" — Quick Falcon
## General Feedback
Tone is too aggressive for this audience — please soften it.
## Next Step
Revise the content based on the feedback above, then PATCH your new version to:
https://www.amend.to/api/amend/abc123/resubmitSend a revised draft after changes were requested. Resets the review back to pendingso the reviewer sees the new version. Only valid when the review isn't currently pending. This creates a new revision — the old draft and its comments stay intact and browsable from the amend page. The summary only reports feedback on the latest revision, so your agent never has to sift through comments already resolved by earlier drafts.
PATCH https://www.amend.to/api/amend/abc123/resubmit
Content-Type: application/json
{
"content": "We shipped three features this quarter, with a lighter tone..."
}Response
{
"slug": "abc123",
"amend_url": "https://www.amend.to/abc123",
"summary_url": "https://www.amend.to/api/amend/abc123/summary",
"resubmit_url": "https://www.amend.to/api/amend/abc123/resubmit",
"status": "pending",
"revision": 2
}When the reviewer clicks Approve or Request Changes, a POST is sent to the webhook_url you provided at upload time.
POST https://your-app.com/webhook/amend
Content-Type: application/json
{
"slug": "abc123",
"status": "approved",
"final_content": "We shipped three features this quarter...",
"changes_requested": null,
"comments": [
{
"body": "Consider softening the tone in paragraph 2",
"anchor_text": "we dominated",
"anchor_start": 45,
"anchor_end": 57
}
]
}status is either "approved" or "changes_requested". When changes are requested, changes_requested contains the reviewer's note and final_content reflects any inline edits they made.
webhook_url is optional. If you omit it, poll GET /api/amend/[slug]/summary for the decision.
The access field controls what the reviewer can do:
comment_and_edit — the reviewer can leave inline comments and edit the content directly. Final edits are reflected in the webhook payload and summary.comment — the reviewer can only leave comments. The content is read-only.Anyone with the amend URL can access it — the link is the only access control. Share it only with the intended reviewer.