Call GET /account to read your Opal plan, its limits and features, your current usage, and your account status. Do it before bulk work such as many creates, uploads, or accepts, so you stay inside your plan. Read-only keys and locked accounts can call it. API access itself needs the Workshop plan.

Get Account

GET /api/v1/account
curl https://app.opalrecall.com/api/v1/account \
  -H "Authorization: Bearer opal_live_xxx"

Response:

{
  "data": {
    "plan": {
      "id": "workshopMonthly",
      "name": "Workshop",
      "billing": "monthly",
      "readOnly": false,
      "limits": {
        "workspaces": 7,
        "items": 5000,
        "storageBytes": 5368709120,
        "fileSizeBytes": 52428800
      },
      "features": {
        "publishItems": true,
        "publishContainers": true,
        "shareContainers": true,
        "apiAccess": true,
        "integrations": true
      }
    },
    "usage": {
      "workspaces": 3,
      "items": {
        "total": 1504,
        "owned": 1500,
        "shared": 4
      },
      "storageBytes": 123456789
    },
    "status": {
      "locked": false,
      "lockedAt": null,
      "subscriptionStatus": "active",
      "cancelAtPeriodEnd": false,
      "currentPeriodEnd": "2026-11-01T00:00:00.000Z",
      "deletionDate": null
    }
  }
}

Response Fields

FieldNotes
plan.idPlan ID such as workshopMonthly, premiumYearly, or viewOnly.
plan.nameThe name shown in the app, such as Day Desk, Studio, Workshop, or View Only. Legacy plans report the name they map to.
plan.billingmonthly, yearly, comped (a paid plan given at no cost), or null.
plan.readOnlytrue for View Only.
plan.limitsworkspaces, items (null means unlimited), storageBytes, and fileSizeBytes.
plan.featurespublishItems, publishContainers, shareContainers, apiAccess, and integrations.
usage.workspacesWorkspaces you own.
usage.itemsowned, shared (a binder or fence share counts the container and everything in it), and total, which is what the item limit checks.
usage.storageBytesStorage counted against your storage limit: mainly files uploaded as items and media stored in Opal inside your items. Links to files elsewhere do not count.
status.locked, status.lockedAtWhether the account is view-only, and since when.
status.subscriptionStatus, status.cancelAtPeriodEnd, status.currentPeriodEndThe subscription as Opal last recorded it. These can be null or false when no subscription is recorded, for example on a comped plan.
status.deletionDateFor a locked account with a lock date: when its data will be deleted (12 months after the lock). Otherwise null.

Work Out How Much Room Is Left

  • Items: plan.limits.items - usage.items.total
  • Storage: plan.limits.storageBytes - usage.storageBytes
  • Workspaces: plan.limits.workspaces - usage.workspaces
  • File size: check plan.limits.fileSizeBytes before each upload.

Sizes are binary (1 MB = 1,048,576 bytes), and GET /account returns exact byte values. The item limit counts items you own plus items shared with you, and an accepted binder or fence share counts as the container plus everything in it.

Plan Limits

PlanWorkspacesItemsStorageMax file size
Day Desk1250250 MB5 MB
Studio31,0001 GB25 MB
Workshop75,0005 GB50 MB
View Only (locked accounts)05250 MB5 MB

Limits are subject to change. The Pricing page and File Size and Storage Limits by Plan have the current numbers for the plans you can buy.

Plan Features

PlanPublish itemsPublish binders and fencesShare binders and fencesAPI accessIntegrations
Day DeskYesNoNoNoNo
StudioYesYesYesNoYes
WorkshopYesYesYesYesYes
View OnlyNoNoNoNoNo

In GET /account these features are named publishItems, publishContainers, shareContainers, apiAccess, and integrations. Sharing a binder or fence needs shareContainers on the sender’s plan, and accepting one needs it on the recipient’s plan.

API Access by Plan

API access is included on the Workshop plan (monthly, yearly, or complimentary). Accounts on an older plan that the app shows as Workshop also have it. On any other plan, every API-key request returns 403:

{
  "error": "API access requires a Workshop plan",
  "code": "FEATURE_NOT_IN_PLAN",
  "feature": "apiAccess",
  "upgrade_url": "https://opalrecall.com/pricing"
}

Locked (view-only) accounts are the exception: their existing keys keep working for reads.

Locked Accounts

An account is locked (view-only) when its subscription has ended, and when someone joined from a share invitation without choosing a plan. Its plan becomes View Only, and GET /account returns status.locked: true.

AreaBehavior
ReadsGET requests keep working with existing keys, including GET /account, GET /views, and GET /export.
WritesEvery other method returns 403 with {"error":"Your account is view-only. Resubscribe to make changes.","code":"ACCOUNT_LOCKED"}. This includes accepting and declining shares and copies through the API. The app still lets a view-only account accept up to 5 shared items or copies.
API keysExisting keys keep working for reads. New keys cannot be created, because View Only does not include API access. Keys can still be revoked in the app.
Items the locked account sharedRecipients get view-only access, whatever the share granted.
Published pagesGo offline 30 days after the lock (immediately if no lock date was recorded) and come back if the account resubscribes.
DataDeleted 12 months after the lock, with warning emails 30 days and 7 days before, and never sooner than 7 days after the last warning. status.deletionDate in GET /account gives the date. View-only accounts that never had a plan are not deleted.

The account holder resubscribes in the Opal app. The API has no billing routes.

Next Steps

FAQ

How do I check how much storage I have left with the API?

Call GET /account and subtract usage.storageBytes from plan.limits.storageBytes.

Can a read-only key call GET /account?

Yes. Read-only keys and locked accounts can both call it.

What happens to the API when my account is locked?

Existing keys keep working for reads, including search, GET /account, and export. Every write returns 403 with code: "ACCOUNT_LOCKED". You cannot create new keys.

What counts toward my item limit?

Items you own plus items shared with you. An accepted binder or fence share counts as the container plus everything in it.