curl -X POST 'https://api.weir.ai/auth/refresh/token' \
-H 'Content-Type: application/json' \
-d '{
"refreshToken": "refresh_token_123456789"
}'
{
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"refreshToken": "new_refresh_token_987654321",
"expiresIn": 3600
},
"message": "Token refreshed successfully",
"status": "success"
}
Refresh expired access tokens using refresh tokens
curl -X POST 'https://api.weir.ai/auth/refresh/token' \
-H 'Content-Type: application/json' \
-d '{
"refreshToken": "refresh_token_123456789"
}'
{
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"refreshToken": "new_refresh_token_987654321",
"expiresIn": 3600
},
"message": "Token refreshed successfully",
"status": "success"
}
curl -X POST 'https://api.weir.ai/auth/refresh/token' \
-H 'Content-Type: application/json' \
-d '{
"refreshToken": "refresh_token_123456789"
}'
{
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"refreshToken": "new_refresh_token_987654321",
"expiresIn": 3600
},
"message": "Token refreshed successfully",
"status": "success"
}
Show Token Data Properties
400 Bad Request
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request parameters",
"details": {
"refreshToken": "Refresh token is required"
}
},
"status": "error"
}
401 Unauthorized
{
"error": {
"code": "INVALID_REFRESH_TOKEN",
"message": "Invalid or expired refresh token",
"details": "The provided refresh token is invalid or has expired"
},
"status": "error"
}
429 Too Many Requests
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many refresh requests",
"details": "Rate limit of 20 refresh requests per minute exceeded"
},
"status": "error"
}
const refreshToken = async (refreshTokenValue) => {
try {
const response = await fetch('https://api.weir.ai/auth/refresh/token', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ refreshToken: refreshTokenValue })
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
// Update stored tokens
localStorage.setItem('accessToken', data.data.accessToken);
localStorage.setItem('refreshToken', data.data.refreshToken);
return data;
} catch (error) {
console.error('Token refresh error:', error);
throw error;
}
};
// Usage
const newTokens = await refreshToken('refresh_token_123456789');
console.log('New access token:', newTokens.data.accessToken);
Automatic Refresh
class TokenManager {
constructor() {
this.accessToken = localStorage.getItem('accessToken');
this.refreshToken = localStorage.getItem('refreshToken');
this.tokenExpiresAt = localStorage.getItem('tokenExpiresAt');
}
async makeRequest(url, options = {}) {
// Check if token needs refresh (5 minutes before expiration)
if (this.tokenExpiresAt && Date.now() >= this.tokenExpiresAt - 300000) {
await this.refreshAccessToken();
}
return fetch(url, {
...options,
headers: {
'Authorization': `Bearer ${this.accessToken}`,
'x-source': 'console',
...options.headers
}
});
}
async refreshAccessToken() {
const data = await refreshToken(this.refreshToken);
this.accessToken = data.data.accessToken;
this.refreshToken = data.data.refreshToken;
this.tokenExpiresAt = Date.now() + (data.data.expiresIn * 1000);
// Update stored tokens
localStorage.setItem('accessToken', this.accessToken);
localStorage.setItem('refreshToken', this.refreshToken);
localStorage.setItem('tokenExpiresAt', this.tokenExpiresAt);
}
}
Error Handling
async function handleTokenRefresh() {
try {
await refreshToken(currentRefreshToken);
return true; // Success
} catch (error) {
if (error.message.includes('401') || error.message.includes('INVALID_REFRESH_TOKEN')) {
// Refresh token is invalid, redirect to login
localStorage.clear();
window.location.href = '/login';
return false;
}
throw error; // Re-throw other errors
}
}
Token Rotation
Token Storage
Network Security
Implement Auto-Refresh
Handle Refresh Failures
Update Token Storage
Was this page helpful?