Report a wrong result
const url = 'https://api-v1.tailwind.ai/v1/issue-reports';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"description":"GET /v1/accounts/123/boards returned 4 boards, but the same account reports 11 boards in GET /v1/accounts/123 — I used the larger number to continue.","tool":"GET /v1/accounts/{accountId}/boards"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api-v1.tailwind.ai/v1/issue-reports \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "description": "GET /v1/accounts/123/boards returned 4 boards, but the same account reports 11 boards in GET /v1/accounts/123 — I used the larger number to continue.", "tool": "GET /v1/accounts/{accountId}/boards" }'Tell Tailwind that a call answered wrongly rather than failing — a result that contradicts another result, a result you had to work around, or an output your user says is wrong. Reports go to the people who maintain this API, who read them to find what is broken. Your description and tool are recorded in Tailwind’s internal analytics and posted to an internal Tailwind channel for staff to read, so send only what you would be comfortable sharing with Tailwind — describe the problem rather than quoting the result, and do not include credentials or personal data. No report resource is created: there is nothing to read back and no ticket to follow up on, so this returns only an acknowledgement, and nothing about the result that prompted it changes. Not for reporting errors: a rejected argument, an expired token, or an out-of-credits response are errors to handle, not wrong answers. If the API simply cannot do what you need, use POST /v1/capability-requests instead. Free — this consumes no credits.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
What you asked for, what came back, and why it is wrong. The concrete case is what makes a report actionable.
Example
GET /v1/accounts/123/boards returned 4 boards, but the same account reports 11 boards in GET /v1/accounts/123 — I used the larger number to continue.The endpoint or MCP tool you believe returned the wrong result. Recorded as your claim and never checked against the real roster — a name that does not exist is itself useful.
Example
GET /v1/accounts/{accountId}/boardsResponses
Section titled “Responses”Issue report received
object
object
Always true — failures return an error status instead.
object
Unique request ID for debugging
Examplegenerated
{ "data": { "received": true }, "meta": { "requestId": "example" }}Invalid request
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "BAD_REQUEST", "message": "Invalid request body" }, "meta": { "requestId": "abc123" }}Authentication required or invalid bearer credentials
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "UNAUTHORIZED", "message": "Invalid API key" }, "meta": { "requestId": "abc123" }}Rate limit exceeded
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Daily rate limit of 5000 requests exceeded. Resets at midnight UTC." }, "meta": { "requestId": "abc123" }}