Start
Developer quickstart
Choose a released Concierge integration surface and complete a working server-to-server request.
Choose one integration path
Start with the outcome you need. The Ticket API works with service requests already created by Concierge. CRM Webhook sends mapped contacts and inquiries to middleware you control. Routing webhooks send team alerts. CRM inbound returns a narrow set of approved fields to linked Concierge records.
| Need | Use | First guide |
|---|---|---|
| Read or update tickets | Ticket API | /developers/ticket-api |
| Create CRM records | CRM Webhook | /developers/crm-webhook |
| Receive visitor alerts | Routing webhook | /developers/routing-webhooks |
| Return approved CRM changes | CRM inbound | /developers/crm-inbound |
Make your first Ticket API request
A Concierge user with routing permission creates a key for one site. The external service keeps that key server-side and sends it with every request for that same site.
- In Concierge, select the site and open Integrations.
- Choose Developer access, then create an API key with tickets:read.
- Copy the cg_live_ secret immediately; it is shown only once.
- Store the API base, site ID, and key in your server-side secret manager.
- Run the request below and confirm the response contains data and total.
export CONCIERGE_API_BASE="https://poweredbyconcierge.com/api/backend"
export CONCIERGE_SITE_ID="site_..."
export CONCIERGE_API_KEY="cg_live_..."
curl --fail-with-body \
"$CONCIERGE_API_BASE/v1/sites/$CONCIERGE_SITE_ID/tickets?limit=10" \
-H "Accept: application/json" \
-H "x-concierge-api-key: $CONCIERGE_API_KEY"Know what success looks like
A successful list request returns HTTP 200 and an object shaped like the example below. An empty data array is a valid result when the site has no ticket requests.
- 401 — the key is missing, invalid, or revoked.
- 403 — the key does not include the required ticket scope.
- 404 — the ticket is unavailable for this site; do not infer cross-site existence.
- 429 — stop sending that request class and retry only after the server permits it.
{
"data": [],
"total": 0
}Next guide
Authentication and credentials