Audience: Application developers
Editorial status: Published — Source Validated
Product: FeraAuth
Classification: public
POST /api/v1/auth
Overview
Implements controller.login in routes/api/v1/auth/routes.js:77. This public identity boundary applies the documented field validation, safe credential responses, source-IP checks, rate limits, and delivery behavior without requiring an existing session.
Deprecated compatibility paths
POST /api/auth
Use the versioned canonical path for new integrations.
Authentication and access
Security scheme: apiKey
| Control | Contract |
|---|---|
| Authentication | public |
| Authorization | No prior grant is required; the handler applies credential, token, challenge, rate-limit, or safe-disclosure checks. |
| Licensing | FeraAuth does not evaluate product licenses; consuming products establish access by provisioning FeraAuth instance assignments and permissions. |
| Instance Context | The authenticated token, instance header/body value, or route value selects the application instance used for session and permission evaluation. |
| Ownership | Instance-scoped grants control access; a caller cannot cross into an unrelated instance merely by supplying another resource identifier. |
Parameters
No operation parameters.
Request body
JSON identity command consumed by the source-traced handler.
application/json
Schema: LoginRequest
{
"email": "developer@example.com",
"password": "correct-horse-battery-staple"
}
Example request
cURL
curl --request POST \ \
--url 'https://auth.feradel.com/api/v1/auth' \
--header 'x-api-key: $FERA_SERVICE_API_KEY' \
--header 'instance: 715c9ebb-0470-11f1-a928-0ed2cd1b87df' \
--header 'content-type: application/json' \
--data '{"email":"developer@example.com","password":"correct-horse-battery-staple"}'
Responses
200 Credentials, source IP, target instance, and CAN.LOGIN permission were accepted and a session JWT was issued.
Content type: application/json; schema: AuthToken
{
"token": "eyJhbGciOiJIUzI1NiJ9.auth-session-token"
}
400 Credentials, whitelist, instance, or login permission are invalid without disclosing which identity fact exists.
Content type: application/json; schema: AuthError
{
"success": false,
"error": {
"status": 400,
"message": "Invalid credentials"
}
}
500 The identity or session store could not complete authentication.
Content type: application/json; schema: AuthError
{
"success": false,
"error": {
"status": 500,
"message": "Unable to complete request"
}
}
Status and retry matrix
| Status | Condition | Retryable | Developer action |
|---|---|---|---|
200 |
Credentials, source IP, target instance, and CAN.LOGIN permission were accepted and a session JWT was issued. | No | Continue with the returned identity representation. |
400 |
Credentials, whitelist, instance, or login permission are invalid without disclosing which identity fact exists. | No | Correct the documented credential, permission, state, or dependency condition before retrying. |
500 |
The identity or session store could not complete authentication. | Yes | Correct the documented credential, permission, state, or dependency condition before retrying. |
Related operations and events
- Operation
auth_post_authChallengePre - Operation
auth_post_authChallengeSend - Operation
auth_post_authChallengeVerify - Operation
auth_get_authVerifySession - Operation
auth_post_authCaldavVerify - Operation
auth_post_authVerifyToken - Operation
auth_post_authLocal - Operation
auth_post_authReset
Source trace
Repository: feradelinc/feradel.auth.api
Branch: agent/auth-security-hardening
Commit: 8e09b7213fdbc5e0e1552d5271dbeee768e9dd88
Route: routes/api/v1/auth/routes.js
Handler: controller.login
Contract: OpenAPI 3.1, source-traced and publication-validated.