# GraphQL API

GrackerAI's visibility data - responses, mentions, citations, scores, and aggregates - is queryable through **GraphQL**. There's no separate public API for direct developer or `curl` access: the GraphQL layer is reached through [MCP](/content/docs/advanced/mcp/index.html), inside an MCP-connected AI assistant like Claude Desktop or Cursor.

---

## How it works

- **Read-only**: queries only, no mutations or subscriptions. Nothing in your workspace can be changed through it.
- **Brand-scoped**: every result is automatically limited to the brands you selected when you connected. A query can't widen its own scope.
- **Self-describing**: the schema is introspectable, so an AI assistant can look up the available types and fields before it writes a query.

---

## Accessing it

You don't request a token or write `curl` commands against a GrackerAI endpoint. Instead, you connect an MCP client to your GrackerAI account (a standard OAuth sign-in, done once per client), and the client gets two tools:

- **`get_visibility_schema`** \- introspects the schema
- **`query_visibility_data`** \- runs a read-only query and returns the result

The AI assistant handles writing and running the GraphQL queries for you - you ask questions in natural language. See [MCP](/content/docs/advanced/mcp/index.html) for how to connect a client and how the connection is authenticated.

---

## What the data looks like

The schema covers types like brand visibility scores, mentions, and citations. For example, a query run through `query_visibility_data` might ask for something shaped like:

```
query ($brandId: String!, $days: Int!) {
  visibility(brandId: $brandId, days: $days) {
    visibilityScore
    presenceRate
    shareOfVoice
    sentiment
  }
  topCitations(brandId: $brandId, days: $days, limit: 10) {
    domain
    isBrandDomain
    count
  }
}
```

Field names above are **illustrative** \- your AI assistant introspects the live schema for the exact types and fields available in your workspace.

---

## Errors

- Malformed input, or any operation that isn't a read query, is rejected before it runs.
- A response containing an `errors` array means the query was understood but something failed (for example an unknown field) - your assistant can re-introspect the schema and retry.

---

## Availability & limits

Access is through MCP and is subject to a **monthly request quota per plan** \- it isn't available on the Free plan. Only `query_visibility_data` calls count against the quota; schema introspection doesn't. See [Plans & Pricing](/content/docs/getting-started/billing/index.html) for plan details.

---

## Next Steps

[MCP  
Query your data from an AI assistant](/content/docs/advanced/mcp/index.html)  
[Reporting & Exports  
Export prompts, responses, and analytics](/content/docs/using-gracker/reporting/index.html)  
[Integrations  
Connect GSC, Slack, WordPress, and more](/content/docs/integrations/integration-overview/index.html)

[Discovered Entities](/content/docs/advanced/discovered-entities/ "Discovered Entities"/index.html)  
[MCP](/content/docs/advanced/mcp/ "MCP"/index.html)
