# Submit AgentFeedback

feedback.now v1 receiver. Private untrusted reports, inline evidence, 90-day retention; never changes public content. HTTP and MCP writes share 60 submissions/hour per source and 240/hour site-wide. Obtain user approval when required by your host. Receipt IDs are bearer references; receipts contain status only. Acceptance means stored, not verified. No automatic submission retries.

Operation: postAgentFeedback
POST /api/v1/feedback

Access: anonymous. Automatic retries: none. Redirects: manual. Request body limit: 48000 bytes.
Default timeout: 30 seconds. Response limit: 16 MiB. Pagination is opt-in and bounded; an exhausted bound reports incomplete execution.

[HTML reference](/developers/api/postAgentFeedback) · [Authoritative schemas](/api/openapi.json)

## Wire contract

```json
{
  "operationId": "postAgentFeedback",
  "summary": "Submit AgentFeedback",
  "tags": [
    "Agent feedback"
  ],
  "description": "feedback.now v1 receiver. Private untrusted reports, inline evidence, 90-day retention; never changes public content. HTTP and MCP writes share 60 submissions/hour per source and 240/hour site-wide. Obtain user approval when required by your host. Receipt IDs are bearer references; receipts contain status only. Acceptance means stored, not verified. No automatic submission retries.",
  "x-public-access": "anonymous",
  "x-public-side-effect": "coordination",
  "x-public-body-limit": 48000,
  "requestBody": {
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "type": "object",
          "properties": {
            "reporter": {
              "type": "object",
              "properties": {
                "agent_vendor": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 128
                },
                "agent_product": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 128
                },
                "agent_version": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 128
                }
              },
              "required": [
                "agent_vendor",
                "agent_product"
              ],
              "additionalProperties": false
            },
            "subject": {
              "type": "object",
              "properties": {
                "surface": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 512
                },
                "domain": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 253
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "api_endpoint",
                    "docs_page",
                    "cli_command",
                    "sdk_method",
                    "other"
                  ]
                },
                "product": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 128
                }
              },
              "required": [
                "surface",
                "domain"
              ],
              "additionalProperties": false
            },
            "signal": {
              "type": "object",
              "properties": {
                "category": {
                  "type": "string",
                  "enum": [
                    "bug",
                    "docs_mismatch",
                    "friction",
                    "feature_gap",
                    "quality_degradation",
                    "other"
                  ]
                },
                "severity": {
                  "type": "string",
                  "enum": [
                    "critical",
                    "high",
                    "medium",
                    "low"
                  ]
                },
                "confidence": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "reproducibility": {
                  "type": "string",
                  "enum": [
                    "always",
                    "sometimes",
                    "intermittent",
                    "once"
                  ]
                }
              },
              "required": [
                "category",
                "severity",
                "confidence"
              ],
              "additionalProperties": false
            },
            "content": {
              "type": "object",
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 256
                },
                "summary": {
                  "type": "string",
                  "minLength": 0,
                  "maxLength": 4096
                },
                "hypothesis": {
                  "type": "string",
                  "minLength": 0,
                  "maxLength": 2048
                }
              },
              "required": [
                "title"
              ],
              "additionalProperties": false
            },
            "evidence": {
              "maxItems": 10,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "http_summary",
                      "stderr_excerpt",
                      "repro_steps",
                      "screenshot",
                      "log_excerpt",
                      "other"
                    ]
                  },
                  "content": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 8192
                  },
                  "redacted": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "type",
                  "content"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "reporter",
            "subject",
            "signal",
            "content"
          ],
          "additionalProperties": false
        }
      }
    }
  },
  "responses": {
    "201": {
      "description": "Feedback protocol response",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "properties": {
              "receipt": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^(?:fb|obs|rcpt)_[a-f0-9]{32}$"
                  },
                  "feedback_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^(?:fb|obs|rcpt)_[a-f0-9]{32}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "observation_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^(?:fb|obs|rcpt)_[a-f0-9]{32}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "accepted",
                      "needs_more_evidence",
                      "duplicate",
                      "rejected",
                      "queued"
                    ]
                  },
                  "created_at": {
                    "type": "string"
                  },
                  "quality_score": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "duplicate_of": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "budget_remaining": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "budget_delta": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "evidence_ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "id",
                  "feedback_id",
                  "observation_id",
                  "status",
                  "created_at",
                  "quality_score",
                  "duplicate_of",
                  "budget_remaining",
                  "budget_delta",
                  "evidence_ids"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "receipt"
            ],
            "additionalProperties": false
          }
        }
      }
    },
    "400": {
      "description": "Feedback request failed. Errors contain error and message. Never automatically retry submissions.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "error",
              "message"
            ],
            "properties": {
              "error": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "403": {
      "description": "Feedback request failed. Errors contain error and message. Never automatically retry submissions.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "error",
              "message"
            ],
            "properties": {
              "error": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "404": {
      "description": "Feedback request failed. Errors contain error and message. Never automatically retry submissions.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "error",
              "message"
            ],
            "properties": {
              "error": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "413": {
      "description": "Feedback request failed. Errors contain error and message. Never automatically retry submissions.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "error",
              "message"
            ],
            "properties": {
              "error": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "415": {
      "description": "Feedback request failed. Errors contain error and message. Never automatically retry submissions.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "error",
              "message"
            ],
            "properties": {
              "error": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "429": {
      "description": "Feedback request failed. Errors contain error and message. Never automatically retry submissions.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "error",
              "message"
            ],
            "properties": {
              "error": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "503": {
      "description": "Feedback request failed. Errors contain error and message. Never automatically retry submissions.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "error",
              "message"
            ],
            "properties": {
              "error": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
```

## Synthetic examples

### curl

```bash
curl --fail-with-body --max-time 30 --max-filesize 16777216 --request POST 'https://irvinebroque.com/api/v1/feedback' --header 'Accept: application/json' --header 'Content-Type: application/json' --data-binary @request.json
```

### TypeScript

```typescript
import { PublicApi } from '@irvinebroque/public-api';
const api = new PublicApi();
const result = await api.feedback.submit({
  "body": {
    "reporter": {
      "agent_vendor": "fixture",
      "agent_product": "fixture"
    },
    "subject": {
      "surface": "fixture",
      "domain": "irvinebroque.com"
    },
    "signal": {
      "category": "bug",
      "severity": "critical",
      "confidence": 0
    },
    "content": {
      "title": "fixture"
    }
  }
});
console.log(result.status, result.headers.get('content-type')); // Keep transient capabilities in memory.
```

### CLI

```bash
irvinebroque feedback submit --body-file request.json
```

### request.json

```json
{
  "reporter": {
    "agent_vendor": "fixture",
    "agent_product": "fixture"
  },
  "subject": {
    "surface": "fixture",
    "domain": "irvinebroque.com"
  },
  "signal": {
    "category": "bug",
    "severity": "critical",
    "confidence": 0
  },
  "content": {
    "title": "fixture"
  }
}
```
