{"openapi":"3.0.0","info":{"title":"Workfuse Public API","version":"0.0.115-api"},"servers":[{"url":"https://api.workfuse.com/public/v1","description":"Workfuse Public API"}],"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","description":"A API key da instituição (`wf_...`), ou o token de uma conta de serviço (`wfs_...`) com a superfície API pública e a permissão do módulo no papel. Token inválido, expirado ou revogado: 401; sem a permissão: 403; acima de 120 pedidos por minuto: 429 com `Retry-After`."}},"schemas":{"ErrorResponse":{"type":"object","properties":{"errorCode":{"type":"string"},"message":{"type":"string"}},"required":["errorCode","message"]},"AdmissionInstitution":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"website":{"type":"string","nullable":true},"logoUrl":{"type":"string","nullable":true},"primaryColor":{"type":"string","nullable":true}},"required":["name","slug","website","logoUrl","primaryColor"]},"AdmissionResolvedLink":{"type":"object","properties":{"destination":{"type":"string"},"refusal":{"type":"string","nullable":true,"enum":["NOT_FOUND","INACTIVE","EXPIRED",null]},"origin":{"type":"object","nullable":true,"properties":{"captureLinkId":{"type":"string","nullable":true},"admissionNoticeId":{"type":"string","nullable":true},"captureOriginId":{"type":"string"},"campusId":{"type":"string","nullable":true},"campaignCode":{"type":"string","nullable":true}},"required":["captureLinkId","admissionNoticeId","captureOriginId","campusId","campaignCode"]}},"required":["destination","refusal","origin"]},"AdmissionNoticeShowcase":{"type":"object","properties":{"applicationFeeAmount":{"type":"number","nullable":true},"offers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"courseId":{"type":"string"},"campusId":{"type":"string"},"courseName":{"type":"string","nullable":true},"courseDegree":{"type":"string","nullable":true},"courseModality":{"type":"string","nullable":true},"campusName":{"type":"string","nullable":true},"campusCity":{"type":"string","nullable":true},"campusState":{"type":"string","nullable":true}},"required":["id","courseId","campusId","courseName","courseDegree","courseModality","campusName","campusCity","campusState"]}},"journeys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"entryFormName":{"type":"string"},"evaluationType":{"type":"string","enum":["EXAM_SCORE","ENEM_SCORE","DOCUMENT_REVIEW","EXTERNAL_CALL","AUTOMATIC"]},"examRequired":{"type":"boolean"},"chargesFee":{"type":"boolean"},"examPeriodEnded":{"type":"boolean"}},"required":["id","entryFormName","evaluationType","examRequired","chargesFee","examPeriodEnded"]}}},"required":["applicationFeeAmount","offers","journeys"]},"AdmissionApplicationForm":{"type":"object","properties":{"fields":{"type":"array","items":{"type":"object","properties":{"fieldKey":{"type":"string"},"requirement":{"type":"string"},"status":{"type":"string","enum":["FIXED","REGULATORY","CONFIGURABLE"]},"category":{"type":"string","enum":["PERSONAL","ACADEMIC"]},"requiredAt":{"type":"string","enum":["APPLICATION","ENROLLMENT"]},"requiredWhenAnswered":{"type":"string","nullable":true}},"required":["fieldKey","requirement","status","category","requiredAt","requiredWhenAnswered"]}},"enrollmentDocuments":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":"string"},"timing":{"type":"string","enum":["AT_ENROLLMENT","AFTER_ENROLLMENT"]}},"required":["kind","label","timing"]}}},"required":["fields","enrollmentDocuments"]},"AdmissionPostalAddress":{"type":"object","properties":{"street":{"type":"string"},"district":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"}},"required":["street","district","city","state"]},"AdmissionCatalogCourse":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"area":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"degree":{"type":"string","nullable":true},"modalities":{"type":"array","items":{"type":"string"}},"curriculums":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"modality":{"type":"string"},"workloadHours":{"type":"integer","nullable":true},"durationTerms":{"type":"integer","nullable":true},"termUnit":{"type":"string","nullable":true}},"required":["id","modality","workloadHours","durationTerms","termUnit"]}},"hasOpenNotice":{"type":"boolean"}},"required":["id","name","area","description","degree","modalities","curriculums","hasOpenNotice"]},"AdmissionPublicCourse":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"area":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"degree":{"type":"string","nullable":true},"blocks":{"type":"array","items":{"type":"object","properties":{"curriculumId":{"type":"string"},"modality":{"type":"string"},"workloadHours":{"type":"integer","nullable":true},"durationTerms":{"type":"integer","nullable":true},"termUnit":{"type":"string","nullable":true},"admissionNoticeId":{"type":"string","nullable":true}},"required":["curriculumId","modality","workloadHours","durationTerms","termUnit","admissionNoticeId"]}}},"required":["id","name","area","description","degree","blocks"]},"AdmissionPublicCurriculum":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"string"},"modality":{"type":"string"},"courseId":{"type":"string"},"courseName":{"type":"string"},"terms":{"type":"array","items":{"type":"object","properties":{"term":{"type":"integer"},"termLabel":{"type":"string"},"disciplines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string","nullable":true},"module":{"type":"string","nullable":true},"workloadHours":{"type":"integer","nullable":true}},"required":["id","name","code","module","workloadHours"]}}},"required":["term","termLabel","disciplines"]}}},"required":["id","version","modality","courseId","courseName","terms"]},"AdmissionCandidacy":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"admissionNoticeId":{"type":"string"},"admissionOfferId":{"type":"string"},"admissionNoticeEntryFormId":{"type":"string","nullable":true},"feePolicy":{"type":"string","nullable":true},"feeAmount":{"type":"number","nullable":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","status","admissionNoticeId","admissionOfferId","admissionNoticeEntryFormId","feePolicy","feeAmount","createdAt","updatedAt"]},"AdmissionCandidacyPartner":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"admissionNoticeId":{"type":"string"},"admissionNoticeEntryFormId":{"type":"string","nullable":true},"courseName":{"type":"string","nullable":true},"secondChoiceCourseName":{"type":"string","nullable":true},"campusName":{"type":"string","nullable":true},"campusCity":{"type":"string","nullable":true},"journeyName":{"type":"string","nullable":true},"examRequired":{"type":"boolean"},"journey":{"type":"array","items":{"$ref":"#/components/schemas/AdmissionJourneyStep"}},"evaluationSituation":{"$ref":"#/components/schemas/AdmissionEvaluationSituation"},"feePolicy":{"type":"string","nullable":true},"feeAmount":{"type":"number","nullable":true},"candidateName":{"type":"string"},"candidateEmail":{"type":"string"},"candidatePhone":{"type":"string"},"candidateBirthDate":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"timeline":{"type":"array","items":{"type":"object","properties":{"fromStatus":{"type":"string","nullable":true},"toStatus":{"type":"string"},"actorKind":{"type":"string"},"reason":{"type":"string","nullable":true},"at":{"type":"string"}},"required":["fromStatus","toStatus","actorKind","reason","at"]}},"candidateCpf":{"type":"string"},"admissionOfferId":{"type":"string"},"noticeName":{"type":"string","nullable":true}},"required":["id","status","admissionNoticeId","admissionNoticeEntryFormId","courseName","secondChoiceCourseName","campusName","campusCity","journeyName","examRequired","journey","evaluationSituation","feePolicy","feeAmount","candidateName","candidateEmail","candidatePhone","candidateBirthDate","createdAt","updatedAt","timeline","candidateCpf","admissionOfferId","noticeName"]},"AdmissionJourneyStep":{"type":"object","properties":{"kind":{"type":"string","enum":["REGISTRATION","EVALUATION","DOCUMENTS","PAYMENT","CALL","ENROLLMENT"]},"position":{"type":"integer"},"state":{"type":"string","enum":["DONE","CURRENT","FUTURE","HALTED"]},"owner":{"type":"string","enum":["CANDIDATE","INSTITUTION"]},"exam":{"type":"object","nullable":true,"properties":{"url":{"type":"string","nullable":true},"opensAt":{"type":"string","nullable":true},"closesAt":{"type":"string","nullable":true}},"required":["url","opensAt","closesAt"]},"evaluation":{"type":"object","nullable":true,"properties":{"score":{"type":"number","nullable":true},"source":{"type":"string","nullable":true,"enum":["INTEGRATION","MANUAL","ENEM",null]},"manualScoredAt":{"type":"string","nullable":true},"cutoffScore":{"type":"number","nullable":true},"scale":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"}},"required":["min","max"]},"shortfall":{"type":"number","nullable":true},"result":{"type":"string","enum":["APPROVED","REJECTED","EXPIRED","BELOW_CUTOFF","PENDING"]},"attemptsUsed":{"type":"integer"},"attemptLimit":{"type":"integer","nullable":true},"attemptsRemaining":{"type":"integer","nullable":true},"decidedBy":{"type":"string","nullable":true,"enum":["CUTOFF_MET","ENEM_BELOW_CUTOFF","ATTEMPTS_EXHAUSTED","EXAM_WINDOW_CLOSED","DEADLINE_PASSED",null]},"decidedAt":{"type":"string","nullable":true},"examPeriodEnded":{"type":"boolean"}},"required":["score","source","manualScoredAt","cutoffScore","scale","shortfall","result","attemptsUsed","attemptLimit","attemptsRemaining","decidedBy","decidedAt","examPeriodEnded"]},"document":{"$ref":"#/components/schemas/AdmissionJourneyStepDocument"}},"required":["kind","position","state","owner","exam","evaluation","document"]},"AdmissionJourneyStepDocument":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["UNDERGRADUATE_TRANSCRIPT","UNDERGRADUATE_DIPLOMA"]},"situation":{"type":"string","nullable":true,"enum":["IN_REVIEW","APPROVED","RESUBMISSION_REQUESTED","REJECTED",null]},"fileName":{"type":"string","nullable":true},"uploadedAt":{"type":"string","nullable":true,"format":"date-time"},"note":{"type":"string","nullable":true},"illegible":{"type":"boolean"},"resubmissionRequestedAt":{"type":"string","nullable":true,"format":"date-time"},"uploadOpen":{"type":"boolean","description":"Só a sessão do próprio candidato envia: pela chave do parceiro e na sessão personificada, sempre `false`."},"noticeDueOn":{"type":"string","nullable":true},"dueOn":{"type":"string","nullable":true}},"required":["kind","situation","fileName","uploadedAt","note","illegible","resubmissionRequestedAt","uploadOpen","noticeDueOn","dueOn"]},"AdmissionEvaluationSituation":{"type":"object","nullable":true,"properties":{"code":{"type":"string","enum":["AWAITING_UPLOAD","IN_REVIEW","RESUBMISSION_REQUESTED"]},"kind":{"type":"string","enum":["UNDERGRADUATE_TRANSCRIPT","UNDERGRADUATE_DIPLOMA"]},"note":{"type":"string","nullable":true},"illegible":{"type":"boolean"},"dueOn":{"type":"string","nullable":true}},"required":["code","kind","note","illegible","dueOn"]},"AdmissionExamAttemptResult":{"type":"object","properties":{"applicationId":{"type":"string"},"outcome":{"type":"string","enum":["APPLIED","DUPLICATE","DISCARDED"]},"status":{"type":"string","enum":["DRAFT","SUBMITTED","FEE_PENDING","UNDER_REVIEW","DOCUMENTS_PENDING","APPROVED","CALLED","SENT_TO_ENROLLMENT","ENROLLED","REJECTED","ABSENT","CANCELLED","EXPIRED"]},"attemptsUsed":{"type":"integer"},"attemptLimit":{"type":"integer","nullable":true}},"required":["applicationId","outcome","status","attemptsUsed","attemptLimit"]},"AdmissionExamAttemptInput":{"type":"object","properties":{"attemptNumber":{"type":"integer","minimum":1,"maximum":2147483647},"score":{"type":"number"}},"required":["attemptNumber","score"]},"AdmissionExamCandidate":{"type":"object","properties":{"applicationId":{"type":"string"},"candidateName":{"type":"string"},"candidateCpf":{"type":"string"},"candidateEmail":{"type":"string"},"admissionNotice":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true}},"required":["id","name"]},"entryFormName":{"type":"string","nullable":true},"courseName":{"type":"string","nullable":true},"attemptsUsed":{"type":"integer"},"attemptLimit":{"type":"integer"}},"required":["applicationId","candidateName","candidateCpf","candidateEmail","admissionNotice","entryFormName","courseName","attemptsUsed","attemptLimit"]}},"parameters":{}},"paths":{"/correction/essays":{"post":{"summary":"Enviar redação para correção (assíncrono)","tags":["Correction"],"security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","maxLength":50000},"userId":{"type":"string","minLength":1,"maxLength":255},"proposedTheme":{"type":"string","minLength":1,"maxLength":2000},"motivationalTexts":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string","nullable":true},"images":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"description":{"type":"string","nullable":true},"source":{"type":"string","nullable":true}},"required":["url"]}}},"required":["title"]}},"title":{"type":"string","maxLength":500},"externalId":{"type":"string","maxLength":255},"mode":{"type":"string","enum":["online","offline"]}},"required":["content","userId","proposedTheme","motivationalTexts"]}}}},"responses":{"201":{"description":"Redação recebida e enfileirada (processStatus: PENDING)","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"processStatus":{"type":"string"}},"required":["id","processStatus"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"API key ausente ou inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo não permitido para esta chave/instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}},"get":{"summary":"Listar redações da instituição","tags":["Correction"],"security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":20},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"userId","in":"query"},{"schema":{"type":"string","enum":["PENDING","PROCESSING","SUCCESS","ERROR"]},"required":false,"name":"processStatus","in":"query"},{"schema":{"type":"string","format":"date-time"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string","format":"date-time"},"required":false,"name":"to","in":"query"}],"responses":{"200":{"description":"Lista paginada de redações","content":{"application/json":{"schema":{"type":"object","properties":{"pagination":{"type":"object","properties":{"page":{"type":"number","example":1},"pageSize":{"type":"number","example":100},"pages":{"type":"number","example":2},"items":{"type":"number","example":200}},"required":["page","pageSize","pages","items"]},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string","nullable":true},"content":{"type":"string"},"contentWithGrammarFeedback":{"type":"string","nullable":true},"proposedTheme":{"type":"string"},"motivationalTexts":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string","nullable":true},"images":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"description":{"type":"string","nullable":true},"source":{"type":"string","nullable":true}},"required":["url"]}}},"required":["title"]}},"userId":{"type":"string"},"externalId":{"type":"string","nullable":true},"status":{"type":"string","enum":["SENT","DONE"]},"processStatus":{"type":"string","enum":["PENDING","PROCESSING","SUCCESS","ERROR"]},"processErrorMessage":{"type":"string","nullable":true},"correctionModel":{"type":"string"},"enemFeedback":{"type":"object","nullable":true,"properties":{"competence1Score":{"type":"number"},"competence1Comment":{"type":"string","nullable":true},"competence2Score":{"type":"number"},"competence2Comment":{"type":"string","nullable":true},"competence3Score":{"type":"number"},"competence3Comment":{"type":"string","nullable":true},"competence4Score":{"type":"number"},"competence4Comment":{"type":"string","nullable":true},"competence5Score":{"type":"number"},"competence5Comment":{"type":"string","nullable":true},"overallScore":{"type":"number"},"overallComment":{"type":"string","nullable":true},"isScoreZeroed":{"type":"boolean"},"preliminaryCheckComment":{"type":"string","nullable":true},"grammarFeedback":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"shortMessage":{"type":"string"},"replacements":{"type":"array","items":{"type":"string"}},"offset":{"type":"number"},"length":{"type":"number"},"type":{"type":"string","enum":["ortografia","concordancia","pontuacao","regencia","estilo"]}},"required":["message","shortMessage","replacements","offset","length","type"]}}},"required":["competence1Score","competence1Comment","competence2Score","competence2Comment","competence3Score","competence3Comment","competence4Score","competence4Comment","competence5Score","competence5Comment","overallScore","overallComment","isScoreZeroed","preliminaryCheckComment","grammarFeedback"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","title","content","contentWithGrammarFeedback","proposedTheme","motivationalTexts","userId","externalId","status","processStatus","processErrorMessage","correctionModel","enemFeedback","createdAt","updatedAt"]}}},"required":["pagination","data"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"API key ausente ou inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo não permitido para esta chave/instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/correction/essays/:id":{"get":{"summary":"Consultar redação por id","tags":["Correction"],"security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","example":"cuid_example_id"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Redação (enemFeedback nulo até a correção concluir)","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string","nullable":true},"content":{"type":"string"},"contentWithGrammarFeedback":{"type":"string","nullable":true},"proposedTheme":{"type":"string"},"motivationalTexts":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string","nullable":true},"images":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"description":{"type":"string","nullable":true},"source":{"type":"string","nullable":true}},"required":["url"]}}},"required":["title"]}},"userId":{"type":"string"},"externalId":{"type":"string","nullable":true},"status":{"type":"string","enum":["SENT","DONE"]},"processStatus":{"type":"string","enum":["PENDING","PROCESSING","SUCCESS","ERROR"]},"processErrorMessage":{"type":"string","nullable":true},"correctionModel":{"type":"string"},"enemFeedback":{"type":"object","nullable":true,"properties":{"competence1Score":{"type":"number"},"competence1Comment":{"type":"string","nullable":true},"competence2Score":{"type":"number"},"competence2Comment":{"type":"string","nullable":true},"competence3Score":{"type":"number"},"competence3Comment":{"type":"string","nullable":true},"competence4Score":{"type":"number"},"competence4Comment":{"type":"string","nullable":true},"competence5Score":{"type":"number"},"competence5Comment":{"type":"string","nullable":true},"overallScore":{"type":"number"},"overallComment":{"type":"string","nullable":true},"isScoreZeroed":{"type":"boolean"},"preliminaryCheckComment":{"type":"string","nullable":true},"grammarFeedback":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"shortMessage":{"type":"string"},"replacements":{"type":"array","items":{"type":"string"}},"offset":{"type":"number"},"length":{"type":"number"},"type":{"type":"string","enum":["ortografia","concordancia","pontuacao","regencia","estilo"]}},"required":["message","shortMessage","replacements","offset","length","type"]}}},"required":["competence1Score","competence1Comment","competence2Score","competence2Comment","competence3Score","competence3Comment","competence4Score","competence4Comment","competence5Score","competence5Comment","overallScore","overallComment","isScoreZeroed","preliminaryCheckComment","grammarFeedback"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","title","content","contentWithGrammarFeedback","proposedTheme","motivationalTexts","userId","externalId","status","processStatus","processErrorMessage","correctionModel","enemFeedback","createdAt","updatedAt"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"API key ausente ou inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo não permitido para esta chave/instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Redação não encontrada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/crm/events":{"post":{"summary":"Ingerir evento (idempotente por deliveryId)","tags":["CRM"],"security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"deliveryId":{"type":"string","minLength":1},"eventName":{"type":"string","minLength":1},"occurredAt":{"type":"string","format":"date-time"},"contact":{"type":"object","properties":{"id":{"type":"string","minLength":1},"externalId":{"type":"string","minLength":1},"anonymousId":{"type":"string","minLength":1},"properties":{"type":"object","additionalProperties":{"nullable":true},"default":{}}}},"deal":{"type":"object","properties":{"id":{"type":"string","minLength":1},"externalId":{"type":"string","minLength":1},"properties":{"type":"object","additionalProperties":{"nullable":true},"default":{}}}}},"required":["deliveryId","eventName","occurredAt"]}}}},"responses":{"201":{"description":"Evento armazenado (ou o mesmo já existente, se o deliveryId repetir)","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"deliveryId":{"type":"string"},"contactResolution":{"type":"string","enum":["RESOLVED_ID","RESOLVED_EXTERNAL_ID","RESOLVED_TAX_ID","RESOLVED_EMAIL","CONTACT_CREATED","PENDING_ANONYMOUS","REJECTED_UNKNOWN_CONTACT","RESOLVED_ANONYMOUS_ID","RESOLVED_DEAL"]},"contactId":{"type":"string","nullable":true},"offSchemaKeys":{"type":"array","items":{"type":"string"}},"rejectionReason":{"type":"string","nullable":true}},"required":["id","deliveryId","contactResolution","contactId","offSchemaKeys","rejectionReason"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"API key ausente ou inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo `crm` fora do escopo desta API key (MODULE_NOT_IN_KEY_SCOPE) ou capability `crm` não habilitada para a organização (CAPABILITY_NOT_ENABLED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Definição de evento não encontrada ou inativa, ou `deal` informado que não existe nesta instituição (DEAL_NOT_FOUND). O evento nunca cria Negócio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Payload inválido contra o schema da definição, nenhum identificador fornecido (`contact` e `deal` ausentes ou sem `id`/`externalId`), ou o identificador enviado corresponde a um contato de outra instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/crm/contacts":{"post":{"summary":"Criar um contato","tags":["CRM"],"security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"taxId":{"type":"string"},"externalId":{"type":"string"},"externalStudentId":{"type":"string"},"birthDate":{"type":"string"},"gender":{"type":"string","enum":["male","female","other"]},"preferredLanguage":{"type":"string"}},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"nullable":true}]}}},"required":["properties"]}}}},"responses":{"201":{"description":"Contato criado","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"properties":{"type":"object","additionalProperties":{"nullable":true}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","properties","createdAt","updatedAt"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo `crm` fora do escopo desta API key (MODULE_NOT_IN_KEY_SCOPE) ou capability `crm` não habilitada para a organização (CAPABILITY_NOT_ENABLED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Já existe contato com este `email`, `taxId` ou `externalId` na instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Propriedade customizada inexistente no catálogo da instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/crm/contacts/batch/upsert":{"post":{"summary":"Criar ou atualizar contatos em lote","tags":["CRM"],"security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"inputs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"idProperty":{"type":"string","enum":["externalId","email","taxId"]},"properties":{"type":"object","properties":{"name":{"type":"string","nullable":true},"email":{"type":"string","nullable":true,"format":"email"},"phone":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"externalId":{"type":"string","nullable":true},"externalStudentId":{"type":"string","nullable":true},"birthDate":{"type":"string","nullable":true},"gender":{"type":"string","nullable":true,"enum":["male","female","other",null]},"preferredLanguage":{"type":"string","nullable":true}},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"nullable":true}]}}},"required":["id","idProperty","properties"]},"minItems":1,"maxItems":1000}},"required":["inputs"]}}}},"responses":{"202":{"description":"Lote aceito para processamento assíncrono","content":{"application/json":{"schema":{"type":"object","properties":{"batchId":{"type":"string"},"accepted":{"type":"integer"},"receivedAt":{"type":"string"}},"required":["batchId","accepted","receivedAt"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo `crm` fora do escopo desta API key (MODULE_NOT_IN_KEY_SCOPE) ou capability `crm` não habilitada para a organização (CAPABILITY_NOT_ENABLED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/crm/batches/{batchId}":{"get":{"summary":"Consultar um lote","tags":["CRM"],"security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"example":"clzb4t7x90000s6vp8k2m1q3a","description":"O `batchId` devolvido pelo `202` do lote."},"required":true,"description":"O `batchId` devolvido pelo `202` do lote.","name":"batchId","in":"path"}],"responses":{"200":{"description":"Status, progresso e, ao concluir, o resultado por item","content":{"application/json":{"schema":{"type":"object","properties":{"batchId":{"type":"string"},"status":{"type":"string","enum":["processing","completed","failed"]},"total":{"type":"integer"},"processed":{"type":"integer"},"createdAt":{"type":"string"},"completedAt":{"type":"string","nullable":true},"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"id":{"type":"string"},"idProperty":{"type":"string","enum":["externalId","email","taxId"]},"status":{"type":"string","enum":["succeeded","failed"]},"operation":{"type":"string","enum":["created","updated"]},"contactId":{"type":"string"},"error":{"type":"object","properties":{"status":{"type":"integer"},"errorCode":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["status","errorCode","message"]}},"required":["index","id","idProperty","status"]}}},"required":["batchId","status","total","processed","createdAt","completedAt"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo `crm` fora do escopo desta API key (MODULE_NOT_IN_KEY_SCOPE) ou capability `crm` não habilitada para a organização (CAPABILITY_NOT_ENABLED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Lote não encontrado, de outra instituição ou com mais de 30 dias","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/crm/contacts/{id}":{"patch":{"summary":"Atualizar um contato","tags":["CRM"],"security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"example":"clz9q2k8r0001s6vp2h4m7x1e","description":"O id do Workfuse, ou o valor de `idProperty` quando informado."},"required":true,"description":"O id do Workfuse, ou o valor de `idProperty` quando informado.","name":"id","in":"path"},{"schema":{"type":"string","enum":["externalId","email","taxId"],"description":"Quando informado, `{id}` do path é lido como o valor desta propriedade, não o id do Workfuse."},"required":false,"description":"Quando informado, `{id}` do path é lido como o valor desta propriedade, não o id do Workfuse.","name":"idProperty","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"properties":{"type":"object","properties":{"name":{"type":"string","nullable":true},"email":{"type":"string","nullable":true,"format":"email"},"phone":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"externalId":{"type":"string","nullable":true},"externalStudentId":{"type":"string","nullable":true},"birthDate":{"type":"string","nullable":true},"gender":{"type":"string","nullable":true,"enum":["male","female","other",null]},"preferredLanguage":{"type":"string","nullable":true}},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"nullable":true}]}}},"required":["properties"]}}}},"responses":{"200":{"description":"O contato inteiro, no mesmo formato do POST","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"properties":{"type":"object","additionalProperties":{"nullable":true}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","properties","createdAt","updatedAt"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo `crm` fora do escopo desta API key (MODULE_NOT_IN_KEY_SCOPE) ou capability `crm` não habilitada para a organização (CAPABILITY_NOT_ENABLED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Contato não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"O `externalId` informado é diferente do já gravado por outra origem","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Propriedade customizada inexistente no catálogo da instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}},"get":{"summary":"Ler um contato","tags":["CRM"],"security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"example":"clz9q2k8r0001s6vp2h4m7x1e","description":"O id do Workfuse, ou o valor de `idProperty` quando informado."},"required":true,"description":"O id do Workfuse, ou o valor de `idProperty` quando informado.","name":"id","in":"path"},{"schema":{"type":"string","enum":["externalId","email","taxId"],"description":"Quando informado, `{id}` do path é lido como o valor desta propriedade, não o id do Workfuse."},"required":false,"description":"Quando informado, `{id}` do path é lido como o valor desta propriedade, não o id do Workfuse.","name":"idProperty","in":"query"}],"responses":{"200":{"description":"O contato","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"properties":{"type":"object","additionalProperties":{"nullable":true}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","properties","createdAt","updatedAt"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo `crm` fora do escopo desta API key (MODULE_NOT_IN_KEY_SCOPE) ou capability `crm` não habilitada para a organização (CAPABILITY_NOT_ENABLED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Contato não encontrado, ou de outra instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/crm/deals":{"post":{"summary":"Criar um negócio","tags":["CRM"],"security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contact":{"type":"object","properties":{"id":{"type":"string","minLength":1},"idProperty":{"type":"string","enum":["externalId","email","taxId"]}},"required":["id"],"description":"Como localizar o contato dentro da instituição da API key — mesmo formato do `GET /contacts/{id}`."},"pipelineId":{"type":"string","minLength":1},"stageId":{"type":"string","minLength":1},"ownerId":{"type":"string","minLength":1,"description":"Dono do negócio. Sem ele, usa o dono padrão da instituição; sem nenhum dos dois, 422."},"externalId":{"type":"string","minLength":1,"description":"O id deste negócio no seu sistema."},"properties":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"default":{}}}}}}},"responses":{"201":{"description":"Negócio criado","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"externalId":{"type":"string"},"name":{"type":"string"},"ownerId":{"type":"string"},"pipelineId":{"type":"string"},"stageId":{"type":"string"},"contactId":{"type":"string"},"properties":{"type":"object","additionalProperties":{"nullable":true}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","contactId","properties","createdAt","updatedAt"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo `crm` fora do escopo desta API key (MODULE_NOT_IN_KEY_SCOPE) ou capability `crm` não habilitada para a organização (CAPABILITY_NOT_ENABLED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Contato não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Já existe um negócio com este `externalId`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Campo obrigatório ausente (`contact`, `pipelineId` ou `stageId`), dono não resolvido, contato não identificado ou propriedade customizada inexistente no catálogo de negócio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/crm/deals/{id}":{"patch":{"summary":"Atualizar um negócio","tags":["CRM"],"security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"example":"clz9q2k8r0001s6vp2h4m7x1e","description":"O id do Workfuse, ou o valor de `idProperty` quando informado."},"required":true,"description":"O id do Workfuse, ou o valor de `idProperty` quando informado.","name":"id","in":"path"},{"schema":{"type":"string","enum":["externalId"],"description":"Quando informado, `{id}` do path é lido como o valor desta propriedade, não o id do Workfuse."},"required":false,"description":"Quando informado, `{id}` do path é lido como o valor desta propriedade, não o id do Workfuse.","name":"idProperty","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"properties":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"nullable":true}]}}},"required":["properties"]}}}},"responses":{"200":{"description":"O negócio inteiro, no mesmo formato do POST","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"externalId":{"type":"string"},"name":{"type":"string"},"ownerId":{"type":"string"},"pipelineId":{"type":"string"},"stageId":{"type":"string"},"contactId":{"type":"string"},"properties":{"type":"object","additionalProperties":{"nullable":true}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","contactId","properties","createdAt","updatedAt"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo `crm` fora do escopo desta API key (MODULE_NOT_IN_KEY_SCOPE) ou capability `crm` não habilitada para a organização (CAPABILITY_NOT_ENABLED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Negócio não encontrado, ou de outra instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Propriedade customizada inexistente no catálogo de negócio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}},"get":{"summary":"Ler um negócio","tags":["CRM"],"security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"example":"clz9q2k8r0001s6vp2h4m7x1e","description":"O id do Workfuse, ou o valor de `idProperty` quando informado."},"required":true,"description":"O id do Workfuse, ou o valor de `idProperty` quando informado.","name":"id","in":"path"},{"schema":{"type":"string","enum":["externalId"],"description":"Quando informado, `{id}` do path é lido como o valor desta propriedade, não o id do Workfuse."},"required":false,"description":"Quando informado, `{id}` do path é lido como o valor desta propriedade, não o id do Workfuse.","name":"idProperty","in":"query"}],"responses":{"200":{"description":"O negócio","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"externalId":{"type":"string"},"name":{"type":"string"},"ownerId":{"type":"string"},"pipelineId":{"type":"string"},"stageId":{"type":"string"},"contactId":{"type":"string"},"properties":{"type":"object","additionalProperties":{"nullable":true}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","contactId","properties","createdAt","updatedAt"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Módulo `crm` fora do escopo desta API key (MODULE_NOT_IN_KEY_SCOPE) ou capability `crm` não habilitada para a organização (CAPABILITY_NOT_ENABLED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Negócio não encontrado, ou de outra instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/institution":{"get":{"summary":"A instituição da chave (parceiro)","tags":["Admission"],"description":"Nome, site, logo e cor da instituição que a API key fixou — o mesmo que `GET /admission/v1/institutions/{slug}` responde ao candidato.","security":[{"ApiKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionInstitution"}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/links/{slug}":{"get":{"summary":"O que `?origem=` nomeia e para onde leva (parceiro)","tags":["Admission"],"description":"Nunca responde erro para link inativo, expirado ou slug inexistente: devolve 200 com destino e o motivo da recusa. Uma origem do cadastro resolve sem link salvo, com `captureLinkId` nulo.","security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionResolvedLink"}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/notices/{noticeId}/showcase":{"get":{"summary":"O que um edital aberto oferece (parceiro)","tags":["Admission"],"description":"A taxa, as ofertas (curso + polo) e as formas de ingresso ativas no edital. `offers[].id` é o `admissionOfferId` do envio e `journeys[].id` é o `admissionNoticeEntryFormId`.","security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"noticeId","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionNoticeShowcase"}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Não encontrado — a mesma resposta para id inexistente e para id de outra instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"O edital não está recebendo inscrições nesta data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/notices/{noticeId}/application-fields":{"get":{"summary":"Os campos e documentos que uma jornada do edital pede (parceiro)","tags":["Admission"],"description":"`journey` é o id do PAR edital x forma de ingresso — o mesmo que a inscrição guarda —, nunca o id da forma no catálogo.","security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"noticeId","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"journey","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionApplicationForm"}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Não encontrado — a mesma resposta para id inexistente e para id de outra instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"O edital não está recebendo inscrições nesta data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/postal-codes/{postalCode}":{"get":{"summary":"O endereço que um CEP nomeia (parceiro)","tags":["Admission"],"description":"Conveniência de paridade: um servidor pode consultar o CEP direto, e este endpoint existe para que a jornada inteira caiba numa porta só. Um CEP que não existe e uma falha da consulta respondem igual — 404.","security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":8},"required":true,"name":"postalCode","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionPostalAddress"}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"CEP não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/courses":{"get":{"summary":"O catálogo de cursos da instituição da chave (parceiro)","tags":["Admission"],"description":"Só entra no catálogo o curso ativo com matriz curricular vigente. `hasOpenNotice` diz se algum edital aberto o oferta.","security":[{"ApiKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdmissionCatalogCourse"}}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/courses/{courseId}":{"get":{"summary":"Um curso, com um bloco por modalidade vigente (parceiro)","tags":["Admission"],"description":"Cada bloco traz o `admissionNoticeId` que recebe a inscrição daquela modalidade — `null` quando nenhum edital aberto a oferta.","security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"courseId","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionPublicCourse"}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Curso ou matriz não encontrados — a mesma resposta para id de outra instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/curriculums/{curriculumId}":{"get":{"summary":"A matriz curricular de um curso, período a período (parceiro)","tags":["Admission"],"security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"curriculumId","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionPublicCurriculum"}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Curso ou matriz não encontrados — a mesma resposta para id de outra instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/applications":{"post":{"summary":"Envia uma inscrição em nome do candidato (parceiro)","tags":["Admission"],"description":"Conclui a inscrição em uma chamada: `dataConsentAt` é obrigatório na prática, porque toda inscrição concluída precisa dele. Idempotente pela chave natural edital + CPF. Com o `draftToken` do rascunho sem CPF, conclui AQUELE rascunho em vez de abrir outro. Não abre sessão: a sessão é da candidata, e a chave não é ela.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"admissionNoticeId":{"type":"string","minLength":1},"admissionOfferId":{"type":"string","minLength":1},"secondChoiceOfferId":{"type":"string","nullable":true,"minLength":1},"admissionNoticeEntryFormId":{"type":"string","minLength":1},"candidateName":{"type":"string","minLength":1,"maxLength":200},"candidateCpf":{"type":"string","pattern":"^\\d{11}$"},"candidateEmail":{"type":"string","maxLength":254,"format":"email"},"candidatePhone":{"type":"string","minLength":1,"maxLength":32},"candidateBirthDate":{"anyOf":[{"type":"string","format":"date"},{"type":"string","format":"date-time"}],"example":"2005-03-11","description":"AAAA-MM-DD, ou data e hora ISO com fuso (Z ou ±hh:mm), e vale o dia escrito. Data não futura, não antes de 1900, de quem tem 14 anos ou mais."},"captureLinkId":{"type":"string","nullable":true,"minLength":1},"captureOriginId":{"type":"string","nullable":true,"minLength":1},"formAnswers":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"dataConsentAt":{"type":"string","nullable":true,"format":"date-time"},"draftToken":{"type":"string","nullable":true,"pattern":"^[0-9a-f]{64}$"}},"required":["admissionNoticeId","admissionOfferId","admissionNoticeEntryFormId","candidateName","candidateCpf","candidateEmail","candidatePhone","candidateBirthDate"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionCandidacy"}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Edital não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"A inscrição já foi concluída, o período de prova do Vestibular terminou (`EXAM_PERIOD_ENDED`), ou a forma por nota está sem corte (`CANDIDACY_CUTOFF_MISSING`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Fora da janela, dados que não conferem, ou campo faltando","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}},"get":{"summary":"Acha as inscrições de um CPF ou de um e-mail (parceiro)","tags":["Admission"],"description":"As inscrições daquele CPF, ou daquele e-mail, NA INSTITUIÇÃO DA CHAVE, da mais recente para a mais antiga, na mesma forma da consulta pelo número. Informe um dos dois, nunca os dois. O e-mail é comparado inteiro, sem diferenciar maiúsculas, e pode trazer pessoas diferentes que o compartilham. O rascunho ainda sem CPF não entra: retome-o pelo `draftToken`. Sem inscrição, a lista vem vazia. `journey` e `timeline` vêm vazias na lista — peça pelo número quando precisar delas.","security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{11}$"},"required":false,"name":"candidateCpf","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"admissionNoticeId","in":"query"},{"schema":{"type":"string","maxLength":254,"format":"email"},"required":false,"name":"candidateEmail","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AdmissionCandidacyPartner"}}},"required":["data"]}}}},"400":{"description":"CPF ou e-mail inválido, nenhum dos dois, ou os dois juntos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/applications/draft":{"post":{"summary":"Grava a inscrição como rascunho (parceiro)","tags":["Admission"],"description":"O twin do primeiro passo do formulário: a forma de ingresso e o consentimento são opcionais, e a inscrição fica em `DRAFT` até `POST /applications` concluí-la — a MESMA linha, o mesmo `id`. Sem forma de ingresso é um draft, que a secretaria vê como \"sem forma de ingresso\". CPF e nascimento também são opcionais (vêm juntos): sem eles, a resposta traz o `draftToken`, que você devolve em todo write seguinte até o CPF chegar (API-49). Sem CPF e sem token não há chave: repetir a chamada abre outro rascunho.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"admissionNoticeId":{"type":"string","minLength":1},"admissionOfferId":{"type":"string","minLength":1},"secondChoiceOfferId":{"type":"string","nullable":true,"minLength":1},"admissionNoticeEntryFormId":{"type":"string","nullable":true,"minLength":1},"candidateName":{"type":"string","minLength":1,"maxLength":200},"candidateCpf":{"type":"string","nullable":true,"pattern":"^\\d{11}$"},"candidateEmail":{"type":"string","maxLength":254,"format":"email"},"candidatePhone":{"type":"string","minLength":1,"maxLength":32},"candidateBirthDate":{"anyOf":[{"type":"string","format":"date"},{"type":"string","format":"date-time"},{"nullable":true}],"example":"2005-03-11","description":"AAAA-MM-DD, ou data e hora ISO com fuso (Z ou ±hh:mm), e vale o dia escrito. Data não futura, não antes de 1900, de quem tem 14 anos ou mais."},"captureLinkId":{"type":"string","nullable":true,"minLength":1},"captureOriginId":{"type":"string","nullable":true,"minLength":1},"formAnswers":{"type":"object","nullable":true,"additionalProperties":{"nullable":true}},"dataConsentAt":{"type":"string","nullable":true,"format":"date-time"},"draftToken":{"type":"string","nullable":true,"pattern":"^[0-9a-f]{64}$"}},"required":["admissionNoticeId","admissionOfferId","candidateName","candidateEmail","candidatePhone"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AdmissionCandidacy"},{"type":"object","properties":{"rejoined":{"type":"boolean"},"draftToken":{"type":"string","nullable":true,"description":"Chave do rascunho ainda sem CPF: devolva-a em `draftToken` em todo write seguinte. Nula quando o rascunho já tem CPF."}},"required":["rejoined","draftToken"]}]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Edital não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"A inscrição já foi concluída, ou o rascunho do token já tem CPF (`CANDIDACY_DRAFT_GONE`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Fora da janela, ou dados que não conferem","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/applications/{id}":{"get":{"summary":"Consulta uma inscrição pelo número (parceiro)","tags":["Admission"],"description":"O número é o `id` devolvido no envio. A resposta é a que a candidata lê na área dela: situação, jornada passo a passo, taxa, o que ela declarou — CPF em claro, porque a chave é da instituição — e a linha do tempo com o motivo de cada movimento (API-46).","security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionCandidacyPartner"}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Inscrição não encontrada — a mesma resposta para número que não existe e para inscrição de outra instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/applications/{id}/exam-attempts":{"post":{"summary":"Envia a nota de uma tentativa da prova (aplicadora)","tags":["Admission"],"description":"A nota vai de 0 a 10, com até duas casas, e nunca é convertida. O número da tentativa é da aplicadora: reenviar o mesmo número responde `DUPLICATE` e não muda nada, e uma inscrição cancelada responde `DISCARDED`. A nota que alcança o corte aprova; a tentativa que esgota o limite abaixo do corte reprova.","security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionExamAttemptInput"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdmissionExamAttemptResult"}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Inscrição não encontrada — a mesma resposta para número que não existe e para inscrição de outra instituição","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Inscrição fora de avaliação, ou sem prova a fazer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Nota fora de 0 a 10, ou com mais de duas casas","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}},"/admissions/exam-candidates":{"get":{"summary":"Lista quem pode fazer a prova agora (aplicadora)","tags":["Admission"],"description":"Inscrições em avaliação, no Vestibular que ainda aplica prova, com tentativa restante — de editais abertos e encerrados, da instituição da chave. Ordenadas pelo envio. Nunca traz a nota. Edital de outra instituição responde a lista vazia, como `GET /applications`.","security":[{"ApiKey":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":false,"name":"admissionNoticeId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AdmissionExamCandidate"}}},"required":["data"]}}}},"400":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Erro interno"}}}}}}