Retrieve the authenticated customer profile, subscription status, active add-ons, and custom development metadata.
Customer Profile
Summary
Retrieve the authenticated customer profile, subscription status, active add-ons, and custom development metadata.
Prerequisites
- Authorization: Bearer w91_live_xxx
- Content-Type: application/json for JSON requests
Returns the account that owns the public API token: profile fields, current subscription state, active add-on assignments, and safe custom-plan metadata. This endpoint is account-level. It does not accept senderId, phoneNumberId, WABA ID, or any other sender selector, because the response describes the token owner rather than a WhatsApp number.
/api/v2/user_meRetrieve the authenticated customer profile.
curl -X GET "https://graph.whats91.com/api/v2/user_me" \
-H "Authorization: Bearer w91_live_xxx"curl -X GET "https://graph.whats91.com/api/v2/user_me?authToken=w91_live_xxx"{
"success": true,
"message": "Customer profile retrieved",
"data": {
"user": {
"userId": 101,
"uid": "usr_xxx",
"name": "Customer Name",
"username": "customer",
"email": "customer@example.com",
"mobile": "919999999999",
"country": "IN",
"status": "active",
"billingType": "points",
"billingManagedByPlatform": true,
"createdAt": "2026-05-01T10:00:00.000Z",
"updatedAt": "2026-07-01T10:00:00.000Z"
},
"subscription": {
"isActive": true,
"status": "active",
"subscriptionUid": "sub_xxx",
"planUid": "plan_xxx",
"planName": "Standard",
"startDate": "2026-07-05",
"endDate": "2027-07-04",
"expiresAt": "2027-07-05T00:00:00.000Z",
"daysRemaining": 361,
"customPlan": { "hasCustomPlan": false, "metadata": null }
},
"addons": [
{
"assignmentUid": "caddon_xxx",
"addonUid": "addon_xxx",
"addonCode": 103,
"name": "Flow Builder",
"lookupKey": "flow_builder",
"category": "automation",
"status": "active",
"startDate": "2026-07-05",
"endDate": "2027-07-04",
"expiresAt": "2027-07-05T00:00:00.000Z",
"price": 299,
"currencyCode": "INR",
"metadata": null
}
],
"customDevelopment": { "hasCustomDevelopment": false, "items": [] }
},
"metadata": {
"apiVersion": "v2",
"requestId": "request-uuid"
}
}Token Scopes
Global, selected-number, and specific-number tokens can all call this endpoint, because the response belongs to the token owner rather than to any single sender. TOKEN_SCOPE_NOT_ALLOWED is never returned here.
Response Safety
- Passwords, API token hashes, and raw tokens are never returned.
- Permission blobs, encrypted values, Meta access tokens, Pusher secrets, and raw setup payloads are never returned.
- A disabled or expired subscription returns subscription.isActive: false rather than failing the request.
- Inactive and expired add-on assignments are excluded from addons.
Errors
| HTTP | error_code | Meaning |
|---|---|---|
| 401 | MISSING_AUTH_TOKEN | No bearer token and no query fallback token was provided. |
| 401 | INVALID_AUTH_TOKEN | The token is invalid, expired, or revoked. |
| 403 | CUSTOMER_TOKEN_REQUIRED | The token does not belong to a customer account. |
| 500 | USER_PROFILE_UNAVAILABLE | The profile could not be loaded safely. |
SDK Examples
Use these examples as starting points for server-side implementations.
curl -X GET "https://graph.whats91.com/api/v2/user_me" \
-H "Authorization: Bearer w91_live_xxx"const response = await fetch("https://graph.whats91.com/api/v2/user_me", {
method: "GET",
headers: {
"Authorization": "Bearer w91_live_xxx"
}
});
const data = await response.json();
console.log(data);$ch = curl_init("https://graph.whats91.com/api/v2/user_me");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer w91_live_xxx"
]
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;import requests
response = requests.request(
"GET",
"https://graph.whats91.com/api/v2/user_me",
headers={
"Authorization": "Bearer w91_live_xxx",
}
)
print(response.json())using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer w91_live_xxx");
var request = new HttpRequestMessage(HttpMethod.Get, "https://graph.whats91.com/api/v2/user_me");
var response = await client.SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());