docs
/
AI skills

Your Appmint plan, credit, usage and services

The business's own Appmint account. Which plan it is on, what a change would cost today, its limits, its credit balance and statement, what each service costs and whether its agreement is accepted, and the spend limit. The AI reads and explains all of it. The owner buys credit, changes the plan, accepts agreements and buys services on their own screens.

This skill is about the business's own account with Appmint. It is not about plans the business sells to its customers; for that, see Subscription plans.

The business pays Appmint in two ways:

  • a plan, paid by card and renewed by Appmint;
  • a credit balance, which metered services draw from (AI, SMS, calls, email, labels, lookups).

The rules are in How charging works, Plans and pricing, Service agreements and Account. This page is the order to read them in for one business, and where to stop.

Read prices from the API, never from memory or these docs. Plans come from GET /org-management/subscription/plans and service rates from GET /service-pricing/catalog. Both are what checkout really charges. The tables in the reference pages can lag behind.

Ask first

  • What do they want to know or do? Read and explain (steps 1–5), set a spend limit (step 6), or something that costs money (step 7).
  • Which period? For charges: this month, last 30 days, or dates. Default: this calendar month.
  • For a plan change: which plan, monthly or annual? Give the plan key from step 1, not a guess from its name.
  • For a spend notification: the amount, and who is emailed. Only addresses the person gives. With none, the org's owner and admin emails are used.

Steps

1. Plans & Pricing: the plan, its renewal and what a change costs

call_appengine GET /org-management/subscription/current.

FieldWhat it is
currentPlan, currentPlanNamethe plan key (sm-pro-month) and its name
statusthe plan subscription's state: active, past_due, cancelled
renewalDate, amount, autoRenewwhen the next charge is due, how much, and whether it renews at all
scheduledChangea downgrade or cancel waiting for effectiveDate, with planName

It answers empty (no body) when the org has never had a plan subscription, which is normal for an org on a free plan. Then read the plan from GET /usage/balance (plan).

All plans: GET /org-management/subscription/plans. tiers is one card per tier: tier, monthly and annual (each with id, the plan key, price, perMonth), annualSaving, features (the allowances as lines a person reads), contact (Enterprise: talk to sales). plans holds every plan key with its limits.

FamilyPlan keys
Studiofree, sm-starter-month, sm-starter-annual, sm-pro-month, sm-pro-annual, sm-business-month, sm-business-annual, enterprise-month, enterprise-annual
BusinessMadebm-free, bm-paid-month, bm-paid-annual, bm-enterprise

Monthly and annual of the same tier rank the same, so switching cycle is not a downgrade (appengine usage/pricing-plan.ts 339–343).

What a change costs today: GET /org-management/subscription/quote?plan=<plan key>.

FieldMeans
changeupgrade, downgrade or same
price, intervalthe new plan's price per month or year
credit, daysLeftan upgrade from a paid plan that is still running: the unused days of the old plan, taken off
dueTodaywhat the card is charged now. The new period starts today.
effectiveDatea downgrade: the end of the period already paid for (nothing is due, nothing refunded); now for an upgrade

Read on the local engine: an org on bm-free quoted sm-pro-month gets change: "upgrade", dueToday: 199.

Hands on: the plan key, the renewal date and amount, any scheduledChange, and the quote if a change was asked about. Check: Account › Plans & Pricing (/plans, also /upgrade) marks the Current plan card, and shows the waiting change with Keep .

2. Plan limits: what the plan allows and what is used

GET /site/limits (add ?app=bm for BusinessMade). items[], one per limit: label, usedText, limitText, percent, state (ok, warning, full), note, detail.

LimitWhat happens when it is full
Sites, Dev environmentsa new one is refused, "… plan allows maximum …" (appengine site/plan-validation.service.ts 63, 80)
Hosted mail domainsa new mail domain is refused
Storage (records + files, measured once a day)new records and uploads are refused until there is room (appengine repositories/repository.controller.ts 1212–1214)
Custom domainsincluded on every plan

Hands on: which limit is full, and the tier that lifts it (from step 1). Check: Account › Plan limits (/limits) shows the same bars, with Upgrade plan and Contact sales.

