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.
Lectura · requiere el permiso accounts:read.
httpAuthorizationBearer <clave>UserResource
application/json- response
id*stringname*stringemail*stringadmin*string|role*stringtoken*string|first_login_at*stringlast_login_at*stringfirst_login_form*boolean|nullwithout_business_type*booleanimage*stringphone*stringtimezone*stringlocale*string|owner_id*stringowner*|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|nulleffective_agents_limit?integer|nulladvisor_scope*stringshow_advisor_name*stringcontacts*string|integergroups*string|integerdevices*stringadditional_devices*stringagents*stringpayment_till*stringnext_billing_at?stringlast_payment_at*string|feature_versions*stringeffective_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?stringworkspaces-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*booleanDormant state — billing-dormant-account. Resolution order:
- subscriptions relation is loaded (AuthController, /me route) → filter in PHP.
- dormant_row side-channel set by UserController::getUserDetails() → back-compat.
- Neither loaded → defaults to false / null.
dormant_expires_at*string|nulldormant_provider*stringDormant 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.
"hotmart""stripe"can_enter_dormant?boolean|nullstripe_migration_incomplete*booleanHotmart -> 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?stringmac_enforcement_enabled*booleanMAC 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*integerpassword_set?booleanpassword_set_at?string|nullcurl -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"}Mi cuenta
Es la cuenta de Funnelchat a la que pertenece tu clave de API: su plan, los límites de números y agentes, tu rol, la zona horaria y el idioma.
Dominios propios
Un dominio propio es un dominio tuyo, por ejemplo para los links de tus campañas, que apunta al servicio de redirección de Funnelchat.