{"openapi":"3.0.0","paths":{"/health":{"get":{"operationId":"HealthController_health","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"uptime":{"type":"number","example":3600}}}}}}},"tags":["Health"],"summary":"Check API availability","description":"Service health and uptime checks. This endpoint is public or uses site/runtime headers instead of account auth.","security":[]}},"/sites/{siteId}/api-keys":{"get":{"operationId":"PublicApiController_listApiKeys","parameters":[{"name":"siteId","required":true,"in":"path","schema":{"type":"string"}},{"name":"authorization","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true}}}}}}},"tags":["API key management"],"summary":"List site API keys","description":"Site-scoped API keys plus ticket read/write endpoints for Jira, Zendesk, ServiceNow, and custom ticket systems. Requires `Authorization: Bearer {{access_token}}`.","security":[{"bearer":[]}]},"post":{"operationId":"PublicApiController_createApiKey","parameters":[{"name":"siteId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePublicApiKeyDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true}}}}}}},"tags":["API key management"],"summary":"Create a site API key","description":"Site-scoped API keys plus ticket read/write endpoints for Jira, Zendesk, ServiceNow, and custom ticket systems. Requires `Authorization: Bearer {{access_token}}`.","security":[{"bearer":[]}]}},"/sites/{siteId}/api-keys/{keyId}":{"delete":{"operationId":"PublicApiController_revokeApiKey","parameters":[{"name":"siteId","required":true,"in":"path","schema":{"type":"string"}},{"name":"keyId","required":true,"in":"path","schema":{"type":"string"}},{"name":"authorization","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true}}}}}}},"tags":["API key management"],"summary":"Revoke a site API key","description":"Site-scoped API keys plus ticket read/write endpoints for Jira, Zendesk, ServiceNow, and custom ticket systems. Requires `Authorization: Bearer {{access_token}}`.","security":[{"bearer":[]}]}},"/v1/sites/{siteId}/tickets":{"get":{"operationId":"PublicApiController_listTickets","parameters":[{"name":"siteId","required":true,"in":"path","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"skip","required":false,"in":"query","schema":{"type":"string"}},{"name":"x-concierge-api-key","in":"header","required":true,"description":"Site-scoped public API key with the operation's required ticket or assessment scope.","schema":{"type":"string","example":"ck_live_..."}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true}}}}}}},"tags":["Ticket API"],"summary":"List service requests","description":"Site-scoped API keys plus ticket read/write endpoints for Jira, Zendesk, ServiceNow, and custom ticket systems. Requires a site-scoped API key in `x-concierge-api-key` with the operation's documented scope.","security":[{"conciergeApiKey":[]}]}},"/v1/sites/{siteId}/tickets/{ticketId}":{"get":{"operationId":"PublicApiController_getTicket","parameters":[{"name":"siteId","required":true,"in":"path","schema":{"type":"string"}},{"name":"ticketId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-concierge-api-key","in":"header","required":true,"description":"Site-scoped public API key with the operation's required ticket or assessment scope.","schema":{"type":"string","example":"ck_live_..."}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true}}}}}}},"tags":["Ticket API"],"summary":"Get a service request","description":"Site-scoped API keys plus ticket read/write endpoints for Jira, Zendesk, ServiceNow, and custom ticket systems. Requires a site-scoped API key in `x-concierge-api-key` with the operation's documented scope.","security":[{"conciergeApiKey":[]}]},"patch":{"operationId":"PublicApiController_updateTicket","parameters":[{"name":"siteId","required":true,"in":"path","schema":{"type":"string"}},{"name":"ticketId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-concierge-api-key","in":"header","required":true,"description":"Site-scoped public API key with the operation's required ticket or assessment scope.","schema":{"type":"string","example":"ck_live_..."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePublicTicketDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true}}}}}}},"tags":["Ticket API"],"summary":"Update a service request","description":"Site-scoped API keys plus ticket read/write endpoints for Jira, Zendesk, ServiceNow, and custom ticket systems. Requires a site-scoped API key in `x-concierge-api-key` with the operation's documented scope.","security":[{"conciergeApiKey":[]}]}},"/v1/sites/{siteId}/tickets/{ticketId}/comments":{"post":{"operationId":"PublicApiController_addTicketComment","parameters":[{"name":"siteId","required":true,"in":"path","schema":{"type":"string"}},{"name":"ticketId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-concierge-api-key","in":"header","required":true,"description":"Site-scoped public API key with the operation's required ticket or assessment scope.","schema":{"type":"string","example":"ck_live_..."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePublicTicketCommentDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true}}}}}}},"tags":["Ticket API"],"summary":"Add a service-request comment","description":"Site-scoped API keys plus ticket read/write endpoints for Jira, Zendesk, ServiceNow, and custom ticket systems. Requires a site-scoped API key in `x-concierge-api-key` with the operation's documented scope.","security":[{"conciergeApiKey":[]}]}},"/v1/sites/{siteId}/assessments":{"post":{"operationId":"PublicApiController_createAssessment","parameters":[{"name":"idempotency-key","in":"header","required":true,"schema":{"type":"string"},"description":"Stable request key used to prevent duplicate assessments."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAssessmentDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true}}}}}}},"tags":["Public evidence assessments"],"summary":"Queue a public evidence assessment","description":"Queues an asynchronous assessment and returns its assessment ID immediately. Requires assessments:write. Reusing an idempotency key with the same request returns the original assessment.","security":[{"conciergeApiKey":[]}]}},"/v1/sites/{siteId}/assessments/{assessmentId}":{"get":{"operationId":"PublicApiController_getAssessment","parameters":[{"name":"siteId","required":true,"in":"path","schema":{"type":"string"}},{"name":"assessmentId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-concierge-api-key","in":"header","required":true,"description":"Site-scoped public API key with the operation's required ticket or assessment scope.","schema":{"type":"string","example":"ck_live_..."}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true}}}}}}},"tags":["Public evidence assessments"],"summary":"Get a public evidence assessment","description":"Returns the truthful queued, running, completed, or failed state. Requires assessments:read.","security":[{"conciergeApiKey":[]}]}},"/marketplaces/inbound/crm/{installationId}":{"post":{"operationId":"MarketplaceController_receiveCrmInbound","parameters":[{"name":"installationId","in":"path","required":true,"schema":{"type":"string"},"description":"Installation identifier supplied by Concierge setup."},{"name":"x-concierge-timestamp","in":"header","required":true,"schema":{"type":"string"},"description":"ISO-8601 delivery timestamp within the accepted five-minute window."},{"name":"x-concierge-delivery-id","in":"header","required":true,"schema":{"type":"string"},"description":"Stable unique event ID used for replay protection."},{"name":"x-concierge-content-sha256","in":"header","required":true,"schema":{"type":"string"},"description":"Lowercase SHA-256 hex digest of the exact raw request body."},{"name":"x-concierge-signature","in":"header","required":true,"schema":{"type":"string"},"description":"HMAC-SHA256 signature formatted as v1=<hex>."}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true}}}}}}},"tags":["CRM inbound"],"summary":"Apply a signed CRM record-change event","description":"This endpoint is enabled only for an active installation with inbound synchronization configured. Sign the exact raw body and send the required timestamp, delivery ID, digest, and signature headers.","security":[],"requestBody":{"description":"Request body for Create or run marketplaces inbound crm installationId","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}}}}},"info":{"title":"Concierge Developer API","version":"1.0","description":"Stable external Concierge operations for site-scoped ticket workflows, public evidence assessments, and signed CRM synchronization."},"tags":[{"name":"Health","description":"Service availability for integration monitoring."},{"name":"API key management","description":"Create, list, and revoke site-scoped Ticket API credentials from an authenticated Concierge account."},{"name":"Ticket API","description":"Read and update service requests using a site-scoped Concierge API key."},{"name":"Public evidence assessments","description":"Queue and poll site-scoped public evidence assessments without making catalogue decisions."},{"name":"CRM inbound","description":"Receive a signed, installation-scoped CRM record-change event."}],"components":{"schemas":{"CreatePublicApiKeyDto":{"type":"object","properties":{"name":{"type":"string","maxLength":80},"scopes":{"type":"array","items":{"type":"string","enum":["tickets:read","tickets:write","assessments:read","assessments:write"]}}},"required":["name"]},"UpdatePublicTicketDto":{"type":"object","properties":{"status":{"enum":["open","escalated","resolved"],"type":"string"},"priority":{"enum":["normal","high","urgent"],"type":"string"},"externalTicketId":{"type":"string","maxLength":180},"externalTicketUrl":{"type":"string","maxLength":2048,"format":"uri"},"externalSystem":{"type":"string","maxLength":80},"agentNote":{"type":"string","maxLength":2000}}},"CreatePublicTicketCommentDto":{"type":"object","properties":{"content":{"type":"string","maxLength":4000},"authorName":{"type":"string","maxLength":120}},"required":["content"]},"CreateAssessmentDto":{"type":"object","properties":{"profileKey":{"type":"string","maxLength":120},"externalReference":{"type":"string","maxLength":300},"subject":{"$ref":"#/components/schemas/AssessmentSubjectDto"}},"required":["profileKey","externalReference","subject"]},"AssessmentSubjectDto":{"type":"object","properties":{"type":{"type":"string","enum":["saas_website","developer_tool","api_platform","mobile_app","browser_extension","desktop_app","open_source","other"]},"name":{"type":"string","maxLength":200},"description":{"type":"string","maxLength":4000},"urls":{"minItems":1,"maxItems":20,"type":"array","items":{"$ref":"#/components/schemas/AssessmentEvidenceUrlDto"}},"claims":{"$ref":"#/components/schemas/AssessmentClaimsDto"}},"required":["type","name","description","urls"]},"AssessmentEvidenceUrlDto":{"type":"object","properties":{"type":{"type":"string","enum":["website","documentation","repository","package_registry","app_store","extension_store","status_page","other"]},"url":{"type":"string","maxLength":2048,"format":"uri"}},"required":["type","url"]},"AssessmentClaimsDto":{"type":"object","properties":{"pricingModel":{"type":"string","maxLength":120},"freeTier":{"type":"boolean"},"openSource":{"type":"boolean"},"platforms":{"maxItems":30,"type":"array","items":{"type":"string"}},"integrations":{"maxItems":50,"type":"array","items":{"type":"string"}}}}},"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Use the token returned by POST /auth/signin."},"conciergeApiKey":{"type":"apiKey","in":"header","name":"x-concierge-api-key","description":"Site-scoped API key for public Ticket API and public evidence assessment operations."}}},"externalDocs":{"description":"Concierge Developer Platform","url":"https://poweredbyconcierge.com/developers"},"servers":[{"url":"https://poweredbyconcierge.com/api/backend"}]}