---
search:
  tags:
    - Connected accounts
    - GET
seo:
  description: >-
    What to do when your agent should act in an app: route is the best…
    Reference for the GET /api/v2/connections/integrations/find endpoint in the
    Anlyon API.
sidebar:
  label: Find the best way to act in an app
  badge: GET
title: Find the best way to act in an app
type: openapi-operation
---
What to do when your agent should act in an app: `route` is the best way there, with why and the next step, and `alternatives` are the others, best first. The order is a catalogue integration, the vendor's own MCP server when its publisher is verified as the vendor, an OpenAPI import, then a custom action. It works for any name and only suggests: nothing is registered, adopted or connected. Any credential may ask, since it reads nothing of the workspace's. `query` and any name in the text come from the caller: show them as text.

`GET /api/v2/connections/integrations/find`

**Responses**

- `200` — The best route and the others.
- `400` — Bad Request - Invalid input data
- `401` — Unauthorized - Invalid or missing API key
- `404` — Not Found - Resource does not exist
- `429` — Too Many Requests - Rate limit exceeded. A workspace's API requests are limited per minute and per UTC clock hour by plan; \`Retry-After\` says when to try again, and an hourly refusal names the limit and when the count resets. Successful responses carry the same limits in \`X-RateLimit-Limit\`, \`X-RateLimit-Remaining\`, \`X-RateLimit-Reset\` (the minute) and \`X-RateLimit-Limit-Hour\`, \`X-RateLimit-Remaining-Hour\`, \`X-RateLimit-Reset-Hour\` (the hour).

Response example, 200:

```json
{
  "success": true,
  "data": {
    "query": "string",
    "name": "string",
    "route": {
      "kind": "integration",
      "why": "string",
      "next": {
        "summary": "Log in again and approve the anlyon:secrets consent group, which grants secrets:write.",
        "command": "anlyon auth login --scope anlyon:secrets",
        "url": "https://console.anlyon.com/settings/api-keys",
        "docs": "https://docs.anlyon.com/cli/authentication"
      },
      "integration": {
        "id": "stripe",
        "connect": "sign_in"
      },
      "mcp": {
        "registryName": "com.example/mcp",
        "url": "https://mcp.example.com/mcp",
        "host": "mcp.example.com",
        "publisher": {
          "verifiedBy": "domain",
          "namespace": "com.example"
        },
        "report": "http://example.com"
      }
    },
    "alternatives": [
      {
        "kind": "integration",
        "why": "string",
        "next": {
          "summary": "Log in again and approve the anlyon:secrets consent group, which grants secrets:write.",
          "command": "anlyon auth login --scope anlyon:secrets",
          "url": "https://console.anlyon.com/settings/api-keys",
          "docs": "https://docs.anlyon.com/cli/authentication"
        },
        "integration": {
          "id": "stripe",
          "connect": "sign_in"
        },
        "mcp": {
          "registryName": "com.example/mcp",
          "url": "https://mcp.example.com/mcp",
          "host": "mcp.example.com",
          "publisher": {
            "verifiedBy": "domain",
            "namespace": "com.example"
          },
          "report": "http://example.com"
        }
      }
    ],
    "tellUs": "string"
  }
}
```

Response example, 400:

```json
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request data",
    "details": {
      "url": "Invalid URL format"
    }
  }
}
```

Response example, 401:

```json
{
  "success": false,
  "error": {
    "code": "AUTHENTICATION_ERROR",
    "message": "Invalid or missing API key"
  }
}
```

Response example, 404:

```json
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "Resource not found"
  }
}
```

Response example, 429:

```json
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Please try again later."
  }
}
```
