{"openapi":"3.1.1","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"토닥토닥 공개 조회 API","version":"0.1.0","description":"저장된 공개 공고·자격 일정·페이지 스킬을 읽는 REST API입니다. 공개 조회에는 계정 인증이나 IP 등록이 필요하지 않습니다. /openapi.json과 current-status, calendar.ics는 HEAD에도 GET과 같은 상태·헤더 및 빈 본문을 반환하고 다른 메서드는 405(Allow: GET, HEAD)로 거절합니다. 저장된 출처와 확인 시각은 과거 기록입니다. 이 요청에서 모집 원문을 재확인하지 않으며 저장된 날짜로 계산한 open은 실제 접수 가능 여부를 보증하지 않습니다. 개인 지원서·보관함·쓰기·로그인·MCP 연결은 이 공개 API 명세의 범위에 포함되지 않습니다."},"servers":[{"url":"https://todaktodak.app"}],"security":[],"externalDocs":{"description":"에이전트의 공개 조사·연결·개인 자료 승인·지원 진행 안내","url":"https://todaktodak.app/agent-guide.md"},"tags":[{"name":"공개 조회","description":"저장된 공개 자료와 마감 알림"}],"paths":{"/api/opportunities":{"get":{"operationId":"listOpportunities","summary":"공개 공고 검색 (페이지당 최대 100건, 등록 시각 최신순·동일 시각은 ID순)","tags":["공개 조회"],"security":[],"parameters":[{"name":"q","in":"query","required":false,"description":"제목·기관·요약·태그·지원 조건·자격·교육 주제의 부분 검색. 앞 200자까지만 사용합니다.","schema":{"type":"string","maxLength":200}},{"name":"category","in":"query","schema":{"type":"string","enum":["job","education","contest"]},"description":"기본 분류"},{"name":"type","in":"query","schema":{"type":"string","enum":["job","education","contest","hackathon"]},"description":"상세 유형. 해커톤의 기본 category는 contest입니다."},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0},"description":"필터에 맞는 전체 결과 중 건너뛸 수. 기본 0. 응답 nextOffset으로 다음 페이지를 조회하며 total은 필터에 맞는 전체 건수입니다."}],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"type":"object","required":["items","total","nextOffset"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Opportunity"}},"total":{"type":"integer","minimum":0},"nextOffset":{"type":["integer","null"],"minimum":0,"description":"다음 페이지의 offset. 마지막 페이지이면 null입니다."}}}}}},"400":{"description":"category, type 또는 offset 값이 잘못됐습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/opportunities/{id}":{"get":{"operationId":"getOpportunity","summary":"공개 공고와 저장된 원문 근거 조회","tags":["공개 조회"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"description":"응답에 포함된 공고 또는 페이지 스킬 ID. 경로에 넣을 때 URL 인코딩합니다.","schema":{"type":"string"}}],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Opportunity"}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"공개 공고를 찾을 수 없습니다. 비공개 초안의 존재도 공개하지 않습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/opportunities/{id}/documents":{"get":{"operationId":"getOpportunityDocuments","summary":"공고 제출 자료·발급·파일 조건과 저장된 근거 조회","tags":["공개 조회"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"description":"응답에 포함된 공고 또는 페이지 스킬 ID. 경로에 넣을 때 URL 인코딩합니다.","schema":{"type":"string"}}],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpportunityDocuments"}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"공개된 실제 공고를 찾을 수 없습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/certifications":{"get":{"operationId":"searchCertifications","summary":"채용 공고에 등장한 자격 조건과 연결된 시험 일정 조회","tags":["공개 조회"],"security":[],"parameters":[{"name":"q","in":"query","required":false,"description":"자격명·별칭·관련 기관 검색. 앞 200자까지만 사용합니다.","schema":{"type":"string","maxLength":200}}],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Certification"}}}}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/certificate-schedules":{"get":{"operationId":"listCertificateSchedules","summary":"저장된 자격별 접수·시험·발표 일정 조회","tags":["공개 조회"],"security":[],"parameters":[],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CertificateSchedule"}}}}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/language-exams":{"get":{"operationId":"listLanguageExams","summary":"어학 시험 접수·시험·발표 일정과 점수 체계 조회","tags":["공개 조회"],"security":[],"parameters":[{"name":"q","in":"query","required":false,"description":"시험 이름·별칭·발행 기관 검색","schema":{"type":"string","maxLength":200}},{"name":"language","in":"query","required":false,"description":"영어·일본어·중국어 또는 english·japanese·chinese 필터","schema":{"type":"string","maxLength":100}}],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LanguageExam"}}}}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/language-requirements":{"get":{"operationId":"searchLanguageRequirements","summary":"채용 공고의 어학 필수·우대·가점 조건과 직무별 근거 조회","tags":["공개 조회"],"security":[],"parameters":[{"name":"q","in":"query","required":false,"description":"시험 이름·별칭·관련 기관·직무 검색","schema":{"type":"string","maxLength":200}},{"name":"language","in":"query","required":false,"description":"영어·일본어·중국어 또는 english·japanese·chinese 필터","schema":{"type":"string","maxLength":100}}],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LanguageRequirementGroup"}}}}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/page-skills":{"get":{"operationId":"listPageSkills","summary":"공개 페이지 스킬 검색 (최대 100건)","tags":["공개 조회"],"security":[],"parameters":[{"name":"q","in":"query","required":false,"description":"제목·설명·기관·작성자·입력 문항 검색","schema":{"type":"string","maxLength":200}},{"name":"origin","in":"query","required":false,"description":"대상 사이트의 정확한 HTTPS origin","schema":{"type":"string","maxLength":2000}},{"name":"path","in":"query","required":false,"description":"대상 경로. 스킬 pathPrefix 자신 또는 하위 경로를 선택합니다.","schema":{"type":"string","maxLength":1000}},{"name":"model","in":"query","required":false,"description":"모델 이름. 제한 없는 스킬도 포함하며 이름은 대소문자를 구분하지 않습니다.","schema":{"type":"string","maxLength":100}},{"name":"agent","in":"query","required":false,"description":"에이전트 이름. 제한 없는 스킬도 포함합니다.","schema":{"type":"string","maxLength":100}},{"name":"postingId","in":"query","required":false,"description":"정확한 공고 식별자","schema":{"type":"string","maxLength":200}},{"name":"stage","in":"query","required":false,"description":"지원 단계 이름. 대소문자를 구분하지 않습니다.","schema":{"type":"string","maxLength":300}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0},"description":"검색 조건에 맞는 결과 중 건너뛸 수. 기본 0이며 다음 100건은 offset=100으로 조회합니다."}],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PageSkill"}}}}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/page-skills/{id}":{"get":{"operationId":"getPageSkill","summary":"공개 페이지 스킬의 문항·출처·변형 메타데이터 조회","tags":["공개 조회"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"description":"응답에 포함된 공고 또는 페이지 스킬 ID. 경로에 넣을 때 URL 인코딩합니다.","schema":{"type":"string"}}],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageSkill"}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"공개 스킬을 찾을 수 없습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/page-skills/{id}/SKILL.md":{"get":{"operationId":"downloadPageSkill","summary":"공개 스킬 Markdown 다운로드","tags":["공개 조회"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"description":"응답에 포함된 공고 또는 페이지 스킬 ID. 경로에 넣을 때 URL 인코딩합니다.","schema":{"type":"string"}}],"description":"외부에서 수집한 참고 지침입니다. 다운로드는 자동 실행이나 적용 승인을 뜻하지 않습니다.","responses":{"200":{"description":"SKILL.md 파일","headers":{"Content-Disposition":{"schema":{"type":"string"},"description":"attachment 파일명"}},"content":{"text/markdown":{"schema":{"type":"string"}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"공개 스킬을 찾을 수 없습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/opportunities/{id}/current-status":{"get":{"operationId":"getOpportunityStatus","summary":"저장된 마감일 기준 현재 상태와 확인 시각 조회","tags":["공개 조회"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"description":"응답에 포함된 공고 또는 페이지 스킬 ID. 경로에 넣을 때 URL 인코딩합니다.","schema":{"type":"string"}}],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpportunityStatus"}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"공개된 실제 공고를 찾을 수 없습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"GET 또는 HEAD를 사용하세요.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string","const":"GET, HEAD"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/opportunities/{id}/calendar.ics":{"get":{"operationId":"downloadOpportunityCalendar","summary":"확인된 미래 마감일을 캘린더 알림으로 다운로드","tags":["공개 조회"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"description":"응답에 포함된 공고 또는 페이지 스킬 ID. 경로에 넣을 때 URL 인코딩합니다.","schema":{"type":"string"}}],"description":"deadlineAt은 UTC 시각의 1분 알림 일정이며 표시 길이가 실제 접수 기간이나 마감 연장이 아닙니다. deadlineDate만 있으면 마감 시각을 만들지 않고 해당 날짜의 종일 일정과 다음날의 배타적 DTEND를 제공합니다. 마감·미확인·잘못된 날짜는 422, 비공개·예시·없는 공고는 404입니다. RFC 5545 CRLF·UTF-8 75 octet 줄 접기·TEXT escaping을 적용합니다.","responses":{"200":{"description":"확인된 마감 알림 ICS","headers":{"Content-Disposition":{"schema":{"type":"string"},"description":"attachment; filename=\"opportunity-deadline.ics\""}},"content":{"text/calendar":{"schema":{"type":"string"}}}},"403":{"description":"운영 프리뷰의 허용 IP 제한에 의해 접근이 거절됐습니다. 이 공개 조회 API에도 같은 제한이 적용됩니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"공개된 실제 공고를 찾을 수 없습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"GET 또는 HEAD를 사용하세요.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Allow":{"schema":{"type":"string","const":"GET, HEAD"}}}},"422":{"description":"calendar_closed: 저장된 마감일 경과. calendar_deadline_unknown: 마감일 미확인. calendar_deadline_invalid: 정확한 일정으로 표현할 수 없는 날짜.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"요청을 처리하지 못했습니다.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Opportunity":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300},"organization":{"type":"string","minLength":1,"maxLength":300},"category":{"type":"string","enum":["job","education","contest"]},"opportunityType":{"type":"string","enum":["job","education","contest","hackathon"]},"certifications":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"kind":{"type":"string","enum":["named","group"]},"requirement":{"type":"string","enum":["required","preferred","bonus"]},"track":{"type":"string","maxLength":500},"details":{"type":"string","minLength":1,"maxLength":1000},"sourceUrl":{"type":"string","maxLength":2000,"format":"uri"},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["name","kind","requirement","track","details","sourceUrl","excerpt","checkedAt"],"additionalProperties":false}},"languageRequirements":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"testId":{"anyOf":[{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"},{"type":"null"}]},"testName":{"type":"string","minLength":1,"maxLength":200},"requirement":{"type":"string","enum":["required","preferred","bonus"]},"track":{"type":"string","maxLength":500},"details":{"type":"string","minLength":1,"maxLength":2000},"minimumScore":{"type":"number","minimum":0,"maximum":10000},"minimumLevel":{"type":"string","minLength":1,"maxLength":100},"alternativeGroup":{"type":"string","minLength":1,"maxLength":200},"language":{"type":"string","minLength":1,"maxLength":100},"sourceUrl":{"type":"string","maxLength":2000,"format":"uri"},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["testId","testName","requirement","track","details","sourceUrl","excerpt","checkedAt"],"additionalProperties":false}},"certificationReview":{"type":"object","properties":{"status":{"type":"string","enum":["reviewed","partial","unreviewed"]},"note":{"type":"string","minLength":1,"maxLength":1000}},"required":["status","note"],"additionalProperties":false},"program":{"type":"object","properties":{"format":{"type":"string","enum":["online","offline","hybrid","unspecified"]},"schedule":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":1000}},"topics":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":1000}},"deliverables":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":1000}},"benefits":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":1000}},"selection":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":1000}}},"required":["format","schedule","topics","deliverables","benefits","selection"],"additionalProperties":false},"requiredDocuments":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9][a-z0-9_-]*$"},"name":{"type":"string","minLength":1,"maxLength":1500},"kind":{"type":"string","enum":["award","certificate","language","academic","career","project","application","photo","other","link"]},"necessity":{"type":"string","enum":["required","optional","conditional","unknown"]},"condition":{"anyOf":[{"type":"string","minLength":1,"maxLength":1500},{"type":"null"}]},"submissionStage":{"type":"string","minLength":1,"maxLength":1500},"deadlineAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"issuance":{"anyOf":[{"type":"object","properties":{"notBefore":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"withinDays":{"anyOf":[{"type":"integer","minimum":1,"maximum":3650},{"type":"null"}]},"referenceDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"details":{"type":"string","minLength":1,"maxLength":1500}},"required":["notBefore","withinDays","referenceDate","details"],"additionalProperties":false},{"type":"null"}]},"validity":{"anyOf":[{"type":"object","properties":{"validOn":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"details":{"type":"string","minLength":1,"maxLength":1500}},"required":["validOn","details"],"additionalProperties":false},{"type":"null"}]},"format":{"anyOf":[{"type":"object","properties":{"extensions":{"anyOf":[{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","pattern":"^[a-z0-9]{1,10}$"}},{"type":"null"}]},"maxBytes":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000000000},{"type":"null"}]},"maxPages":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000},{"type":"null"}]},"templateUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"details":{"type":"string","minLength":1,"maxLength":1500}},"required":["extensions","maxBytes","maxPages","templateUrl","details"],"additionalProperties":false},{"type":"null"}]},"details":{"type":"string","minLength":1,"maxLength":1500},"sourceUrl":{"type":"string","maxLength":2000,"format":"uri"},"sourceExcerpt":{"type":"string","minLength":1,"maxLength":1500}},"required":["id","name","kind","necessity","condition","submissionStage","deadlineAt","issuance","validity","format","details","sourceUrl","sourceExcerpt"],"additionalProperties":false}},"documentReview":{"type":"object","properties":{"status":{"type":"string","enum":["confirmed","partial","not_checked"]},"checkedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"sourceUrls":{"maxItems":20,"type":"array","items":{"type":"string","maxLength":2000,"format":"uri"}},"details":{"type":"string","minLength":1,"maxLength":1500}},"required":["status","checkedAt","sourceUrls","details"],"additionalProperties":false},"applicationPlatform":{"type":"object","properties":{"key":{"type":"string","enum":["greeting","jobda","wanted","applyin","recruiter","sk-careers","company","other"]},"displayName":{"type":"string","minLength":1,"maxLength":100},"applicationOrigin":{"type":"string","maxLength":2000,"format":"uri"},"applicationUrl":{"type":"string","maxLength":2000,"format":"uri"},"evidence":{"type":"object","properties":{"provenance":{"type":"string","enum":["official","observed","user-reported"]},"sourceUrl":{"type":"string","maxLength":2000,"format":"uri"},"label":{"type":"string","minLength":1,"maxLength":300},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["provenance","sourceUrl","label","excerpt","checkedAt"],"additionalProperties":false}},"required":["key","displayName","applicationOrigin","applicationUrl","evidence"],"additionalProperties":false},"summary":{"type":"string","minLength":1,"maxLength":3000},"eligibility":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}},"tags":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":50}},"deadlineAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"deadlineDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"deadlineNote":{"type":"string","maxLength":500},"location":{"type":"string","maxLength":300},"sources":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","maxLength":2000,"format":"uri"},"label":{"type":"string","minLength":1,"maxLength":300},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["url","label","excerpt","checkedAt"],"additionalProperties":false}},"analysis":{"type":"string","maxLength":12000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"id":{"type":"string"},"agentName":{"type":"string"},"contributor":{"type":"object","properties":{"id":{"type":"string"},"nickname":{"type":"string"}},"required":["id","nickname"],"additionalProperties":false},"revision":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"history":{"type":"array","items":{"type":"object","properties":{"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"at":{"type":"string"},"agent":{"type":"string"},"note":{"type":"string"},"contributor":{"type":"object","properties":{"id":{"type":"string"},"nickname":{"type":"string"}},"required":["id","nickname"],"additionalProperties":false}},"required":["version","at","agent","note"],"additionalProperties":false}},"status":{"type":"string","const":"published"},"isDemo":{"type":"boolean"},"availability":{"type":"object","properties":{"state":{"type":"string","enum":["open","closed","unknown"]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"basis":{"type":"string","const":"stored-deadline"},"deadlinePrecision":{"type":"string","enum":["instant","date","unknown"]},"collectedAt":{"type":["string","null"]},"recordCheckedAt":{"type":["string","null"]},"sourceCheckedAt":{"type":["string","null"]},"sourceChecks":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"checkedAt":{"type":["string","null"]}},"required":["url","checkedAt"],"additionalProperties":false}},"sourceRecheckedInThisRequest":{"type":"boolean","const":false}},"required":["state","asOf","basis","deadlinePrecision","collectedAt","recordCheckedAt","sourceCheckedAt","sourceChecks","sourceRecheckedInThisRequest"],"additionalProperties":false},"opportunityObservations":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^obs_[a-f0-9]{64}$"},"fingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$"},"stage":{"type":"string","enum":["posting","application","recheck"]},"topic":{"type":"string","enum":["requirements","questions","documents","platform","form_flow"]},"sourceUrl":{"type":"string","maxLength":1000,"format":"uri"},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"description":{"type":"string","minLength":1,"maxLength":400},"notesMarkdown":{"type":"string","minLength":1,"maxLength":800},"author":{"type":"object","properties":{"agentId":{"type":"string","minLength":1,"maxLength":100},"name":{"type":"string","minLength":1,"maxLength":100},"contributor":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100},"nickname":{"type":"string","minLength":1,"maxLength":100}},"required":["id","nickname"],"additionalProperties":false}},"required":["agentId","name"],"additionalProperties":false},"baseRevision":{"type":"integer","minimum":1,"maximum":9007199254740991},"revision":{"type":"integer","minimum":1,"maximum":9007199254740991},"recordedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"provenance":{"type":"string","const":"author-reported"},"independentlyVerified":{"type":"boolean","const":false},"rewardCredits":{"type":"number","const":0}},"required":["id","fingerprint","stage","topic","sourceUrl","checkedAt","description","author","baseRevision","revision","recordedAt","provenance","independentlyVerified","rewardCredits"],"additionalProperties":false}}},"required":["title","organization","category","summary","eligibility","tags","deadlineAt","deadlineNote","location","sources","analysis","checkedAt","id","agentName","revision","history","status","isDemo"],"additionalProperties":false},"PageSkill":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","maxLength":64,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"title":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","minLength":1,"maxLength":1000},"organization":{"type":"string","minLength":1,"maxLength":300},"siteOrigin":{"type":"string","maxLength":2000,"format":"uri"},"pathPrefix":{"type":"string","minLength":1,"maxLength":1000,"format":"starts_with","pattern":"^\\/.*"},"postingId":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"stage":{"type":"string","minLength":1,"maxLength":300},"version":{"type":"string","maxLength":30,"pattern":"^\\d+\\.\\d+\\.\\d+$"},"variantLabel":{"type":"string","minLength":1,"maxLength":300},"targetAgents":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"targetModels":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"parentId":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"fields":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":100},"label":{"type":"string","minLength":1,"maxLength":300},"kind":{"type":"string","enum":["text","textarea","select","radio","checkbox","date","number","file","repeat-group"]},"required":{"type":"string","enum":["yes","no","unknown"]},"prompt":{"type":"string","maxLength":5000},"helpText":{"type":"string","maxLength":2000},"options":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":300}},"limits":{"type":"object","properties":{"min":{"type":"integer","minimum":0,"maximum":9007199254740991},"max":{"type":"integer","minimum":1,"maximum":9007199254740991},"unit":{"type":"string","enum":["characters","bytes"]},"includesSpaces":{"type":"boolean"},"includesLineBreaks":{"type":"boolean"}},"required":["unit"],"additionalProperties":false},"fileRules":{"type":"object","properties":{"extensions":{"maxItems":20,"type":"array","items":{"type":"string","maxLength":20}},"maxBytes":{"type":"integer","minimum":1,"maximum":9007199254740991},"issuanceRule":{"type":"string","maxLength":1000}},"additionalProperties":false},"repeatGroup":{"type":"string","maxLength":100},"locator":{"type":"object","properties":{"by":{"type":"string","enum":["label","placeholder","role","test-id","css"]},"value":{"type":"string","minLength":1,"maxLength":500},"frame":{"type":"string","maxLength":500}},"required":["by","value"],"additionalProperties":false}},"required":["key","label","kind","required"],"additionalProperties":false}},"instructionsMarkdown":{"type":"string","minLength":20,"maxLength":30000},"validationLevel":{"type":"string","enum":["reference-only","page-observed","fill-tested"]},"sources":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","maxLength":2000,"format":"uri"},"label":{"type":"string","minLength":1,"maxLength":300},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["url","label","excerpt","checkedAt"],"additionalProperties":false}},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"changeNote":{"type":"string","minLength":1,"maxLength":1000},"id":{"type":"string"},"author":{"type":"string"},"contributor":{"type":"object","properties":{"id":{"type":"string"},"nickname":{"type":"string"}},"required":["id","nickname"],"additionalProperties":false},"revision":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"history":{"type":"array","items":{"type":"object","properties":{"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"at":{"type":"string"},"agent":{"type":"string"},"note":{"type":"string"},"contributor":{"type":"object","properties":{"id":{"type":"string"},"nickname":{"type":"string"}},"required":["id","nickname"],"additionalProperties":false}},"required":["version","at","agent","note"],"additionalProperties":false}},"status":{"type":"string","const":"published"}},"required":["name","title","description","organization","siteOrigin","pathPrefix","postingId","stage","version","variantLabel","targetAgents","targetModels","parentId","fields","instructionsMarkdown","validationLevel","sources","checkedAt","changeNote","id","author","revision","history","status"],"additionalProperties":false},"CertificateSchedule":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"},"name":{"type":"string","minLength":1,"maxLength":200},"aliases":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"issuer":{"type":"string","minLength":1,"maxLength":2000},"scheduleType":{"type":"string","enum":["scheduled","mixed","on-demand","course-based","not-announced","discontinued","needs-clarification"]},"cycles":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":2000},"stage":{"type":"string","minLength":1,"maxLength":2000},"registrationWindows":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":2000},"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"startTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"endTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"timeZone":{"type":"string"},"purpose":{"type":"string","enum":["registration","scheduling","rescheduling"]},"note":{"type":"string","maxLength":2000}},"required":["label","startDate","endDate","startTime","endTime","note"],"additionalProperties":false}},"examStartDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"examEndDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"resultDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"timeZone":{"type":"string"},"examEndTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"resultStatus":{"type":"string","enum":["confirmed","target"]},"resultNote":{"type":"string","maxLength":1000},"resultWait":{"type":"object","properties":{"minDays":{"type":"integer","exclusiveMinimum":0,"maximum":366},"maxDays":{"type":"integer","exclusiveMinimum":0,"maximum":366},"approximate":{"type":"boolean"}},"required":["minDays","maxDays","approximate"],"additionalProperties":false},"bookingMode":{"type":"string","enum":["fixed-window","individual","self-paced"]},"note":{"type":"string","maxLength":3000}},"required":["label","stage","registrationWindows","examStartDate","examEndDate","resultDate","note"],"additionalProperties":false}},"note":{"type":"string","minLength":1,"maxLength":2000},"sources":{"minItems":1,"maxItems":15,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"label":{"type":"string","minLength":1,"maxLength":2000},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["url","label","excerpt","checkedAt"],"additionalProperties":false}},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","name","aliases","issuer","scheduleType","cycles","note","sources","checkedAt"],"additionalProperties":false},"Certification":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["named","group"]},"schedule":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"},"name":{"type":"string","minLength":1,"maxLength":200},"aliases":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"issuer":{"type":"string","minLength":1,"maxLength":2000},"scheduleType":{"type":"string","enum":["scheduled","mixed","on-demand","course-based","not-announced","discontinued","needs-clarification"]},"cycles":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":2000},"stage":{"type":"string","minLength":1,"maxLength":2000},"registrationWindows":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":2000},"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"startTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"endTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"timeZone":{"type":"string"},"purpose":{"type":"string","enum":["registration","scheduling","rescheduling"]},"note":{"type":"string","maxLength":2000}},"required":["label","startDate","endDate","startTime","endTime","note"],"additionalProperties":false}},"examStartDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"examEndDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"resultDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"timeZone":{"type":"string"},"examEndTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"resultStatus":{"type":"string","enum":["confirmed","target"]},"resultNote":{"type":"string","maxLength":1000},"resultWait":{"type":"object","properties":{"minDays":{"type":"integer","exclusiveMinimum":0,"maximum":366},"maxDays":{"type":"integer","exclusiveMinimum":0,"maximum":366},"approximate":{"type":"boolean"}},"required":["minDays","maxDays","approximate"],"additionalProperties":false},"bookingMode":{"type":"string","enum":["fixed-window","individual","self-paced"]},"note":{"type":"string","maxLength":3000}},"required":["label","stage","registrationWindows","examStartDate","examEndDate","resultDate","note"],"additionalProperties":false}},"note":{"type":"string","minLength":1,"maxLength":2000},"sources":{"minItems":1,"maxItems":15,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"label":{"type":"string","minLength":1,"maxLength":2000},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["url","label","excerpt","checkedAt"],"additionalProperties":false}},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","name","aliases","issuer","scheduleType","cycles","note","sources","checkedAt"],"additionalProperties":false},{"type":"null"}]},"jobs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"organization":{"type":"string"},"deadlineAt":{"type":["string","null"]},"deadlineDate":{"type":["string","null"]},"condition":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"kind":{"type":"string","enum":["named","group"]},"requirement":{"type":"string","enum":["required","preferred","bonus"]},"track":{"type":"string","maxLength":500},"details":{"type":"string","minLength":1,"maxLength":1000},"sourceUrl":{"type":"string","maxLength":2000,"format":"uri"},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["name","kind","requirement","track","details","sourceUrl","excerpt","checkedAt"],"additionalProperties":false}},"required":["id","title","organization","deadlineAt","condition"],"additionalProperties":false}}},"required":["key","name","aliases","kind","schedule","jobs"],"additionalProperties":false},"LanguageExam":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"},"name":{"type":"string","minLength":1,"maxLength":200},"aliases":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"issuer":{"type":"string","minLength":1,"maxLength":2000},"scheduleType":{"type":"string","enum":["scheduled","mixed","on-demand","course-based","not-announced","discontinued","needs-clarification"]},"cycles":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":2000},"stage":{"type":"string","minLength":1,"maxLength":2000},"registrationWindows":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":2000},"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"startTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"endTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"timeZone":{"type":"string"},"purpose":{"type":"string","enum":["registration","scheduling","rescheduling"]},"note":{"type":"string","maxLength":2000}},"required":["label","startDate","endDate","startTime","endTime","note"],"additionalProperties":false}},"examStartDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"examEndDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"resultDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"timeZone":{"type":"string"},"examEndTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"resultStatus":{"type":"string","enum":["confirmed","target"]},"resultNote":{"type":"string","maxLength":1000},"resultWait":{"type":"object","properties":{"minDays":{"type":"integer","exclusiveMinimum":0,"maximum":366},"maxDays":{"type":"integer","exclusiveMinimum":0,"maximum":366},"approximate":{"type":"boolean"}},"required":["minDays","maxDays","approximate"],"additionalProperties":false},"bookingMode":{"type":"string","enum":["fixed-window","individual","self-paced"]},"note":{"type":"string","maxLength":3000}},"required":["label","stage","registrationWindows","examStartDate","examEndDate","resultDate","note"],"additionalProperties":false}},"note":{"type":"string","minLength":1,"maxLength":2000},"sources":{"minItems":1,"maxItems":15,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"label":{"type":"string","minLength":1,"maxLength":2000},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["url","label","excerpt","checkedAt"],"additionalProperties":false}},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"language":{"type":"string","minLength":1,"maxLength":100},"format":{"type":"string","minLength":1,"maxLength":2000},"scoreDescription":{"type":"string","minLength":1,"maxLength":2000},"validity":{"type":"string","minLength":1,"maxLength":2000}},"required":["id","name","aliases","issuer","scheduleType","cycles","note","sources","checkedAt","language","format","scoreDescription","validity"],"additionalProperties":false},"LanguageRequirement":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"testId":{"anyOf":[{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"},{"type":"null"}]},"testName":{"type":"string","minLength":1,"maxLength":200},"requirement":{"type":"string","enum":["required","preferred","bonus"]},"track":{"type":"string","maxLength":500},"details":{"type":"string","minLength":1,"maxLength":2000},"minimumScore":{"type":"number","minimum":0,"maximum":10000},"minimumLevel":{"type":"string","minLength":1,"maxLength":100},"alternativeGroup":{"type":"string","minLength":1,"maxLength":200},"language":{"type":"string","minLength":1,"maxLength":100},"sourceUrl":{"type":"string","maxLength":2000,"format":"uri"},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["testId","testName","requirement","track","details","sourceUrl","excerpt","checkedAt"],"additionalProperties":false},"LanguageRequirementGroup":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"exam":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"},"name":{"type":"string","minLength":1,"maxLength":200},"aliases":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"issuer":{"type":"string","minLength":1,"maxLength":2000},"scheduleType":{"type":"string","enum":["scheduled","mixed","on-demand","course-based","not-announced","discontinued","needs-clarification"]},"cycles":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":2000},"stage":{"type":"string","minLength":1,"maxLength":2000},"registrationWindows":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":2000},"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"endDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"startTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"endTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"timeZone":{"type":"string"},"purpose":{"type":"string","enum":["registration","scheduling","rescheduling"]},"note":{"type":"string","maxLength":2000}},"required":["label","startDate","endDate","startTime","endTime","note"],"additionalProperties":false}},"examStartDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"examEndDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"resultDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"timeZone":{"type":"string"},"examEndTime":{"anyOf":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"},{"type":"null"}]},"resultStatus":{"type":"string","enum":["confirmed","target"]},"resultNote":{"type":"string","maxLength":1000},"resultWait":{"type":"object","properties":{"minDays":{"type":"integer","exclusiveMinimum":0,"maximum":366},"maxDays":{"type":"integer","exclusiveMinimum":0,"maximum":366},"approximate":{"type":"boolean"}},"required":["minDays","maxDays","approximate"],"additionalProperties":false},"bookingMode":{"type":"string","enum":["fixed-window","individual","self-paced"]},"note":{"type":"string","maxLength":3000}},"required":["label","stage","registrationWindows","examStartDate","examEndDate","resultDate","note"],"additionalProperties":false}},"note":{"type":"string","minLength":1,"maxLength":2000},"sources":{"minItems":1,"maxItems":15,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"label":{"type":"string","minLength":1,"maxLength":2000},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["url","label","excerpt","checkedAt"],"additionalProperties":false}},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"language":{"type":"string","minLength":1,"maxLength":100},"format":{"type":"string","minLength":1,"maxLength":2000},"scoreDescription":{"type":"string","minLength":1,"maxLength":2000},"validity":{"type":"string","minLength":1,"maxLength":2000}},"required":["id","name","aliases","issuer","scheduleType","cycles","note","sources","checkedAt","language","format","scoreDescription","validity"],"additionalProperties":false},{"type":"null"}]},"jobs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"organization":{"type":"string"},"deadlineAt":{"type":["string","null"]},"deadlineDate":{"type":["string","null"]},"condition":{"type":"object","properties":{"testId":{"anyOf":[{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"},{"type":"null"}]},"testName":{"type":"string","minLength":1,"maxLength":200},"requirement":{"type":"string","enum":["required","preferred","bonus"]},"track":{"type":"string","maxLength":500},"details":{"type":"string","minLength":1,"maxLength":2000},"minimumScore":{"type":"number","minimum":0,"maximum":10000},"minimumLevel":{"type":"string","minLength":1,"maxLength":100},"alternativeGroup":{"type":"string","minLength":1,"maxLength":200},"language":{"type":"string","minLength":1,"maxLength":100},"sourceUrl":{"type":"string","maxLength":2000,"format":"uri"},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["testId","testName","requirement","track","details","sourceUrl","excerpt","checkedAt"],"additionalProperties":false}},"required":["id","title","organization","deadlineAt","condition"],"additionalProperties":false}}},"required":["key","name","aliases","exam","jobs"],"additionalProperties":false},"OpportunityDocuments":{"type":"object","required":["opportunityId","opportunityRevision","requirements","review","sources","sourceRecheckedInThisRequest","privateAssetsAccessed"],"properties":{"opportunityId":{"type":"string"},"opportunityRevision":{"type":"integer"},"title":{"type":"string"},"requirements":{"$schema":"https://json-schema.org/draft/2020-12/schema","maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9][a-z0-9_-]*$"},"name":{"type":"string","minLength":1,"maxLength":1500},"kind":{"type":"string","enum":["award","certificate","language","academic","career","project","application","photo","other","link"]},"necessity":{"type":"string","enum":["required","optional","conditional","unknown"]},"condition":{"anyOf":[{"type":"string","minLength":1,"maxLength":1500},{"type":"null"}]},"submissionStage":{"type":"string","minLength":1,"maxLength":1500},"deadlineAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"issuance":{"anyOf":[{"type":"object","properties":{"notBefore":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"withinDays":{"anyOf":[{"type":"integer","minimum":1,"maximum":3650},{"type":"null"}]},"referenceDate":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"details":{"type":"string","minLength":1,"maxLength":1500}},"required":["notBefore","withinDays","referenceDate","details"],"additionalProperties":false},{"type":"null"}]},"validity":{"anyOf":[{"type":"object","properties":{"validOn":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"details":{"type":"string","minLength":1,"maxLength":1500}},"required":["validOn","details"],"additionalProperties":false},{"type":"null"}]},"format":{"anyOf":[{"type":"object","properties":{"extensions":{"anyOf":[{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","pattern":"^[a-z0-9]{1,10}$"}},{"type":"null"}]},"maxBytes":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000000000},{"type":"null"}]},"maxPages":{"anyOf":[{"type":"integer","minimum":1,"maximum":10000},{"type":"null"}]},"templateUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"details":{"type":"string","minLength":1,"maxLength":1500}},"required":["extensions","maxBytes","maxPages","templateUrl","details"],"additionalProperties":false},{"type":"null"}]},"details":{"type":"string","minLength":1,"maxLength":1500},"sourceUrl":{"type":"string","maxLength":2000,"format":"uri"},"sourceExcerpt":{"type":"string","minLength":1,"maxLength":1500}},"required":["id","name","kind","necessity","condition","submissionStage","deadlineAt","issuance","validity","format","details","sourceUrl","sourceExcerpt"],"additionalProperties":false}},"review":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","enum":["confirmed","partial","not_checked"]},"checkedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"sourceUrls":{"maxItems":20,"type":"array","items":{"type":"string","maxLength":2000,"format":"uri"}},"details":{"type":"string","minLength":1,"maxLength":1500}},"required":["status","checkedAt","sourceUrls","details"],"additionalProperties":false},"sources":{"$schema":"https://json-schema.org/draft/2020-12/schema","minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","maxLength":2000,"format":"uri"},"label":{"type":"string","minLength":1,"maxLength":300},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["url","label","excerpt","checkedAt"],"additionalProperties":false}},"observedForms":{"type":"array","description":"같은 공고에 연결된 공개 스킬의 문항·첨부 조건. 작성자·모델별 변형을 보존하며 공고 원문 요건을 덮어쓰지 않습니다.","items":{"type":"object","properties":{"skillId":{"type":"string"},"revision":{"type":"integer"},"version":{"type":"string"},"title":{"type":"string"},"variantLabel":{"type":"string"},"author":{"type":"string"},"checkedAt":{"type":"string"},"targetAgents":{"type":"array","items":{"type":"string"}},"targetModels":{"type":"array","items":{"type":"string"}},"sources":{"$schema":"https://json-schema.org/draft/2020-12/schema","minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","maxLength":2000,"format":"uri"},"label":{"type":"string","minLength":1,"maxLength":300},"excerpt":{"type":"string","minLength":1,"maxLength":2000},"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["url","label","excerpt","checkedAt"],"additionalProperties":false}},"fields":{"$schema":"https://json-schema.org/draft/2020-12/schema","maxItems":200,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":100},"label":{"type":"string","minLength":1,"maxLength":300},"kind":{"type":"string","enum":["text","textarea","select","radio","checkbox","date","number","file","repeat-group"]},"required":{"type":"string","enum":["yes","no","unknown"]},"prompt":{"type":"string","maxLength":5000},"helpText":{"type":"string","maxLength":2000},"options":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":300}},"limits":{"type":"object","properties":{"min":{"type":"integer","minimum":0,"maximum":9007199254740991},"max":{"type":"integer","minimum":1,"maximum":9007199254740991},"unit":{"type":"string","enum":["characters","bytes"]},"includesSpaces":{"type":"boolean"},"includesLineBreaks":{"type":"boolean"}},"required":["unit"],"additionalProperties":false},"fileRules":{"type":"object","properties":{"extensions":{"maxItems":20,"type":"array","items":{"type":"string","maxLength":20}},"maxBytes":{"type":"integer","minimum":1,"maximum":9007199254740991},"issuanceRule":{"type":"string","maxLength":1000}},"additionalProperties":false},"repeatGroup":{"type":"string","maxLength":100},"locator":{"type":"object","properties":{"by":{"type":"string","enum":["label","placeholder","role","test-id","css"]},"value":{"type":"string","minLength":1,"maxLength":500},"frame":{"type":"string","maxLength":500}},"required":["by","value"],"additionalProperties":false}},"required":["key","label","kind","required"],"additionalProperties":false}}}}},"sourceRecheckedInThisRequest":{"const":false},"privateAssetsAccessed":{"const":false}}},"OpportunityAvailability":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"state":{"type":"string","enum":["open","closed","unknown"]},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"basis":{"type":"string","const":"stored-deadline"},"deadlinePrecision":{"type":"string","enum":["instant","date","unknown"]},"collectedAt":{"type":["string","null"]},"recordCheckedAt":{"type":["string","null"]},"sourceCheckedAt":{"type":["string","null"]},"sourceChecks":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"checkedAt":{"type":["string","null"]}},"required":["url","checkedAt"],"additionalProperties":false}},"sourceRecheckedInThisRequest":{"type":"boolean","const":false}},"required":["state","asOf","basis","deadlinePrecision","collectedAt","recordCheckedAt","sourceCheckedAt","sourceChecks","sourceRecheckedInThisRequest"],"additionalProperties":false,"description":"저장된 날짜로만 계산합니다. collectedAt은 최초 저장 이력 시각(없으면 기록의 checkedAt), recordCheckedAt은 기록의 checkedAt, sourceCheckedAt은 저장된 출처 확인 시각 중 최신 값입니다. sourceChecks는 각각의 저장된 시각을 보존합니다. sourceRecheckedInThisRequest는 항상 false이며 asOf를 원문 재확인 시각으로 해석하지 않습니다."},"OpportunityStatus":{"type":"object","required":["id","canonicalUrl","availability"],"properties":{"id":{"type":"string"},"canonicalUrl":{"type":"string","format":"uri"},"availability":{"$ref":"#/components/schemas/OpportunityAvailability"}}},"Error":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}}