---
title: "Quote a billing order"
method: POST
path: "/api/billing-subscriptions/quote"
tags: ["billing_subscriptions"]
---

# Quote a billing order

`POST /api/billing-subscriptions/quote`

## Request

- Base URL: `https://beta.getsales.io/id/v1`
- URL: `https://beta.getsales.io/id/v1/api/billing-subscriptions/quote`
- Auth: HTTP bearer and API key in header `Team-SID`

Price an order before buying: data credits (0 or from 1,000, every month or one time), LinkedIn accounts and inbox packages, in USD, EUR or GBP, monthly or as 12 + 2 months (12 monthly amounts paid, 14 months of service). Answers the server's figures in minor units: each line, the monthly sum, the invoice, what is due now, the service level and the next LinkedIn tier. No side effects, nothing charged; the same order then goes to create_billing_subscription_checkout.

Contract:
- MCP tool `quote_billing_subscription_order`, registry package `mcp.id/billing_subscriptions`, mount `id.billing`.
- Operation `action`, response envelope `action`.
- Flags: read only.

## Request body

- QuoteBillingSubscriptionOrderRequest: Request body of `quote_billing_subscription_order`.
  - `currency` 'USD' | 'EUR' | 'GBP', required: USD, EUR or GBP: fixed local prices, EUR the USD figure, GBP nine tenths of it.
  - `period` 'monthly' | 'annual', required: monthly, or annual (12 + 2 months: 12 monthly amounts paid once, 14 months of service).
  - `data` object: The data credits line; omit for none.
    - `credits` integer, required: Credits: 0, or a whole number from 1,000.
    - `mode` 'recurring' | 'one_time': recurring (granted every month, the default) or one_time (paid once in the first transaction). Under a plan the credits live with it; see credit_expiry_days.
  - `linkedin` object: The LinkedIn sender profiles line; omit for none.
    - `accounts` integer, required: LinkedIn accounts to run (slots, not users); the per-account rate falls with the count, 188 to 300 is one package.
  - `email` object: The email inbox capacity line; omit for none.
    - `packages` object, required: How many packages of each size, 0 to 1,000 each; the capacity is their sum.
      - `100` integer: Packages of 100 inboxes.
      - `500` integer: Packages of 500 inboxes.
      - `2000` integer: Packages of 2,000 inboxes.
      - `10000` integer: Packages of 10,000 inboxes.

## Response `200`

`action` success envelope.

- QuoteBillingSubscriptionOrderResponse
  - `success` true, required
  - `operation` 'action', required
  - `action` string, required: kebab-case verb; matches the route segment.
  - `item` unknown, required
  - `result` object, required
    - `currency` string, required: USD | EUR | GBP, the order's.
    - `period` string, required: monthly | annual, the order's.
    - `book` string, required: The price book version the figures came from.
    - `lines` object[], required: One per resource ordered: line (linkedin | email | data), its count or packages, capacity, rate_minor, monthly_minor and invoice_minor (the amount per billing period).
    - `monthly_minor` integer, required: The recurring lines a month, before 12 + 2.
    - `recurring_invoice_minor` integer, required: The recurring invoice: the monthly sum, times 12 on annual.
    - `one_time_minor` integer, required: The one-time credits line, paid once.
    - `due_now_minor` integer, required: The first payment before tax and coupons: the recurring invoice plus the one-time line.
    - `has_recurring` boolean, required: false = one-time credits alone, which make no subscription.
    - `service_months` integer, nullable, required: 1, or 14 for 12 + 2; null when nothing recurs.
    - `grant_count` integer, required: How many monthly credit grants the period pays for (1, or 14).
    - `credit_expiry_days` integer, nullable, required: Days a granted lot lives: null = the credits live with the plan and burn when the workspace leaves it (an order that buys a plan, or credits bought alone under one); 90 for credits bought alone with no paid plan.
    - `capacity` object, required: What the order grants a workspace: linkedin_sender_profiles, email_inboxes, credits_per_month, whitelabel.
    - `service` object, required: level (free | paid | business | enterprise), next_level, next_threshold_minor and gap_minor a month to it; White label is part of Business.
    - `linkedin_next_tier` object, nullable, required: The next LinkedIn volume tier: accounts, add, capacity, total_minor, per_account_minor, savings_minor (negative = costlier in total); null at the package and above.
  - `meta` object, required
    - `trace_id` string, required: UUID v7; same 128-bit value as the X-Trace-Id header.
    - `span_id` string, required: 16 hex chars, root span of this request.
    - `timestamp` string, required: ISO 8601 UTC (Y-m-dTH:i:sZ), response time.
    - `duration_ms` integer, required: Server-side wall clock.
    - `team_sid` string, nullable: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends.
    - `actor_type` string, nullable: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends.

## Other responses

- `4XX`: MCP error envelope. `error.code` is one of validation_failed, nothing_to_update, not_found, relation_not_found, invalid_transition, limit_exceeded, payment_required, duplicate_rejected, conflict, delete_blocked, unauthorized, forbidden, rate_limited, not_implemented.
- `5XX`: MCP error envelope with `error.code` internal_error or service_unavailable.

---

[API](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-id.md) - [All operations](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-id/llms.txt) - [OpenAPI document](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-id/revisions/95e48541fe85?raw)
