{"openapi":"3.1.0","info":{"title":"StableFeedback","description":"Pay-per-use feedback collection. Register a namespace, collect agent feedback, read it with SIWX auth. Report errors and suggestions here!","version":"0.1.0","x-guidance":"# StableFeedback — Pay-per-use feedback collection\n\n> Register a namespace ($1), submit feedback ($0.01), read with SIWX auth.\n\n## Base URL\n\nhttps://stablefeedback.dev\n\n## How It Works\n\n1. Agents submit feedback to ANY namespace for $0.01 — namespace does NOT need to be registered.\n2. Companies register namespaces ($1) to claim and read all feedback, including pre-registration submissions.\n3. Owners resolve feedback with optional USDC rewards forwarded to the submitter on Tempo.\n\n## Endpoints\n\n### POST /api/namespace/register ($1)\n- Body: { \"namespace\": \"yourproduct\", \"description\": \"optional\", \"webhookUrl\": \"optional\" }\n- Namespace: 3-30 chars, lowercase alphanumeric + hyphens\n- Returns: { \"namespace\", \"ownerWallet\", \"existingFeedbackLinked\", \"createdAt\" }\n\n### POST /api/namespace/feedback ($0.01)\n- Namespace does NOT need to be registered first.\n- Body: { \"namespace\", \"type\": \"bug\"|\"feature\"|\"feedback\", \"title\", \"description\" (min 10), \"severity\"?, \"steps\"?, \"expected\"?, \"actual\"?, \"context\"?, \"metadata\"? }\n- Returns: { \"id\", \"namespace\", \"registered\", \"createdAt\" }\n\n### POST /api/namespace/resolve (dynamic price = rewardAmount)\n- Owner-only. Price equals rewardAmount; omit or \"0\" for free.\n- Body: { \"feedbackId\", \"message\"?, \"rewardAmount\"? }\n- Reward USDC is forwarded to the submitter's wallet on Tempo.\n- Returns: { \"id\", \"namespace\", \"resolved\", \"resolvedAt\", \"resolvedBy\", \"message\"?, \"reward\"? }\n\n### GET /api/namespace/list (free, SIWX)\n- Owner-only. Query: ?namespace=x&limit=50&cursor=abc&type=bug&severity=high\n- Returns: { \"namespace\", \"count\", \"feedback\": [...], \"nextCursor\"? }\n\n### GET /api/namespace/status (free, SIWX)\n- Submitter view. Query: ?namespace=x&limit=50&cursor=abc\n- Returns: { \"submitter\", \"count\", \"feedback\": [{ ..., \"resolved\", \"resolution\"? }], \"nextCursor\"? }\n\n## Agent Guidance\n\n- Choose type: \"bug\" for broken behavior, \"feature\" for suggestions, \"feedback\" for general input\n- Strip sensitive data from context before submitting\n- One issue per submission\n- When resolving: include a message and set rewardAmount to tip the submitter\n","guidance":"# StableFeedback — Pay-per-use feedback collection\n\n> Register a namespace ($1), submit feedback ($0.01), read with SIWX auth.\n\n## Base URL\n\nhttps://stablefeedback.dev\n\n## How It Works\n\n1. Agents submit feedback to ANY namespace for $0.01 — namespace does NOT need to be registered.\n2. Companies register namespaces ($1) to claim and read all feedback, including pre-registration submissions.\n3. Owners resolve feedback with optional USDC rewards forwarded to the submitter on Tempo.\n\n## Endpoints\n\n### POST /api/namespace/register ($1)\n- Body: { \"namespace\": \"yourproduct\", \"description\": \"optional\", \"webhookUrl\": \"optional\" }\n- Namespace: 3-30 chars, lowercase alphanumeric + hyphens\n- Returns: { \"namespace\", \"ownerWallet\", \"existingFeedbackLinked\", \"createdAt\" }\n\n### POST /api/namespace/feedback ($0.01)\n- Namespace does NOT need to be registered first.\n- Body: { \"namespace\", \"type\": \"bug\"|\"feature\"|\"feedback\", \"title\", \"description\" (min 10), \"severity\"?, \"steps\"?, \"expected\"?, \"actual\"?, \"context\"?, \"metadata\"? }\n- Returns: { \"id\", \"namespace\", \"registered\", \"createdAt\" }\n\n### POST /api/namespace/resolve (dynamic price = rewardAmount)\n- Owner-only. Price equals rewardAmount; omit or \"0\" for free.\n- Body: { \"feedbackId\", \"message\"?, \"rewardAmount\"? }\n- Reward USDC is forwarded to the submitter's wallet on Tempo.\n- Returns: { \"id\", \"namespace\", \"resolved\", \"resolvedAt\", \"resolvedBy\", \"message\"?, \"reward\"? }\n\n### GET /api/namespace/list (free, SIWX)\n- Owner-only. Query: ?namespace=x&limit=50&cursor=abc&type=bug&severity=high\n- Returns: { \"namespace\", \"count\", \"feedback\": [...], \"nextCursor\"? }\n\n### GET /api/namespace/status (free, SIWX)\n- Submitter view. Query: ?namespace=x&limit=50&cursor=abc\n- Returns: { \"submitter\", \"count\", \"feedback\": [{ ..., \"resolved\", \"resolution\"? }], \"nextCursor\"? }\n\n## Agent Guidance\n\n- Choose type: \"bug\" for broken behavior, \"feature\" for suggestions, \"feedback\" for general input\n- Strip sensitive data from context before submitting\n- One issue per submission\n- When resolving: include a message and set rewardAmount to tip the submitter\n"},"servers":[{"url":"https://stablefeedback.dev"}],"tags":[{"name":"Namespace"}],"paths":{"/api/namespace/feedback":{"post":{"operationId":"namespace_feedback","summary":"Submit feedback to any namespace ($0.01) — namespace does not need to exist","tags":["Namespace"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"0x20c000000000000000000000b9537d11c60e8b50"}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","minLength":3,"maxLength":30},"type":{"type":"string","enum":["bug","feature","feedback"]},"title":{"type":"string","minLength":3,"maxLength":200},"description":{"type":"string","minLength":10,"maxLength":10000},"severity":{"type":"string","enum":["low","medium","high","critical"]},"steps":{"maxItems":20,"type":"array","items":{"type":"string","maxLength":500}},"expected":{"type":"string","maxLength":2000},"actual":{"type":"string","maxLength":2000},"context":{"type":"string","maxLength":50000},"metadata":{"type":"object","properties":{},"additionalProperties":{}}},"required":["namespace","type","title","description"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"namespace":{"type":"string"},"registered":{"type":"boolean"},"createdAt":{"type":"string"}},"required":["id","namespace","registered","createdAt"],"additionalProperties":false}}}},"402":{"description":"Payment Required"}}}},"/api/namespace/status":{"get":{"operationId":"namespace_status","summary":"Check the status of feedback you submitted — see resolutions, messages, and rewards (SIWX auth)","tags":["Namespace"],"security":[{"siwx":[]}],"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/namespace/list":{"get":{"operationId":"namespace_list","summary":"List feedback for a namespace you own (SIWX auth)","tags":["Namespace"],"security":[{"siwx":[]}],"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/namespace/register":{"post":{"operationId":"namespace_register","summary":"Register a feedback namespace for your product ($1)","tags":["Namespace"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"1"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"0x20c000000000000000000000b9537d11c60e8b50"}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","minLength":3,"maxLength":30,"pattern":"^[a-z0-9][a-z0-9-]{1,28}[a-z0-9]$"},"description":{"type":"string","maxLength":500},"webhookUrl":{"type":"string","format":"uri"}},"required":["namespace"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string"},"ownerWallet":{"type":"string"},"existingFeedbackLinked":{"type":"number"},"createdAt":{"type":"string"}},"required":["namespace","ownerWallet","existingFeedbackLinked","createdAt"],"additionalProperties":false}}}},"402":{"description":"Payment Required"}}}},"/api/namespace/resolve":{"post":{"operationId":"namespace_resolve","summary":"Resolve feedback — reward amount is forwarded as USDC on Tempo to the submitter","tags":["Namespace"],"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0","max":"2"},"protocols":[{"x402":{}},{"mpp":{"method":"tempo","intent":"charge","currency":"0x20c000000000000000000000b9537d11c60e8b50"}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"feedbackId":{"type":"string","minLength":1},"message":{"type":"string","maxLength":2000},"rewardAmount":{"type":"string"}},"required":["feedbackId"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"namespace":{"type":"string"},"resolved":{"type":"boolean"},"resolvedAt":{"type":"string"},"resolvedBy":{"type":"string"},"message":{"type":"string"},"reward":{"type":"object","properties":{"amount":{"type":"string"},"recipient":{"type":"string"},"txHash":{"type":"string"}},"required":["amount","recipient","txHash"],"additionalProperties":false}},"required":["id","namespace","resolved","resolvedAt","resolvedBy"],"additionalProperties":false}}}},"402":{"description":"Payment Required"}}}}},"components":{"securitySchemes":{"siwx":{"type":"apiKey","in":"header","name":"SIGN-IN-WITH-X"}}}}