LegitApp Server API (v1)
- Designed for business users only. For big platforms to integrate LegitApp API.
- All time in this documentation refers to UTC +0
- Last updated on: 2026 May 15
- Developer Portal (Production): http://developer.legitapp.com/
- Developer Portal (Sandbox): http://developer-a7zu.legitapp.com/
Flow Diagram

Overview
The LegitApp Developer API enables third-party applications to integrate LegitApp's authentication services into their systems with API and/or Web Submission. This RESTful API uses JSON for all request and response formats.
API
Authorization
All API requests must be authorized with a developer secret key. Set this key in the HTTP Authorization header:
Authorization: Bearer DEVELOPER_SECRET_KEY
Developer Secret Key
The developer secret key can be accessed in your developer account

Example Code
This example demonstrates how to use TypeScript with Express to make LegitApp API calls and handle webhook events from the LegitApp server
https://github.com/legitappcom/legitapp-developer-api-example
Postman collection for testing this sample code
Base URL
Production: https://developer-api.legitapp.com/v1
Endpoints
1. Get Category List GET /product_category
Return a list of supported categories. The id of the selected category is required for other endpoints.
Headers
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer {{DEVELOPER_SECRET_KEY}} |
| Accept-Language | String | Language of category titles. In English by default. Supporting language codes: 1. English - en 2. Polish - pl 3. Chinese (Simplied) - zh-Hans 4. Chinese (Traditional) - zh-Hant 5. Japanese - ja |
-
cURL Example:
GEThttps://developer-api.legitapp.com/v1/product_categorycurl --location 'https://developer-api.legitapp.com/v1/product_category' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY'--header 'Accept-Language: en' -
200: OK
{"data": [{"id": 1, // category id"title": "Sneakers", // multi-lang supported"icon_image_url": "https://legitapp-prod.oss-accelerate.aliyuncs.com/2022121855af36a336d46fa9.png"},{"id": 2, // category id"title": "Streetwear", // multi-lang supported"icon_image_url": "https://legitapp-prod.oss-accelerate.aliyuncs.com/2020080594643c63fba91706.png"},]} -
404: Not Found
{"errors": [{"id": "NOT_FOUND","message": "We couldn't find the resources. Please check and try again.","code": 404,}]}
2. Get Brand List GET /product_brand
Return a list of supported brands based on the selected category. The id of the selected brand is required for other endpoints.
Headers
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer {{DEVELOPER_SECRET_KEY}} |
Query Parameters
| Name | Type | Description |
|---|---|---|
| category_id* | Number | id in category object |
-
cURL Example:
GEThttps://developer-api.legitapp.com/v1/product_brand?category_id=1curl --location 'https://developer-api.legitapp.com/v1/product_brand?category_id=1' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY' -
200: OK
{"data": [{"id": 1, // brand id"title": "Air Jordan","slug": "air-jordan","icon_image_url": "https://legitapp-prod.oss-accelerate.aliyuncs.com/20200805a364b32e39ccf854.png"},{"id": 2, // brand id"title": "Nike","slug": "nike","icon_image_url": "https://legitapp-prod.oss-accelerate.aliyuncs.com/202008057146e477927daff3.png"},]} -
404: Not Found
{"errors": [{"id": "NOT_FOUND","message": "We couldn't find the resources. Please check and try again.","code": 404,}]}
3. Get Model List GET /product_model
Return a list of supported models based on the selected category and brand. The id of the selected model is required for other endpoints.
Headers
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer {{DEVELOPER_SECRET_KEY}} |
Query Parameters
| Name | Type | Description |
|---|---|---|
| category_id* | Number | id in category object |
| brand_id* | Number | id in brand object |
-
cURL Example:
GEThttps://developer-api.legitapp.com/v1/product_brand?category_id=1&brand_id=1curl --location 'https://developer-api.legitapp.com/v1/product_model?category_id=1&brand_id=1' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY' -
200: OK
{"data": [{"id": 1, // model id"title": "Jordan 1","icon_image_url": "https://legitapp-prod.oss-accelerate.aliyuncs.com/20200805ad9a76acf6fb75f1.png"},{"id": 2, // model id"title": "Jordan 2","icon_image_url": "https://legitapp-prod.oss-accelerate.aliyuncs.com/202008057200b9222fb14047.png"},]} -
404: Not Found
{"errors": [{"id": "NOT_FOUND","message": "We couldn't find the resources. Please check and try again.","code": 404,}]}
4. Get Authentication Set GET /authentication_set
Return an authentication set which decides the supported turnaround times and the required photos for authentication. The set assigned is based on the selected category, brand and model. The authentication_set_id and the turnaround_time_id are required for the submit authentication endpoint.
Headers
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer {{DEVELOPER_SECRET_KEY}} |
| Accept-Language | String | Language of titles, subtitles and descriptions. In English by default. Supporting language codes: 1. English - en 2. Polish - pl 3. Chinese (Simplied) - zh-Hans 4. Chinese (Traditional) - zh-Hant 5. Japanese - ja |
Query Parameters
| Name | Type | Description |
|---|---|---|
| category_id* | Number | service sets under this category |
| brand_id* | Number | service sets under this brand |
| model_id* | Number | service sets under this model |
| tag_id | String | identifier of the kicks tag OR luxe tag |
-
cURL Example:
GEThttps://developer-api.legitapp.com/v1/authentication_set?category_id=1&brand_id=1&model_id=1curl --location 'https://developer-api.legitapp.com/v1/authentication_set?category_id=1&brand_id=1&model_id=1' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY'--header 'Accept-Language: en' -
200: OK
{"id": 1, // the authentication set id"turn_around_time_list": [ // the supported turnaround times{"id": 1, // the turnaround_time_id"title": "< 30 Minutes", // multi-lang supported"subtitle": "3 Tokens", // multi-lang supported"minute": 30,"credit": "3.0000",},{"id": 2, // the turnaround_time_id"title": "< 15 Minutes", // multi-lang supported"subtitle": "4 Tokens", // multi-lang supported"minute": 15,"credit": "4.0000",}],"guideline": [ // a list of guidelines for taking photos{"title": "Exterior Outer", // multi-lang supported"subtitle": "Photograph your product in full (nothing is cropped out).", // multi-lang supported"image_urls": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/202009093d63c684a9ef68e5.png",},],"placeholder": [ // a list of required photos{"title": "Exterior Outer (Left)", // multi-lang supported"image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20210126b831199eb4dd177d.png","example_image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/202009093d63c684a9ef68e5.png","description": "Pinch to zoom and tap to focus.\nPhotograph your product in full.", // multi-lang supported"required": true, // this photo must be provided (optional for false)},]} -
404: Not Found
{"errors": [{"id": "NOT_FOUND","message": "We couldn't find the resources. Please check and try again.","code": 404,}]}
5. Upload Image V1 POST /asset_image
This endpoint returns the URL path of the uploaded image which will b6e required for the submit authentication endpoint.
- file size limit: 10MB
Headers
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer {{DEVELOPER_SECRET_KEY}} |
Body Parameters (form-data)
| Name | Type | Description |
|---|---|---|
| file* | File | jpg/png image |
-
cURL Example:
POSThttps://developer-api.legitapp.com/v1/asset_imagecurl --location 'https://developer-api.legitapp.com/v1/asset_image' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY' \--form 'file=@"/path/to/file"' -
200: OK
{~~~~ "url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250101ac1e3aa40613446f.JPG",~~~~} -
404: Not Found
{"errors": [{"id": "NOT_FOUND","message": "We couldn't find the resources. Please check and try again.","code": 404,}]}
6. Submit Authentication POST /authentication
After submitting an authentication, $LEGIT Tokens will be deducted according to the selected turnaround time, and an authentication ID will be provided.
Headers
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer {{DEVELOPER_SECRET_KEY}} |
Body Parameters
| Name | Type | Description |
|---|---|---|
| authentication_set_id* | String | id in endpoint 4 |
| category_id* | Number | id in endpoint 1 |
| brand_id* | Number | id in endpoint 2 |
| model_id* | Number | id in endpoint 3 |
| turnaround_time_id* | Number | id in turn_around_time_list object in endpoint 4 |
| images* | Array | Array of Objects |
| images['image_url']* | String | the url returned in endpoint 5 |
| user_custom_code | String | optional |
| user_remark | String | optional |
| tag_id | String | optional; identifier of the kicks tag OR luxe tag |
-
cURL Example:
POSThttps://developer-api.legitapp.com/v1/authenticationcurl --location 'https://developer-api.legitapp.com/v1/authentication' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY' \--data '{"authentication_set_id": 1,"category_id": 1,"brand_id": 1,"model_id": 1,"turnaround_time_id": 1,"images": [{"image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250101mz238n238ncn2377.JPG"},{"image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250101bv3q2n8324bzm8c2.JPG"},{"image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250101hf32zm3289x3fz83.JPG"}],"user_custom_code": "ABC123","user_remark": "I bought this from ABC online shop."}' -
200: OK
{"authentication_id": "1234567890123456",} -
400: Bad Request
{"errors": [{"id": "BAD_REQUEST","message": "Please provide category/brand/model id.","code": 400,}]} -
400: Bad Request
{"errors": [{"id": "BAD_REQUEST","message": "Please upload all the required photos for authentication.","code": 400,}]}
7. Submit Extra Photos for Authentication POST /authentication/:id/photo
Extra photos may be required. Use the endpoint 5 to obtain the URLs for the required additional photos.
Headers
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer {{DEVELOPER_SECRET_KEY}} |
Body Parameters
| Name | Type | Description |
|---|---|---|
| images* | Array | Array of Objects |
| images['image_url']* | String | the url returned in endpoint 5 |
-
cURL Example:
POSThttps://developer-api.legitapp.com/v1/authentication/1234567890123456/photocurl --location 'https://developer-api.legitapp.com/v1/authentication/1234567890123456/photo' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY' \--data '{"images": [{"image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250101ac1e3aa40613446f.JPG"},{"image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250101qw8ebc79qcqecqb7.JPG"}]}' -
200: OK
{"success": true} -
404: Not Found
{"errors": [{"id": "NOT_FOUND","message": "The selected authentication is not available. Please select again.","code": 404,}]} -
400: Bad Request
{"errors": [{"id": "BAD_REQUEST","message": "The request of extra photo has been cancelled.","code": 400,}]}
8. Get Authentication Detail
GET /authentication/:id
GET /authentication/tag/:tagId
GET /authentication/user_custom_code/:code
Return the details of an completed authentictaion created by LegitApp API (API / Web Submiision Integration) by one of these: authentication id, tag id or user custom code. Note: only result with either authentic or replica is supported.
Headers
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer {{DEVELOPER_SECRET_KEY}} |
-
cURL Example:
GEThttps://developer-api.legitapp.com/v1/authentication/1234567890123456curl --location 'https://developer-api.legitapp.com/v1/authentication/1234567890123456' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY'GEThttps://developer-api.legitapp.com/v1/authentication/tag/S15TQ3RTX5PPcurl --location 'https://developer-api.legitapp.com/v1/authentication/tag/S15TQ3RTX5PP' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY'GEThttps://developer-api.legitapp.com/v1/authentication/user_custom_code/ABC 1-2 Hermescurl --location 'https://developer-api.legitapp.com/v1/authentication/user_custom_code/ABC 1-2 Hermes' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY' -
200: OK
{"authentication_id": "1234567890123456","authentication_token": 20,"item": "Luxury Handbags - Hermes","item_full": "Luxury Handbags, Hermes, Double Sens Tote","cover_image": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250101mz238n238ncn2377.JPG","turnaround_time": 180,"status": "completed","result": "authentic","fake_rating": null,"category_id": 4,"brand_id": 141,"model_id": 457,"tag_id": "S15TQ3RTX5PP","user_custom_code": "ABC 1-2 Hermes","user_remark": "I bought this from ABC online shop.","created_at": "2026-01-01T09:00:00.000Z","updated_at": "2026-01-30T04:21:13.000Z","images": [{"image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250101mz238n238ncn2377.JPG"},{"image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250101bv3q2n8324bzm8c2.JPG"},{"image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250101hf32zm3289x3fz83.JPG"}],"logs": [{"action_title": "Service Request Submitted","action_subtitle": "Authentication Service - 180 Minutes","created_at": "2026-01-01T09:00:00.000Z"},{"action_title": "Authenticator Reviewed:","action_subtitle": "LegitApp AI Model V1 provided a result. Please wait for our next authenticator.","created_at": "2026-01-01T09:00:10.000Z"},{"action_title": "Authenticator Reviewed:","action_subtitle": "Additional photos required","created_at": "2026-01-01T09:01:00.000Z"},{"action_title": "User:","action_subtitle": "Additional photos uploaded","created_at": "2026-01-01T09:02:00.000Z"},{"action_title": "Authenticator Reviewed:","action_subtitle": "Authenticator - OX1 provided a result. Please wait for our next authenticator.","created_at": "2026-01-01T09:03:00.000Z"},{"action_title": "Authenticator Reviewed:","action_subtitle": "Authenticator - OX2 provided a result.","created_at": "2026-01-01T09:04:00.000Z"},{"action_title": "Final Result:","action_subtitle": "The result is AUTHENTIC.","created_at": "2026-01-01T09:05:00.000Z"},],"extra_photo_requests": [{"checker_extra_example_image_urls": null,"checker_extra_part_image_required": null,"checker_extra_remark": null,"placeholder": null,"status": "completed","created_at": "2026-01-01T09:01:00.000Z","completed_at": "2026-01-01T09:02:00.000Z"}],"certificate_pdf_url": "https://legitapp-prod.oss-accelerate.aliyuncs.com/certificates/1234567890123456/v1_20260101_123a1b45.pdf"} -
404: Not Found
{"errors": [{"id": "NOT_FOUND","message": "The selected authentication is not available. Please select again.","code": 404,}]}
9. Get Token Balance GET /token_balance
Return account's token balance
Headers
| Name | Type | Description |
|---|---|---|
| Authorization* | String | Bearer {{DEVELOPER_SECRET_KEY}} |
-
cURL Example:
GEThttps://developer-api.legitapp.com/v1/token_balancecurl --location 'https://developer-api.legitapp.com/v1/token_balance' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer DEVELOPER_SECRET_KEY' -
200: OK
{"token_balance": 67} -
401: Unauthorised
{"errors": [{"id": "UNAUTHORISED","message": "Your account has been disabled. For more details, please contact us.","code": 401,}]}
Webhook
Receive LegitApp events in your webhook endpoint
Listen to events in your LegitApp Developer account on your webhook endpoint so your backend systems can automatically execute actions accordingly.
Create an event destination to receive events at an HTTPS webhook endpoint. After you register a webhook endpoint in the Developer Portal, LegitApp can push real-time event data to your application's webhook endpoint when events happen in your developer account. LegitApp uses HTTPS to send webhook events to your app as a JSON object that includes an Event object.
Get Started
To start receiving webhook events in your server:
- Create a webhook endpoint handler to receive event data POST requests.
- Register your endpoint in the LegitApp Developer Portal.
- Test your webhook endpoint handler.
1. Create a Webhook Endpoint Handler
Set up an HTTP or HTTPS endpoint function that can accept webhook requests with a POST method. If you're still developing your endpoint function on your local machine, it can use HTTP. After it's publicly accessible, your webhook endpoint function must use HTTPS.
Set up your endpoint function so that it:
- Handles POST requests with a JSON payload consisting of an Event object
- Quickly returns a successful status code (
200) prior to any complex logic that could cause a timeout.
// This example uses Express to receive webhooks
const express = require('express');
const app = express();
app.post('/webhook', (request, response) => {
const event = request.body;
// Handle the event
switch (event.type) {
case 'authentication.new_message':
// handleAuthenticationNewMessage(event);
break;
case 'authentication.extra_photo':
// handleAuthenticationExtraPhoto(event);
break;
case 'authentication.completed':
// handleAuthenticationCompleted(event);
break;
// ... handle other event types
default:
console.log(`Unhandled event type ${event.type}`);
}
// Return a response to acknowledge receipt of the event
return response.sendStatus(200);
});
// Listen to the port used in your application
app.listen(4242, () => console.log('Running on port 4242'));
2. Register and Configure Your Webhook Endpoint
Visit https://developer.legitapp.com and go to the Web Hook section. Input your server's destination endpoint URL into the Webhook Endpoint URL field.
You may also choose which order origins should trigger a webhook notification. You can filter events based on your integration needs:
- Order created via API (Default): Only receive events for orders submitted via API
- Order created via App: Only receive events for orders submitted via our App.
- All new orders: Receive events for all orders associated with your business account, regardless of the submission source.

3. Test Your Handler
Testing your webhook logic is the most critical step before moving to production. Before deploying your integration to production, we highly recommend verifying your logic using our Sandbox Testing Environment.
- Navigate to Orders: Go to the Authentication Orders section to view a list of orders created via the API in your Sandbox environment.
- Filter by Status: Select the IN PROGRESS tab. Since webhook events are only triggered by active cases, this view allows you to focus on orders ready for testing.
- Simulate Events: Within the Sandbox, you can manually trigger 3 ****specific event types to ensure your system processes different event type correctly.

Types of Event
-
authentication.new_message
-
Triggered when our checkers send you a new message
-
Example:
{"id": "event_5201ah754c5ebc762a66f7fd9ad7d9","object": "event","api-version": "v1","created_at": "2025-01-01 00:00:00","livemode": true,"type": "authentication.new_message","data": {"event_type": "authentication.new_message","authentication_id": "1234567890123456","authentication_token": 10,"user_custom_code": "ABC 1-2 Hermes","content": "Please take another photo with flashlight ON"},}
-
-
authentication.extra_photo
-
Triggered when our checkers request for extra photo(s)
-
Example:
{"id": "event_a8fm30ff8s5eb87gn3kd7gbd9accna","object": "event","api-version": "v1","created_at": "2025-01-01 00:00:00","livemode": true,"type": "authentication.extra_photo","data": {"event_type": "authentication.extra_photo","authentication_id": "1234567890123456","authentication_token": 10,"user_custom_code": "ABC 1-2 Hermes","checker_extra_example_image_urls": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250102dn3n4aa40613551a.jpg,https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20250102dn3n4aa7fj4l33nf.jpg","checker_extra_part_image_required": "Exterior Outer (Left), Box Label","checker_extra_remark": "Please use camera flash.","placeholder": [ // a list of required photos{"title": "Exterior Outer (Left)","image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/20210126b831199eb4dd177d.png","example_image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/202009093d63c684a9ef68e5.png","description": "Pinch to zoom and tap to focus.\nPhotograph your product in full.",},{"title": "Box Label","image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/2020080512f59cb060ef1976.png","example_image_url": "https://legitapp-prod.oss-cn-hongkong.aliyuncs.com/202010191ba8a6f7a28699a6.png","description": "Pinch to zoom and tap to focus.\nPhotograph your product in full.",},]},}
-
-
authentication.completed
-
Triggered when our checkers have completed your authentication
-
Example:
{"id": "event_7423fj424c5ebb746a67f7fd9a2j33","object": "event","api-version": "v1","created_at": "2025-01-01 00:00:00","livemode": true,"type": "authentication.completed","data": {"event_type": "authentication.completed","authentication_id": "1234567890123456","authentication_token": 10,"user_custom_code": "ABC 1-2 Hermes","result": "inconclusive", // authentic/replica/inconclusive"certificate_url": "https://legitapp.com/en/cert/1234567890123456"},}certificate_urlis only available in Production environment and when the result is either authentic OR replica
-
Event Delivery & Retry Logic
If your webhook endpoint fails to return a successful response, LegitApp is able to attempt to redeliver the event.
-
Automated Retry Schedule
LegitApp makes a total of 3 attempts to deliver an event. If an attempt fails, the retry schedule is as follows:
- Initial Attempt: Triggered immediately upon the event occurrence.
- Second Attempt: Triggered 30 minutes after the first failure.
- Third (Final) Attempt: Triggered 1 hour after the second failure.
You can monitor the status of these attempts and see exactly when the next retry is scheduled by visiting the Events page in the Developer Portal.
-
Manual Retries
In addition to automated retries, you have the option to manually trigger a redelivery for any individual event. This is particularly useful for testing your endpoint's error handling or recovering from a temporary server outage.
To manually retry an event, go to the Events list in your Developer Portal and click the "Retry Event" button next to the desired log entry.

Errors
Error Object Structure
{
"errors": [
{
"id": "INVALID_REQUEST",
"message": "The request is invalid. Please check and try again.",
"code": 400
}
]
}
| Field | Description |
|---|---|
| id | A short, machine-readable identifier representing the specific error type. |
| message | A human-readable explanation of the error, often including hints to resolve the issue. |
| code | HTTP status code associated with the error. |
HTTP Status Code Summary
| Code | Title | Description |
|---|---|---|
| 200 | OK | Everything worked as expected. |
| 201 | Created | The server has successfully created a new resource |
| 400 | Bad Request | The request was unacceptable—usually due to missing or invalid parameters. |
| 401 | Unauthorized | No valid authentication credentials provided. |
| 403 | Forbidden | The user does not have permission to perform this action. |
| 404 | Not Found | The requested resource does not exist. |
| 500 | Internal Server Errors | A server-side failure occurred. Please report to LegitApp team if this happens. |
| 503 | Service Unavailable | Website's server is temporarily unable to handle your request. |
Error ID Reference Table
| Error ID | Description |
|---|---|
| PARAM_REQUIRED | One or more required parameters are missing. Include all required fields and try again. |
| EXCEED_UPLOAD_LIMIT | The uploaded file exceeds the maximum allowed size. Reduce the file size and retry. |
| VALIDATION_ERROR | One or more parameters failed validation. Verify all input fields and try again. |
| INVALID_REQUEST | The request is malformed or contains invalid data. |
| DUPLICATED_RECORD | A record with the same data already exists and cannot be created again. |
| INVALID_LOGIN_USER | The user account is disabled and cannot be used to log in. |
| INVALID_TOKEN | The provided authentication token is invalid. |
| EXPIRED_TOKEN | The login session has expired. Please sign in again. |
| INVALID_PERMISSION | The user does not have permission to access this resource. |
| NOT_FOUND | The requested resource could not be found. |
| INTERNAL_SERVER_ERROR | An unexpected server error occurred. Please try again later. |