Quinable Partner APIv1.1.0Guide Clients Routes Bids Timesheets Events & Webhooks Lookups

Quinable Partner API — Events & Webhooks (1.1.0)

Download OpenAPI specification:

Quinable Integrations: [email protected]

The Quinable Partner API lets an agency's external systems (e.g. a scheduling tool) create clients and routes/visits in Quinable and receive lifecycle status by signed webhooks.

Authentication. Every request carries a per-agency secret key in the Authorization header (Bearer qk_live_…). The key's prefix is its mode: qk_live_ acts on real data; qk_test_ is a sandbox — test routes never reach caregivers and move no money.

Conventions. JSON bodies; money is integer cents; ids are opaque prefixed strings (route_123); times of day are HH:MM in the route's local timezone. POST endpoints accept an Idempotency-Key header (replayed for 24h, then pruned). List endpoints use cursor pagination (limit, starting_after). Errors use real HTTP status codes plus a typed body.

Operations. Default rate limit 120 requests/min per key; a 429 carries the typed error body and a Retry-After header. Every response includes an X-Request-Id — quote it in support requests. To rotate an API key with zero downtime, issue a second key, switch, then revoke the old one; to rotate a webhook signing secret, register a second endpoint (new secret), verify deliveries, then delete the old endpoint.

Events & Webhooks

Lifecycle events and the endpoints they are delivered to.

List events

Poll fallback and post-outage catch-up for webhooks. Requires any read scope.

Authorizations:
ApiKeyAuth
query Parameters
type
string
Example: type=bid.accepted
created_after
string <date-time>
limit
integer [ 1 .. 100 ]
Default: 25
starting_after
string

A cursor — the id of the last object from the previous page.

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "data": [
    ],
  • "has_more": true
}

Retrieve an event

Authorizations:
ApiKeyAuth
path Parameters
id
required
string
Example: evt_01J5XV9GJ2M4

Responses

Response samples

Content type
application/json
{
  • "id": "evt_01J5XV9GJ2M4",
  • "object": "event",
  • "type": "route.created",
  • "created_at": "2019-08-24T14:15:22Z",
  • "livemode": true,
  • "data": {
    }
}

List webhook endpoints

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "object": "list",
  • "data": [
    ],
  • "has_more": true
}

Register a webhook endpoint

The signing secret (qwhsec_…) is returned once, in this response only.

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required
url
required
string <uri>

An https:// URL. Internal/loopback targets are rejected.

enabled_events
required
Array of strings

Event types to receive, or ["*"] for all.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "id": "we_12",
  • "object": "webhook_endpoint",
  • "enabled_events": [
    ],
  • "status": "enabled",
  • "consecutive_failures": 0,
  • "disabled_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z",
  • "secret": "qwhsec_xxx"
}

Delete a webhook endpoint

Authorizations:
ApiKeyAuth
path Parameters
id
required
string
Example: we_12

Responses

Response samples

Content type
application/json
{
  • "error": {
    }
}

Re-enable a webhook endpoint

Recovers an auto-disabled endpoint (resets its failure counter) without touching its signing secret. An endpoint that keeps failing is auto-disabled after sustained failures, announced by a webhook_endpoint.disabled event; catch up on missed events via GET /events?created_after=…, fix the receiver, then call this.

Authorizations:
ApiKeyAuth
path Parameters
id
required
string
Example: we_12

Responses

Response samples

Content type
application/json
{
  • "id": "we_12",
  • "object": "webhook_endpoint",
  • "enabled_events": [
    ],
  • "status": "enabled",
  • "consecutive_failures": 0,
  • "disabled_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}