{"openapi":"3.0.3","info":{"title":"Alfa Credenciamento - API REST","description":"API REST do sistema Alfa Credenciamento para integra\u00e7\u00e3o com sistemas externos.\n\n**Autentica\u00e7\u00e3o por token vinculado ao evento:** O token Bearer \u00e9 criado no painel do operador (Evento > Integra\u00e7\u00f5es > API REST) e est\u00e1 **vinculado a um \u00fanico evento**. O ID do evento **n\u00e3o \u00e9 enviado** nas requisi\u00e7\u00f5es \u2014 ele \u00e9 inferido pelo token. A resposta retorna o `evento_id` para voc\u00ea saber qual evento foi consultado.","version":"1.0.0","contact":{"email":"ale@alfacredenciamento.com.br"}},"servers":[{"url":"\/api","description":"Servidor da API (mesma origem da documenta\u00e7\u00e3o)"}],"tags":[{"name":"Status","description":"Endpoints de consulta de status (evento, formul\u00e1rio, categoria)"},{"name":"Inscrito","description":"Gerenciamento de inscritos"},{"name":"Auth","description":"Autentica\u00e7\u00e3o da API"}],"paths":{"\/status\/evento":{"get":{"tags":["Status"],"summary":"Consultar status do evento","description":"Verifica se o evento est\u00e1 aberto ou fechado para inscri\u00e7\u00f5es. O status \u00e9 determinado pela exist\u00eancia de ao menos um formul\u00e1rio ativo.\n\n**N\u00e3o envia evento_id** \u2014 o evento \u00e9 identificado pelo token. A resposta retorna o `evento_id` do evento associado ao token.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Status do evento","content":{"application\/json":{"schema":{"type":"object","properties":{"evento_id":{"type":"integer","example":2430},"nome":{"type":"string","example":"Nome do Evento"},"aberto":{"type":"boolean","example":true},"date_start":{"type":"string","format":"date-time"},"date_end":{"type":"string","format":"date-time"}}}}}},"401":{"description":"Token inv\u00e1lido ou expirado"}}}},"\/status\/formulario\/{id}":{"get":{"tags":["Status"],"summary":"Consultar status do formul\u00e1rio","description":"Verifica se um formul\u00e1rio de inscri\u00e7\u00e3o espec\u00edfico est\u00e1 aberto ou fechado.\n\nO formul\u00e1rio deve pertencer ao evento do token. Caso contr\u00e1rio, retorna 404.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"ID do formul\u00e1rio"}],"responses":{"200":{"description":"Status do formul\u00e1rio","content":{"application\/json":{"schema":{"type":"object","properties":{"formulario_id":{"type":"integer"},"nome":{"type":"string"},"aberto":{"type":"boolean"},"create_off":{"type":"boolean"},"data_abertura":{"type":"string","format":"date-time"},"data_fechamento":{"type":"string","format":"date-time"}}}}}},"401":{"description":"Token inv\u00e1lido"},"404":{"description":"Formul\u00e1rio n\u00e3o encontrado"}}}},"\/status\/categoria\/{id}":{"get":{"tags":["Status"],"summary":"Consultar status de vagas da categoria","description":"Verifica se uma categoria de inscritos atingiu seu limite de vagas.\n\nA categoria deve pertencer ao evento do token. Caso contr\u00e1rio, retorna 404.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"ID da categoria"}],"responses":{"200":{"description":"Status de vagas","content":{"application\/json":{"schema":{"type":"object","properties":{"categoria_id":{"type":"integer"},"nome":{"type":"string"},"esgotada":{"type":"boolean"},"limite_inscricoes":{"type":"integer"},"total_confirmados":{"type":"integer"},"vagas_restantes":{"type":"integer"}}}}}},"401":{"description":"Token inv\u00e1lido"},"404":{"description":"Categoria n\u00e3o encontrada"}}}},"\/inscrito\/campos":{"get":{"tags":["Inscrito"],"summary":"Campos para criar inscrito","description":"Retorna os IDs dos campos e exemplo de body para POST \/inscrito. Use os IDs exatamente como retornados (case-sensitive).","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Lista de campos e exemplo de body"},"401":{"description":"N\u00e3o autorizado"}}}},"\/inscrito":{"get":{"tags":["Inscrito"],"summary":"Listar inscritos","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Lista de inscritos"},"401":{"description":"N\u00e3o autorizado"}}},"post":{"tags":["Inscrito"],"summary":"Criar inscrito","description":"Os campos s\u00e3o din\u00e2micos por evento. Chame GET \/inscrito\/campos para obter os IDs exatos.\n\n**IMPORTANTE:** Clique em \"Try it out\", selecione o exemplo no dropdown do Request body (ou digite o JSON) e confirme que o corpo n\u00e3o est\u00e1 vazio antes de Executar.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"nome":{"type":"string","example":"Jo\u00e3o"},"email":{"type":"string","format":"email","example":"joao@email.com"}}},"example":{"nome":"Jo\u00e3o","email":"joao@email.com"}}}},"responses":{"200":{"description":"Inscrito criado"},"401":{"description":"N\u00e3o autorizado"},"422":{"description":"Erro de valida\u00e7\u00e3o (campos obrigat\u00f3rios faltando ou inv\u00e1lidos)"}}}},"\/inscrito\/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"ID do inscrito"}],"get":{"tags":["Inscrito"],"summary":"Exibir inscrito","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Dados do inscrito"},"401":{"description":"N\u00e3o autorizado"}}},"put":{"tags":["Inscrito"],"summary":"Atualizar inscrito","description":"Envie apenas os campos que deseja atualizar. Use GET \/inscrito\/campos para ver os IDs dos campos.","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"categoria":{"type":"integer","description":"ID da categoria"},"status":{"type":"integer","description":"0=Pendente, 1=Liberado, 2=Recusado"},"nome":{"type":"string"},"email":{"type":"string","format":"email"}}},"example":{"nome":"Jo\u00e3o Silva","email":"joao@email.com","status":1}}}},"responses":{"200":{"description":"Inscrito atualizado"},"401":{"description":"N\u00e3o autorizado"},"404":{"description":"Inscrito n\u00e3o encontrado"}}},"delete":{"tags":["Inscrito"],"summary":"Remover inscrito","security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Removido com sucesso"},"401":{"description":"N\u00e3o autorizado"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Token","description":"Token vinculado ao evento, criado em: Operador > Evento > Integra\u00e7\u00f5es > API REST. Cole o token completo exibido na listagem. O token s\u00f3 funciona para o evento ao qual foi associado."}}}}