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

# FAQ

> Common questions about MsgFlash, plans, API keys, and webhooks.

<AccordionGroup>
  <Accordion title="Does MsgFlash use the official WhatsApp Business API?">
    No. MsgFlash uses Evolution API v2 as its internal provider, not Meta's official Cloud API.
  </Accordion>

  <Accordion title="Can I use an existing WhatsApp number?">
    Yes. You connect an existing number through QR code or pairing code from the dashboard.
  </Accordion>

  <Accordion title="How do I integrate with Make, n8n, or Zapier?">
    Use a standard HTTP module against `https://srv.msgflash.com/api/v1/*` with the `x-api-key: your_api_key` header.
  </Accordion>

  <Accordion title="Can I have multiple API keys?">
    Yes, depending on your plan.
    Free: 1, Pro: 5, MAX: 10.
  </Accordion>

  <Accordion title="What should I do if my API key is compromised?">
    Revoke it immediately in the dashboard, create a new one, and update your integrations.
  </Accordion>

  <Accordion title="What happens when I cancel my subscription?">
    The subscription remains usable until the end of the current billing period, then the account falls back to the Free plan and its limits.
  </Accordion>

  <Accordion title="What is the difference between personal and team workspace?">
    Personal uses your own plan and instances. Team workspace uses the team owner’s plan and instances (with assignments for collaborators). Switch the active workspace in the portal when the UI is connected to the Teams APIs.
  </Accordion>

  <Accordion title="Who pays for messages sent in a team?">
    Outbound usage is counted on the **team owner’s** subscription for that billing month.
  </Accordion>

  <Accordion title="What is a team API key vs my personal API key?">
    Personal keys start with `msgf_live_` and only access your personal workspace. Team keys start with `msgf_team_` and require the `X-Team-Id` header matching the team. They cannot be mixed.
  </Accordion>

  <Accordion title="Can a team API key call /v1/me, /v1/usage, or /v1/billing/*?">
    No. Personal-account routes (`/v1/me`, `/v1/usage`, `/v1/billing/subscription`, `/v1/billing/usage`, `/v1/billing/payments`) reject team keys with `403 TEAM_KEY_NOT_ALLOWED`. Use a personal key for those, or the console JWT API for team-aware billing.
  </Accordion>

  <Accordion title="How do I act in a team from the console (JWT)?">
    Add the optional header `X-Team-Id: <team uuid>` on any `/api/*` resource call. Without it, the call targets your personal workspace. If the team is unknown or you no longer belong to it, the API returns `404 TEAM_NOT_FOUND`.
  </Accordion>

  <Accordion title="Can a collaborator manage billing in a team?">
    No. Owners read and mutate billing. Admins read subscription and usage but cannot mutate (`403 BILLING_TEAM_MUTATION_FORBIDDEN`). Only the team owner can view team payment history (`403 BILLING_PAYMENTS_TEAM_OWNER_ONLY` otherwise). Collaborators have no billing access.
  </Accordion>

  <Accordion title="What happens to my teams if I downgrade my plan?">
    Plan changes are blocked with `409 PLAN_CHANGE_BLOCKED_ACTIVE_TEAMS` when the target plan cannot host your current teams or seats. Delete teams or reduce seats first, then retry the downgrade.
  </Accordion>

  <Accordion title="Cursor pagination — how do I iterate a long list?">
    Endpoints like `GET /api/v1/contacts`, `/contacts/groups`, group `/members`, and `/contacts/bulk-jobs` return `nextCursor` and `hasMore`. Pass `nextCursor` back as `cursor` until `hasMore` is `false`. Do not switch `sort` mid-pagination.
  </Accordion>
</AccordionGroup>
