---
title: "Get User Info"
method: GET
path: "/admin/user_info"
tags: ["accepts-api-key"]
---

# Get User Info

`GET /admin/user_info`

## Request

- Base URL: `https://api.tellers.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tellers.ai/admin/user_info`
- Auth: none declared

Everything worth knowing about one account: files, tokens, plan, storage, social. Admin only.

The storage total is measured fresh rather than read from the cache — a
support question about an account is exactly when a number an hour old is
not good enough.

## Query parameters

- `email` string, required: Email of the account to look up

## Headers

- `x-api-key` string, nullable
- `authorization` string, nullable

## Response `200`

Successful Response

- AdminUserInfoResponse
  - `user_id` string, uuid, required
  - `email` string, required
  - `firebase_uid` string, nullable
  - `credits` number, required: Spendable tellers-token balance, from the grant ledger
  - `subscription` ApiUserSubscription
    - `type` 'Monthly' | 'Yearly' | 'Enterprise', required: User-facing subscription cadence label. Enterprise is a plan set up by the Tellers team, billed outside the app: it unlocks every feature and cannot be changed or cancelled from the app.
    - `tier` 'basic' | 'pro' | 'expert' | 'enterprise_user', required: Named subscription offer; subscriptions that predate tiers read as basic. ``enterprise_user`` is granted by hand outside Stripe (see :mod:`tellers_common.enterprise_user_subscription`) and ranks above every paid tier.
    - `pricing_tier` string, nullable: Billing catalog plan `tier_id` the subscription is on (for example `monthly` or `pro_yearly`), including existing subscribers on retired prices; null when it matches no catalog plan.
    - `can_configure_tokens` boolean, required: True when the user can buy extra tokens on top of the plan (expert only).
    - `monthly_tokens` number, required: Subscription token amount available each month.
    - `storage_quota_gb` integer, required: Total storage quota available to the user in GB.
    - `pricing` ApiUserSubscriptionPricingLine[]: Current Stripe subscription price lines with price id and quantity.
      - `id` string, required: Stripe price id for this subscription line.
      - `quantity` integer, required: Quantity for this Stripe price line.
    - `currency` string, nullable: Lowercase ISO 4217 code the subscription is billed in. Stripe can't change it, so plan changes are priced in it. Null for a subscription not synced since this was added.
    - `cancel_at_period_end` boolean: True when Stripe will cancel the subscription at period end.
    - `cancel_at` string, nullable: UTC ISO-8601 time when Stripe will cancel the subscription.
    - `current_period_end` string, nullable: UTC ISO-8601 end of the current subscription period.
    - `tokens_renew_at` string, nullable: UTC ISO-8601 time the plan's monthly tokens are next granted: the renewal for a monthly plan, the next monthly drop for a yearly one. Null when no further grant is due (e.g. the subscription is set to cancel first).
    - `latest_payment_issue` object, nullable: When set, an invoice needs payment or customer action (e.g. 3DS). Fields may include invoice_id, invoice_status, hosted_invoice_url, customer_action_url.
  - `storage` AdminUserStorage, required
    - `file_count` integer, required: Files this user created, folders excluded. Counted from the asset rows, so a stock clip the library lists but stores nothing for is a file here and no bytes below.
    - `used_byte_size` integer, required: Bytes their assets and renditions occupy, each stored object counted once. Keyframes are not counted: they record no size.
    - `used_gb` number, required: ``used_byte_size`` in GB, 2 decimals
    - `quota_gb` integer, required: What their plan allows, in GB
    - `computed_at` string, date-time, required: When the total was measured
  - `upload_post` AdminUserUploadPost, required
    - `has_access` boolean, required: Whether their subscription lets them publish. Paid-only: a trialing subscription does not carry it.
    - `profile_created` boolean, required: Whether they hold an Upload-Post profile — the unit Upload-Post bills us on, so it takes one of the plan's profile slots.
    - `username` string, nullable: Their Upload-Post profile name (their Firebase uid)
    - `status` string, nullable
    - `connected_accounts` AdminSocialAccount[], required: As last reported by the Upload-Post webhook. GET /admin/upload_post asks the provider live.
      - `platform` string, required
      - `status` string, nullable: "connected", "disconnected" or "reauth_required"
    - `last_webhook_at` string, date-time, nullable
    - `created_at` string, date-time, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/tellers/apis/tellers-api.md) - [All operations](https://skmtc.dev/tellers/apis/tellers-api/llms.txt) - [OpenAPI document](https://skmtc.dev/tellers/apis/tellers-api/revisions/fdaa0fa44a26?raw)
