{"openapi":"3.1.0","info":{"title":"IntelliCreate Public API","version":"1.0.0","description":"API REST pública da plataforma IntelliCreate. Authentication via API Keys (`ik_live_xxx`) ou OAuth 2.0 Client Credentials. Multi-tenant isolation automática via credencial.","contact":{"name":"Fruto.IA","email":"comercial@intellicreate.online","url":"https://intellicreate.online"},"license":{"name":"Proprietary","url":"https://intellicreate.online/legal/terms"}},"servers":[{"url":"https://api.intellicreate.online/v1","description":"Production"},{"url":"https://api-dev.intellicreate.online/v1","description":"Development (interno)"},{"url":"https://api-sandbox.intellicreate.online/v1","description":"Sandbox (futuro)"}],"security":[{"ApiKeyAuth":[]},{"OAuth2":["users:read"]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"ik_live_xxx","description":"API Key no formato `ik_live_<24 chars>`. Crie em `/admin/settings/api-keys`."},"OAuth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"/oauth/token","scopes":{"users:read":"Listar e ler usuários","users:write":"Criar, atualizar, suspender usuários","courses:read":"Listar e ler cursos","courses:write":"Criar e atualizar cursos","enrollments:read":"Listar matrículas","enrollments:write":"Criar matrículas","enrollments:bulk":"Criar matrículas em massa","certificates:read":"Listar e ler certificados","analytics:read":"Acessar relatórios e métricas","webhooks:read":"Listar webhooks","webhooks:write":"Criar, editar, remover webhooks"}}}}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","example":"validation_error"},"code":{"type":"string","example":"invalid_email"},"message":{"type":"string"},"field":{"type":"string"},"request_id":{"type":"string"}}}}},"User":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email"},"name":{"type":"string"},"role":{"type":"string","enum":["learner","admin","gestor","instrutor"]},"status":{"type":"string","enum":["ACTIVE","SUSPENDED","INACTIVE"]},"department":{"type":"string","nullable":true},"job_title":{"type":"string","nullable":true},"business_unit_id":{"type":"string","format":"uuid","nullable":true},"employee_number":{"type":"string","nullable":true},"xp":{"type":"integer"},"level":{"type":"integer"},"last_login_at":{"type":"string","format":"date-time","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Course":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"slug":{"type":"string"},"status":{"type":"string","enum":["DRAFT","PUBLISHED","ARCHIVED"]},"difficulty":{"type":"string","enum":["BEGINNER","INTERMEDIATE","ADVANCED"],"nullable":true},"duration_hours":{"type":"number"},"thumbnail_url":{"type":"string","nullable":true},"category_id":{"type":"string","format":"uuid","nullable":true},"tags":{"type":"array","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Enrollment":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"user_id":{"type":"string","format":"uuid"},"course_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","COMPLETED","EXPIRED"]},"progress":{"type":"number"},"score":{"type":"number","nullable":true},"started_at":{"type":"string","format":"date-time","nullable":true},"completed_at":{"type":"string","format":"date-time","nullable":true},"expires_at":{"type":"string","format":"date-time","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Certificate":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"verification_code":{"type":"string"},"user_id":{"type":"string","format":"uuid"},"enrollment_id":{"type":"string","format":"uuid"},"course_id":{"type":"string","format":"uuid"},"pdf_url":{"type":"string","nullable":true},"issued_at":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time","nullable":true},"verification_url":{"type":"string"}}},"WebhookEndpoint":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"description":{"type":"string","nullable":true},"active":{"type":"boolean"},"failure_count":{"type":"integer"},"created_at":{"type":"string","format":"date-time"}}}},"parameters":{"LimitParam":{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},"CursorParam":{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Opaque cursor for next page (returned in `next_cursor`)."}}},"paths":{"/users":{"get":{"summary":"List users","tags":["Users"],"security":[{"ApiKeyAuth":["users:read"]}],"parameters":[{"$ref":"#/components/parameters/LimitParam"},{"$ref":"#/components/parameters/CursorParam"},{"name":"status","in":"query","schema":{"type":"string","enum":["ACTIVE","SUSPENDED","INACTIVE"]}},{"name":"email","in":"query","schema":{"type":"string","format":"email"}},{"name":"role","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of users","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"next_cursor":{"type":"string","nullable":true},"has_more":{"type":"boolean"},"limit":{"type":"integer"}}}}}},"401":{"description":"Authentication failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Create user","tags":["Users"],"security":[{"ApiKeyAuth":["users:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","name"],"properties":{"email":{"type":"string","format":"email"},"name":{"type":"string"},"role":{"type":"string","enum":["learner","admin","gestor","instrutor"],"default":"learner"},"password":{"type":"string","minLength":8},"department":{"type":"string"},"job_title":{"type":"string"},"business_unit_id":{"type":"string","format":"uuid"},"employee_number":{"type":"string"}}}}}},"responses":{"201":{"description":"User created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"409":{"description":"Email already exists"}}}},"/users/{id}":{"get":{"summary":"Get user","tags":["Users"],"security":[{"ApiKeyAuth":["users:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"User","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"404":{"description":"Not found"}}},"patch":{"summary":"Update user","tags":["Users"],"security":[{"ApiKeyAuth":["users:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"department":{"type":"string"},"job_title":{"type":"string"},"business_unit_id":{"type":"string","format":"uuid"},"employee_number":{"type":"string"}}}}}},"responses":{"200":{"description":"Updated"}}}},"/users/{id}/suspend":{"post":{"summary":"Suspend user","tags":["Users"],"security":[{"ApiKeyAuth":["users:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"OK"}}}},"/users/{id}/reactivate":{"post":{"summary":"Reactivate user","tags":["Users"],"security":[{"ApiKeyAuth":["users:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"OK"}}}},"/users/{id}/enrollments":{"get":{"summary":"List user enrollments","tags":["Users"],"security":[{"ApiKeyAuth":["enrollments:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"List"}}}},"/users/{id}/certificates":{"get":{"summary":"List user certificates","tags":["Users"],"security":[{"ApiKeyAuth":["certificates:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"List"}}}},"/courses":{"get":{"summary":"List courses","tags":["Courses"],"security":[{"ApiKeyAuth":["courses:read"]}],"parameters":[{"$ref":"#/components/parameters/LimitParam"},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"tags","in":"query","schema":{"type":"string"},"description":"Comma-separated tags"}],"responses":{"200":{"description":"List","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Course"}}}}}}}}}},"/courses/{id}":{"get":{"summary":"Get course","tags":["Courses"],"security":[{"ApiKeyAuth":["courses:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Course"},"404":{"description":"Not found"}}}},"/courses/{id}/modules":{"get":{"summary":"Get course modules","tags":["Courses"],"security":[{"ApiKeyAuth":["courses:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Modules"}}}},"/courses/{id}/stats":{"get":{"summary":"Course stats","tags":["Courses"],"security":[{"ApiKeyAuth":["analytics:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Stats"}}}},"/enrollments":{"get":{"summary":"List enrollments","tags":["Enrollments"],"security":[{"ApiKeyAuth":["enrollments:read"]}],"parameters":[{"$ref":"#/components/parameters/LimitParam"},{"name":"user_id","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"course_id","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"List","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Enrollment"}}}}}}}}},"post":{"summary":"Create enrollment","tags":["Enrollments"],"security":[{"ApiKeyAuth":["enrollments:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["user_id","course_id"],"properties":{"user_id":{"type":"string","format":"uuid"},"course_id":{"type":"string","format":"uuid"},"expires_at":{"type":"string","format":"date-time"}}}}}},"responses":{"201":{"description":"Created"},"409":{"description":"Already enrolled"}}}},"/enrollments/bulk":{"post":{"summary":"Bulk create enrollments (up to 1000)","tags":["Enrollments"],"security":[{"ApiKeyAuth":["enrollments:bulk"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["enrollments"],"properties":{"enrollments":{"type":"array","maxItems":1000,"items":{"type":"object","required":["user_id","course_id"],"properties":{"user_id":{"type":"string","format":"uuid"},"course_id":{"type":"string","format":"uuid"},"expires_at":{"type":"string","format":"date-time"}}}}}}}}},"responses":{"201":{"description":"Results","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"created":{"type":"integer"},"skipped":{"type":"integer"},"failed":{"type":"integer"}}}}}}}}}}},"/enrollments/{id}":{"get":{"summary":"Get enrollment","tags":["Enrollments"],"security":[{"ApiKeyAuth":["enrollments:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Enrollment"},"404":{"description":"Not found"}}}},"/certificates":{"get":{"summary":"List certificates","tags":["Certificates"],"security":[{"ApiKeyAuth":["certificates:read"]}],"parameters":[{"$ref":"#/components/parameters/LimitParam"},{"name":"user_id","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"course_id","in":"query","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"List"}}}},"/certificates/verify/{code}":{"get":{"summary":"Verify certificate (public, no auth)","tags":["Certificates"],"security":[],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Verification result","content":{"application/json":{"schema":{"type":"object","properties":{"verified":{"type":"boolean"},"certificate":{"type":"object","properties":{"verification_code":{"type":"string"},"user_name":{"type":"string"},"course_title":{"type":"string"},"issued_by":{"type":"string"},"issued_at":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time","nullable":true}}},"reason":{"type":"string","description":"Reason if not verified"}}}}}}}}},"/certificates/{id}":{"get":{"summary":"Get certificate","tags":["Certificates"],"security":[{"ApiKeyAuth":["certificates:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Certificate"}}}},"/webhooks":{"get":{"summary":"List webhook endpoints","tags":["Webhooks"],"security":[{"ApiKeyAuth":["webhooks:read"]}],"responses":{"200":{"description":"List"}}},"post":{"summary":"Create webhook endpoint (returns secret once)","tags":["Webhooks"],"security":[{"ApiKeyAuth":["webhooks:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","events"],"properties":{"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"description":{"type":"string"},"active":{"type":"boolean","default":true}}}}}},"responses":{"201":{"description":"Created with secret (shown once)"}}}},"/webhooks/{id}":{"patch":{"summary":"Update webhook endpoint","tags":["Webhooks"],"security":[{"ApiKeyAuth":["webhooks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}}},"delete":{"summary":"Delete webhook endpoint","tags":["Webhooks"],"security":[{"ApiKeyAuth":["webhooks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"OK"}}}},"/webhooks/{id}/deliveries":{"get":{"summary":"List webhook deliveries","tags":["Webhooks"],"security":[{"ApiKeyAuth":["webhooks:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"List"}}}},"/webhooks/{id}/test":{"post":{"summary":"Test fire webhook","tags":["Webhooks"],"security":[{"ApiKeyAuth":["webhooks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Enqueued"}}}}},"tags":[{"name":"Users","description":"Gestão de usuários"},{"name":"Courses","description":"Catálogo de cursos"},{"name":"Enrollments","description":"Matrículas"},{"name":"Certificates","description":"Certificados emitidos"},{"name":"Webhooks","description":"Eventos push"}]}