3. Billing: the credit balance and transactions

  • GET /org-management/billing/balance: balance (USD), spendLimit (0 means no limit), spendRate.
  • GET /org-management/billing/transactions?page=&pageSize=&startDate=&endDate=: payments to Appmint: credit bought, plan charges, services bought. Each has an invoiceNumber (CREDIT-…, SRV-…), amount, status and remarks.
  • GET /org-management/billing/auto-reload: enabled, threshold, amount, cardSaved, card, lastReloadAt, lastError.

Hands on: the balance and the last payments. Check: Account › Billing (/billing): Overview (Credit balance, Buy credits, Auto reload, Recent Transactions), Transaction History (date range, Export as CSV), Billing Settings.

4. Usage & Spending: what the credit was spent on

  • GET /usage/statement?from=<ISO>&to=<ISO> (default: the last 30 days). It reads like a bank statement. totals has spent, credited and charges. breakdown is spend by service. rows is every change to the balance, with what it was for. Charges for the same service less than 2 minutes apart are one row (appengine usage/usage-statement.ts 9–31).
  • GET /usage/shared?from=&to= (default: this month): every shared platform service. For each: account (shared = Appmint's account, billed to the balance; own = the business's own credentials, billed by the provider), agreementAccepted, count, charged, lastUsedAt. It doesn't show Appmint's own cost.
  • GET /usage/spend-controls: spentThisMonth, spendLimit, remaining, percent, limitReached, notifications. The month is the calendar month in UTC.

Answer "why was I charged" from the statement row: the service, when, and the amount. Never work a charge out yourself from a rate.

Hands on: spend this period by service, and the biggest items. Check: Account › Usage & Spending (/usage): Spending by service and Statement.

5. Services: what each service costs and whether it is on

GET /service-pricing/catalog. It returns balance and providers[]. Each provider has services[], and each service has:

FieldWhat it is
name, title, providere.g. twilio-sms, "SMS", twilio
billingModelper_use, per_unit, recurring, one_time, tiered
pricingDisplay, unitNamethe price as the owner sees it ("$2.30 per number / month")
requiresAgreement, agreementStatus, agreementAcceptedwhether it needs an agreement, and where the org stands
agreementText, documentationthe terms to show before anyone accepts

What the org has accepted: GET /org-management/services/agreements (each: service, status active/revoked/pending, acceptedAt, acceptedBy, and for pending, dueBy).

When a service is refused, the error's code says why. All three answer 402 and nothing runs or is charged:

codeWhyWhat the owner does
AGREEMENT_REQUIREDthe service runs on Appmint's account and its agreement isn't acceptedaccept it (step 7) or connect their own provider
INSUFFICIENT_BALANCEthe balance doesn't cover it (required, currentBalance)buy credit (step 7)
SPEND_LIMIT_REACHEDthis month's spend would pass their own limitraise the limit (step 6) or wait for next month

The owner is also sent a notice. When an agreement becomes required for a service the business already uses, it gets a pending agreement with 30 days to accept, and the service keeps working until dueBy (appengine usage/service-pricing.service.ts 134, 1030–1063).

To tell whether the balance covers something, compare the balance (step 3) with its price. GET /service-pricing/check-balance/<service>?amount=<dollars> answers too, but when the balance is short it also sends the owner a low-balance notice (usage/service-pricing.service.ts 689–703). Use it only when that notice is wanted.

Hands on: the service's price, its agreement state, and the refusal code if there was one. Check: Services (/services). The Services tab lists each one with its agreement label. ?openId=<service name> opens its side panel (Pricing, Agreement Status). Service Pricing (/service-pricing) is the price list.

6. Plan limits: monthly spend limit and spend notifications (on a yes)

This doesn't spend money: it stops new paid services once the month's spend would pass the limit. Usage that has already happened is still billed, like a call that has ended or a renewal (appengine usage/spend-controls.ts 3–16).

Only an Owner or ConfigAdmin can do this. call_appengine POST /usage/spend-controls:

{ "spendLimit": 200, "notifications": [ { "amount": 50, "emails": ["[email protected]"] }, { "amount": 150 } ] }
  • spendLimit is in dollars; 0 means no limit (at most $1,000,000).
  • notifications is the whole list: it replaces the old one. Send the existing ones back with their id from step 4, or they are dropped. At most 10, with different amounts, and up to 5 emails each. Each one emails once a month when spend crosses its amount.

