Light AIDocs Beta Open Light AI

API reference

GETRetrieve a project

GET /v1/projects/{project_id}: Retrieve a project

GEThttps://api.light-ai.app/v1/projects/{project_id}
Scopeprojects:read
CredentialAPI key: Authorization: Bearer lai_live_… (or lai_test_…). Partner keys add Light-AI-Organization.
Test modeWorks with test keys against simulated test objects.

Path parameters#

project_idstringrequired#
The project id (prj_…). Id prefix prj_.

Headers#

Light-AI-Organizationstring#
Partner keys: the connected organization to act for (org_…). Organization keys may omit it. Id prefix org_.
Light-AI-Versionstring#
Pin a dated API version (defaults to the key's version). One of: 2026-11-01.

Response 200#

The project.

idstringrequired#
Id prefix prj_.
objectstringrequired#
Always project.
livemodebooleanrequired#
false for objects created with a test key.
namestring | nullrequired#
statusstringrequired#
One of: intake, measuring, mockup, quote, approved, completed, archived.
pipeline_stagestring | nullrequired#
The pipeline column; null for an archived project. One of: request, quote_drafted, quote_sent, approved, completed, closed_lost.
client_idstring | nullrequired#
Id prefix cli_.
property_idstring | nullrequired#
Id prefix prop_.
leadobject | nullrequired#
lead.idstringrequired#
Id prefix lead_.
lead.sourcestring | nullrequired#
One of: website_widget, api, google_ads_lead_form, google_lsa, meta_lead_ad, highlevel, hubspot, jobber, service_autopilot, realgreen, sweepandgo, deeplawn, zapier, n8n, make, crm_import, other, manual.
lead.external_refsobject[]required#
lead.external_refs[].systemstringrequired#
lead.external_refs[].namespacestring | nullrequired#
lead.external_refs[].idstringrequired#
lead.external_refs[].ownerstringrequired#
self: written by your integration (editable); others are read-only. One of: self, organization, partner.
lead.external_refs[].read_onlybooleanrequired#
assigned_repobject | nullrequired#
assigned_rep.idstringrequired#
assigned_rep.namestring | nullrequired#
assigned_rep.emailstring | nullrequired#
lighting_typestring | nullrequired#
notesstring | nullrequired#
current_quote_idstring | nullrequired#
Id prefix qt_.
request_offerobject | null#
The offer of the website request this project came from, as the request kept it (the same object as lead.offer); null otherwise. The quote builder pre-fills the quote discount from it once; the published quote shows it as discount.label.
request_offer.templatestring | null#
The Light AI campaign template that filled the offer; null or absent for the contractor's own. One of: classic, early_bird, black_friday, last_chance.
request_offer.headlinestringrequired#
request_offer.discount_typestringrequired#
One of: percent, amount.
request_offer.discount_percentinteger | nullrequired#
request_offer.discount_amountinteger | nullrequired#
request_offer.labelstringrequired#
request_offer.ends_atstring | nullrequired#
request_offer.book_bystring | nullrequired#
request_offer.captured_atstring | nullrequired#
estimated_valueMoney | nullrequired#
external_refsobject[]required#
external_refs[].systemstringrequired#
external_refs[].namespacestring | nullrequired#
external_refs[].idstringrequired#
external_refs[].ownerstringrequired#
self: written by your integration (editable); others are read-only. One of: self, organization, partner.
external_refs[].read_onlybooleanrequired#
app_urlstring | nullrequired#
created_attimestamprequired#
RFC 3339 timestamp (UTC, milliseconds).
updated_attimestamprequired#
Last change of the project or of what the API derives for it (pipeline_stage, current_quote_id): updated_since sees a decline or a republish.
fixtureboolean#
Always true.

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).
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