> ## Documentation Index
> Fetch the complete documentation index at: https://www.outx.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Team, Plan & Usage

> Read the authenticated team's identity, effective plan, plan limits, and current usage. Check remaining watchlist quota before creating.

Read-only view of the team your API key belongs to: identity, effective plan, and plan limits with current usage. Call this **before** creating a watchlist to know whether the create will hit the plan limit (`402`) instead of finding out from the error.

No request parameters. GET only.

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.outx.ai/api-team" \
    -H "x-api-key: YOUR_API_KEY"
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://api.outx.ai/api-team",
      headers={"x-api-key": "YOUR_API_KEY"},
  )
  team = response.json()
  remaining = (team["limits"]["watchlists"]["max"] or 10**9) - team["limits"]["watchlists"]["used"]
  print(f"Watchlist slots remaining: {remaining}")
  ```
</RequestExample>

<ResponseExample>
  ```json Response (200 OK) theme={null}
  {
    "team": {
      "id": "3f6a2b10-9d4c-4d5e-8a01-11b91f4b7c10",
      "name": "Acme Growth",
      "created_at": "2025-11-02T09:14:00Z",
      "timezone_string": "America/New_York",
      "intention": "lead_generation"
    },
    "plan": {
      "type": "pro",
      "configured": "pro",
      "expiry": "2026-12-31",
      "bypass_limits": false
    },
    "limits": {
      "watchlists": { "max": 5, "used": 3 },
      "team_members": { "max": 10, "used": 4 },
      "posts_per_week_per_watchlist": { "max": 15000 },
      "automated_rules_per_watchlist": { "max": 2 }
    }
  }
  ```
</ResponseExample>

## Response Fields

<ResponseField name="team" type="object">
  Team identity: `id`, `name`, `created_at`, `timezone_string`, and `intention`.
</ResponseField>

<ResponseField name="plan.type" type="string">
  The **effective** plan after expiry is applied: one of `free`, `pro`, `growth`, `expert`, `ultimate`. If `plan.configured` is a paid plan but `plan.expiry` is in the past, `plan.type` is `free`.
</ResponseField>

<ResponseField name="plan.configured" type="string">
  The plan as configured, before expiry is considered.
</ResponseField>

<ResponseField name="plan.bypass_limits" type="boolean">
  When `true`, plan limits are not enforced for this team and every `max` in `limits` is `null`.
</ResponseField>

<ResponseField name="limits.watchlists" type="object">
  `max` watchlists allowed on the effective plan (all four types combined) and `used`, the current count. `max` is `null` when limits are bypassed. When `used >= max`, the next watchlist create returns `402`.
</ResponseField>

<ResponseField name="limits.team_members" type="object">
  Maximum and current team member count.
</ResponseField>

<ResponseField name="limits.posts_per_week_per_watchlist" type="object">
  Maximum posts collected per watchlist per week on the effective plan.
</ResponseField>

<ResponseField name="limits.automated_rules_per_watchlist" type="object">
  Maximum active auto-engagement rules per watchlist on the effective plan.
</ResponseField>

## Error Responses

| Status Code | Error Message                     | Description                                                                   |
| ----------- | --------------------------------- | ----------------------------------------------------------------------------- |
| 401         | Missing API Key / Invalid API Key | Missing or invalid `x-api-key` header                                         |
| 403         | Plugin installation required      | No team member has had the OutX Chrome extension active in the last 48 hours. |
| 405         | Method POST not allowed           | Only GET is supported                                                         |
