[{"data":1,"prerenderedAt":982},["ShallowReactive",2],{"navigation":3,"/docs/api/agents":50,"/docs/api/agents-surround":977},[4,23],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","/docs/getting-started","1.docs/1.getting-started/1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","/docs/getting-started/installation","1.docs/1.getting-started/2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Usage Guide","/docs/getting-started/usage","1.docs/1.getting-started/3.usage","i-lucide-sliders",false,{"title":24,"path":25,"stem":26,"children":27,"icon":29},"API Overview","/docs/api","1.docs/2.api/1.index",[28,30,35,40,45],{"title":24,"path":25,"stem":26,"icon":29},"i-lucide-server-cog",{"title":31,"path":32,"stem":33,"icon":34},"Agents","/docs/api/agents","1.docs/2.api/2.agents","i-lucide-bot",{"title":36,"path":37,"stem":38,"icon":39},"Messages","/docs/api/messages","1.docs/2.api/3.messages","i-lucide-mail",{"title":41,"path":42,"stem":43,"icon":44},"Threads","/docs/api/threads","1.docs/2.api/4.threads","i-lucide-git-branch",{"title":46,"path":47,"stem":48,"icon":49},"Webhooks","/docs/api/webhooks","1.docs/2.api/5.webhooks","i-lucide-webhook",{"id":51,"title":31,"body":52,"description":971,"extension":972,"meta":973,"navigation":974,"path":32,"seo":975,"stem":33,"__hash__":976},"docs/1.docs/2.api/2.agents.md",{"type":53,"value":54,"toc":945},"minimark",[55,64,72,77,104,109,159,204,207,214,325,334,338,355,359,378,384,498,505,509,529,533,559,564,643,646,665,671,691,694,699,764,768,787,790,846,859,865,868,880,884,887,927,941],[56,57,58,59,63],"p",{},"An agent is one Durable-Object-backed mailbox. Each agent has a 12-character lowercase id, an address on ",[60,61,62],"code",{},"${DEFAULT_EMAIL_DOMAIN}",", and its own per-agent API key. Named agents use a slug of the name as the address local part; unnamed agents use the generated id.",[56,65,66,67,71],{},"All routes on this page require the ",[68,69,70],"strong",{},"master key"," unless explicitly noted.",[73,74,76],"h2",{"id":75},"create-an-agent","Create an agent",[78,79,80,90,98],"ul",{},[81,82,83,86,87],"li",{},[68,84,85],{},"Method:"," ",[60,88,89],{},"POST",[81,91,92,86,95],{},[68,93,94],{},"Path:",[60,96,97],{},"/agents",[81,99,100,103],{},[68,101,102],{},"Auth:"," master key only",[105,106,108],"h3",{"id":107},"request-body","Request body",[110,111,116],"pre",{"className":112,"code":113,"language":114,"meta":115,"style":115},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"Customer Success\"\n}\n","json","",[60,117,118,127,153],{"__ignoreMap":115},[119,120,123],"span",{"class":121,"line":122},"line",1,[119,124,126],{"class":125},"sMK4o","{\n",[119,128,130,133,137,140,143,146,150],{"class":121,"line":129},2,[119,131,132],{"class":125},"  \"",[119,134,136],{"class":135},"spNyl","name",[119,138,139],{"class":125},"\"",[119,141,142],{"class":125},":",[119,144,145],{"class":125}," \"",[119,147,149],{"class":148},"sfazB","Customer Success",[119,151,152],{"class":125},"\"\n",[119,154,156],{"class":121,"line":155},3,[119,157,158],{"class":125},"}\n",[160,161,162,181],"table",{},[163,164,165],"thead",{},[166,167,168,172,175,178],"tr",{},[169,170,171],"th",{},"Field",[169,173,174],{},"Type",[169,176,177],{},"Required",[169,179,180],{},"Description",[182,183,184],"tbody",{},[166,185,186,191,194,197],{},[187,188,189],"td",{},[60,190,136],{},[187,192,193],{},"string",[187,195,196],{},"No",[187,198,199,200,203],{},"Display name (1–120 chars). Defaults to ",[60,201,202],{},"\"Untitled\""," if omitted.",[56,205,206],{},"Body cap: 4 KiB UTF-8 bytes.",[105,208,210,211],{"id":209},"response-201-created","Response ",[60,212,213],{},"201 Created",[110,215,217],{"className":112,"code":216,"language":114,"meta":115,"style":115},"{\n  \"id\": \"abc123def456\",\n  \"email\": \"customer-success@agents.yourdomain.com\",\n  \"name\": \"Customer Success\",\n  \"api_key\": \"rA9-...long-base64url\",\n  \"created_at\": 1730000000\n}\n",[60,218,219,223,244,264,283,304,320],{"__ignoreMap":115},[119,220,221],{"class":121,"line":122},[119,222,126],{"class":125},[119,224,225,227,230,232,234,236,239,241],{"class":121,"line":129},[119,226,132],{"class":125},[119,228,229],{"class":135},"id",[119,231,139],{"class":125},[119,233,142],{"class":125},[119,235,145],{"class":125},[119,237,238],{"class":148},"abc123def456",[119,240,139],{"class":125},[119,242,243],{"class":125},",\n",[119,245,246,248,251,253,255,257,260,262],{"class":121,"line":155},[119,247,132],{"class":125},[119,249,250],{"class":135},"email",[119,252,139],{"class":125},[119,254,142],{"class":125},[119,256,145],{"class":125},[119,258,259],{"class":148},"customer-success@agents.yourdomain.com",[119,261,139],{"class":125},[119,263,243],{"class":125},[119,265,267,269,271,273,275,277,279,281],{"class":121,"line":266},4,[119,268,132],{"class":125},[119,270,136],{"class":135},[119,272,139],{"class":125},[119,274,142],{"class":125},[119,276,145],{"class":125},[119,278,149],{"class":148},[119,280,139],{"class":125},[119,282,243],{"class":125},[119,284,286,288,291,293,295,297,300,302],{"class":121,"line":285},5,[119,287,132],{"class":125},[119,289,290],{"class":135},"api_key",[119,292,139],{"class":125},[119,294,142],{"class":125},[119,296,145],{"class":125},[119,298,299],{"class":148},"rA9-...long-base64url",[119,301,139],{"class":125},[119,303,243],{"class":125},[119,305,307,309,312,314,316],{"class":121,"line":306},6,[119,308,132],{"class":125},[119,310,311],{"class":135},"created_at",[119,313,139],{"class":125},[119,315,142],{"class":125},[119,317,319],{"class":318},"sbssI"," 1730000000\n",[119,321,323],{"class":121,"line":322},7,[119,324,158],{"class":125},[56,326,327,329,330,333],{},[60,328,290],{}," is shown ",[68,331,332],{},"exactly once"," — only its HMAC hash is stored.",[105,335,337],{"id":336},"errors","Errors",[78,339,340,349],{},[81,341,342,345,346,348],{},[60,343,344],{},"400"," — invalid JSON, body too large, or ",[60,347,136],{}," outside 1–120 chars.",[81,350,351,354],{},[60,352,353],{},"401"," — missing or wrong bearer token.",[73,356,358],{"id":357},"list-agents","List agents",[78,360,361,368,374],{},[81,362,363,86,365],{},[68,364,85],{},[60,366,367],{},"GET",[81,369,370,86,372],{},[68,371,94],{},[60,373,97],{},[81,375,376,103],{},[68,377,102],{},[105,379,210,381],{"id":380},"response-200-ok",[60,382,383],{},"200 OK",[110,385,387],{"className":112,"code":386,"language":114,"meta":115,"style":115},"{\n  \"agents\": [\n    {\n      \"id\": \"abc123def456\",\n      \"email\": \"abc123def456@agents.yourdomain.com\",\n      \"name\": \"Customer Success\",\n      \"created_at\": 1730000000\n    }\n  ]\n}\n",[60,388,389,393,407,412,432,451,469,481,487,493],{"__ignoreMap":115},[119,390,391],{"class":121,"line":122},[119,392,126],{"class":125},[119,394,395,397,400,402,404],{"class":121,"line":129},[119,396,132],{"class":125},[119,398,399],{"class":135},"agents",[119,401,139],{"class":125},[119,403,142],{"class":125},[119,405,406],{"class":125}," [\n",[119,408,409],{"class":121,"line":155},[119,410,411],{"class":125},"    {\n",[119,413,414,417,420,422,424,426,428,430],{"class":121,"line":266},[119,415,416],{"class":125},"      \"",[119,418,229],{"class":419},"sBMFI",[119,421,139],{"class":125},[119,423,142],{"class":125},[119,425,145],{"class":125},[119,427,238],{"class":148},[119,429,139],{"class":125},[119,431,243],{"class":125},[119,433,434,436,438,440,442,444,447,449],{"class":121,"line":285},[119,435,416],{"class":125},[119,437,250],{"class":419},[119,439,139],{"class":125},[119,441,142],{"class":125},[119,443,145],{"class":125},[119,445,446],{"class":148},"abc123def456@agents.yourdomain.com",[119,448,139],{"class":125},[119,450,243],{"class":125},[119,452,453,455,457,459,461,463,465,467],{"class":121,"line":306},[119,454,416],{"class":125},[119,456,136],{"class":419},[119,458,139],{"class":125},[119,460,142],{"class":125},[119,462,145],{"class":125},[119,464,149],{"class":148},[119,466,139],{"class":125},[119,468,243],{"class":125},[119,470,471,473,475,477,479],{"class":121,"line":322},[119,472,416],{"class":125},[119,474,311],{"class":419},[119,476,139],{"class":125},[119,478,142],{"class":125},[119,480,319],{"class":318},[119,482,484],{"class":121,"line":483},8,[119,485,486],{"class":125},"    }\n",[119,488,490],{"class":121,"line":489},9,[119,491,492],{"class":125},"  ]\n",[119,494,496],{"class":121,"line":495},10,[119,497,158],{"class":125},[56,499,500,501,504],{},"Tombstoned agents (",[60,502,503],{},"deleted_at IS NOT NULL",") are filtered out.",[73,506,508],{"id":507},"get-one-agent","Get one agent",[78,510,511,517,524],{},[81,512,513,86,515],{},[68,514,85],{},[60,516,367],{},[81,518,519,86,521],{},[68,520,94],{},[60,522,523],{},"/agents/:id",[81,525,526,528],{},[68,527,102],{}," master key, or this agent's own per-agent key",[105,530,532],{"id":531},"path-parameters","Path parameters",[160,534,535,546],{},[163,536,537],{},[166,538,539,542,544],{},[169,540,541],{},"Parameter",[169,543,174],{},[169,545,180],{},[182,547,548],{},[166,549,550,554,556],{},[187,551,552],{},[60,553,229],{},[187,555,193],{},[187,557,558],{},"12 lowercase alphanumeric chars.",[105,560,210,562],{"id":561},"response-200-ok-1",[60,563,383],{},[110,565,567],{"className":112,"code":566,"language":114,"meta":115,"style":115},"{\n  \"id\": \"abc123def456\",\n  \"email\": \"abc123def456@agents.yourdomain.com\",\n  \"name\": \"Customer Success\",\n  \"created_at\": 1730000000\n}\n",[60,568,569,573,591,609,627,639],{"__ignoreMap":115},[119,570,571],{"class":121,"line":122},[119,572,126],{"class":125},[119,574,575,577,579,581,583,585,587,589],{"class":121,"line":129},[119,576,132],{"class":125},[119,578,229],{"class":135},[119,580,139],{"class":125},[119,582,142],{"class":125},[119,584,145],{"class":125},[119,586,238],{"class":148},[119,588,139],{"class":125},[119,590,243],{"class":125},[119,592,593,595,597,599,601,603,605,607],{"class":121,"line":155},[119,594,132],{"class":125},[119,596,250],{"class":135},[119,598,139],{"class":125},[119,600,142],{"class":125},[119,602,145],{"class":125},[119,604,446],{"class":148},[119,606,139],{"class":125},[119,608,243],{"class":125},[119,610,611,613,615,617,619,621,623,625],{"class":121,"line":266},[119,612,132],{"class":125},[119,614,136],{"class":135},[119,616,139],{"class":125},[119,618,142],{"class":125},[119,620,145],{"class":125},[119,622,149],{"class":148},[119,624,139],{"class":125},[119,626,243],{"class":125},[119,628,629,631,633,635,637],{"class":121,"line":285},[119,630,132],{"class":125},[119,632,311],{"class":135},[119,634,139],{"class":125},[119,636,142],{"class":125},[119,638,319],{"class":318},[119,640,641],{"class":121,"line":306},[119,642,158],{"class":125},[105,644,337],{"id":645},"errors-1",[78,647,648,653,659],{},[81,649,650,652],{},[60,651,353],{}," — missing or invalid bearer.",[81,654,655,658],{},[60,656,657],{},"403"," — bearer is a per-agent key for a different agent.",[81,660,661,664],{},[60,662,663],{},"404"," — id doesn't match any non-tombstoned agent.",[73,666,668],{"id":667},"get-me",[60,669,670],{},"GET /me",[78,672,673,679,686],{},[81,674,675,86,677],{},[68,676,85],{},[60,678,367],{},[81,680,681,86,683],{},[68,682,94],{},[60,684,685],{},"/me",[81,687,688,690],{},[68,689,102],{}," any per-agent key",[56,692,693],{},"Convenience route that returns the agent corresponding to the bearer token. Useful for the dashboard's \"verify key works\" probe.",[105,695,210,697],{"id":696},"response-200-ok-2",[60,698,383],{},[110,700,702],{"className":112,"code":701,"language":114,"meta":115,"style":115},"{\n  \"id\": \"abc123def456\",\n  \"email\": \"abc123def456@agents.yourdomain.com\",\n  \"name\": \"Customer Success\"\n}\n",[60,703,704,708,726,744,760],{"__ignoreMap":115},[119,705,706],{"class":121,"line":122},[119,707,126],{"class":125},[119,709,710,712,714,716,718,720,722,724],{"class":121,"line":129},[119,711,132],{"class":125},[119,713,229],{"class":135},[119,715,139],{"class":125},[119,717,142],{"class":125},[119,719,145],{"class":125},[119,721,238],{"class":148},[119,723,139],{"class":125},[119,725,243],{"class":125},[119,727,728,730,732,734,736,738,740,742],{"class":121,"line":155},[119,729,132],{"class":125},[119,731,250],{"class":135},[119,733,139],{"class":125},[119,735,142],{"class":125},[119,737,145],{"class":125},[119,739,446],{"class":148},[119,741,139],{"class":125},[119,743,243],{"class":125},[119,745,746,748,750,752,754,756,758],{"class":121,"line":266},[119,747,132],{"class":125},[119,749,136],{"class":135},[119,751,139],{"class":125},[119,753,142],{"class":125},[119,755,145],{"class":125},[119,757,149],{"class":148},[119,759,152],{"class":125},[119,761,762],{"class":121,"line":285},[119,763,158],{"class":125},[73,765,767],{"id":766},"delete-an-agent","Delete an agent",[78,769,770,777,783],{},[81,771,772,86,774],{},[68,773,85],{},[60,775,776],{},"DELETE",[81,778,779,86,781],{},[68,780,94],{},[60,782,523],{},[81,784,785,103],{},[68,786,102],{},[56,788,789],{},"The Worker:",[791,792,793,796,832,839],"ol",{},[81,794,795],{},"Looks up the agent and 404s if it's gone or already tombstoned.",[81,797,798,799,802,803,806,807,810,811,814,815,818,819,818,822,818,825,818,828,831],{},"Calls ",[60,800,801],{},"markDeleted()"," on the per-agent Durable Object: sets a sticky ",[60,804,805],{},"deleted='1'"," flag in the agent's ",[60,808,809],{},"_meta"," table and ",[68,812,813],{},"truncates"," all per-agent SQLite tables (",[60,816,817],{},"messages",", ",[60,820,821],{},"threads",[60,823,824],{},"message_threads",[60,826,827],{},"message_recipients",[60,829,830],{},"webhook_attempts",").",[81,833,834,835,838],{},"Hard-deletes the agent's webhooks from D1 (the soft-delete on agents means the prior ",[60,836,837],{},"ON DELETE CASCADE"," no longer fires).",[81,840,841,842,845],{},"Sets ",[60,843,844],{},"agents.deleted_at"," to the current Unix timestamp.",[56,847,848,849,851,852,855,856,858],{},"After delete, the agent's old API key returns ",[60,850,353],{},", all ",[60,853,854],{},"/agents/:id/*"," routes return ",[60,857,663],{},", and inbound mail to its address is dropped (the email handler can't resolve a tombstoned agent).",[105,860,210,862],{"id":861},"response-204-no-content",[60,863,864],{},"204 No Content",[105,866,337],{"id":867},"errors-2",[78,869,870,875],{},[81,871,872,874],{},[60,873,353],{}," — missing or non-master bearer.",[81,876,877,879],{},[60,878,663],{}," — id unknown or already tombstoned.",[73,881,883],{"id":882},"key-rotation","Key rotation",[56,885,886],{},"There is no in-place rotate endpoint yet. To rotate a per-agent key:",[791,888,889,895,901,914],{},[81,890,891,892,894],{},"Note the agent's ",[60,893,229],{}," and any state you care about (its message history is in DO storage and survives only as long as the agent does — read it first if you need to keep it).",[81,896,897,900],{},[60,898,899],{},"DELETE /agents/:id"," with the master key. The Worker tombstones the agent and purges its DO storage (see above).",[81,902,903,906,907,910,911,913],{},[60,904,905],{},"POST /agents"," with ",[60,908,909],{},"{ \"name\": \"...\" }"," — Cloudflare assigns a fresh 12-char id, and you get a fresh ",[60,912,290],{},".",[81,915,916,917,919,920,922,923,926],{},"Update consumers to use the new ",[60,918,229],{}," + ",[60,921,290],{},". The old id will not be re-used unless ",[60,924,925],{},"generateAgentId"," collides on a 36^12 space (effectively impossible).",[56,928,929,930,932,933,936,937,940],{},"To rotate the ",[68,931,70],{},", run ",[60,934,935],{},"wrangler secret put MASTER_KEY"," with a new value and ",[60,938,939],{},"wrangler deploy",". Older requests using the old key will fail at the next request after the deploy propagates (~30s).",[942,943,944],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":115,"searchDepth":129,"depth":129,"links":946},[947,953,957,962,965,970],{"id":75,"depth":129,"text":76,"children":948},[949,950,952],{"id":107,"depth":155,"text":108},{"id":209,"depth":155,"text":951},"Response 201 Created",{"id":336,"depth":155,"text":337},{"id":357,"depth":129,"text":358,"children":954},[955],{"id":380,"depth":155,"text":956},"Response 200 OK",{"id":507,"depth":129,"text":508,"children":958},[959,960,961],{"id":531,"depth":155,"text":532},{"id":561,"depth":155,"text":956},{"id":645,"depth":155,"text":337},{"id":667,"depth":129,"text":670,"children":963},[964],{"id":696,"depth":155,"text":956},{"id":766,"depth":129,"text":767,"children":966},[967,969],{"id":861,"depth":155,"text":968},"Response 204 No Content",{"id":867,"depth":155,"text":337},{"id":882,"depth":129,"text":883},"Create, read, list, and tombstone agent mailboxes (master key required).","md",{},{"icon":34},{"title":31,"description":971},"bkhS6LV-nEKKp6nklttsLGqlt1hXOO4Ij-TT_E1SpEQ",[978,980],{"title":24,"path":25,"stem":26,"description":979,"icon":29,"children":-1},"How to authenticate with the Sendook Worker, request and response formats, and the route map.",{"title":36,"path":37,"stem":38,"description":981,"icon":39,"children":-1},"Send mail from an agent and read its mailbox.",1778700750587]