Ver mi cuenta

Usalo para identificar la cuenta detrás de tu clave y conocer su plan, los límites de números y agentes, el rol, la zona horaria y el idioma, por ejemplo al conectar tu integración.

GET
/me

Lectura · requiere el permiso accounts:read.

Autorización

http
headerAuthorizationBearer <clave>

Cuerpo de la respuesta

UserResource

application/json
  1. response
id*string
name*string
email*string
admin*string|
role*string
token*string|
first_login_at*string
last_login_at*string
first_login_form*boolean|null
without_business_type*boolean
image*string
phone*string
timezone*string
locale*string|
owner_id*string
owner*|

Owner (principal) account exposure — backoffice-legacy-parity Increment 4. Guard: only populated when the owner relation is explicitly eager-loaded (UserController::index/getUserDetails via ->with('owner:id,name,email')). Consumers that don't eager-load it (e.g. /me, front/account) always get null here — the resource NEVER lazy-loads the relation itself, so no N+1 is possible regardless of caller.

plan*array<any>|
effective_business_numbers_limit?integer|null
effective_agents_limit?integer|null
advisor_scope*string
show_advisor_name*string
contacts*string|integer
groups*string|integer
devices*string
additional_devices*string
agents*string
payment_till*string
next_billing_at?string
last_payment_at*string|
feature_versions*string
effective_feature_versions?

Effective feature versions — beta-program-catalog-membership. Map of feature_key => bool (true = effective version is beta), resolved via VersionCheckService::isUserMigratedBatch() precedence (own row -> owner row -> catalog default_version, same as isUserMigrated() per feature, batched — see that method's docblock for the query-budget rationale). Unlike feature_versions above, this is not gated by whenLoaded — the service performs its own cached lookup rather than relying on an eager-loaded relation. Lets agents (read-only) see the version they inherit from their owner without exposing the admin-gated catalog endpoints. Scoped to the GET /me and GET /user(+/v1 alias) endpoints — the two self-serialization routes that need it per design.md D11 — rather than computed unconditionally on every UserResource serialization. Admin/agent LIST endpoints (GET /users, GET /users/agents) also render via UserResource; computing this per row there would still cost extra queries with no caching benefit across distinct users, confirmed empirically to blow the pre-existing /users N+1 smoke-test budget (35 queries) even for a single self-referencing admin row inside the list. Path-gating avoids paying that cost anywhere it isn't needed.

workspaces_enabled?string

workspaces-and-roles Inc 2 (design.md D2, tasks.md 2.8). Same path-gating as effective_feature_versions above (GET /me, GET /user only) to avoid an extra per-row cache lookup on list endpoints (GET /users, GET /users/agents) that also serialize via UserResource.

panel_usage?|

Progreso de uso del panel. Va con whenLoaded para que la lista del backoffice no dispare una consulta por fila: sin el eager load la clave no aparece, en vez de aparecer con un cero inventado.

created_at*string|
updated_at*string|
is_dormant*boolean

Dormant state — billing-dormant-account. Resolution order:

  1. subscriptions relation is loaded (AuthController, /me route) → filter in PHP.
  2. dormant_row side-channel set by UserController::getUserDetails() → back-compat.
  3. Neither loaded → defaults to false / null.
dormant_expires_at*string|null
dormant_provider*string

Dormant provider + eligibility — dormant-hotmart-support D6. dormant_provider is always resolvable (plain column read); it mirrors the same binary criterion BillingDormantService uses to branch dormant.

Valor en"hotmart""stripe"
can_enter_dormant?boolean|null
stripe_migration_incomplete*boolean

Hotmart -> Stripe migration saved without a linked subscription (plan-change-full-mac-grant-and-stripe-migration-close, D6). The boolean is harmless everywhere; the reason code is only emitted to admins (backoffice).

stripe_migration_incomplete_reason?string
mac_enforcement_enabled*boolean

MAC enforcement fields — mac-rollover-and-admin Inc 5. mac_enforcement_enabled: cast to bool so null (pre-migration) renders as false. available_mac_buckets_sum: single extra query; acceptable on /me (single user).

available_mac_buckets_sum*integer
password_set?boolean
password_set_at?string|null
curl -X GET "https://example.com/me"
{  "id": "string",  "name": "string",  "email": "string",  "admin": "string",  "role": "string",  "token": "string",  "first_login_at": "string",  "last_login_at": "string",  "first_login_form": true,  "without_business_type": true,  "image": "string",  "phone": "string",  "timezone": "string",  "locale": "string",  "owner_id": "string",  "owner": {    "id": "string",    "name": "string",    "email": "string"  },  "plan": [],  "effective_business_numbers_limit": 0,  "effective_agents_limit": 0,  "advisor_scope": "string",  "show_advisor_name": "string",  "contacts": "string",  "groups": "string",  "devices": "string",  "additional_devices": "string",  "agents": "string",  "payment_till": "string",  "next_billing_at": "string",  "last_payment_at": "string",  "feature_versions": "string",  "effective_feature_versions": {    "property1": true,    "property2": true  },  "workspaces_enabled": "string",  "panel_usage": {    "percentage": "string",    "ceiling": "string",    "used_count": "string",    "reachable_count": "string",    "total_count": "string",    "tier": "string",    "is_agent": "string",    "blocks": "string",    "computed_at": "string"  },  "created_at": "string",  "updated_at": "string",  "is_dormant": true,  "dormant_expires_at": "string",  "dormant_provider": "hotmart",  "can_enter_dormant": true,  "stripe_migration_incomplete": true,  "stripe_migration_incomplete_reason": "string",  "mac_enforcement_enabled": true,  "available_mac_buckets_sum": 0,  "password_set": true,  "password_set_at": "string"}