# JavaScript API

For developers who want to react to choices or open the banner.

`window.cmp` is available once the `cmp:ready` event has fired.

| Call | What it does |
|---|---|
| `cmp.show()` | Opens the banner. `cmp.show(2)` opens the settings. |
| `cmp.hide()` | Closes the banner. |
| `cmp.getConsent()` | Returns the current choices, or `null` if the visitor hasn't chosen yet. |
| `cmp.getConsentId()` | Returns the visitor's anonymous record ID. |
| `cmp.setConsent({ analytics: true })` | Sets the categories you pass. |
| `cmp.acceptAll()` / `cmp.rejectAll()` | Does the same as the banner's buttons. |
| `cmp.withdraw()` | Clears the stored choice and rejects everything. |
| `cmp.runScripts()` | Checks `text/plain` scripts again, for use after client-side navigation. |
| `cmp.state()` | Returns which rules this visitor got: `{ regime, place, rulebook }`. |
| `cmp.on('consent', fn)` | Calls `fn` with `{ choice, id, regime, place, rulebook }` every time the visitor decides. Returns a function that unsubscribes. |

Events on `document`: `cmp:ready`, with `{ regime, country, place, rulebook, lang }`, and `cmp:consent`, with the same details as `cmp.on('consent')`.

Attributes: `data-cmp="settings"` on any element makes it open the settings, `data-cmp="ignore"` exempts a script from blocking, and `data-cmp-src` on an iframe holds it back until its category is allowed.
