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, andusageMeters. Each entry includesplanId,planName,currency,price, andbillingInterval. - 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
| Requirement | Value |
|---|---|
| Token type | Sub-account (location) OAuth access token |
| Flow | OAuth 2.0 Authorization Code or Refresh-Token |
| Scope | marketplace.app.read |
| Rate limit | 60 requests/min per app (subject to change) |
| Forbidden token types | Agency tokens, developer tokens (return 403) |
Response Shape
The JSON response is namespaced under three top-level arrays:
| Namespace | What it contains |
|---|---|
subscriptionPlans | Recurring subscription prices — monthly, annual, etc. |
oneTimePlans | One-time charges (setup fees, add-on purchases) |
usageMeters | Usage-based pricing — included units and overage rates |
Each plan object includes:
planId— stable identifierplanName— display string (often used for limited-time offer tagging)currency— ISO currency code, drives symbol renderingprice— the agency’s marked-up client-facing pricebillingInterval— drives monthly/annual toggle UI
These fields support common UI patterns:
- Monthly/annual toggle — switch on
billingInterval - Usage tier charts — render
usageMetersincluded units and overage rate - Limited-time offers — flag from
planNameor 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
currencyfield; 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
currencyfield 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.
Related
- GoHighLevel
- Marketplace App Listing
- Developer Marketplace
- OAuth 2.0
- API Rate Limits
- GoHighLevel API Guide
- Reconnect Broken Marketplace Apps
Try It
- Confirm your app has the
marketplace.app.readscope and that you’re using a sub-account (location) OAuth access token. - Read the canonical spec at the Get Rebilling Config for App Public API page for the exact endpoint path.
- Make a single GET request from a test sub-account and inspect the
subscriptionPlans,oneTimePlans, andusageMetersarrays. - Build a server-side cache with a 5–10 minute TTL keyed by sub-account ID + app ID.
- Wire the cached response into your plan cards, paywalls, or checkout flows. Use
billingIntervalto drive a monthly/annual toggle. - 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.
- Add 429-handling: if you exceed 60 req/min, increase TTL or batch reads across the app.