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

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://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.

FieldTypeDescription
tokenstringThe bearer token you sent, echoed back.
user.idintegerUser id.
user.usernamestringUsername (usually the email address). Empty string when not set.
user.emailstringEmail address.
user.inactive_atstring | nullWhen the user is scheduled to be deactivated, or null.
user.email_verified_atstring | nullWhen the email address was verified.
user.phone_numberstringPhone number. Empty string when not set.
user.first_namestring | nullFirst name.
user.last_namestring | nullLast name.
user.titlestring | nullJob title.
user.rolestringOne of Owner, Admin User, Basic User, Brand Assigned, Location Assigned, User.
user.total_locationintegerNumber of locations the user can reach.
company.idintegerThe user's company id.
company.namestringCompany name.
company.bundle_idintegerCompany level: 1 partner, 3 account, 2 location.
company.companyindustry_idinteger | nullIndustry id.
company.enable_insight_reportinteger1 when insight reports are enabled, else 0.
company.enable_competitive_analysisinteger1 when competitive reports are enabled, else 0.
company.dormant_accounts_enabledinteger1 when dormant-account archiving is enabled, else 0.
company.is_sub_partnerinteger1 when the company is a sub-partner, else 0.
company.company_optionobject | nullcompany_id, who_will_pay (string), and the booleans enable_generic_alert, enable_insight_report, enable_competitive_analysis.
company.company_industryobject | nullid and name of the industry.
theme_optionsstring | nullTheme settings as a JSON-encoded string.
white_labelobjectlogo, 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.
planobject | nullAccount 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."
}
StatusMeaning
200The token is valid.
401The token is missing, expired, revoked, or was issued by the other environment.
500Unexpected 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'

Did this page help you?