{"openapi":"3.1.0","info":{"title":"Hansala Agent API","version":"1.1.0","summary":"Authenticated Agent API for Pro companies (Bearer hs_ keys).","description":"Pro plan. Bearer hs_ keys. PUT for image uploads (POST → 405). Agents invite only — never auto-confirm. Free keys → 403 plan_required.","termsOfService":"https://www.hansala.com/developers/api-terms","contact":{"name":"Hansala Developers","url":"https://www.hansala.com/developers","email":"developers@hansala.com"},"license":{"name":"Proprietary","url":"https://www.hansala.com/terms"}},"externalDocs":{"description":"Developer docs, embeds, MCP","url":"https://www.hansala.com/developers"},"servers":[{"url":"https://hansala.com/api/v1/agent"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"hs_","description":"Create in Workspace → API. Shown once; stored hashed."}}},"paths":{"/company":{"get":{"summary":"Get company profile","operationId":"getCompany"},"patch":{"summary":"Update profile (name, slug, category, tagline, …)","operationId":"patchCompany"}},"/company/cover":{"put":{"summary":"Upload company cover (PUT)","operationId":"putCompanyCover"},"delete":{"summary":"Clear company cover","operationId":"deleteCompanyCover"}},"/logo":{"put":{"summary":"Upload logo (PUT)","operationId":"putLogo"}},"/logo/refresh":{"post":{"summary":"Refresh logo from company website","operationId":"refreshLogo"}},"/case-studies":{"get":{"summary":"List case studies","operationId":"listCaseStudies"},"post":{"summary":"Create case study","operationId":"createCaseStudy"}},"/case-studies/{id}":{"get":{"summary":"Get case study","operationId":"getCaseStudy"},"patch":{"summary":"Update case study (+ optional cover_image_url fetch)","operationId":"patchCaseStudy"},"delete":{"summary":"Delete case study","operationId":"deleteCaseStudy"}},"/case-studies/{id}/cover":{"put":{"summary":"Upload case study cover (PUT)","operationId":"putCaseCover"},"delete":{"summary":"Clear case study cover","operationId":"deleteCaseCover"}},"/case-studies/{id}/gallery":{"put":{"summary":"Add gallery image (PUT)","operationId":"putCaseGallery"},"delete":{"summary":"Remove gallery image (?url=)","operationId":"deleteCaseGallery"}},"/case-studies/{id}/partners":{"post":{"summary":"Tag partner on case study (confirmed=false until human)","operationId":"tagCasePartner"},"delete":{"summary":"Untag partner on case study","operationId":"untagCasePartner"}},"/client-confirmations":{"post":{"summary":"Email invite for client to confirm a case study","operationId":"clientConfirmation"}},"/references":{"get":{"summary":"List references","operationId":"listReferences"},"post":{"summary":"Create reference (client_name, service, started_year)","operationId":"createReference"}},"/references/{id}":{"patch":{"summary":"Update reference content fields","operationId":"patchReference"},"delete":{"summary":"Delete reference","operationId":"deleteReference"}},"/references/{id}/invite":{"post":{"summary":"Send reference confirmation invite","operationId":"inviteReference"}},"/partnerships":{"get":{"summary":"List partnerships (read-only)","operationId":"listPartnerships"}},"/partner-invites":{"post":{"summary":"Invite unclaimed partner (pending)","operationId":"invitePartner"}},"/verification":{"get":{"summary":"Verification status + owner instructions","operationId":"getVerification"}},"/verification/instructions":{"get":{"summary":"Snippet for one method (?method=meta_tag|dns|…)","operationId":"getVerificationInstructions"}},"/verification/check":{"post":{"summary":"Run domain verification check","operationId":"checkVerification"}},"/team":{"get":{"summary":"List members + pending invites (requires team:manage)","operationId":"listTeam"}},"/team/invitations":{"post":{"summary":"Create team invitation","operationId":"createTeamInvitation"}},"/team/invitations/{id}":{"delete":{"summary":"Cancel pending team invitation","operationId":"cancelTeamInvitation"}},"/team/members/{memberId}":{"patch":{"summary":"Update member profile/role/permissions","operationId":"patchTeamMember"},"delete":{"summary":"Remove team member","operationId":"deleteTeamMember"}},"/team/members/{memberId}/photo":{"put":{"summary":"Upload team member photo (PUT)","operationId":"putTeamMemberPhoto"}},"/group":{"get":{"summary":"Read company group structure","operationId":"getGroup"},"post":{"summary":"Create company group","operationId":"createGroup"}},"/group/invites":{"post":{"summary":"Invite existing company to group (they confirm)","operationId":"inviteGroupMember"}},"/group/subsidiaries":{"post":{"summary":"Create auto-confirmed subsidiary (owner structure statement)","operationId":"createSubsidiary"}},"/group/parent-proposals":{"post":{"summary":"Set or propose group parent","operationId":"proposeGroupParent"}},"/group/members/{companyId}":{"delete":{"summary":"End group membership","operationId":"removeGroupMember"}},"/inquiries":{"get":{"summary":"List profile inquiries","operationId":"listInquiries"}},"/inquiries/{id}":{"patch":{"summary":"Triage inquiry status","operationId":"patchInquiry"}},"/analytics":{"get":{"summary":"Profile analytics for keyed company","operationId":"getAnalytics"}},"/audit-log":{"get":{"summary":"Own API audit trail","operationId":"getAuditLog"}},"/widgets":{"get":{"summary":"Embed variant catalog/snippets (requires settings:write)","operationId":"listWidgets"}},"/widget-settings":{"get":{"summary":"Read widget_settings","operationId":"getWidgetSettings"},"patch":{"summary":"Update widget settings","operationId":"patchWidgetSettings"}},"/scheduling":{"get":{"summary":"Read Calendly/Cal.com booking link (Book a call)","operationId":"getScheduling"},"put":{"summary":"Set Calendly or Cal.com public booking URL (settings:write)","operationId":"putScheduling"},"delete":{"summary":"Disconnect booking link (settings:write)","operationId":"deleteScheduling"}},"/webhooks":{"get":{"summary":"List webhook endpoints (webhooks:manage)","operationId":"listWebhooks"},"post":{"summary":"Create webhook endpoint (secret returned once)","operationId":"createWebhook"}},"/webhooks/{id}":{"patch":{"summary":"Update webhook endpoint","operationId":"patchWebhook"},"delete":{"summary":"Delete webhook endpoint","operationId":"deleteWebhook"}},"/webhooks/{id}/test":{"post":{"summary":"Queue a test delivery for an endpoint","operationId":"testWebhook"}}}}