🔌 Loopless — API Endpoints
Base URL: /api/v1/ | Auth: JWT via Keycloak
Method
Endpoint
Auth
POST
/api/v1/auth/register
No
POST
/api/v1/auth/login
No
POST
/api/v1/auth/github-sso
No
POST
/api/v1/auth/refresh
Refresh Token
GET
/api/v1/users/me
Yes
PUT
/api/v1/users/me
Yes
Method
Endpoint
Auth
Notes
GET/POST
/api/v1/projects
Yes / Freelancer
GET/PUT/DELETE
/api/v1/projects/{id}
Owner/Invited
GET
/api/v1/projects/{id}/commits
Owner/Invited
POST
/api/v1/projects/{id}/commits/sync
Owner
POST/GET
/api/v1/projects/{id}/files
Owner / Owner+Invited
POST
/api/v1/projects/{id}/summary
Owner/Invited
Returns 202; see async summary below
GET
/api/v1/projects/{id}/summary/status
Owner/Invited
Polls async summary job status
POST
/api/v1/projects/{id}/invitations
Owner
PUT
/api/v1/invitations/{id}/accept
Invited Enterprise
POST /api/v1/projects/{id}/summary enqueues a background RAG job (Hangfire) and returns immediately:
HTTP 202 Accepted
{
"jobId" : " <hangfire-job-id>" ,
"status" : " queued"
}
Poll for completion with GET /api/v1/projects/{id}/summary/status:
// In progress
{ "jobId" : " ..." , "status" : " running" }
// Completed
{
"jobId" : " ..." ,
"status" : " completed" ,
"summary" : {
"id" : " ..." ,
"projectId" : " ..." ,
"content" : " ..." ,
"modelUsed" : " gpt-4o-mini" ,
"generatedAt" : " 2026-06-10T12:00:00Z"
}
}
// Failed (after 3 retries with exponential backoff: 30 s, 120 s, 300 s)
{ "jobId" : " ..." , "status" : " failed" , "failureReason" : " ..." }
Method
Endpoint
Auth
POST
/api/v1/projects/{id}/standups
Freelancer
GET
/api/v1/projects/{id}/standups
Owner/Invited
Method
Endpoint
Auth
GET/POST
/api/v1/messages/conversations
Yes
GET/POST
/api/v1/messages/conversations/{id}
Participant
Method
Endpoint
Auth
GET
/api/v1/matching/discover
Yes
GET
/api/v1/matching/search
Yes
GET
/api/v1/matching/recommendations
Yes
Hub
Path
Events
Messaging
/hubs/messaging
SendMessage, ReceiveMessage, UserTyping
Notifications
/hubs/notifications
NewNotification, InvitationReceived, StandupSubmitted