The GraphQL operations of SI Subscriptions & Memberships. They use the same address, keys and rules as all our apps: see GraphQL API reference: Rentals & Bookings for how to send a request, and the API overview for keys, limits and errors. The same operations are in REST: REST API reference: Subscriptions & Memberships.
Needs the SI Subscriptions & Memberships app. On a store without it, its operations are refused before anything runs, with errors[].extensions.code: "app_not_installed" and data.app: "subscriptions". Every operation needs a secret key; mutations need Allow changes (write). The Subscriptions app has no API page of its own: make the key in another of our apps on the store (Rentals & Bookings: Settings › API; the other apps: API access). Keys belong to the store, so that key works here.
- Ids are global:
gid://sirentals/SubsSubscription/42,SubsPlan,SubsMembership,SubsTier,SubsQueueItem,SubsLoan,SubsGift,SubsOneOff,SubsStaffRequest. Everyidargument also takes the bare number. A subscription also takes Shopify’s contract gid (gid://shopify/SubscriptionContract/…) or the contract’s number. - Amounts are decimal strings with a currency.
fromandtoof the reports are days (YYYY-MM-DD) in the store’s time zone. - Mutations answer
userErrors { field message code data }when a change is refused:invalid,not_allowed,terminal,conflict,min_cycles,one_off_pending,contract_membership,plan_required,disabled,shopify_errorand so on. The REST errors table explains each.
curl -s "https://YOUR-API-ADDRESS/graphql/2026-10" -H "Authorization: Bearer sirb_your_secret_key" -H "Content-Type: application/json" \
-d '{"query": "{ subsSubscriptions(first: 20, filter: {status: [ACTIVE, PAST_DUE]}) { totalCount nodes { id status amount currency nextBillingAt } } }"}'
Subscriptions #
| Operation | Arguments | What it does |
|---|---|---|
subsSubscriptionsquery · secret key returns SubsSubscriptionConnection! | filter: SubsSubscriptionFilterInputfirst: Intafter: Stringlast: Intbefore: String | The store’s subscriptions, newest first, by status, customer, plan or a search. |
subsSubscriptionquery · secret key returns SubsSubscription | id: ID! | One subscription by our id, Shopify’s contract gid or the contract’s number, with its lines, delivery, next cycle, changes and billing cycles; null when there is none. |
subsPauseSubscriptionmutation · secret key returns SubsSubscriptionPayload! | id: ID!cycles: Int | Pause an active subscription. cycles (1 to 12) moves the next charge that many cycles on; without it, it stays paused until resumed. |
subsResumeSubscriptionmutation · secret key returns SubsSubscriptionPayload! | id: ID! | Resume a paused subscription (a next charge date already past moves to now). |
subsCancelSubscriptionmutation · secret key returns SubsSubscriptionPayload! | id: ID!when: SubsCancelTiming = PERIOD_ENDreason: String | Cancel at the end of the paid period (PERIOD_END, the default) or now (NOW). |
subsSkipCyclemutation · secret key returns SubsSubscriptionPayload! | id: ID! | Skip the next charge; the cycle after it is billed as usual. |
subsBillNowmutation · secret key returns SubsBillNowPayload! | id: ID! | Charge the next cycle now with the card on file. The answer may still be pending. |
subsCreateSubscriptionmutation · secret key returns SubsCreateSubscriptionPayload! | input: SubsCreateSubscriptionInput! | Start a subscription for a customer. Made at once when the customer has a card that can be charged; otherwise a request waits for the card (Shopify emails the customer, or you send checkoutUrl). Rental plans are refused (rental_staff). |
query Active {
subsSubscriptions(first: 20, filter: {status: [ACTIVE, PAST_DUE]}) {
totalCount
pageInfo { hasNextPage endCursor }
nodes { id legacyResourceId status kind customerId amount currency nextBillingAt lines { title variantTitle quantity price } }
}
}
mutation PauseTwoCycles {
subsPauseSubscription(id: "gid://sirentals/SubsSubscription/1", cycles: 2) {
subsSubscription { id status nextBillingAt }
userErrors { field code message }
}
}
SubsSubscriptionFilterInput
| Field | Type | Notes |
|---|---|---|
status | [SubsSubscriptionStatus!] | |
customerId | ID | gid://shopify/Customer/… or the number. |
planId | ID | gid://sirentals/SubsPlan/… or the number. |
search | String | A contract or order number (#1001), a customer’s name or email. |
updatedSince | String | Only subscriptions changed at or after this moment (ISO 8601). |
SubsCreateSubscriptionInput
| Field | Type | Notes |
|---|---|---|
customerId | ID! | gid://shopify/Customer/… or the number. |
sellingPlanId | ID! | gid://shopify/SellingPlan/… or the number (one of our live plans, not a rental). |
variantId | ID! | gid://shopify/ProductVariant/… or the number (a product of the plan). |
quantity | Int = 1 | |
firstBillingDate | String | YYYY-MM-DD in the store’s time zone, today up to a year ahead (default today). |
deliveryAddress | JSON | Shopify’s MailingAddress fields (firstName, address1, city, provinceCode, countryCode, zip, …); default: the customer’s default address. |
| Enum | Values |
|---|---|
SubsSubscriptionStatus | PENDINGTRIALACTIVEPAST_DUEPAUSEDPENDING_CANCEL – Cancels at the end of the paid period (cancelAt).CANCELLEDEXPIREDFAILED |
SubsCancelTiming | PERIOD_ENDNOW |
| Type | Fields |
|---|---|
SubsSubscriptionA customer’s subscription: one Shopify subscription contract and what this app knows about it. | id: ID!, legacyResourceId: Int!, contractId: ID!, status: SubsSubscriptionStatus!, kind: String!, customerId: ID, originOrderId: ID, paymentMethodId: ID, plan: SubsSubscriptionPlan, billing: SubsFrequency!, nextBillingAt: String, cyclesBilled: Int!, maxCycles: Int, trialEndsAt: String, pauseUntil: String, cancelAt: String, cancelReason: String, currency: String, amount: String, lines: [SubsLine!]!, delivery: SubsDelivery, nextCycle: SubsCycle, cycles(first): [SubsCycle!]!, createdAt: String, updatedAt: String, oneOffs: [SubsOneOff!]!, skippedCycle: SubsSkippedCycle, minCycles: SubsMinCycles, prepaid: SubsPrepaid, billingDay: SubsBillingDay, gift: SubsSubscriptionGift |
SubsSubscriptionPlan | name: String, planId: ID, sellingPlanId: ID |
SubsFrequency | interval: String, count: Int |
SubsLine | id: ID, productId: ID, variantId: ID, title: String, variantTitle: String, quantity: Int!, price: String, sellingPlanId: ID, oneTime: Boolean! |
SubsDelivery | type: String, title: String, price: String, address: JSON |
SubsCycle | index: Int!, dueAt: String, status: String!, amount: String, orderId: ID, attempts: Int!, nextRetryAt: String |
SubsOneOff | id: ID!, cycle: Int!, productId: ID, variantId: ID, title: String, variantTitle: String, quantity: Int!, price: String |
SubsSkippedCycle | index: Int!, dueAt: String |
SubsMinCycles | min: Int!, billed: Int!, left: Int! |
SubsPrepaidA prepaid subscription: one charge pays for several deliveries. | deliveries: Int!, perDelivery: String, ends: Boolean! |
SubsBillingDayA set billing day: WEEKDAY (day 1–7, Monday = 1), MONTHDAY (day 1–31) or YEARDAY (day and month). | type: String!, day: Int!, month: Int, label: String |
SubsSubscriptionGift | id: ID!, status: SubsGiftStatus!, sendOn: String, sentAt: String, renews: Boolean!, endsAt: String, recipientName: String |
SubsSubscriptionPayload | subsSubscription: SubsSubscription, userErrors: [RentalUserError!]! |
SubsBillNowPayload | subsSubscription: SubsSubscription, result: SubsBillNowResult, userErrors: [RentalUserError!]! |
SubsBillNowResult | state: String!, code: String, message: String, cycle: SubsBillNowCycle, attempt: SubsBillNowAttempt |
SubsBillNowCycle | index: Int, status: String, dueAt: String |
SubsBillNowAttempt | state: String, try: Int, errorCode: String |
SubsCreateSubscriptionPayload | subsSubscription: SubsSubscription, request: SubsStaffRequest, checkoutUrl: String, emailSent: Boolean!, userErrors: [RentalUserError!]! |
SubsStaffRequest | id: ID!, status: String!, customerId: ID, sellingPlanId: ID, variantId: ID, quantity: Int!, firstBillingDate: String, expiresAt: String, createdAt: String |
| Enum | Values |
|---|---|
SubsGiftStatus | SCHEDULEDSENTENDEDCANCELLED |
Self-service changes #
The changes customers make in their account, made for them: other plans and products, skipped charges and one-off items. subsSubscriptionOptions lists what a subscription can change to.
| Operation | Arguments | What it does |
|---|---|---|
subsSubscriptionOptionsquery · secret key returns SubsEditOptions | id: ID!lineId: ID | What a subscription can change to: the other plans (frequencies), the products to swap to and the one-off items. |
subsUnskipCyclemutation · secret key returns SubsSubscriptionPayload! | id: ID! | Bring back a skipped next charge. |
subsChangePlanmutation · secret key returns SubsSubscriptionPayload! | id: ID!sellingPlanId: ID!lineId: ID | Move a line to another plan (frequency); the price and the next charge date follow it. |
subsSwapProductmutation · secret key returns SubsSubscriptionPayload! | id: ID!variantId: ID!lineId: ID | Swap a line’s variant for another one the plan allows, priced by the plan. |
subsAddOneOffmutation · secret key returns SubsSubscriptionPayload! | id: ID!variantId: ID!quantity: Int = 1 | Add an item to the next order only (quantity 1 to 10; up to 5 items an order). |
subsRemoveOneOffmutation · secret key returns SubsSubscriptionPayload! | id: ID!oneOffId: ID! | Take an added item off the next order. |
mutation AddToNextBox {
subsAddOneOff(id: "1", variantId: "gid://shopify/ProductVariant/49280000003", quantity: 1) {
subsSubscription { id oneOffs { id title quantity cycle } }
userErrors { code message } # not_allowed when the order already has 5 added items
}
}
| Type | Fields |
|---|---|
SubsEditOptions | lineId: ID, plans: [SubsPlanOption!]!, variants: [SubsVariantOption!]!, oneOffs: [SubsOneOffProduct!]! |
SubsPlanOption | sellingPlanId: ID!, name: String!, interval: String!, count: Int!, price: String, perMonth: String, current: Boolean! |
SubsVariantOption | variantId: ID!, productTitle: String, title: String, price: String, current: Boolean! |
SubsOneOffProduct | productId: ID!, title: String, variants: [SubsOneOffVariant!]! |
SubsOneOffVariant | variantId: ID!, title: String, price: String |
Plans #
| Operation | Arguments | What it does |
|---|---|---|
subsPlansquery · secret key returns [SubsPlan!]! | status: SubsPlanStatusFilter = ACTIVEkind: String | The plans (subscribe and save, memberships, rentals), in your order. Active ones unless status says otherwise. |
subsPlanquery · secret key returns SubsPlan | id: ID! | One plan, or null. |
| Enum | Values |
|---|---|
SubsPlanStatusFilter | ACTIVEARCHIVEDALL |
| Type | Fields |
|---|---|
SubsPlanA plan the merchant sells (a selling plan group in Shopify). | id: ID!, legacyResourceId: Int!, name: String!, kind: String!, status: String!, position: Int!, description: String, frequencies: [SubsFrequency!]!, billing: SubsFrequency!, pricing: SubsPricing!, trialDays: Int!, signupFee: String, minCycles: Int, maxCycles: Int, subscriptionOnly: Boolean!, sellingPlans: [SubsSellingPlan!]!, createdAt: String, updatedAt: String, prepaidDeliveries: Int, prepaidRenews: Boolean!, billingDay: SubsBillingDay, gifting: Boolean! |
SubsPricing | type: String!, value: String |
SubsSellingPlan | id: ID, legacyResourceId: Int, name: String!, interval: String, count: Int! |
Memberships and store credit #
| Operation | Arguments | What it does |
|---|---|---|
subsMembershipsquery · secret key returns SubsMembershipConnection! | filter: SubsMembershipFilterInputfirst: Intafter: Stringlast: Intbefore: String | Memberships, newest first: open ones unless filter.status says otherwise. |
subsMembershipquery · secret key returns SubsMembership | id: ID! | One membership with the member’s store credit balance, or null. |
subsCreateMembershipmutation · secret key returns SubsMembershipPayload! | input: SubsCreateMembershipInput! | Make a customer a member of a tier now, until endsAt or with no end (source API). |
subsEndMembershipmutation · secret key returns SubsMembershipPayload! | id: ID!reason: String | End a membership made by an order, your team or the API, now. A subscription’s membership ends with its subscription. |
subsAdjustCreditmutation · secret key returns SubsAdjustCreditPayload! | id: ID!amount: String!note: StringexpiresAt: StringrequestKey: String | Add store credit (a positive amount) or take it back (negative), recorded on the membership. The same requestKey returns the same entry, so a retry adds nothing. |
subsTiersquery · secret key returns [SubsTier!]! | status: SubsTierStatusFilter = ACTIVE | The membership tiers, highest rank first. |
subsTierquery · secret key returns SubsTier | id: ID! | One tier, or null. |
mutation Credit {
subsAdjustCredit(id: "gid://sirentals/SubsMembership/1", amount: "10.00", note: "Sorry about the late box", requestKey: "ticket-4821") {
entry { amount kind }
credit { balance currency }
userErrors { field code message }
}
}
SubsMembershipFilterInput
| Field | Type | Notes |
|---|---|---|
status | [SubsMembershipStatus!] | Default: ACTIVE, GRACE and SUSPENDED (every open membership). |
customerId | ID | gid://shopify/Customer/… or the number. |
tierId | ID | gid://sirentals/SubsTier/… or the number. |
source | String | contract, order, staff or api. |
SubsCreateMembershipInput
| Field | Type | Notes |
|---|---|---|
customerId | ID! | gid://shopify/Customer/… or the number. |
tierId | ID! | gid://sirentals/SubsTier/… or the number. |
endsAt | String | When it ends (ISO 8601; a bare date = the end of that day in the store’s time zone). None: no end. |
| Enum | Values |
|---|---|
SubsMembershipStatus | ACTIVEGRACE – Payment is overdue: benefits continue until graceUntil.SUSPENDED – Benefits are off (the subscription is paused, or grace ran out).ENDED |
SubsTierStatusFilter | ACTIVEDELETEDALL |
| Type | Fields |
|---|---|
SubsMembershipA customer’s membership of a tier: started by a membership subscription, a one-time product, staff or the API. | id: ID!, legacyResourceId: Int!, status: SubsMembershipStatus!, statusReason: String, source: String!, tier: SubsMembershipTier, customerId: ID, subscriptionId: ID, contractId: ID, sourceOrderId: ID, startsAt: String, endsAt: String, graceUntil: String, endedAt: String, benefits: Boolean!, credit: SubsMembershipCredit!, queue: SubsMembershipQueue!, createdAt: String |
SubsMembershipTier | id: ID!, name: String!, handle: String |
SubsMembershipCredit | perPeriod: String, currency: String, balance: String |
SubsMembershipQueue | slots: Int!, out: Int! |
SubsMembershipPayload | subsMembership: SubsMembership, userErrors: [RentalUserError!]! |
SubsAdjustCreditPayload | subsMembership: SubsMembership, entry: SubsCreditEntry, credit: SubsCreditSummary, userErrors: [RentalUserError!]! |
SubsCreditEntry | legacyResourceId: Int!, kind: String!, amount: String!, currency: String!, state: String!, cycle: Int, expiresAt: String, transactionId: ID, balanceAfter: String, note: String, createdAt: String |
SubsCreditSummary | balance: String, currency: String!, perPeriod: String, lastGrant: SubsCreditGrant, failed: Int! |
SubsCreditGrant | amount: String!, at: String, expiresAt: String |
SubsTierA membership tier: what members get. | id: ID!, legacyResourceId: Int!, name: String!, handle: String!, status: String!, position: Int!, slots: Int!, swapsPerPeriod: Int, credit: SubsTierCredit!, discount: SubsTierDiscount, shipping: SubsTierShipping, memberTag: String!, access: SubsTierAccess!, oneTime: JSON, priced: Boolean!, members: SubsTierMembers!, createdAt: String, updatedAt: String |
SubsTierCredit | amount: String, expiryDays: Int, rolloverCap: String |
SubsTierDiscount | type: String!, value: String, scope: String, collections: [ID!], tags: [String!] |
SubsTierShipping | type: String!, value: String |
SubsTierAccess | products: [ID!]!, collections: [ID!]!, pages: [String!]! |
SubsTierMembers | active: Int!, grace: Int!, suspended: Int! |
Rental queue and loans #
| Operation | Arguments | What it does |
|---|---|---|
subsQueuequery · secret key returns SubsQueue! | customerId: ID! | A member’s rental queue in send order, with what they may borrow now. |
subsQueueItemquery · secret key returns SubsQueueItem | id: ID! | One queue item, live or removed, or null. |
subsAddToQueuemutation · secret key returns SubsQueueItemPayload! | input: SubsAddToQueueInput! | Add a product (any option) or one option to a member’s queue. Already queued: that item. |
subsRemoveFromQueuemutation · secret key returns SubsQueuePayload! | id: ID! | Take an item out of its queue. Answers the queue. |
subsMoveQueueItemmutation · secret key returns SubsQueuePayload! | id: ID!position: Int! | Move an item to a position (1 = next; a starred item stays among the starred ones). Answers the queue. |
subsSendQueueItemmutation · secret key returns SubsLoanPayload! | id: ID!input: SubsSendInput | Send one queued item now. The loan is PICKING until its loan order is fulfilled, or OUT with handover (handed over in person). |
subsSendNextmutation · secret key returns SubsLoanPayload! | customerId: ID!handover: Boolean | Send the member’s next item that is in stock, as the pick list would. |
subsLoansquery · secret key returns SubsLoanConnection! | filter: SubsLoanFilterInputfirst: Intafter: Stringlast: Intbefore: String | The rental queue’s loans, newest first. |
subsLoanquery · secret key returns SubsLoan | id: ID! | One loan, or null. |
subsReturnLoanmutation · secret key returns SubsLoanPayload! | id: ID!at: String | A loan came back (at: ISO 8601, default now). |
subsReturnLoansmutation · secret key returns SubsReturnLoansPayload! | input: SubsReturnLoansInput! | Several loans back at once, by loan ids, serial numbers (as scanned) or the loan order’s name. One result each. |
subsMarkLoanLostmutation · secret key returns SubsLoanPayload! | id: ID!amount: Stringnote: String | A loan that won’t come back. The member’s slot is free again; the replacement invoice follows your queue settings, and amount overrides it (0 = no invoice). |
query Queue {
subsQueue(customerId: "gid://shopify/Customer/7001234") {
slots out free canSend reason
items { id position starred productTitle variantTitle }
}
}
SubsAddToQueueInput
| Field | Type | Notes |
|---|---|---|
customerId | ID! | gid://shopify/Customer/… or the number. |
productId | ID! | gid://shopify/Product/… or the number. |
variantId | ID | gid://shopify/ProductVariant/… or the number. None: any option of the product. |
starred | Boolean | Starred items go out first. |
SubsSendInput
| Field | Type | Notes |
|---|---|---|
variantId | ID | The option to send for a product-level item (gid://shopify/ProductVariant/… or the number). |
serial | String | The unit’s serial number (with the rentals app). |
handover | Boolean | Handed over in person: the loan is OUT at once. |
SubsLoanFilterInput
| Field | Type | Notes |
|---|---|---|
status | SubsLoanStatusFilter | Default: ALL. |
customerId | ID | gid://shopify/Customer/… or the number. |
productId | ID | gid://shopify/Product/… or the number. |
membershipId | ID | gid://sirentals/SubsMembership/… or the number. |
SubsReturnLoansInput
| Field | Type | Notes |
|---|---|---|
loanIds | [ID!] | gid://sirentals/SubsLoan/… or the numbers (at most 500). |
serials | [String!] | Serial numbers, as scanned. |
orderName | String | The loan order’s name, for example #1042. |
| Enum | Values |
|---|---|
SubsLoanStatusFilter | OPEN – PICKING and OUT.CLOSED – RETURNED, LOST and CANCELLED.ALLPICKINGOUTRETURNEDLOSTCANCELLED |
| Type | Fields |
|---|---|
SubsQueueA member’s rental queue and what they may borrow now. | customerId: ID!, slots: Int!, out: Int!, free: Int!, canSend: Boolean!, reason: String, items: [SubsQueueItem!]! |
SubsQueueItem | id: ID!, legacyResourceId: Int!, position: Int!, starred: Boolean!, customerId: ID!, productId: ID!, productTitle: String, variantId: ID, variantTitle: String, membershipId: ID, mode: String, addedAt: String, removedAt: String, removedReason: String |
SubsQueueItemPayload | subsQueueItem: SubsQueueItem, userErrors: [RentalUserError!]! |
SubsQueuePayload | subsQueue: SubsQueue, userErrors: [RentalUserError!]! |
SubsLoanPayload | subsLoan: SubsLoan, userErrors: [RentalUserError!]! |
SubsLoanOne item borrowed from a member’s rental queue. | id: ID!, legacyResourceId: Int!, status: SubsLoanStatus!, statusReason: String, mode: String!, customerId: ID, membershipId: ID, queueItemId: ID, productId: ID!, productTitle: String, variantId: ID!, variantTitle: String, sku: String, serial: String, bookingId: ID, order: SubsLoanOrder, invoice: SubsLoanInvoice, sentAt: String, dueBackAt: String, returnedAt: String, lostAt: String, cancelledAt: String, createdAt: String |
SubsLoanOrder | state: String!, id: ID, name: String, error: String |
SubsLoanInvoice | state: String!, draftOrderId: ID, name: String, url: String, amount: String, currency: String, sentAt: String, error: String |
SubsReturnLoansPayload | results: [SubsReturnResult!]!, userErrors: [RentalUserError!]! |
SubsReturnResultOne loan or serial of subsReturnLoans. | loanId: ID, serial: String, ok: Boolean!, code: String, message: String, loan: SubsLoan |
| Enum | Values |
|---|---|
SubsLoanStatus | PICKING – Being picked: its loan order is not fulfilled yet.OUTRETURNEDLOSTCANCELLED – Cancelled before it went out (the item went back to the queue). |
Gift subscriptions #
| Operation | Arguments | What it does |
|---|---|---|
subsGiftsquery · secret key returns SubsGiftConnection! | filter: SubsGiftFilterInputfirst: Intafter: Stringlast: Intbefore: String | Gift subscriptions, newest first. |
subsGiftquery · secret key returns SubsGift | id: ID! | One gift subscription with its recipient, or null. |
subsGiftSetRenewalmutation · secret key returns SubsGiftPayload! | id: ID!renews: Boolean! | Keep a gift going after its prepaid deliveries (renews: true: the giver is charged from then on) or let it end after them (false). |
SubsGiftFilterInput
| Field | Type | Notes |
|---|---|---|
status | [SubsGiftStatus!] | |
subscriptionId | ID | gid://sirentals/SubsSubscription/… or its id. |
| Type | Fields |
|---|---|
SubsGift | id: ID!, legacyResourceId: Int!, subscriptionId: ID!, contractId: String, status: SubsGiftStatus!, sendOn: String, sentAt: String, prepaidDeliveries: Int!, renews: Boolean!, endsAt: String, recipient: SubsGiftRecipient, createdAt: String |
SubsGiftRecipient | name: String, email: String, message: String |
SubsGiftPayload | subsGift: SubsGift, userErrors: [RentalUserError!]! |
Analytics and the cancel flow report #
| Operation | Arguments | What it does |
|---|---|---|
subsAnalyticsquery · secret key returns SubsAnalytics! | from: Stringto: String | Analytics for a range of days (default: the last 30, at most 366): recurring revenue per currency, active, new and ended subscriptions, churn, failed payment recovery, store credit owed, the rental queue, per day and by plan. |
subsRetentionReportquery · secret key returns SubsRetentionReport! | from: Stringto: String | The cancel flow’s report for a range of days (default: the last 30, at most 366): why customers cancelled and which offers kept them. |
query Last30Days {
subsAnalytics { range { from to } tiles { active new churned churnRate mrr { currency amount } } }
subsRetentionReport { totals { started cancelled saved left } reasons { label cancelled saved } }
}
| Type | Fields |
|---|---|
SubsAnalytics | range: SubsAnalyticsRange!, tiles: SubsAnalyticsTiles!, days: [SubsAnalyticsDay!]!, byPlan: [SubsAnalyticsPlan!]!, computedAt: String |
SubsAnalyticsRange | from: String!, to: String!, days: Int!, timezone: String! |
SubsAnalyticsTiles | mrr: [SubsMoney!]!, mrrStart: [SubsMoney!]!, active: Int!, paused: Int!, new: Int!, churned: Int!, churnRate: Float, dunning: SubsAnalyticsDunning!, credit: [SubsMoney!]!, queue: SubsAnalyticsQueue!, rentals: SubsAnalyticsRentals! |
SubsMoney | currency: String!, amount: String! |
SubsAnalyticsDunningFailed payments of the 30 days up to the day: recovered later, lost (cancelled, waived or skipped), rate in percent. | failed: Int!, recovered: Int!, lost: Int!, rate: Float |
SubsAnalyticsQueue | out: Int!, overdue: Int!, returned: Int!, medianDaysOut: Float |
SubsAnalyticsRentals | active: Int!, overdue: Int! |
SubsAnalyticsDay | day: String!, active: Int!, paused: Int!, new: Int!, churned: Int!, mrr: [SubsMoney!]!, dunning: SubsAnalyticsDunning!, credit: [SubsMoney!]!, queue: SubsAnalyticsQueue!, rentals: SubsAnalyticsRentals! |
SubsAnalyticsPlan | planId: ID, legacyResourceId: Int, name: String, active: Int! |
SubsRetentionReport | from: String!, to: String!, totals: SubsRetentionCounts!, reasons: [SubsRetentionReason!]!, offers: [SubsRetentionOffer!]!, notes: [SubsRetentionNote!]! |
SubsRetentionCounts | started: Int!, cancelled: Int!, saved: Int!, left: Int! |
SubsRetentionReason | key: String!, label: String!, started: Int!, cancelled: Int!, saved: Int!, left: Int! |
SubsRetentionOffer | type: String!, label: String!, shown: Int!, accepted: Int!, rate: Float |
SubsRetentionNote | at: String!, reason: String!, note: String! |
