> For the complete documentation index, see [llms.txt](https://docs.sonoransoftware.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sonoransoftware.com/cad/api-integration/api-endpoints-v2/integration-panels.md).

# Integration Panels

Build live, interactive CAD panels for third-party systems and in-game scripts.

{% hint style="info" %}
Embed a panel instance in a custom live-map blip menu in CAD 3.44.1. See [Smart Signs: Live Map Editor](/cad/api-integration/api-endpoints-v2/integration-panels/examples/smart-signs.md) for the complete schema, three-row Save form, and API setup.
{% endhint %}

Integration Panels put live data and controls from an existing game script or external service directly inside Sonoran CAD. Instead of building and maintaining a custom CAD frontend for every integration, define the panel once with JSON and connect it to your system through the v2 API.

Your integration remains the source of truth. It publishes the latest state to CAD, where authorized users can monitor and interact with it. Their button, toggle, select, and input actions are sent back to your integration to process. State changes made in-game or in CAD stay synchronized for every connected CAD user.

Use an Integration Panel when dispatchers or responders need to see or control part of another system without leaving CAD—for example, active fire alarms, facility door locks, tow requests, or fleet condition.

{% hint style="info" %}
Start with the [visual panel builder](https://sonorancad.com/integration-panel-builder). For the fastest implementation, use the Claude and Codex plugins or MCP tools at [sonoransoftware.com/developers](https://sonoransoftware.com/developers) to generate and refine your manifest and integration code.
{% endhint %}

## Examples

Start with a complete example, then replace its definition, state, and actions with data from your resource.

| [Fire Alarm](/cad/api-integration/api-endpoints-v2/integration-panels/examples/fire-alarm.md)                                                                                                                                                                                                                           | [Door Locks](/cad/api-integration/api-endpoints-v2/integration-panels/examples/door-locks.md)                                                                                                                                                                                                                           |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [![Fire Alarm integration panel](https://232668649-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M4pGN81fb4R6zFhodcu%2Fuploads%2Fgit-blob-6fb6e13cbe3e7e570c0e54a0b66175140ec5edb6%2Ffire-alarm.png?alt=media)](/cad/api-integration/api-endpoints-v2/integration-panels/examples/fire-alarm.md) | [![Door Locks integration panel](https://232668649-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M4pGN81fb4R6zFhodcu%2Fuploads%2Fgit-blob-634bf5aa396ba077821705819611023fed7233c4%2Fdoor-locks.png?alt=media)](/cad/api-integration/api-endpoints-v2/integration-panels/examples/door-locks.md) |
| Sync active alarms, play an alert sound, and control alarm state.                                                                                                                                                                                                                                                       | Monitor police and jail doors, then lock or unlock them from CAD.                                                                                                                                                                                                                                                       |

| [Tow and Impound](/cad/api-integration/api-endpoints-v2/integration-panels/examples/tow-impound.md)                                                                                                                                                                                                                            | [Fleet Management](/cad/api-integration/api-endpoints-v2/integration-panels/examples/fleet-management.md)                                                                                                                                                                                                                                 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [![Tow and Impound integration panel](https://232668649-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M4pGN81fb4R6zFhodcu%2Fuploads%2Fgit-blob-f3491390125bf6f1fe946ef9199620e285f35aff%2Ftow-impound.png?alt=media)](/cad/api-integration/api-endpoints-v2/integration-panels/examples/tow-impound.md) | [![Fleet Management integration panel](https://232668649-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M4pGN81fb4R6zFhodcu%2Fuploads%2Fgit-blob-6299a55876066f2f6cc760317d7d87a1fd0304b8%2Ffleet-management.png?alt=media)](/cad/api-integration/api-endpoints-v2/integration-panels/examples/fleet-management.md) |
| Show incoming tow requests and move each request through its workflow.                                                                                                                                                                                                                                                         | Group fleet vehicles, monitor their condition, and request repairs.                                                                                                                                                                                                                                                                       |

[View all examples](/cad/api-integration/api-endpoints-v2/integration-panels/examples.md)

## How It Works

1. **Define:** Create or replace a reusable panel definition for the community. The definition controls layout, components, bindings, search, sorting, styling, sounds, and available actions.
2. **Publish:** Send the complete current state whenever the game script or external system changes. Connected CAD clients update live.
3. **Act:** A CAD user changes a control or presses a button. CAD adds that action and its values to the panel's action queue.
4. **Process:** Your server-side integration polls the queue, applies the change to its system, acknowledges the result, and publishes the resulting state.

Keep API calls and credentials on the server. A FiveM client script should send changes to its server-side resource, which then communicates with the CAD API.

Use a stable `panelKey` for the integration and an `instanceKey` for each independent dataset, location, or controller. For example, a door integration could use `doors` as the panel key and `mission-row` as the instance key.

## SDK Helpers

Sonoran.lua, Sonoran.js, Sonoran.py, and Sonoran.Net expose the same helper names. Lua calls them with `:`; the other libraries use `.`.

| Task                           | Helper                                |
| ------------------------------ | ------------------------------------- |
| List panels                    | `getIntegrationPanelsV2`              |
| Get one panel                  | `getIntegrationPanelV2`               |
| Create or replace a definition | `setIntegrationPanelV2`               |
| Delete a panel                 | `deleteIntegrationPanelV2`            |
| Replace live state             | `setIntegrationPanelStateV2`          |
| Poll CAD actions               | `getIntegrationPanelActionsV2`        |
| Acknowledge an action          | `acknowledgeIntegrationPanelActionV2` |

## Capabilities

* Responsive rows, columns, grids, sections, and repeated state collections
* Text, icons, badges, alerts, inputs, selects, toggles, checkboxes, and buttons
* State, repeated-item, input, and current-control bindings
* Search, named sort choices, conditions, confirmation prompts, and theme-safe styling
* Built-in pulse animations and state- or action-triggered sound effects
* Live API-to-CAD state updates and CAD-to-integration action events
* Interactive panels embedded in custom live-map blip menus, bound to an exact panel instance. See [Smart Signs](/cad/api-integration/api-endpoints-v2/integration-panels/examples/smart-signs.md).

## Limits

| Resource                       | Limit                                                          |
| ------------------------------ | -------------------------------------------------------------- |
| Active panels per community    | 50                                                             |
| Instances per panel and server | 100                                                            |
| Definition                     | 128 KiB; 200 root body nodes                                   |
| State per instance             | 512 KiB                                                        |
| Action result                  | 32 KiB                                                         |
| Sounds per definition          | 20                                                             |
| Panel name                     | 80 characters                                                  |
| Panel and instance keys        | 2-80 lowercase letters, numbers, dots, underscores, or hyphens |
| Pending action lifetime        | 60 seconds                                                     |

Rate limits are fixed one-minute windows per API key. A `429` response includes `Retry-After`.

| Operation group                        | Requests per minute |
| -------------------------------------- | ------------------: |
| List or get definitions                |                 120 |
| Create, replace, or delete definitions |                  30 |
| Replace state                          |                 300 |
| Poll actions                           |                 240 |
| Acknowledge actions                    |                 240 |

## Common Errors

| Status | Cause                                                                  |
| -----: | ---------------------------------------------------------------------- |
|  `400` | Invalid key, definition, query, or action result                       |
|  `401` | Missing or invalid bearer API key                                      |
|  `404` | Server, panel, or action was not found                                 |
|  `409` | Panel or instance limit reached, or state sent before its panel exists |
|  `413` | Definition, state, or action result exceeds its size cap               |
|  `429` | Per-API-key rate limit exceeded                                        |

## Reference

{% content-ref url="/pages/CGRFawDgM9JtBULVCuks" %}
[Manifest Reference](/cad/api-integration/api-endpoints-v2/integration-panels/manifest-reference.md)
{% endcontent-ref %}

{% content-ref url="/pages/Bne7lXRQJpgZUMSy4PQt" %}
[Examples](/cad/api-integration/api-endpoints-v2/integration-panels/examples.md)
{% endcontent-ref %}

## Endpoints

{% content-ref url="/pages/3QsRK0HzDN4svYJ7Ctjp" %}
[List Integration Panels](/cad/api-integration/api-endpoints-v2/integration-panels/list-panels.md)
{% endcontent-ref %}

{% content-ref url="/pages/k6SxJ0KSAe2bnoyy8KXp" %}
[Get Integration Panel](/cad/api-integration/api-endpoints-v2/integration-panels/get-panel.md)
{% endcontent-ref %}

{% content-ref url="/pages/h4mxIY8LscwfQ6upp1fR" %}
[Set Integration Panel](/cad/api-integration/api-endpoints-v2/integration-panels/set-panel.md)
{% endcontent-ref %}

{% content-ref url="/pages/8V4nfJ0HnK7HsqpcOrX1" %}
[Delete Integration Panel](/cad/api-integration/api-endpoints-v2/integration-panels/delete-panel.md)
{% endcontent-ref %}

{% content-ref url="/pages/uVphNZt0PAuEt0npMVZA" %}
[Set Integration Panel State](/cad/api-integration/api-endpoints-v2/integration-panels/set-state.md)
{% endcontent-ref %}

{% content-ref url="/pages/fWonIn1WIFl1P9ZXDwAA" %}
[Poll Integration Panel Actions](/cad/api-integration/api-endpoints-v2/integration-panels/poll-actions.md)
{% endcontent-ref %}

{% content-ref url="/pages/OSUpeK3urY4hSZMoZwQo" %}
[Acknowledge Integration Panel Action](/cad/api-integration/api-endpoints-v2/integration-panels/acknowledge-action.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.sonoransoftware.com/cad/api-integration/api-endpoints-v2/integration-panels.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
