Source: ai-research/ghl-2026-05-01/support-solutions-articles-155000007194-agency-app-reselling-config-api.md

The Agency App Reselling Config API (technically “Get Rebilling Config for App”) returns the final, client-facing prices an agency has set for a Marketplace app — every active subscription, one-time, and usage-based rate in one call. Marketplace developers use it to render pricing inside custom plan cards, paywalls, and checkout flows so client-facing prices always match what the agency has configured in HighLevel, without leaking internal cost or hard-coding plan IDs.

Key Takeaways

  • Endpoint. Get Rebilling Config for App. The official spec lives at the HighLevel Marketplace Public API page.
  • Sub-account token only. Authentication requires a sub-account (location) OAuth access token. Agency or developer tokens return 403 Forbidden — pricing varies by agency and by client, so the API enforces the correct context.
  • Auth flow. OAuth 2.0 Authorization Code or Refresh-Token flow. Token scope must include marketplace.app.read.
  • Returns final client-facing prices, not internal cost. Only the agency’s upsell/markup price is exposed — internal cost prices are never returned, protecting agency margin.
  • All billing models in one call. Response is namespaced under subscriptionPlans, oneTimePlans, and usageMeters. Each entry includes planId, planName, currency, price, and billingInterval.
  • Rate limit: 60 requests/min per app (subject to change). Cache responses for 5–10 minutes to stay under the limit.
  • Default fallback. If the agency has not enabled rebilling for a sub-account, the endpoint still responds — but prices equal the base Marketplace cost (no markup applied).
  • Coupons not included. The response does not return promotional or coupon discounts. Compute and apply those in your own logic.

Authentication

RequirementValue
Token typeSub-account (location) OAuth access token
FlowOAuth 2.0 Authorization Code or Refresh-Token
Scopemarketplace.app.read
Rate limit60 requests/min per app (subject to change)
Forbidden token typesAgency tokens, developer tokens (return 403)

Response Shape

The JSON response is namespaced under three top-level arrays:

NamespaceWhat it contains
subscriptionPlansRecurring subscription prices — monthly, annual, etc.
oneTimePlansOne-time charges (setup fees, add-on purchases)
usageMetersUsage-based pricing — included units and overage rates

Each plan object includes:

  • planId — stable identifier
  • planName — display string (often used for limited-time offer tagging)
  • currency — ISO currency code, drives symbol rendering
  • price — the agency’s marked-up client-facing price
  • billingInterval — drives monthly/annual toggle UI

These fields support common UI patterns:

  • Monthly/annual toggle — switch on billingInterval
  • Usage tier charts — render usageMeters included units and overage rate
  • Limited-time offers — flag from planName or metadata tags

Best Practices for Displaying Prices

  • Refresh on user interaction. Re-fetch when the user changes plan quantity or billing cycle, not just on page load.
  • Cache server-side for 5–10 minutes. Honors the 60-req/min rate limit while keeping displayed prices fresh enough for cart accuracy.
  • Label currency and interval explicitly. Reduces cart abandonment from price ambiguity.
  • Use agency colors and typography. The point of the API is to keep the experience white-labeled — sub-accounts should never see HighLevel branding in your reselling UI.
  • Test edge cases. Agency removes a plan mid-session, agency sets price to 0, agency disables rebilling for one sub-account but not another.
  • Currency handling. Each object has its own currency field; do not assume the agency’s default applies uniformly.

Use Cases

  • Custom plan cards on agency landing pages. Pull the rebilling config and render pricing tiles that match the Marketplace and the agency’s internal billing rules in one motion.
  • In-app paywalls. When a sub-account user hits a feature behind a paid tier, show the upgrade price the agency configured — not the base Marketplace cost.
  • Embedded checkout flows. White-labeled checkout surfaces inside the agency’s portal that always render the right marked-up price.
  • Plan comparison pages. Render a feature/price matrix where price columns pull live from the API instead of being hard-coded.

FAQ Highlights

  • Does the API return prices in the agency’s default currency? Yes — each object includes a currency field for symbol display.
  • What happens if rebilling isn’t enabled for a sub-account? The endpoint still responds, with prices equal to the base Marketplace cost (no markup).
  • Can I call with an agency-level token? No. Sub-account token only. Agency tokens return 403 Forbidden.
  • Are coupons included? No. Compute coupons/promotions in your own logic and apply on top.
  • What is rate-limited? 60 requests/min per app. 429 means you exceeded the limit; back off.

Try It

  1. Confirm your app has the marketplace.app.read scope and that you’re using a sub-account (location) OAuth access token.
  2. Read the canonical spec at the Get Rebilling Config for App Public API page for the exact endpoint path.
  3. Make a single GET request from a test sub-account and inspect the subscriptionPlans, oneTimePlans, and usageMeters arrays.
  4. Build a server-side cache with a 5–10 minute TTL keyed by sub-account ID + app ID.
  5. Wire the cached response into your plan cards, paywalls, or checkout flows. Use billingInterval to drive a monthly/annual toggle.
  6. Test the edge case where the agency hasn’t configured rebilling for the sub-account — confirm your UI handles base-cost-with-no-markup gracefully.
  7. Add 429-handling: if you exceed 60 req/min, increase TTL or batch reads across the app.