ICP has a public REST API so you can connect it to your own systems — a PSA, a dashboard, or an inbound integration that files tickets from another tool. It exposes the same infrastructure control platform that the web app and field app run on.
Authentication
Every request is authenticated with an API key as a bearer token:
Authorization: Bearer icp_...
Every call runs inside the key's organization with the key's assigned permissions.
curl https://icp.intsignal.com/api/v1/tickets \
-H "Authorization: Bearer $ICP_API_KEY"
Resources (v1)
| Method & path | Description |
|---|---|
GET /tickets | List recent tickets |
POST /tickets | Create a ticket (recorded with source = API) |
GET /work-orders | List work orders |
GET /sites | List sites |
GET /assets | List assets |
List endpoints accept a limit (default 50, max 200). A machine-readable OpenAPI
document is published at /openapi.json describing the endpoints and how to
authenticate — point your client or code generator at it.
API keys
Create keys in Settings (access admins only):
Name the key and scope it
Give the key a name and choose the subset of permissions it should have. A key can never be granted a permission its creator doesn't hold.
Copy the secret once
The full secret is shown exactly once, at creation. Store it safely — afterward only a short prefix, the last-used time, and status are visible.
Revoke if needed
Revoke a key at any time. A lost key is rotated (revoke + create a new one), not recovered.
Tip
Scope each key to just what the integration needs, and use a separate key per integration so you can revoke one without breaking the others. To react to events instead of polling, use webhooks.
