Skip to main content
Confirm the deployed process has a current af_live_... write key, the request hits an included route, the response is eligible 2xx JSON/HTML/header content, and AGENT_FEEDBACK_ENABLED is not false. Check startup logs for key validation errors and Setup for the key’s last-used timestamp. For cacheMode: "request" / cache_mode="request", send Agent-Feedback-Request: 1. Async-job adapters should instrument only the terminal successful result. Send a real request, allow the bounded background queue to flush, then use Check now.
This is expected for generic HTTP agents, which may ignore response-side side-effect instructions. The opportunity proves the company-side connection, not customer-agent handling. Verify the contract with the doctor or a feedback-aware runtime. MCP is the reliable explicit-tool path.
MCP confirms a product-tool call before feedback is submitted. Follow only the feedback action returned by that call. In an ask mode, record an actual explicit approved or declined decision; approval returns a separate feedback_ready action. A confirmation without a report is therefore a valid intermediate state.
Configure customerRef from the same stable opaque account or tenant ID used for verified accountRef. Do not pair it with userRef alone or use a name, email, caller value, prompt, or agent argument. Without customerRef, Ask once safely becomes per-interaction permission and the SDK logs a warning. For HTTP products, install Epode Companion so the agent verifies each capability and checks Epode’s remembered state before asking. The company’s product response never waits on that check.
Errors, redirects, streams, binaries, assets, health routes, excluded routes, and unsafe bodies are intentionally untouched. JSON arrays and scalar values use headers instead of body mutation. Shared-cache-safe mode leaves a public cacheable response untouched; use request mode and send Agent-Feedback-Request: 1 when that route needs an opted-in private handoff.
Create a new write key in Setup. Old key formats cannot sign afr2_ capabilities. Rotate keys through the dashboard; the prior key overlaps for one hour so you can deploy safely.
Product responses fail open, so a frozen isolate may drop best-effort opportunity telemetry. Pass the platform lifecycle hook (waitUntil or its equivalent), keep the included work bounded, and test the deployed runtime. Feedback reports submit directly through their scoped capability and can still succeed when an opportunity batch was dropped.
Modern requests must use 2026-07-28, carry matching version/method/name headers and request metadata, and avoid Mcp-Session-Id. Use server/discover before other methods.
When the tool returns retryable: true, retry exactly once with the same feedbackHandle and identical report. Do not retry non-retryable validation or permission failures. Epode’s idempotency returns the first accepted report if the original success response was lost.

Still stuck?

Capture only the normalized route/tool name, response status, SDK/runtime version, and error message. Do not send product keys, prompts, transcripts, customer content, raw tool inputs, or raw tool outputs.