# WhiteLabelStartSubscription

Start a strategy subscription for a customer of your White Label site. What the call does depends on who owns the strategy, and the response's Lane field tells you which contract applied. A strategy OWNED by your site becomes a finite access grant: Collective2 charges nothing, you bill your customer yourself, and you must supply a term — Months (1 to 24) or AccessUntil (a date), not both; calling again extends the same access, so renewal is simply a repeat call, and access lapses on its own if you stop renewing. A RESOLD Collective2 marketplace strategy from your site catalog becomes an open-ended monthly subscription billed to your site's house account at the wholesale price — supply no term. The first wholesale charge is attempted during the call and the response reports whether it settled (IsFirstChargeSuccessful; if it did not, Collective2's recurring biller retries and ResponseStatus.Message carries the detail). The call is refused when your house account balance cannot cover the first charge, unless your site is configured to allow negative billing. There are no free trials on this lane, and billing continues monthly until you call StopSubscription — keep the house account funded or monthly renewals will stall. Your customer never pays Collective2 in either lane and no card details are involved. A live simulated subscription for the same customer and strategy is superseded automatically — this is the natural sim-to-real conversion. Requires IdempotencyKey, a stable per-business-event string. Retrying a call never double-subscribes, but the two lanes confirm a retry differently. Owned strategies: repeating the same key with identical parameters replays the original grant (HTTP 200 with IsIdempotentReplay true); reusing a key with different parameters is refused — use a fresh key for each intended renewal. Resold strategies: the key is recorded for audit; a customer can hold only one live subscription per strategy, so a retry after a start that actually succeeded returns HTTP 409 "Already subscribed" with the existing subscription's id in the error's Meta["SubscriptionId"] — treat that 409 as confirmation the subscription is active, not as a failure. Refusals carry machine-readable detail in the error's Meta where prose alone would be ambiguous: Meta["SubscriptionId"] on "Already subscribed", Meta["HouseAccountBalance"] and Meta["WholesaleMonthly"] on "Insufficient house account funds". Starting a subscription does not start AutoTrading; that is StartAutotrade's customer-approval flow. Non-Paginated endpoint.

Endpoint: POST /Strategies/WhiteLabelStartSubscription
Version: v4
Security: 

## Request fields (application/json):

  - `PersonId` (integer,null)
    The PersonId of the customer to subscribe. The customer must belong to your White Label site

  - `StrategyId` (integer,null)
    The StrategyId to subscribe to. The strategy must be in your site's catalog

  - `IdempotencyKey` (string,null)
    A stable idempotency key for this business event (1 to 191 printable ASCII characters). Reusing the key on the owned-strategy lane replays the original grant instead of extending twice; make it unique per intended renewal

  - `Months` (integer,null)
    (owned strategies only) Grant length in months, 1 to 24. Provide Months or AccessUntil — not both. Leave empty for resold strategies

  - `AccessUntil` (string,null)
    (owned strategies only) Grant end date, YYYYMMDD or YYYY-MM-DD, in the future. Access runs through the end of that calendar day, US Eastern time; the response's AccessEndUtc is the exact UTC moment access ends. Provide Months or AccessUntil — not both. Leave empty for resold strategies

## Response 200 fields (application/json):

  - `Results` (array,null)
    Result array

  - `Results.Lane` (string,null)
    Which contract applied: "OwnedAccessGrant" (your site's own strategy — finite access, you bill your customer, renew by calling again) or "ResoldHouseBilled" (a resold Collective2 strategy — open-ended monthly wholesale billing to your site's house account)

  - `Results.PersonId` (integer,null)
    The C2 PersonId

  - `Results.StrategyId` (integer,null)
    The Strategy ID

  - `Results.SubscriptionId` (integer,null)
    The subscription's id — quote it in support conversations

  - `Results.Action` (string,null)
    OwnedAccessGrant lane: "Created" (fresh grant), "Extended" (existing access extended by the requested term), or "AlreadyCovered" (the requested term did not reach past the access the customer already has — nothing changed)

  - `Results.IsIdempotentReplay` (boolean,null)
    OwnedAccessGrant lane: true when this call replayed an identical earlier request (same IdempotencyKey) instead of extending again — a safe retry, nothing changed

  - `Results.AccessEndUtc` (string,null)
    OwnedAccessGrant lane: the exact UTC moment the granted access ends (end of the AccessUntil day, US Eastern, when a date was supplied). Access lapses then unless you extend it with another StartSubscription call

  - `Results.PreviousAccessEndUtc` (string,null)
    OwnedAccessGrant lane: the UTC end the access had before this call — null on a fresh grant; on AlreadyCovered it equals AccessEndUtc

  - `Results.WholesaleMonthly` (number,null)
    ResoldHouseBilled lane: the monthly wholesale amount (USD) billed to your site's house account

  - `Results.RetailMonthly` (number,null)
    ResoldHouseBilled lane: the strategy's retail monthly price (USD) on your site, for your own display; how you price it to your customer is your business

  - `Results.MarkupMonthly` (number,null)
    ResoldHouseBilled lane: retail minus wholesale (USD)

  - `Results.IsFirstChargeSuccessful` (boolean,null)
    ResoldHouseBilled lane: true when the first wholesale charge settled during this call; false means the recurring biller retries it (see ResponseStatus.Message)

  - `Results.NextBillUtc` (string,null)
    ResoldHouseBilled lane: UTC time of the next scheduled monthly bill

  - `Results.HouseAccountBalance` (number,null)
    ResoldHouseBilled lane: your site's house account balance (USD) after this call

  - `Results.SupersededSimSubscriptionId` (integer,null)
    When a live simulated subscription for this customer and strategy was superseded by this start (the sim-to-real conversion), its subscription id; null when none existed

  - `ResponseStatus` (object)

  - `ResponseStatus.ErrorCode` (string,null)
    The HTTP error code. Please see https://api-docs.collective2.com/guides/error-codes#http-errors.

  - `ResponseStatus.Message` (string,null)
    The human-readable meaning of the ErrorCode.

  - `ResponseStatus.Errors` (array,null)

  - `ResponseStatus.Errors.ErrorCode` (string,null)
    The C2 error code. Please see https://api-docs.collective2.com/guides/error-codes#c2-errors.

  - `ResponseStatus.Errors.FieldName` (string,null)
    The affected parameter.

  - `ResponseStatus.Errors.Message` (string,null)
    More details about the ErrorCode.

## Response 400 fields (application/json):

  - `ErrorCode` (string,null)
    The HTTP error code. Please see https://api-docs.collective2.com/guides/error-codes#http-errors.

  - `Message` (string,null)
    The human-readable meaning of the ErrorCode.

  - `Errors` (array,null)

  - `Errors.ErrorCode` (string,null)
    The C2 error code. Please see https://api-docs.collective2.com/guides/error-codes#c2-errors.

  - `Errors.FieldName` (string,null)
    The affected parameter.

  - `Errors.Message` (string,null)
    More details about the ErrorCode.

## Response 401 fields (application/json):

  - `ErrorCode` (string,null)
    The HTTP error code. Please see https://api-docs.collective2.com/guides/error-codes#http-errors.

  - `Message` (string,null)
    The human-readable meaning of the ErrorCode.

  - `Errors` (array,null)

  - `Errors.ErrorCode` (string,null)
    The C2 error code. Please see https://api-docs.collective2.com/guides/error-codes#c2-errors.

  - `Errors.FieldName` (string,null)
    The affected parameter.

  - `Errors.Message` (string,null)
    More details about the ErrorCode.

## Response 403 fields (application/json):

  - `ErrorCode` (string,null)
    The HTTP error code. Please see https://api-docs.collective2.com/guides/error-codes#http-errors.

  - `Message` (string,null)
    The human-readable meaning of the ErrorCode.

  - `Errors` (array,null)

  - `Errors.ErrorCode` (string,null)
    The C2 error code. Please see https://api-docs.collective2.com/guides/error-codes#c2-errors.

  - `Errors.FieldName` (string,null)
    The affected parameter.

  - `Errors.Message` (string,null)
    More details about the ErrorCode.

## Response 406 fields (application/json):

  - `ErrorCode` (string,null)
    The HTTP error code. Please see https://api-docs.collective2.com/guides/error-codes#http-errors.

  - `Message` (string,null)
    The human-readable meaning of the ErrorCode.

  - `Errors` (array,null)

  - `Errors.ErrorCode` (string,null)
    The C2 error code. Please see https://api-docs.collective2.com/guides/error-codes#c2-errors.

  - `Errors.FieldName` (string,null)
    The affected parameter.

  - `Errors.Message` (string,null)
    More details about the ErrorCode.

## Response 409 fields (application/json):

  - `ErrorCode` (string,null)
    The HTTP error code. Please see https://api-docs.collective2.com/guides/error-codes#http-errors.

  - `Message` (string,null)
    The human-readable meaning of the ErrorCode.

  - `Errors` (array,null)

  - `Errors.ErrorCode` (string,null)
    The C2 error code. Please see https://api-docs.collective2.com/guides/error-codes#c2-errors.

  - `Errors.FieldName` (string,null)
    The affected parameter.

  - `Errors.Message` (string,null)
    More details about the ErrorCode.

## Response 429 fields (application/json):

  - `ErrorCode` (string,null)
    The HTTP error code. Please see https://api-docs.collective2.com/guides/error-codes#http-errors.

  - `Message` (string,null)
    The human-readable meaning of the ErrorCode.

  - `Errors` (array,null)

  - `Errors.ErrorCode` (string,null)
    The C2 error code. Please see https://api-docs.collective2.com/guides/error-codes#c2-errors.

  - `Errors.FieldName` (string,null)
    The affected parameter.

  - `Errors.Message` (string,null)
    More details about the ErrorCode.

## Response 500 fields (application/json):

  - `ErrorCode` (string,null)
    The HTTP error code. Please see https://api-docs.collective2.com/guides/error-codes#http-errors.

  - `Message` (string,null)
    The human-readable meaning of the ErrorCode.

  - `Errors` (array,null)

  - `Errors.ErrorCode` (string,null)
    The C2 error code. Please see https://api-docs.collective2.com/guides/error-codes#c2-errors.

  - `Errors.FieldName` (string,null)
    The affected parameter.

  - `Errors.Message` (string,null)
    More details about the ErrorCode.

## Response 503 fields (application/json):

  - `ErrorCode` (string,null)
    The HTTP error code. Please see https://api-docs.collective2.com/guides/error-codes#http-errors.

  - `Message` (string,null)
    The human-readable meaning of the ErrorCode.

  - `Errors` (array,null)

  - `Errors.ErrorCode` (string,null)
    The C2 error code. Please see https://api-docs.collective2.com/guides/error-codes#c2-errors.

  - `Errors.FieldName` (string,null)
    The affected parameter.

  - `Errors.Message` (string,null)
    More details about the ErrorCode.


