Check your token
Overview
Confirm that a bearer token is valid and see who it acts as: the user, their company, the company's theme and white-label branding and, for account tokens, the assigned plan.
Make this your first call after you get a token, and use it again whenever you need to confirm a token still works before a batch of requests. A 401 means the token is missing, expired or revoked.
Prerequisites
- A bearer token. See Authentication for how to get one.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
A token only works on the environment that issued it.
Endpoint
GET /api/v1/verify-token
Authentication
Partner or Account token
- Send the token in the
Authorization: Bearer <bearer-token>header. - The response always describes the token's own user and company. There is nothing to scope and no id to pass.
Rate limit
This endpoint has no rate limit. Responses do not include X-RateLimit-* headers.
Request parameters
None.
Request body
None.
Request payload
None.
Response body
The payload is inside data.
| Field | Type | Description |
|---|---|---|
token | string | The bearer token you sent, echoed back. |
user.id | integer | User id. |
user.username | string | Username (usually the email address). Empty string when not set. |
user.email | string | Email address. |
user.inactive_at | string | null | When the user is scheduled to be deactivated, or null. |
user.email_verified_at | string | null | When the email address was verified. |
user.phone_number | string | Phone number. Empty string when not set. |
user.first_name | string | null | First name. |
user.last_name | string | null | Last name. |
user.title | string | null | Job title. |
user.role | string | One of Owner, Admin User, Basic User, Brand Assigned, Location Assigned, User. |
user.total_location | integer | Number of locations the user can reach. |
company.id | integer | The user's company id. |
company.name | string | Company name. |
company.bundle_id | integer | Company level: 1 partner, 3 account, 2 location. |
company.companyindustry_id | integer | null | Industry id. |
company.enable_insight_report | integer | 1 when insight reports are enabled, else 0. |
company.enable_competitive_analysis | integer | 1 when competitive reports are enabled, else 0. |
company.dormant_accounts_enabled | integer | 1 when dormant-account archiving is enabled, else 0. |
company.is_sub_partner | integer | 1 when the company is a sub-partner, else 0. |
company.company_option | object | null | company_id, who_will_pay (string), and the booleans enable_generic_alert, enable_insight_report, enable_competitive_analysis. |
company.company_industry | object | null | id and name of the industry. |
theme_options | string | null | Theme settings as a JSON-encoded string. |
white_label | object | logo, white_url, favicon, title, status, login_logo, company_id and email_templates_enabled (boolean). With no branding set anywhere up the account tree, the defaults are logo, favicon and login_logo empty, status inactive, company_id null, and title the platform name. |
plan | object | null | Account tokens only: id, plan_name, status, plan_type, enforcement_mode, is_admin_managed (boolean) and features[] (id, plan_id, feature_name, and the booleans enabled, hard_stop). null for partner tokens, or when the account has no plan. |
Response payload
An account token:
{
"data": {
"token": "<bearer-token>",
"user": {
"id": 12,
"username": "[email protected]",
"email": "[email protected]",
"inactive_at": null,
"email_verified_at": "2026-06-11T10:34:52.000000Z",
"phone_number": "123-456-7890",
"first_name": "John",
"last_name": "Doe",
"title": "Owner",
"role": "Owner",
"total_location": 3
},
"company": {
"id": 42,
"name": "Acme Brand",
"bundle_id": 3,
"companyindustry_id": 7,
"enable_insight_report": 1,
"enable_competitive_analysis": 0,
"dormant_accounts_enabled": 0,
"is_sub_partner": 0,
"company_option": {
"company_id": 42,
"who_will_pay": "partner",
"enable_generic_alert": false,
"enable_insight_report": true,
"enable_competitive_analysis": false
},
"company_industry": {
"id": 7,
"name": "Trades & Services"
}
},
"theme_options": "{\"mode\":\"system\",\"skin\":\"default\",\"primaryColor\":\"#f1874c\"}",
"white_label": {
"logo": "https://d2ny6zb7otrnhl.cloudfront.net/white-label/logo/example.png",
"white_url": "https://production.shoutaboutus.com",
"favicon": "https://d2ny6zb7otrnhl.cloudfront.net/white-label/favicon/example.png",
"title": "Acme Reviews",
"status": "active",
"login_logo": "",
"company_id": 5,
"email_templates_enabled": true
},
"plan": {
"id": 4,
"plan_name": "Gold",
"status": "active",
"plan_type": "plan-based",
"enforcement_mode": "per-location",
"is_admin_managed": true,
"features": [
{
"id": 301,
"plan_id": 4,
"feature_name": "ai_response",
"enabled": true,
"hard_stop": false
},
{
"id": 302,
"plan_id": 4,
"feature_name": "response_posting",
"enabled": true,
"hard_stop": true
}
]
}
}
}Examples
Success payload
A partner token returns the same shape. company.bundle_id is 1 and plan is null:
{
"data": {
"token": "<bearer-token>",
"user": {
"id": 8,
"username": "[email protected]",
"email": "[email protected]",
"inactive_at": null,
"email_verified_at": "2026-06-11T10:34:52.000000Z",
"phone_number": "123-456-7890",
"first_name": "John",
"last_name": "Doe",
"title": "Director",
"role": "Owner",
"total_location": 128
},
"company": {
"id": 5,
"name": "Acme Partner",
"bundle_id": 1,
"companyindustry_id": null,
"enable_insight_report": 1,
"enable_competitive_analysis": 1,
"dormant_accounts_enabled": 1,
"is_sub_partner": 0,
"company_option": {
"company_id": 5,
"who_will_pay": "partner",
"enable_generic_alert": false,
"enable_insight_report": true,
"enable_competitive_analysis": true
},
"company_industry": null
},
"theme_options": "{\"mode\":\"system\",\"skin\":\"default\",\"primaryColor\":\"#f1874c\"}",
"white_label": {
"logo": "https://d2ny6zb7otrnhl.cloudfront.net/white-label/logo/example.png",
"white_url": "https://production.shoutaboutus.com",
"favicon": "https://d2ny6zb7otrnhl.cloudfront.net/white-label/favicon/example.png",
"title": "Acme Reviews",
"status": "active",
"login_logo": "",
"company_id": 5,
"email_templates_enabled": true
},
"plan": null
}
}Error payload
401 Unauthenticated
{
"message": "Unauthenticated."
}| Status | Meaning |
|---|---|
200 | The token is valid. |
401 | The token is missing, expired, revoked, or was issued by the other environment. |
500 | Unexpected server error. |
Example request
curl --request GET \
--url "https://production-api.shoutaboutus.com/api/v1/verify-token" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 18 days ago
Did this page help you?
