# List a client's assignment rules

Returns one entry per active integration in the organization, each carrying that integration's current rule for this client. When an integration has no rule configured for the client yet, the entry is still returned with \`ruleId: null\` — so this doubles as a way to discover the \`integrationId\`s you can bind. Cross-tenant lookups and missing clients both return \`404 not_found\` so existence is never leaked.

GET

/`clients`/`{clientId}`/`assignment-rules`

## 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

clientId\*string

Client UUID.

Format`uuid`

## Response Body

### 

`application/json`

### 

`application/json`

### 

`application/json`

### 

`application/json`

### 

`application/json`

    curl -X GET "https://api.salfio.com/v1/clients/497f6eca-6276-4993-bfeb-53cbbbba6f08/assignment-rules"

    {
      "meta": {
        "cursor": "string",
        "hasMore": true
      },
      "data": [
        {
          "ruleId": "70af3071-65d9-4ec3-b3cb-5283e8d55dac",
          "integrationId": "497a18ca-284e-40c0-985d-f72be35d468e",
          "integrationType": "slack",
          "providerEmail": "string",
          "filterCriteria": null,
          "enabled": true,
          "priority": 0,
          "readOnly": true,
          "rulesHidden": true,
          "chatLabels": {
            "property1": "string",
            "property2": "string"
          },
          "createdAt": "2019-08-24T14:15:22Z",
          "updatedAt": "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`.
