Authentication API Reference
This reference covers authentication endpoints and token management in the FG API platform.
Authentication Overview
FG API uses JWT (JSON Web Token) based authentication with refresh tokens for secure access management.
Token Types
Access Token
Purpose: Authenticate API requests
Lifetime: 1 hour
Usage: Include in Authorization header for API calls
Format:
Bearer YOUR_ACCESS_TOKEN
Refresh Token
Purpose: Obtain new access tokens
Lifetime: 7 days
Usage: Exchange for new access tokens when current one expires
Format:
Bearer YOUR_REFRESH_TOKEN
Authentication Endpoints
User Login
Authenticate a user and receive access tokens.
Endpoint: POST /app/login
Headers:
Content-Type: application/jsonRequest Body:
{
"email": "user@example.com",
"password": "your-password"
}Response:
{
"user": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"username": "john_doe",
"email": "user@example.com",
"status": "approved"
}
}Error Responses:
401 Unauthorized (Invalid credentials):
{
"error": "Invalid email or password"
}403 Forbidden (Account pending approval):
{
"error": "account pending approval"
}429 Too Many Requests (Rate limited):
{
"error": "Too many authentication attempts, please try again later",
"retryAfter": "15 minutes"
}User Registration
Register a new user account.
Endpoint: POST /app/register
Headers:
Content-Type: application/jsonRequest Body:
{
"username": "john_doe",
"email": "user@example.com",
"password": "secure-password",
"approvalCode": "APPROVAL_CODE"
}Response:
{
"message": "User registered successfully. Account pending approval."
}Error Responses:
400 Bad Request (Validation error):
{
"error": "validation failed",
"details": "Email is required"
}409 Conflict (User already exists):
{
"error": "duplicate entry",
"details": "A user with this email already exists"
}403 Forbidden (Invalid approval code):
{
"error": "Invalid approval code"
}Refresh Access Token
Get a new access token using a refresh token.
Endpoint: POST /app/refresh
Headers:
Authorization: Bearer YOUR_REFRESH_TOKEN
Content-Type: application/jsonResponse:
{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}Error Responses:
401 Unauthorized (Invalid refresh token):
{
"error": "Invalid refresh token"
}401 Unauthorized (Refresh token expired):
{
"error": "Refresh token expired"
}Using Authentication
Making Authenticated Requests
Include the access token in the Authorization header:
fetch('https://your-api.com/api/endpoints', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'Content-Type': 'application/json'
}
})Automatic Token Refresh
The client automatically handles token refresh:
- Request with expired token → Returns 401
- Client detects 401 → Automatically calls refresh endpoint
- New access token received → Updates stored token
- Original request retried → With new access token
- Request succeeds → User stays logged in
Token Storage
Tokens are stored securely in the browser's localStorage:
// Storing tokens after login
localStorage.setItem('user', JSON.stringify({
accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
refreshToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
username: 'john_doe',
email: 'user@example.com',
status: 'approved'
}));
// Retrieving tokens for API calls
const userData = JSON.parse(localStorage.getItem('user'));
const accessToken = userData.accessToken;User Status
Pending Approval
Status:
"pending"Access: Limited to authentication endpoints only
Actions: Cannot create or manage APIs
Next Step: Wait for administrator approval
Approved Users
Status:
"approved"Access: Full access to all platform features
Actions: Can create, edit, and delete APIs
Features: Access to analytics, monitoring, and management tools
Security Features
Rate Limiting
Authentication Endpoints
Limit: 5 requests per 15 minutes
Scope: Per IP address + User Agent
Purpose: Prevent brute force attacks
API Endpoints
Limit: 100 requests per 15 minutes
Scope: Per IP address (fallback) or per authenticated user
Purpose: Prevent API abuse
User-Specific Limits
Limit: 200 requests per 15 minutes
Scope: Per authenticated user
Purpose: Fair usage for authenticated users
Token Security
Access Token Security
Lifetime: 1 hour (short-lived for security)
Storage: Browser localStorage
Usage: API request authentication
Refresh: Automatic via refresh token
Refresh Token Security
Lifetime: 7 days (longer-lived for convenience)
Storage: Browser localStorage
Usage: Obtain new access tokens
Rotation: New refresh token on each refresh
CORS Protection
Origin Validation: Only configured domains allowed
Credentials: Proper handling of cookies and auth headers
Preflight: Cached preflight requests for performance
Error Handling
Authentication Errors
Token Missing
{
"error": "token missing"
}Token Invalid
{
"error": "token invalid"
}Token Expired
{
"tokenExpired": true,
"error": "token expired"
}Account Pending Approval
{
"error": "account pending approval"
}Rate Limiting Errors
Too Many Requests
{
"error": "Too many requests, please try again later",
"retryAfter": "15 minutes"
}Authentication Rate Limit
{
"error": "Too many authentication attempts, please try again later",
"retryAfter": "15 minutes"
}Best Practices
Password Security
Use strong, unique passwords
Don't share credentials
Change passwords regularly
Use password managers
Token Management
Don't manually edit tokens in browser storage
Log out when using shared computers
Report suspicious activity immediately
Monitor your API usage regularly
API Security
Always use HTTPS for API requests
Don't expose tokens in client-side code
Implement proper error handling
Monitor for unusual activity
Examples
Complete Authentication Flow
1. User Registration
const registerResponse = await fetch('/app/register', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: 'john_doe',
email: 'john@example.com',
password: 'secure-password',
approvalCode: 'APPROVAL_CODE'
})
});
const registerData = await registerResponse.json();
console.log(registerData.message); // "User registered successfully. Account pending approval."2. User Login
const loginResponse = await fetch('/app/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: 'john@example.com',
password: 'secure-password'
})
});
const loginData = await loginResponse.json();
const { accessToken, refreshToken } = loginData.user;
// Store tokens
localStorage.setItem('user', JSON.stringify(loginData.user));3. Making Authenticated API Calls
const userData = JSON.parse(localStorage.getItem('user'));
const accessToken = userData.accessToken;
const apiResponse = await fetch('/api/endpoints', {
method: 'GET',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
}
});
const endpoints = await apiResponse.json();4. Automatic Token Refresh
// This happens automatically in the background
const refreshResponse = await fetch('/app/refresh', {
method: 'POST',
headers: {
'Authorization': `Bearer ${refreshToken}`,
'Content-Type': 'application/json'
}
});
const refreshData = await refreshResponse.json();
const newAccessToken = refreshData.accessToken;
// Update stored token
const updatedUser = {
...userData,
accessToken: newAccessToken
};
localStorage.setItem('user', JSON.stringify(updatedUser));cURL Examples
Login
curl -X POST https://your-api.com/app/login \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "your-password"
}'Register
curl -X POST https://your-api.com/app/register \
-H "Content-Type: application/json" \
-d '{
"username": "john_doe",
"email": "user@example.com",
"password": "secure-password",
"approvalCode": "APPROVAL_CODE"
}'Refresh Token
curl -X POST https://your-api.com/app/refresh \
-H "Authorization: Bearer YOUR_REFRESH_TOKEN" \
-H "Content-Type: application/json"Authenticated API Call
curl -X GET https://your-api.com/api/endpoints \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json"Troubleshooting
Common Issues
"Account pending approval"
Your account is waiting for administrator approval
Contact your administrator for approval
You'll receive access once approved
"Token expired"
Your access token has expired
The system will automatically refresh it
If refresh fails, you'll need to log in again
"Too many requests"
You've hit the rate limit
Wait 15 minutes before trying again
Consider reducing request frequency
"Invalid credentials"
Check your email and password
Ensure caps lock is off
Try resetting your password if needed
Getting Help
Check the Authentication Guide
Contact support through the platform
Review error messages for specific details
Check your account status in the dashboard