{"openapi":"3.1.0","info":{"title":"Vocaid Connect API","description":"REST API for ATS platforms, HR tools, and staffing agencies to programmatically access Vocaid hiring data.","version":"1.0.0"},"paths":{"/v1/jobs":{"get":{"tags":["Vocaid Connect v1","Connect: Jobs"],"summary":"List Published Jobs","description":"List published job postings (public, no auth required).\n\nReturns only jobs with ``status = PUBLISHED`` that have not closed.","operationId":"list_published_jobs_v1_jobs_get","parameters":[{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor: UUID of last item","title":"After"},"description":"Cursor: UUID of last item"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"department","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"}},{"name":"location_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Type"}},{"name":"seniority_level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seniority Level"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CursorPage_JobResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}":{"get":{"tags":["Vocaid Connect v1","Connect: Jobs"],"summary":"Get Published Job","description":"Get a single published job posting by ID (public, no auth required).","operationId":"get_published_job_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications":{"get":{"tags":["Vocaid Connect v1","Connect: Applications"],"summary":"List Applications","description":"List applications for the organization's job postings.","operationId":"list_applications_v1_applications_get","parameters":[{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"job_posting_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by job posting","title":"Job Posting Id"},"description":"Filter by job posting"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by application status","title":"Status"},"description":"Filter by application status"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CursorPage_ApplicationResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Vocaid Connect v1","Connect: Applications"],"summary":"Create Application","description":"Create a new job application via the Connect API.\n\nAuto-creates a minimal User record if the candidate email doesn't exist.\nEmits ``application.created`` webhook event.","operationId":"create_application_v1_applications_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApplicationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications/{application_id}":{"get":{"tags":["Vocaid Connect v1","Connect: Applications"],"summary":"Get Application","description":"Get a single application by ID (org-scoped).","operationId":"get_application_v1_applications__application_id__get","parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications/{application_id}/status":{"patch":{"tags":["Vocaid Connect v1","Connect: Applications"],"summary":"Update Application Status","description":"Update the status of a job application.\n\nEmits ``application.status_changed`` webhook event.","operationId":"update_application_status_v1_applications__application_id__status_patch","parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateApplicationStatusRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications/{application_id}/resume":{"get":{"tags":["Vocaid Connect v1","Connect: Resumes"],"summary":"Get Resume Metadata","description":"Get resume metadata + parsed text for an application.","operationId":"get_resume_metadata_v1_applications__application_id__resume_get","parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResumeMetadataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/applications/{application_id}/resume/file":{"get":{"tags":["Vocaid Connect v1","Connect: Resumes"],"summary":"Download Resume File","description":"Download original resume file (PDF/DOCX).","operationId":"download_resume_file_v1_applications__application_id__resume_file_get","parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/interviews":{"get":{"tags":["Vocaid Connect v1","Connect: Interviews"],"summary":"List Interviews","description":"List interviews for the organization.","operationId":"list_interviews_v1_interviews_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"job_posting_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Posting Id"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CursorPage_InterviewResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/interviews/{interview_id}":{"get":{"tags":["Vocaid Connect v1","Connect: Interviews"],"summary":"Get Interview","description":"Get interview details.","operationId":"get_interview_v1_interviews__interview_id__get","parameters":[{"name":"interview_id","in":"path","required":true,"schema":{"type":"string","title":"Interview Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/interviews/{interview_id}/results":{"get":{"tags":["Vocaid Connect v1","Connect: Interviews"],"summary":"Get Interview Results","description":"Get full interview results including transcript and feedback.","operationId":"get_interview_results_v1_interviews__interview_id__results_get","parameters":[{"name":"interview_id","in":"path","required":true,"schema":{"type":"string","title":"Interview Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterviewResultsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/evaluations":{"get":{"tags":["Vocaid Connect v1","Connect: Evaluations"],"summary":"List Evaluations","description":"List evaluations for the organization's applications.","operationId":"list_evaluations_v1_evaluations_get","parameters":[{"name":"application_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Id"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CursorPage_EvaluationResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/evaluations/{evaluation_id}":{"get":{"tags":["Vocaid Connect v1","Connect: Evaluations"],"summary":"Get Evaluation","description":"Get evaluation details with all rubric scores.","operationId":"get_evaluation_v1_evaluations__evaluation_id__get","parameters":[{"name":"evaluation_id","in":"path","required":true,"schema":{"type":"string","title":"Evaluation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/votes":{"get":{"tags":["Vocaid Connect v1","Connect: Votes & Decisions"],"summary":"List Votes","description":"List stakeholder votes for the organization's applications.","operationId":"list_votes_v1_votes_get","parameters":[{"name":"application_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Id"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CursorPage_VoteResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/decisions":{"get":{"tags":["Vocaid Connect v1","Connect: Votes & Decisions"],"summary":"List Decisions","description":"List hiring decisions for the organization's applications.","operationId":"list_decisions_v1_decisions_get","parameters":[{"name":"application_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Id"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CursorPage_DecisionResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/match-scores":{"get":{"tags":["Vocaid Connect v1","Connect: Match Scores"],"summary":"List Match Scores","description":"List candidate match scores for the organization's job postings.","operationId":"list_match_scores_v1_match_scores_get","parameters":[{"name":"job_posting_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Posting Id"}},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direction"}},{"name":"min_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Score"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CursorPage_MatchScoreResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/interview-links":{"get":{"tags":["Vocaid Connect v1","Connect: Interview Links"],"summary":"List Interview Links","description":"List interview links for the organization's job postings.","operationId":"list_interview_links_v1_interview_links_get","parameters":[{"name":"job_posting_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Posting Id"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CursorPage_InterviewLinkResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Vocaid Connect v1","Connect: Interview Links"],"summary":"Create Interview Link","description":"Create a new interview link for a job posting.\n\nEmits ``interview_link.created`` webhook event.","operationId":"create_interview_link_v1_interview_links_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInterviewLinkRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterviewLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/interview-links/{link_id}":{"get":{"tags":["Vocaid Connect v1","Connect: Interview Links"],"summary":"Get Interview Link","description":"Get interview link details.","operationId":"get_interview_link_v1_interview_links__link_id__get","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterviewLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Vocaid Connect v1","Connect: Interview Links"],"summary":"Delete Interview Link","description":"Deactivate (soft-delete) an interview link.","operationId":"delete_interview_link_v1_interview_links__link_id__delete","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage":{"get":{"tags":["Vocaid Connect v1","Connect: Usage"],"summary":"Get Usage Summary","description":"Get the organization's feature usage summary for the current billing period.","operationId":"get_usage_summary_v1_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageSummaryResponse"}}}}}}},"/v1/api-keys/scopes":{"get":{"tags":["Vocaid Connect v1","Connect: API Keys"],"summary":"Get Allowed Scopes","description":"Return the list of scopes allowed for the org's subscription tier.","operationId":"get_allowed_scopes_v1_api_keys_scopes_get","parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Organization ID (optional for single-org users)","title":"Org Id"},"description":"Organization ID (optional for single-org users)"},{"name":"vocaid_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vocaid Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/api-keys":{"get":{"tags":["Vocaid Connect v1","Connect: API Keys"],"summary":"List Api Keys","description":"List all API keys for the user's organization.","operationId":"list_api_keys_v1_api_keys_get","parameters":[{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Organization ID (optional for single-org users)","title":"Org Id"},"description":"Organization ID (optional for single-org users)"},{"name":"vocaid_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vocaid Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CursorPage_ApiKeyResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Vocaid Connect v1","Connect: API Keys"],"summary":"Create Api Key","description":"Create a new API key. The raw key is returned ONCE.","operationId":"create_api_key_v1_api_keys_post","parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Organization ID (optional for single-org users)","title":"Org Id"},"description":"Organization ID (optional for single-org users)"},{"name":"vocaid_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vocaid Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/api-keys/{key_id}":{"patch":{"tags":["Vocaid Connect v1","Connect: API Keys"],"summary":"Update Api Key","description":"Update an API key's name, scopes, or expiry.","operationId":"update_api_key_v1_api_keys__key_id__patch","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Organization ID (optional for single-org users)","title":"Org Id"},"description":"Organization ID (optional for single-org users)"},{"name":"vocaid_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vocaid Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateApiKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Vocaid Connect v1","Connect: API Keys"],"summary":"Revoke Api Key","description":"Revoke (soft-delete) an API key.","operationId":"revoke_api_key_v1_api_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Organization ID (optional for single-org users)","title":"Org Id"},"description":"Organization ID (optional for single-org users)"},{"name":"vocaid_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vocaid Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/api-keys/{key_id}/rotate":{"post":{"tags":["Vocaid Connect v1","Connect: API Keys"],"summary":"Rotate Api Key","description":"Rotate an API key.\n\nAtomically:\n  1. Generate a new raw key with the same name + scopes + expires_at as\n     the old one.\n  2. Immediately deactivate the old key (is_active=False, revoked_at=now).\n  3. Return the new raw key — visible ONCE.\n\nNo grace period: rotation is treated as a security event (compromise\nsuspected, rotation cadence, etc.). Integrators who need overlap should\ncreate a new key via POST first, deploy it, then DELETE the old key.\n\nKey-limit enforcement is bypassed for rotation (the old key is\ndeactivated in the same transaction, so the count doesn't increase\nbeyond what was already allowed).\n\nPlan: docs/plans/2026-05-17-day-10-connect-api-minimal-viability-impl.md","operationId":"rotate_api_key_v1_api_keys__key_id__rotate_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Organization ID (optional for single-org users)","title":"Org Id"},"description":"Organization ID (optional for single-org users)"},{"name":"vocaid_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vocaid Session"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks":{"post":{"tags":["Vocaid Connect v1","Connect: Webhooks"],"summary":"Create Webhook","description":"Register a new webhook endpoint.\n\nReturns the signing secret **once** — it is never retrievable again.","operationId":"create_webhook_v1_webhooks_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecretResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Vocaid Connect v1","Connect: Webhooks"],"summary":"List Webhooks","description":"List all webhook endpoints for the organization.","operationId":"list_webhooks_v1_webhooks_get","parameters":[{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CursorPage_WebhookEndpointResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{endpoint_id}":{"get":{"tags":["Vocaid Connect v1","Connect: Webhooks"],"summary":"Get Webhook","description":"Get webhook endpoint details including recent deliveries.","operationId":"get_webhook_v1_webhooks__endpoint_id__get","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Vocaid Connect v1","Connect: Webhooks"],"summary":"Update Webhook","description":"Update a webhook endpoint's URL, events, or active status.","operationId":"update_webhook_v1_webhooks__endpoint_id__patch","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Vocaid Connect v1","Connect: Webhooks"],"summary":"Delete Webhook","description":"Deactivate a webhook endpoint (soft-delete).","operationId":"delete_webhook_v1_webhooks__endpoint_id__delete","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{endpoint_id}/rotate-secret":{"post":{"tags":["Vocaid Connect v1","Connect: Webhooks"],"summary":"Rotate Webhook Secret","description":"Rotate the signing secret for a webhook endpoint.\n\nThe previous secret remains valid for **24 hours** so consumers have\ntime to update their verification logic.  During the overlap window\ndeliveries are signed with **both** the current and previous secrets.","operationId":"rotate_webhook_secret_v1_webhooks__endpoint_id__rotate_secret_post","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecretResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{endpoint_id}/test":{"post":{"tags":["Vocaid Connect v1","Connect: Webhooks"],"summary":"Test Webhook","description":"Send a ``test.ping`` event to the endpoint to verify connectivity.","operationId":"test_webhook_v1_webhooks__endpoint_id__test_post","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ApiKeyCreatedResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"raw_key":{"type":"string","title":"Raw Key"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","key_prefix","raw_key","scopes","created_at"],"title":"ApiKeyCreatedResponse","description":"Response after creating a new API key. Includes the raw key ONCE."},"ApiKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"is_active":{"type":"boolean","title":"Is Active"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","key_prefix","scopes","is_active","created_at"],"title":"ApiKeyResponse","description":"API key metadata (never includes the raw key)."},"ApplicationResponse":{"properties":{"id":{"type":"string","title":"Id"},"job_posting_id":{"type":"string","title":"Job Posting Id"},"candidate_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Candidate Name"},"candidate_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Candidate Email"},"status":{"type":"string","title":"Status"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"applied_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Applied At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","job_posting_id","status","created_at","updated_at"],"title":"ApplicationResponse","description":"Job application summary."},"CreateApiKeyRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["name"],"title":"CreateApiKeyRequest","description":"Request to create a new Connect API key."},"CreateApplicationRequest":{"properties":{"job_posting_id":{"type":"string","title":"Job Posting Id","description":"ID of the job posting to apply to"},"candidate_email":{"type":"string","maxLength":255,"minLength":1,"title":"Candidate Email","description":"Candidate email address"},"candidate_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Candidate Name","description":"Candidate full name"},"cover_note":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Cover Note","description":"Optional cover letter / note"},"source":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Source","description":"Application source identifier","default":"connect_api"}},"type":"object","required":["job_posting_id","candidate_email"],"title":"CreateApplicationRequest","description":"Create a job application via the Connect API."},"CreateInterviewLinkRequest":{"properties":{"job_posting_id":{"type":"string","title":"Job Posting Id","description":"ID of the job posting"},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title","description":"Link title / label"},"instructions":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Instructions","description":"Instructions for candidates"},"expiry_days":{"type":"integer","maximum":30,"minimum":1,"title":"Expiry Days","description":"Days until the link expires","default":7},"max_uses":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Max Uses","description":"Maximum number of uses (null = unlimited)"},"rubric_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rubric Id","description":"Rubric to use for evaluations"},"questions_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Questions Config","description":"Custom questions configuration JSON"},"requires_camera":{"type":"boolean","title":"Requires Camera","description":"Require camera identity verification: candidates must grant video-analysis + biometric consent and pass the camera check before the interview starts","default":false}},"type":"object","required":["job_posting_id"],"title":"CreateInterviewLinkRequest","description":"Create an interview link for a job posting."},"CreateWebhookRequest":{"properties":{"url":{"type":"string","maxLength":2048,"minLength":1,"title":"Url","description":"HTTPS webhook URL"},"events":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Events","description":"Event types to subscribe to (e.g. 'application.created', '*')"}},"type":"object","required":["url","events"],"title":"CreateWebhookRequest","description":"Register a new webhook endpoint."},"CursorPage_ApiKeyResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ApiKeyResponse"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Count"}},"type":"object","required":["data","has_more"],"title":"CursorPage[ApiKeyResponse]"},"CursorPage_ApplicationResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ApplicationResponse"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Count"}},"type":"object","required":["data","has_more"],"title":"CursorPage[ApplicationResponse]"},"CursorPage_DecisionResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DecisionResponse"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Count"}},"type":"object","required":["data","has_more"],"title":"CursorPage[DecisionResponse]"},"CursorPage_EvaluationResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/EvaluationResponse"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Count"}},"type":"object","required":["data","has_more"],"title":"CursorPage[EvaluationResponse]"},"CursorPage_InterviewLinkResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InterviewLinkResponse"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Count"}},"type":"object","required":["data","has_more"],"title":"CursorPage[InterviewLinkResponse]"},"CursorPage_InterviewResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/InterviewResponse"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Count"}},"type":"object","required":["data","has_more"],"title":"CursorPage[InterviewResponse]"},"CursorPage_JobResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/JobResponse"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Count"}},"type":"object","required":["data","has_more"],"title":"CursorPage[JobResponse]"},"CursorPage_MatchScoreResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MatchScoreResponse"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Count"}},"type":"object","required":["data","has_more"],"title":"CursorPage[MatchScoreResponse]"},"CursorPage_VoteResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/VoteResponse"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Count"}},"type":"object","required":["data","has_more"],"title":"CursorPage[VoteResponse]"},"CursorPage_WebhookEndpointResponse_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WebhookEndpointResponse"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Count"}},"type":"object","required":["data","has_more"],"title":"CursorPage[WebhookEndpointResponse]"},"DecisionResponse":{"properties":{"id":{"type":"string","title":"Id"},"application_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Id"},"decision":{"type":"string","title":"Decision"},"decided_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decided By Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"decided_at":{"type":"string","format":"date-time","title":"Decided At"}},"type":"object","required":["id","decision","decided_at"],"title":"DecisionResponse","description":"Hiring decision."},"EvaluationResponse":{"properties":{"id":{"type":"string","title":"Id"},"application_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Id"},"evaluator_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evaluator Name"},"overall_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Score"},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recommendation"},"scores":{"items":{"$ref":"#/components/schemas/EvaluationScoreResponse"},"type":"array","title":"Scores"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","created_at"],"title":"EvaluationResponse","description":"Candidate evaluation summary."},"EvaluationScoreResponse":{"properties":{"category_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Name"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"evidence_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Text"},"video_timestamp_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Video Timestamp Seconds"}},"type":"object","title":"EvaluationScoreResponse","description":"Individual rubric category score within an evaluation."},"FeatureUsageResponse":{"properties":{"feature":{"type":"string","title":"Feature"},"used":{"type":"integer","title":"Used"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"},"remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining"}},"type":"object","required":["feature","used"],"title":"FeatureUsageResponse","description":"Usage summary for a single B2B feature."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InterviewLinkResponse":{"properties":{"id":{"type":"string","title":"Id"},"job_posting_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Posting Id"},"short_code":{"type":"string","title":"Short Code"},"is_active":{"type":"boolean","title":"Is Active"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"max_uses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Uses"},"use_count":{"type":"integer","title":"Use Count","default":0},"requires_camera":{"type":"boolean","title":"Requires Camera","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","short_code","is_active","created_at"],"title":"InterviewLinkResponse","description":"Interview link summary."},"InterviewResponse":{"properties":{"id":{"type":"string","title":"Id"},"job_posting_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Posting Id"},"candidate_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Candidate Name"},"status":{"type":"string","title":"Status"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Seconds"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","status","created_at"],"title":"InterviewResponse","description":"Interview summary."},"InterviewResultsResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"transcript":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transcript"},"feedback_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feedback Text"},"behavioral_flags":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Behavioral Flags"},"duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Seconds"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","status"],"title":"InterviewResultsResponse","description":"Full interview results including feedback and scores."},"JobResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"location_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Type"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"seniority_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seniority Level"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"requirements":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requirements"},"salary_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Salary Min"},"salary_max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Salary Max"},"salary_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Currency"},"status":{"type":"string","title":"Status"},"closes_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Closes At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","title","status","created_at","updated_at"],"title":"JobResponse","description":"Published job posting (public, no auth)."},"MatchScoreResponse":{"properties":{"id":{"type":"string","title":"Id"},"candidate_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Candidate Id"},"job_posting_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Posting Id"},"overall_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Score"},"skill_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skill Score"},"seniority_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Seniority Score"},"location_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Location Score"},"salary_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Salary Score"},"computed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Computed At"}},"type":"object","required":["id"],"title":"MatchScoreResponse","description":"Candidate ↔ job match score."},"ResumeMetadataResponse":{"properties":{"id":{"type":"string","title":"Id"},"application_id":{"type":"string","title":"Application Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"original_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Filename"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"},"file_size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"File Size Bytes"},"parsed_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parsed Text"},"ats_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ats Score"},"uploaded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Uploaded At"}},"type":"object","required":["id","application_id"],"title":"ResumeMetadataResponse","description":"Resume metadata + parsed text (no raw file)."},"UpdateApiKeyRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","title":"UpdateApiKeyRequest","description":"Request to update an existing Connect API key."},"UpdateApplicationStatusRequest":{"properties":{"status":{"type":"string","title":"Status","description":"New status. One of: APPLIED, SCREENING, INTERVIEWING, OFFERED, HIRED, REJECTED, WITHDRAWN"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes","description":"Optional status-change notes"}},"type":"object","required":["status"],"title":"UpdateApplicationStatusRequest","description":"Update the status of a job application."},"UpdateWebhookRequest":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":1},{"type":"null"}],"title":"Url"},"events":{"anyOf":[{"items":{"type":"string"},"type":"array","minItems":1},{"type":"null"}],"title":"Events"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UpdateWebhookRequest","description":"Update an existing webhook endpoint."},"UsageSummaryResponse":{"properties":{"organization_id":{"type":"string","title":"Organization Id"},"billing_period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Billing Period Start"},"billing_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Billing Period End"},"features":{"items":{"$ref":"#/components/schemas/FeatureUsageResponse"},"type":"array","title":"Features"}},"type":"object","required":["organization_id"],"title":"UsageSummaryResponse","description":"Organization usage summary for current billing period."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VoteResponse":{"properties":{"id":{"type":"string","title":"Id"},"application_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Id"},"voter_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voter Name"},"vote_value":{"type":"string","title":"Vote Value"},"stakeholder_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stakeholder Type"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"voted_at":{"type":"string","format":"date-time","title":"Voted At"}},"type":"object","required":["id","vote_value","voted_at"],"title":"VoteResponse","description":"Stakeholder vote."},"WebhookDeliveryResponse":{"properties":{"id":{"type":"string","title":"Id"},"event_type":{"type":"string","title":"Event Type"},"status":{"type":"string","title":"Status"},"attempts":{"type":"integer","title":"Attempts","default":0},"response_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Code"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","event_type","status","created_at"],"title":"WebhookDeliveryResponse","description":"Summary of a single webhook delivery attempt."},"WebhookEndpointResponse":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"is_active":{"type":"boolean","title":"Is Active"},"failure_count":{"type":"integer","title":"Failure Count","default":0},"disabled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Disabled At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"recent_deliveries":{"items":{"$ref":"#/components/schemas/WebhookDeliveryResponse"},"type":"array","title":"Recent Deliveries"}},"type":"object","required":["id","url","is_active","created_at"],"title":"WebhookEndpointResponse","description":"Webhook endpoint summary (secret is never returned after creation)."},"WebhookSecretResponse":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"is_active":{"type":"boolean","title":"Is Active"},"secret":{"type":"string","title":"Secret"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","url","events","is_active","secret","created_at"],"title":"WebhookSecretResponse","description":"Returned once at webhook creation — contains the signing secret."}}},"servers":[{"url":"/api/connect"}]}