Skip to content

REST API / Endpoint Index

A consolidated, grouped index of every HTTP endpoint exposed by the Luke services, extracted directly from the controllers in luke-core-engine, luke-auth-engine, luke-file-proxy, and the luke-agents FastAPI app (as of July 2026). Paths are relative to each service's own base URL, and the auth models referenced in the tables are defined in Authentication & Authorization.

Auth models

ModelHow it is enforcedWhere it applies
TenantBearer JWT via the auth gateway; resolves a tenant + user context. Default for /api/** routes not otherwise marked.Most /api/** engine routes
PublicUnauthenticated; any-origin CORS carve-out. Includes page shells./api/public/**, /embed, /respond, /health, JWKS
Recipient-OTPOpaque per-recipient token in the path; some flows require an email one-time-passcode step before read/write.Public form-instance + signing links
InternalServer-to-server only; X-Internal-Key (InternalAuthFilter). Never reachable from the browser./api/internal/**, file-proxy /internal/**
Operator-BasicHTTP Basic operator credential (OperatorAuthFilter, active only when CAPABILITY_OPERATOR_USER is set). Guards privileged platform-admin routes./api/tenants/**, /api/users/**, /api/capabilities writes

The engine's Spring security chain is permitAll at the framework level; authentication is layered on by dedicated servlet filters (gateway JWT, InternalAuthFilter, OperatorAuthFilter) and, for public tokens, by the token itself.


Forms

Base service: luke-core-engine. See the Forms deep-dive.

Definitions — /api/form-definitions

MethodPathPurposeAuth
POST/api/form-definitionsCreate a form definitionTenant
GET/api/form-definitionsList form definitionsTenant
GET/api/form-definitions/{id}Get one definitionTenant
GET/api/form-definitions/by-code/{code}Look up by stable codeTenant
GET/api/form-definitions/by-code/{code}/schemaPublished schema by codeTenant
GET/api/form-definitions/by-code/{code}/fieldsField contract by codeTenant
GET/api/form-definitions/{id}/embed-tokenGet the embed tokenTenant
POST/api/form-definitions/{id}/embed-token/rotateRotate the embed tokenTenant
PUT/api/form-definitions/{id}/submission-handlingConfigure inbound submission handlingTenant
PUT/api/form-definitions/{id}/outbound-configConfigure outbound sendTenant
PATCH/api/form-definitions/{id}Update metadataTenant
PUT/api/form-definitions/{id}/draftSave working draftTenant
POST/api/form-definitions/{id}/versionsSnapshot a version (check-in)Tenant
GET/api/form-definitions/{id}/versionsList versionsTenant
GET/api/form-definitions/{id}/versions/{v}Get a versionTenant
POST/api/form-definitions/{id}/versions/{v}/publishPublish a versionTenant
POST/api/form-definitions/{id}/versions/{v}/restoreRestore a version into draftTenant
POST/api/form-definitions/{id}/sign-offSign off a versionTenant
POST/api/form-definitions/{id}/checkoutCheck out (advisory lock)Tenant
POST/api/form-definitions/{id}/releaseRelease the lockTenant
POST/api/form-definitions/{id}/discardDiscard working changesTenant
POST/api/form-definitions/{id}/cloneClone a definitionTenant
POST/api/form-definitions/{id}/retireRetireTenant
POST/api/form-definitions/{id}/unretireUn-retireTenant
DELETE/api/form-definitions/{id}Soft-deleteTenant
POST/api/form-definitions/{id}/restoreRestore soft-deletedTenant
DELETE/api/form-definitions/{id}/purgeHard-deleteTenant
GET/api/form-definitions/{id}/auditAudit trailTenant
POST/api/form-definitions/{id}/sendSend an outbound form (OutboundSendController)Tenant

Instances — /api/form-instances

MethodPathPurposeAuth
POST/api/form-instancesCreate an instanceTenant
GET/api/form-instancesList instancesTenant
GET/api/form-instances/summaryInstance summary/countsTenant
GET/api/form-instances/{id}Get oneTenant
GET/api/form-instances/by-token/{token}Look up by tokenTenant
PATCH/api/form-instances/{id}Update draft dataTenant
PUT/api/form-instances/{id}/stateSet stateTenant
POST/api/form-instances/{id}/submitSubmitTenant
POST/api/form-instances/{id}/sendSend (outbound)Tenant
POST/api/form-instances/{id}/cancelCancelTenant
POST/api/form-instances/{id}/processedMark processedTenant
POST/api/form-instances/{id}/retry-processRetry orchestrationTenant

Form inbox / tasks

MethodPathPurposeAuth
GET/api/form-inboxList assigned form tasksTenant
POST/api/form-inbox/{taskId}/completeComplete a form taskTenant

Public / embed / recipient surface

MethodPathPurposeAuth
GET/embed/{token}Embed page shell (HTML)Public
GET/respond/{token}Outbound respond page shell (HTML, top-level)Public
GET/api/public/embed/{token}Load embeddable form by embed tokenPublic
POST/api/public/embed/{token}/submitSubmit an embedded formPublic
POST/api/public/form-instances/{token}/otpRequest recipient OTPRecipient-OTP
POST/api/public/form-instances/{token}/verifyVerify recipient OTPRecipient-OTP
GET/api/public/form-instances/{token}Load recipient instanceRecipient-OTP
PATCH/api/public/form-instances/{token}Save recipient draftRecipient-OTP
POST/api/public/form-instances/{token}/submitRecipient submitRecipient-OTP

Email

Base service: luke-core-engine (send + templates) and luke-file-proxy (assets). See the Email deep-dive.

Email send & servers

MethodPathPurposeAuth
POST/api/emailsSend an ad-hoc emailTenant
POST/api/emails/templateSend using a templateTenant
GET/api/emailsList sent emailsTenant
GET/api/emails/{id}Get oneTenant
POST/api/internal/emailsSend (server-to-server)Internal
POST/api/internal/emails/templateSend templated (server-to-server)Internal
POST/api/email-serversRegister an SMTP/provider serverTenant
GET/api/email-serversList serversTenant
POST/api/email-verification/startStart sender-address verificationTenant
POST/api/email-verification/verifyComplete verificationTenant
GET/api/email-verificationVerification statusTenant
GET/api/public/meta/free-email-domainsFree-domain reference listPublic

Templates — /api/email-templates

MethodPathPurposeAuth
POST/api/email-templatesCreate a templateTenant
GET/api/email-templatesListTenant
GET/api/email-templates/{id}Get oneTenant
PATCH/api/email-templates/{id}Update metadataTenant
PUT/api/email-templates/{id}/draftSave draftTenant
POST/api/email-templates/{id}/versionsSnapshot versionTenant
GET/api/email-templates/{id}/versionsList versionsTenant
POST/api/email-templates/{id}/versions/{v}/publishPublish versionTenant
POST/api/email-templates/{id}/retireRetireTenant
POST/api/email-templates/{id}/unretireUn-retireTenant
DELETE/api/email-templates/{id}Soft-deleteTenant
POST/api/email-templates/{id}/restoreRestoreTenant
DELETE/api/email-templates/{id}/purgeHard-deleteTenant
POST/api/email-templates/{id}/cloneCloneTenant
GET/api/email-templates/{id}/auditAudit trailTenant
POST/api/email-templates/{id}/send-testSend a test emailTenant

Email assets

MethodPathPurposeAuthService
POST/api/internal/email-assets/authorizeAuthorize an asset uploadInternalcore-engine
POST/api/internal/email-assets/{assetId}/finalizeFinalize uploadInternalcore-engine
POST/api/internal/email-assets/public/{assetId}/resolveResolve a public assetInternalcore-engine
POST/api/email-assetsUpload email asset (multipart)Tenantfile-proxy
GET/api/public/email-assets/{assetId}Fetch a public email assetPublicfile-proxy

Signatures

Base service: luke-core-engine. See the Signatures deep-dive.

Definitions — /api/signature-definitions

MethodPathPurposeAuth
GET/api/signature-definitionsListTenant
POST/api/signature-definitionsCreateTenant
GET/api/signature-definitions/{id}Get oneTenant
PATCH/api/signature-definitions/{id}Update metadataTenant
DELETE/api/signature-definitions/{id}Soft-deleteTenant
PUT/api/signature-definitions/{id}/draftSave draftTenant
POST/api/signature-definitions/{id}/versionsSnapshot versionTenant
GET/api/signature-definitions/{id}/versionsList versionsTenant
GET/api/signature-definitions/{id}/versions/{v}Get versionTenant
POST/api/signature-definitions/{id}/versions/{v}/publishPublish versionTenant
POST/api/signature-definitions/{id}/versions/{v}/restoreRestore versionTenant
POST/api/signature-definitions/{id}/sign-offSign offTenant
POST/api/signature-definitions/{id}/checkoutCheck outTenant
POST/api/signature-definitions/{id}/releaseRelease lockTenant
POST/api/signature-definitions/{id}/discardDiscard changesTenant
POST/api/signature-definitions/{id}/retireRetireTenant
POST/api/signature-definitions/{id}/unretireUn-retireTenant
POST/api/signature-definitions/{id}/restoreRestore soft-deletedTenant
DELETE/api/signature-definitions/{id}/purgeHard-deleteTenant
GET/api/signature-definitions/{id}/auditAudit trailTenant
POST/api/signature-definitions/{id}/documentUpload source PDF (multipart)Tenant
GET/api/signature-definitions/{id}/document/{key}Fetch source documentTenant

Instances — /api/signature-instances

MethodPathPurposeAuth
POST/api/signature-instancesCreate a signing instanceTenant
GET/api/signature-instancesListTenant
GET/api/signature-instances/{id}Get oneTenant
POST/api/signature-instances/{id}/cancelCancelTenant
GET/api/signature-instances/{id}/signed.pdfDownload signed PDFTenant
POST/api/signature-instances/{id}/sealSeal / finalizeTenant
POST/api/signature-instances/{id}/recipients/{signerId}/remindRe-send reminderTenant

Legacy single-shot — /api/signatures

MethodPathPurposeAuth
POST/api/signaturesCreate from uploaded PDF (multipart)Tenant
GET/api/signaturesListTenant
GET/api/signatures/{id}Get oneTenant
POST/api/signatures/{id}/sendSend for signatureTenant
GET/api/signatures/{id}/signed.pdfDownload signed PDFTenant
POST/api/signatures/{id}/voidVoidTenant

Public signing surface

MethodPathPurposeAuth
GET/api/public/sign/{token}Load a signing session (legacy)Recipient-OTP
POST/api/public/sign/{token}Submit signature (legacy)Recipient-OTP
GET/api/public/sign-instance/{token}Load instance signing sessionRecipient-OTP
POST/api/public/sign-instance/{token}Submit signatureRecipient-OTP

Phone

Base service: luke-core-engine. See the Phone deep-dive.

MethodPathPurposeAuth
POST/api/phone-callsPlace / schedule a callTenant
GET/api/phone-callsList callsTenant
GET/api/phone-calls/{id}Get one callTenant
POST/api/phone-numbersProvision a numberTenant
GET/api/phone-numbersList numbersTenant
GET/api/phone-numbers/{id}Get one numberTenant
GET/api/phone-settingsGet phone settingsTenant
PUT/api/phone-settingsUpdate settingsTenant
POST/api/phone-settings/api-keySet provider API keyTenant
DELETE/api/phone-settings/api-keyClear provider API keyTenant
POST/api/internal/phone-callsCreate a call (server-to-server)Internal
POST/api/public/phone/webhookVapi provider webhook (verified via X-Vapi-Secret)Public

Documents

Documents are stored via luke-file-proxy brokers, with the core-engine holding the tenant-scoped registry. See the Documents deep-dive.

core-engine registry — /api/internal/documents

MethodPathPurposeAuth
POST/api/internal/documents/authorizeAuthorize an uploadInternal
POST/api/internal/documents/{docId}/finalizeFinalize an uploadInternal
POST/api/internal/documents/process-startedBind docs to a started processInternal
POST/api/internal/documents/{docId}/resolveResolve download URLInternal
GET/api/internal/documents/{docId}Get metadataInternal
GET/api/internal/documentsList documentsInternal
DELETE/api/internal/documents/{docId}DeleteInternal
POST/api/internal/documents/public/authorizeAuthorize a public/embed docInternal
POST/api/internal/documents/public/{docId}/finalizeFinalize public docInternal
GET/api/internal/documents/publicList public docsInternal
DELETE/api/internal/documents/public/{docId}Delete public docInternal
POST/api/internal/documents/public/linkLink a public docInternal

file-proxy brokers

MethodPathPurposeAuth
POST/api/documentsUpload document (multipart, presigned broker)Tenant
GET/api/documentsListTenant
GET/api/documents/{docId}Get metadataTenant
GET/api/documents/{docId}/contentStream contentTenant
POST/api/documents/process-startedBind docs to a processTenant
DELETE/api/documents/{docId}DeleteTenant
POST/api/public/documentsUpload from embed context (multipart)Public
GET/api/public/documentsList public docsPublic
DELETE/api/public/documents/{docId}Delete public docPublic
POST/api/public/documents/linkLink public docPublic
POST/internal/render/form-pdfHeadless-Chromium render of a form to PDFInternal
GET/healthLivenessPublic

Access, Capabilities & Subscriptions

Base service: luke-core-engine. See the Access deep-dive.

MethodPathPurposeAuth
GET/api/my-capabilitiesCapabilities granted to the callerTenant
GET/api/my-subscriptionsCaller's tenant subscriptionsTenant
GET/api/capabilitiesGlobal capability catalogPublic
GET/api/capabilities/{code}One catalog entryPublic
POST/api/capabilitiesCreate catalog entryOperator-Basic
PUT/api/capabilities/{code}Update catalog entryOperator-Basic
DELETE/api/capabilities/{code}Delete catalog entryOperator-Basic
GET/api/tenants/{tenantId}/capabilitiesTenant subscriptionsOperator-Basic
PUT/api/tenants/{tenantId}/capabilities/{code}Subscribe tenantOperator-Basic
DELETE/api/tenants/{tenantId}/capabilities/{code}Unsubscribe tenantOperator-Basic
GET/api/tenants/{tenantId}/users/{userId}/capabilitiesUser grantsOperator-Basic
PUT/api/tenants/{tenantId}/users/{userId}/capabilities/{code}Grant to userOperator-Basic
DELETE/api/tenants/{tenantId}/users/{userId}/capabilities/{code}Revoke from userOperator-Basic
DELETE/api/tenants/{tenantId}Purge a tenant (platform admin)Operator-Basic
DELETE/api/users/{userId}Purge a user's grants platform-wideOperator-Basic
POST/api/access-requestsRequest capability accessTenant
GET/api/my-access-requestsCaller's requestsTenant
POST/api/access-requests/{id}/cancelCancel own requestTenant
GET/api/org/access-requestsPending requests for approversTenant (org-admin)
POST/api/org/access-requests/{id}/approveApprove (auto-grants)Tenant (org-admin)
POST/api/org/access-requests/{id}/denyDenyTenant (org-admin)
POST/api/minions/{minion}Invoke a capability "minion" actionTenant
POST/api/public/minions/{token}/{minion}Invoke a minion from a public/recipient contextPublic
PUT/api/internal/secrets/{tenantId}/{name}Store a tenant secretInternal
GET/api/internal/secrets/{tenantId}/{name}Read a secretInternal
GET/api/internal/secrets/{tenantId}List secretsInternal
DELETE/api/internal/secrets/{tenantId}/{name}Delete a secretInternal

Calendars / SLA

No engine controllers exist for calendars or SLA scheduling. This surface is currently UI-only — see Calendar deep-dive. See the Coverage note.


Tenancy, Admin & Process

Base service: luke-core-engine. See Tenancy.

MethodPathPurposeAuth
GET/api/meCurrent user profile + contextTenant
GET/api/me/permissionsEffective permissionsTenant
DELETE/api/me/accountSelf-service account deletionTenant
POST/api/organizationsCreate an organizationTenant
POST/api/admin/onboard-userOnboard an engine userTenant (authorized caller)
POST/api/admin/onboard-clerk-userOnboard a Clerk-authenticated userTenant (authorized caller)
GET/api/org/usersList org usersTenant (org-admin)
POST/api/org/usersAdd a userTenant (org-admin)
PUT/api/org/users/{userId}/profileUpdate profileTenant (org-admin)
PUT/api/org/users/{userId}/roles/{role}Assign roleTenant (org-admin)
DELETE/api/org/users/{userId}/roles/{role}(revoke — see candidate-group/capability variants)Tenant (org-admin)
GET/api/org/candidate-groupsList candidate groupsTenant (org-admin)
POST/api/org/candidate-groupsCreate groupTenant (org-admin)
PUT/api/org/candidate-groups/{groupId}Update groupTenant (org-admin)
DELETE/api/org/candidate-groups/{groupId}Delete groupTenant (org-admin)
PUT/api/org/users/{userId}/candidate-groups/{groupId}Add user to groupTenant (org-admin)
DELETE/api/org/users/{userId}/candidate-groups/{groupId}Remove user from groupTenant (org-admin)
GET/api/org/candidate-groups/{groupId}/managersList group managersTenant (org-admin)
PUT/api/org/candidate-groups/{groupId}/managers/{userId}Add managerTenant (org-admin)
DELETE/api/org/candidate-groups/{groupId}/managers/{userId}Remove managerTenant (org-admin)
GET/api/org/capabilitiesOrg capability viewTenant (org-admin)
GET/api/org/users/{userId}/capabilitiesUser capabilitiesTenant (org-admin)
PUT/api/org/users/{userId}/capabilities/{code}Grant capability to userTenant (org-admin)
GET/api/tenancy/metricsTenancy metricsTenant
GET/api/topicsList orchestration topicsTenant
GET/api/topics/{id}Get topicTenant
POST/api/topicsCreate topicTenant
PUT/api/topics/{id}Update topicTenant
DELETE/api/topics/{id}Delete topicTenant
GET/api/topics/validateValidate a topic expressionTenant
GET/api/process-trace/{processInstanceId}Process execution traceTenant
POST/api/internal/process-startStart a process (server-to-server)Internal

Workflow & Integrations

Base service: luke-core-engine. The WORKFLOW capability is hidden behind a launch flag but the controllers are live. See the Workflow deep-dive.

MethodPathPurposeAuth
POST/api/workflow/definitionsCreate workflow definitionTenant
GET/api/workflow/definitionsListTenant
GET/api/workflow/definitions/{id}Get oneTenant
GET/api/workflow/definitions/{id}/versionsList versionsTenant
PUT/api/workflow/definitions/{id}UpdateTenant
POST/api/workflow/definitions/{id}/check-inSnapshot versionTenant
POST/api/workflow/definitions/{id}/versions/{version}/sign-offSign off versionTenant
POST/api/workflow/definitions/{id}/publishPublishTenant
GET/api/workflow/catalogStep/capability catalogTenant
POST/api/workflow/definitions/{id}/runsStart a runTenant
GET/api/workflow/definitions/{id}/runsList runsTenant
GET/api/workflow/runs/{instanceId}Get run detailTenant
POST/api/workflow/runs/{instanceId}/retryRetry runTenant
POST/api/workflow/runs/{instanceId}/cancelCancel runTenant
POST/api/workflow/integrations/{provider}/connectStart a Nango connect flowTenant
GET/api/workflow/integrations/connectionsList connectionsTenant
GET/api/workflow/integrations/connections/{id}Get connectionTenant
DELETE/api/workflow/integrations/connections/{id}Delete connectionTenant
POST/api/public/integrations/nango/webhookNango provider webhookPublic

Auth gateway (luke-auth-engine)

Base service: luke-auth-engine. The gateway authenticates and then proxies /** to core-engine. See Authentication & Authorization.

MethodPathPurposeAuth
POST/auth/registerRegister a userPublic
POST/auth/loginPassword loginPublic
GET/auth/socialBegin social loginPublic
GET/auth/callbackOAuth/social callbackPublic
POST/auth/refreshRefresh tokensPublic (refresh token)
POST/auth/logoutLogoutTenant
PATCH/auth/profileUpdate profileTenant
POST/auth/passwordChange passwordTenant
DELETE/auth/accountDelete accountTenant
POST/auth/org/invitationsCreate org invitationTenant (org-admin)
GET/auth/org/invitationsList invitationsTenant (org-admin)
POST/auth/org/invitations/{id}/revokeRevoke invitationTenant (org-admin)
POST/auth/org/membersAdd org memberTenant (org-admin)
POST/service/tokenMint a service tokenService key
POST/service/keys/{keyId}/revokeRevoke a service keyService key
POST/service/keys/{keyId}/unrevokeUn-revoke a service keyService key
GET/.well-known/jwks.jsonPublic signing keysPublic
GET/sessionCurrent session infoTenant
GET/dev/tokenMint a dev token (non-prod only)Public (dev)
ANY/**Authenticated reverse-proxy to core-engineTenant

Agents (luke-agents, FastAPI)

Base service: luke-agents. Each agent's router is mounted under /agents/<slug>, and the default agent is additionally mounted at the root so single-agent clients keep working. Every agent route is behind an API-key gate (AGENTS_API_KEY); GET /health and GET / are open by design. See the [luke-agents skill / fleet notes].

MethodPathPurposeAuth
GET/healthActive brain + mounted agentsOpen
GET/HTML index of mounted agentsOpen
POST/agents/form/chatForm-builder chat (LukeBuilds)API-key
POST/agents/form/testdataGenerate form test dataAPI-key
POST/agents/form/feedbackSubmit form-agent feedbackAPI-key
POST/agents/email/chatEmail-template chat (LukeMail)API-key
POST/agents/email/testdataGenerate email test dataAPI-key
POST/agents/workflow/chatWorkflow-builder chat (LukeFlow)API-key
POST/agents/sentiment/analyzeAnalyze one text (LukeSense)API-key
POST/agents/sentiment/batchAnalyze a batchAPI-key
POST/agents/sentiment/intakeStructured intake analysisAPI-key
POST/<default-agent routes>Default agent's routes also mounted at root (e.g. POST /chat)API-key

Coverage note

These areas were scanned and had no dedicated REST controllers as of July 2026:

  • Calendars / SLA — no controllers in any engine; the calendar surface is UI-only (see Calendar deep-dive).
  • luke-capability-engine — merged into luke-core-engine; all of its endpoints now live under the core-engine sections above (Forms, Email, Signatures, Phone, Access, Workflow).
  • luke-signature-engine / luke-task-engine — not scanned as separate HTTP surfaces here; the signing endpoints that ship today are served by core-engine (see Signatures).

Everything listed above was extracted directly from @RestController classes (or FastAPI routers) in the source tree — no endpoints were inferred beyond the routes actually present.

Lukeflow Manual · documentation snapshot July 2026