Endpoint reference
Every HTTP endpoint the Inspecta server exposes, generated from the same specification the application itself is built against. 47 operations across 11 groups, all relative to https://getinspecta.com/api.
This is a map of the product, not a developer API. Read the access line on each group before you plan anything around it.
How to read this
There are no API keys. Every group marked Dashboard or Admin is authenticated by the signed-in browser session behind the dashboard, and nothing else will get you in. The supported way to move data out of Inspecta is webhooks.
Each group carries a badge: Open needs nothing, Widget transport is what the assessment widget and the report page call from a homeowner's browser, Dashboard needs a signed-in company session, Platform staff needs an Inspecta administrator account, and Mixed means the group holds more than one of those. The badge is a summary; the line underneath it says what actually authenticates each call, which within a group is not always the same thing.
Types name the schema in the specification rather than expanding it, which keeps this page readable at 47 operations. Errors all share the shape described under errors, limits and security.
health
OpenHealth operations
No authentication. Used by hosting health checks.
GET/healthzHealth check
Returns server health status
Responses
- 200HealthyHealthStatus
Storage
MixedObject storage upload and serving endpoints.
Requesting an upload URL needs a signed-in dashboard session. The two read routes are unauthenticated: the object path contains a random identifier minted at upload time, and possession of that path is the permission.
POST/storage/uploads/request-urlRequest a presigned URL for an authenticated company upload
Returns a presigned GCS URL for direct upload. The client sends JSON metadata here, then uploads the file directly to the returned URL.
Request body
UploadUrlRequestapplication/jsonrequired
Responses
- 200Presigned upload URL generated.UploadUrlResponse
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
- 500Unexpected server errorErrorEnvelope
GET/storage/public-objects/{filePath}Serve a public asset from PUBLIC_OBJECT_SEARCH_PATHS
Parameters
- filePathin pathstringrequired
Responses
- 200Object content streamed with correct Content-Type.binary
- 404Not foundErrorEnvelope
- 500Unexpected server errorErrorEnvelope
GET/storage/objects/{objectPath}Serve an object entity from PRIVATE_OBJECT_DIR
Parameters
- objectPathin pathstringrequired
Responses
- 200Object content streamed with correct Content-Type.binary
- 404Not foundErrorEnvelope
- 500Unexpected server errorErrorEnvelope
Account
DashboardCurrent user and company account operations.
Signed-in dashboard session, resolved from the Clerk session cookie. No API key or token can be issued for these, so they are not callable from outside the dashboard.
GET/meGet the signed-in user and their company membership state
Responses
- 200Current userCurrentUser
- 401Not authenticatedErrorEnvelope
POST/companiesCreate the company record from the onboarding wizard
Request body
CompanyOnboardingInputapplication/jsonrequired
Responses
- 201Company createdCompany
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
- 409ConflictErrorEnvelope
Company
DashboardCompany profile, branding, features, CTA and pricing settings.
Signed-in dashboard session, resolved from the Clerk session cookie. No API key or token can be issued for these, so they are not callable from outside the dashboard.
GET/companyGet the signed-in user's company with branding, features and CTA
Responses
- 200CompanyCompany
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
PATCH/companyUpdate company profile fields
Request body
CompanyProfileUpdateapplication/jsonrequired
Responses
- 200Updated companyCompany
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
PATCH/company/brandingUpdate logo and brand colors
Request body
CompanyBrandingUpdateapplication/jsonrequired
Responses
- 200Updated companyCompany
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
PATCH/company/featuresUpdate the company's service and credential toggles
Request body
CompanyFeaturesUpdateapplication/jsonrequired
Responses
- 200Updated companyCompany
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
PATCH/company/ctaUpdate the primary and secondary call-to-action configuration
Request body
CompanyCtaUpdateapplication/jsonrequired
Responses
- 200Updated companyCompany
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
GET/company/pricingGet the company's remediation pricing rules
Responses
- 200Pricing rulesPricingRules
- 401Not authenticatedErrorEnvelope
PATCH/company/pricingUpdate the company's remediation pricing rules
Request body
PricingRulesUpdateapplication/jsonrequired
Responses
- 200Updated pricing rulesPricingRules
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
DELETE/company/pricingReset pricing rules back to the platform defaults
Responses
- 200Reset pricing rulesPricingRules
- 401Not authenticatedErrorEnvelope
Widgets
DashboardAssessment widget management.
Signed-in dashboard session, resolved from the Clerk session cookie. No API key or token can be issued for these, so they are not callable from outside the dashboard.
GET/widgetsList the company's assessment widgets
Responses
- 200WidgetsWidget[]
- 401Not authenticatedErrorEnvelope
POST/widgetsCreate an assessment widget
Request body
WidgetInputapplication/jsonrequired
Responses
- 201Created widgetWidget
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
GET/widgets/{widgetId}Get a single widget
Parameters
- widgetIdin pathstringrequired
Responses
- 200WidgetWidget
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
PATCH/widgets/{widgetId}Update a widget
Parameters
- widgetIdin pathstringrequired
Request body
WidgetUpdateapplication/jsonrequired
Responses
- 200Updated widgetWidget
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
DELETE/widgets/{widgetId}Delete a widget
Parameters
- widgetIdin pathstringrequired
Responses
- 200DeletedOperationResult
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
Templates
OpenPredefined assessment templates.
No authentication. The questionnaire definitions are served from here so the widget and the dashboard read the same ones.
GET/assessment-templatesList the three predefined assessment templates
Responses
- 200TemplatesAssessmentTemplate[]
Leads
DashboardLead pipeline for the authenticated company.
Signed-in dashboard session, resolved from the Clerk session cookie. No API key or token can be issued for these, so they are not callable from outside the dashboard.
GET/leadsList leads for the company
Parameters
- statusin queryLeadStatusoptional
- concernLevelin queryConcernLeveloptional
- widgetIdin querystringoptional
- searchin querystringoptional
Responses
- 200LeadsLeadSummary[]
- 401Not authenticatedErrorEnvelope
GET/leads/{leadId}Get the full lead record including report and photos
Parameters
- leadIdin pathstringrequired
Responses
- 200Lead detailLeadDetail
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
PATCH/leads/{leadId}Update lead status and company follow-up fields
Parameters
- leadIdin pathstringrequired
Request body
LeadUpdateapplication/jsonrequired
Responses
- 200Updated leadLeadDetail
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
Dashboard
DashboardCompany dashboard metrics and activity.
Signed-in dashboard session, resolved from the Clerk session cookie. No API key or token can be issued for these, so they are not callable from outside the dashboard.
GET/dashboard/summaryHeadline metrics, breakdowns and recent leads for the company
Responses
- 200Dashboard summaryDashboardSummary
- 401Not authenticatedErrorEnvelope
Admin
Platform staffPlatform administrator operations.
Signed-in dashboard session belonging to a platform administrator. Not reachable by a company account.
GET/admin/overviewPlatform-wide totals for the SaaS administrator
Responses
- 200OverviewAdminOverview
- 401Not authenticatedErrorEnvelope
- 403Not allowedErrorEnvelope
GET/admin/companiesList every company on the platform with usage counts
Responses
- 200CompaniesAdminCompany[]
- 401Not authenticatedErrorEnvelope
- 403Not allowedErrorEnvelope
GET/admin/ai-errorsRecent AI processing failures across the platform
Responses
- 200AI processing errorsAiProcessingError[]
- 401Not authenticatedErrorEnvelope
- 403Not allowedErrorEnvelope
POST/admin/impersonationsAct inside a company's account to help them with setup
Request body
StartImpersonationRequestapplication/jsonrequired
Responses
- 201Support session startedImpersonationSession
- 401Not authenticatedErrorEnvelope
- 403Not allowedErrorEnvelope
- 404Not foundErrorEnvelope
DELETE/admin/impersonations/currentStop acting inside a company's account
Responses
- 204Support session ended
- 401Not authenticatedErrorEnvelope
Public
Widget transportUnauthenticated consumer assessment and report endpoints.
No account and no developer credential. This is what the assessment widget and the report page call from a consumer browser, and what authenticates a call varies within the group. Reads are open: widget configuration is public, and a report is read by possession of its token. Starting an assessment is open as well, and is what mints the per-assessment session token that the answer, photo and lead writes must then present in their body. Engagement events carry no session token and are attributed from the report token instead.
GET/public/widgets/{companySlug}/{widgetSlug}Load a hosted assessment widget by company and widget slug
Parameters
- companySlugin pathstringrequired
- widgetSlugin pathstringrequired
Responses
- 200Public widget payloadPublicWidget
- 404Not foundErrorEnvelope
GET/public/widgets/by-id/{widgetPublicId}Load a hosted assessment widget by its public embed id
Parameters
- widgetPublicIdin pathstringrequired
Responses
- 200Public widget payloadPublicWidget
- 404Not foundErrorEnvelope
POST/public/assessmentsBegin a consumer assessment session
Request body
AssessmentStartInputapplication/jsonrequired
Responses
- 201Assessment sessionAssessmentSession
- 400Invalid requestErrorEnvelope
- 404Not foundErrorEnvelope
- 429Rate limit exceededErrorEnvelope
POST/public/assessments/{assessmentId}/answersSave questionnaire answers for an in-progress assessment
Parameters
- assessmentIdin pathstringrequired
Request body
AssessmentAnswersInputapplication/jsonrequired
Responses
- 200SavedOperationResult
- 400Invalid requestErrorEnvelope
- 403Not allowedErrorEnvelope
- 404Not foundErrorEnvelope
POST/public/assessments/{assessmentId}/photo-upload-urlRequest a presigned upload URL for a consumer assessment photo
Parameters
- assessmentIdin pathstringrequired
Request body
AssessmentPhotoUrlInputapplication/jsonrequired
Responses
- 200Presigned upload URLUploadUrlResponse
- 400Invalid requestErrorEnvelope
- 403Not allowedErrorEnvelope
- 404Not foundErrorEnvelope
- 429Rate limit exceededErrorEnvelope
POST/public/assessments/{assessmentId}/photosRegister a photo that was uploaded to object storage
Parameters
- assessmentIdin pathstringrequired
Request body
AssessmentPhotoInputapplication/jsonrequired
Responses
- 201Registered photoAssessmentPhoto
- 400Invalid requestErrorEnvelope
- 403Not allowedErrorEnvelope
- 404Not foundErrorEnvelope
POST/public/assessments/{assessmentId}/photos/{photoId}/removeRemove a photo from an in-progress assessment
Parameters
- assessmentIdin pathstringrequired
- photoIdin pathstringrequired
Request body
AssessmentSessionRefapplication/jsonrequired
Responses
- 200RemovedOperationResult
- 403Not allowedErrorEnvelope
- 404Not foundErrorEnvelope
POST/public/assessments/{assessmentId}/leadSubmit consumer contact details, create the lead and start AI analysis
The lead is persisted synchronously before any AI work begins. AI analysis, pricing and report generation run in the background; poll the report endpoint with the returned token.
Parameters
- assessmentIdin pathstringrequired
Request body
LeadCaptureInputapplication/jsonrequired
Responses
- 200Lead capturedLeadCaptureResult
- 400Invalid requestErrorEnvelope
- 403Not allowedErrorEnvelope
- 404Not foundErrorEnvelope
- 429Rate limit exceededErrorEnvelope
GET/public/reports/{reportToken}Fetch a branded consumer report by its secure token
Parameters
- reportTokenin pathstringrequired
Responses
- 200Report envelopeReportEnvelope
- 404Not foundErrorEnvelope
POST/public/eventsRecord a consumer-side analytics or CTA event
Request body
AnalyticsEventInputapplication/jsonrequired
Responses
- 200RecordedOperationResult
- 400Invalid requestErrorEnvelope
Webhooks
DashboardOutbound webhook endpoints the company registers for lead events.
Signed-in dashboard session, resolved from the Clerk session cookie. No API key or token can be issued for these, so they are not callable from outside the dashboard.
GET/company/webhooksList the company's webhook endpoints
Responses
- 200Webhook endpointsWebhookEndpointList
- 401Not authenticatedErrorEnvelope
POST/company/webhooksRegister a webhook endpoint
Request body
WebhookEndpointCreateapplication/jsonrequired
Responses
- 201The new endpoint and its signing secret, shown only onceWebhookEndpointWithSecret
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
PATCH/company/webhooks/{webhookId}Update a webhook endpoint
Parameters
- webhookIdin pathstringrequired
Request body
WebhookEndpointUpdateapplication/jsonrequired
Responses
- 200Updated endpointWebhookEndpoint
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
DELETE/company/webhooks/{webhookId}Delete a webhook endpoint
Parameters
- webhookIdin pathstringrequired
Responses
- 204Deleted
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
POST/company/webhooks/{webhookId}/testSend a test event to the endpoint
Parameters
- webhookIdin pathstringrequired
Responses
- 200The test delivery and its outcomeWebhookDelivery
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
POST/company/webhooks/{webhookId}/rotate-secretReplace the signing secret for an endpoint
Parameters
- webhookIdin pathstringrequired
Responses
- 200The endpoint and its new signing secret, shown only onceWebhookEndpointWithSecret
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
GET/company/webhooks/{webhookId}/deliveriesRecent delivery attempts for an endpoint
Parameters
- webhookIdin pathstringrequired
Responses
- 200Delivery historyWebhookDeliveryList
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
POST/company/webhooks/{webhookId}/deliveries/{deliveryId}/resendSend a past event to the endpoint again
Parameters
- webhookIdin pathstringrequired
- deliveryIdin pathstringrequired
Responses
- 200The delivery after the new attemptWebhookDelivery
- 400Invalid requestErrorEnvelope
- 401Not authenticatedErrorEnvelope
- 404Not foundErrorEnvelope
Version
Generated from specification version 0.1.0 at build time. This page is rebuilt whenever the site is, so it cannot drift from what the server is built against.