Stop. A limit can stop phones, texts and the AI mid-month. A notification emails the addresses given. Show the limit, each amount and each address, and wait for yes.

Check: GET /usage/spend-controls shows them; Account › Plan limits (/limits) › Monthly spend.

7. What costs money: the owner does it (Stop)

The AI doesn't buy credit, change the plan, accept agreements or buy services. Each of these charges a card or signs the business up to terms and charges. Give the person the figures from steps 1–5 and send them to the screen.

They wantWhereWhat happens
more creditBilling › Buy credits (/billing?buyCredit=true)$1 to $10,000, by card through Stripe; added to the balance once the payment succeeds
automatic top-upsBilling › Overview › Auto reload (Owner or ConfigAdmin)below the threshold, $10 to $1,000 is charged to the card saved with the plan. It can't be turned on without a saved card (409 NO_SAVED_CARD). A refused card turns it off.
a higher planPlans & Pricing › Upgradepays dueToday from the quote by card (Stripe only), then the plan is active. When the unused days cover it, it switches without a payment.
a lower planPlans & Pricing › Downgradewith paid time left, it waits for the period end (scheduledChange). Keep undoes it. Nothing is refunded.
to stop payingDowngrade to the Free cardas a downgrade. There is no Cancel button. POST /org-management/subscription/cancel exists, but only for the owner to call.
a service onServices › the service › tick the terms › Enable Service, or Accept and enable on an "agreement required" notice (Owner or ConfigAdmin)the agreement is recorded with who and when. The phone service gets its own Twilio sub-account; bulk email gets its own sending reputation. Charges then come from the balance.
a service offServices › the service › Disable Servicethe agreement is revoked; the service is refused again (phone: its sub-account is suspended)
higher limits or a custom planPlan limits › Contact salessaved as a lead for Appmint's sales team; the sender gets a confirmation email
credit moved to another org they runPOST /usage/gift (Owner or ConfigAdmin)the amount leaves this org's balance

Stop. Before sending them there, say the amount, what it buys, when it renews, and what it changes (limits gained or lost, a period not refunded, a service that stops). Then let them do it on the screen.

Platform staff handle gifted credit, manual plan changes and usage across all orgs from System Operations. A business can't do these itself.

Check: after they act, read steps 1, 3 or 5 again. The new plan, balance or agreementAccepted should show.

When it's done

Tell the person:

  • their plan, its renewal date and amount, and any change waiting;
  • which limits are full or close, and the plan that lifts them;
  • the balance, this month's spend and its biggest services;
  • for a refused service, the code and the one thing that clears it;
  • anything you set (spend limit, notifications), and anything left for them to do on which screen.

Open the screen that answers their question: /plans, /limits, /billing, /usage or /services?openId=<service>.

What it can't do yet

  • The plan's monthly AI credit isn't added to the balance. Plans list it ("$10 AI credit a month"), but nothing in the engine grants it (aiCredit is read only by the plan cards, appengine usage/pricing-plan.ts 293). Don't promise it.
  • The AI-employee allowance isn't enforced. It is shown on the plan cards only.
  • A BusinessMade plan's dev environments show as 1, not 0. getPlanLimits turns 0 into 1 (usage/pricing-plan.ts 187). On the local engine, bm-free shows "Dev environments 0 of 1".
  • "Additional services" (export time, priority support, extra storage, API call bundles, domains) have no screen. GET /org-management/services/available lists them. POST /org-management/services/purchase charges the card and records an SRV- transaction with a receipt email, but nothing is provisioned or switched on. Its documented credits payment is refused. Don't send anyone there.
  • Plans are paid by card through Stripe only. PayPal is refused for plans.
  • No Cancel plan button; downgrade to Free instead.

Don'ts

  • Don't call billing/buy-credits, subscription/create, subscription/upgrade, subscription/downgrade, subscription/cancel, services/purchase, services/agreement/accept or usage/gift for the person. Send them to the screen.
  • Don't quote a price from memory or from a docs table; read the plans and the catalog.
  • Don't work out what a charge "should" have been; read the statement row.
  • Don't set a spend limit or add a notification address without a yes.
  • Don't confuse this with the business's own customer plans (Subscription plans).