# Report an issue with a card

Reports that a card is wrong. Use this to forward the reasons your users reject or correct a Salfio card, so card quality can be measured against real signal instead of anecdotes. \*\*The report does not change the card.\*\* It never hides the card, never triggers a regeneration, and is never shown to other users of your organization. It is recorded for the Salfio team to analyse. \*\*What is stored.\*\* Alongside the category and your optional details, the card's content, identifier and title are captured as they were at the moment you reported them. Card values are overwritten in place whenever they refresh, so without that capture the reported content would be gone before anyone could act on it. \*\*Duplicates are accepted.\*\* Reporting the same card repeatedly is meaningful — repeat reports are the strongest quality signal available — so identical submissions are all stored rather than deduplicated. Standard rate limits apply. Unknown card ids and cards belonging to another organization both return \`404 not_found\` so existence is never leaked.

POST

/`cards`/`{cardValueId}`/`feedback`

## Authorization

`bearerAuth`` `

AuthorizationBearer \<token\>

Salfio API tokens start with the literal prefix `sk_live_` followed by 32 base62 characters (≈190 bits of entropy). Tokens are hashed at rest with argon2id and shown to the user only once at creation.

In: `header`

## Path Parameters

cardValueId\*string

The `card_value_id` of the card being reported, taken from `GET /clients/{clientId}/cards`.

Format`uuid`

## Request Body

`application/json`

TypeScript Definitions

Use the request body type in TypeScript.

## Response Body

### 

`application/json`

### 

`application/json`

### 

`application/json`

### 

`application/json`

### 

`application/json`

    curl -X POST "https://api.salfio.com/v1/cards/497f6eca-6276-4993-bfeb-53cbbbba6f08/feedback" \  -H "Content-Type: application/json" \  -d '{    "category": "wrong_facts"  }'

    {
      "meta": {
        "cursor": "string",
        "hasMore": true
      },
      "data": {
        "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
        "createdAt": "2019-08-24T14:15:22Z"
      }
    }

    {
      "error": {
        "code": "invalid_argument",
        "message": "limit must be an integer between 1 and 100"
      }
    }

    {
      "error": {
        "code": "unauthorized",
        "message": "Authentication required"
      }
    }

    {
      "error": {
        "code": "not_found",
        "message": "client not found"
      }
    }

    {
      "error": {
        "code": "rate_limited",
        "message": "Rate limit exceeded",
        "details": {
          "retry_after_seconds": 30
        }
      }
    }

## Related pages

- [Administrator Tools](./administrator-tools.md)
- [Agent Tools](./mcp-external-servers.md)
- [Assign a Slack channel to a client over the API](./guides-assign-slack-channel.md)
- [Authenticated health check](./api-reference-gethealth.md)
- [Authentication](./api-authentication.md)
- [Cards](./cards.md)
- [Changelog](./changelog.md)
- [Changelog](../changelog.md)
- [Connect a workspace](./getting-started-connect-workspace.md)
- [Connect an integration](./getting-started-connect-integration.md)

# Agent Instructions

This portal answers questions programmatically. To receive a synthesized,
source-cited answer instead of crawling page by page, append the `?ask=`
query parameter to any page URL on this site:

    /guides/quickstart?ask=how+do+I+authenticate

Optional parameters:

- `&goal=<what-you-are-trying-to-do>` steers the answer toward your
  objective (e.g. `&goal=write+a+python+client`).
- `&version=<label>` scopes the answer to a mounted version when the
  portal publishes more than one.

The response is `text/markdown`: the answer followed by a `# Sources` list
of the portal pages it was grounded in. Status codes are the contract:

- `200` — the answer; `402` — the portal owner’s plan or answer credits are
  exhausted (surface this to your operator; do NOT retry); `429` — you are
  rate-limited; back off for the `Retry-After` seconds; `503` — the answer
  lane is temporarily unavailable; fall back to crawling the `.md` pages.

For the full corpus map read `llms.txt` at the site root; for the tool
surface (search + page fetch as MCP tools) see `/mcp`.
