Light AIDocs Beta Open Light AI

API reference

POSTCreate a connect link

POST /v1/partner/connect_links: A single-use link (7 days at most) a contractor's owner opens to approve your access.

POSThttps://api.light-ai.app/v1/partner/connect_links

A single-use link (7 days at most) a contractor's owner opens to approve your access. The owner signs in (or signs up), sees your verified legal name, domain and every scope, and approves. Never email API keys: send connect links. The url is returned only here (and on an Idempotency-Key replay).

CredentialPartner API key (a key of a partner account).
Test modeLive keys only (answers 400 test_mode_unsupported to a test key).
IdempotencyIdempotency-Key supported. See Idempotency.

Headers#

Light-AI-Versionstring#
Pin a dated API version (defaults to the key's version). One of: 2026-11-01.
Idempotency-Keystring#
Retry-safe writes: the same key and body replay the first response for 24 hours (Idempotent-Replayed: true). 8–128 characters.

Request body#

scopesstring[]required#
One of: leads:read, leads:write, clients:read, clients:write, projects:read, projects:write, quotes:read, quotes:write, quotes:share_link, quotes:asset_links, webhooks:manage, events:read, mockups:read, mockups:write, forms:read, forms:write. 1–16 items.
organizationstring#
Bind the link to one organization (when you already know its id). Id prefix org_.
client_labelstring#
Required for unbound links: who you are connecting (shown to you on confirmation). 1–120 characters.
external_referencestring#
1–255 characters.
metadataobject#
redirect_uristring#
https URL on your verified domain to return to after consent. Light AI appends connect_link (cl_…), grant (grant_…), organization (org_…) and grant_status (active, or pending when an unbound link still needs POST /v1/partner/grants/{grant_id}/confirm); your own query parameters are kept, so one redirect_uri can serve every contractor. At most 2048 characters.
expires_in_hoursinteger#
Default 168 (7 days). 1–168.

Response 201#

The link (with its url).

idstringrequired#
Id prefix cl_.
objectstringrequired#
Always connect_link.
scopesstring[]required#
One of: leads:read, leads:write, clients:read, clients:write, projects:read, projects:write, quotes:read, quotes:write, quotes:share_link, quotes:asset_links, webhooks:manage, events:read, mockups:read, mockups:write, forms:read, forms:write.
bound_organizationstring | nullrequired#
Id prefix org_.
client_labelstring | nullrequired#
external_referencestring | nullrequired#
metadataobjectrequired#
redirect_uristring | nullrequired#
statusstringrequired#
One of: open, consumed, expired, revoked.
grantstring | nullrequired#
Id prefix grant_.
created_attimestamprequired#
RFC 3339 timestamp (UTC, milliseconds).
expires_attimestamprequired#
RFC 3339 timestamp (UTC, milliseconds).
consumed_attimestamp | nullrequired#
RFC 3339 timestamp (UTC, milliseconds).
urlstring#
The link to send to the contractor. Returned only when created.

Errors#

StatusMeaning
400Bad request. bad_request, test_mode_mismatch, test_mode_unsupported, unsupported_api_version
401Missing or invalid credential. authentication_required, invalid_api_key, api_key_revoked, api_key_expired, api_key_suspended
403Not allowed. insufficient_scope, plan_upgrade_required, organization_paused, organization_off_season, api_disabled, api_access_not_enabled, ip_not_allowed, forbidden
404Not found (also for objects of other organizations and for organizations without an active grant).
409Conflict. stale_state, conflict, idempotency_in_progress, idempotency_scope_mismatch, quote_already_decided, quote_not_current, billing_review_required
413Request bodies are limited to 256 KB.
415The body is not JSON: send Content-Type: application/json. unsupported_media_type
422Validation failed. idempotency_key_reused
429Rate limited or daily cap reached. See Retry-After and the RateLimit headers. rate_limited, daily_cap_reached
500Unexpected server error. Safe to retry with exponential backoff; quote the Request-Id to support. internal_error
503Temporarily unavailable. Retry with exponential backoff. service_unavailable