Create a ContractPlan
POST
/api/contract-plans
deprecated
Requires: Customers.ContractPlans, Customers.ContractPlans.Create, merchant scope.
Create a new ContractPlan
Example request
Every block below sends the same request. Replace {{BASE_URL}} with the address of the API you are calling and {{API_KEY}} with your own key.
The request body is a ContractPlanCreateDto. See the Request body section below for its fields.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
suppressNulls
required |
query | boolean | If true, omit properties with null values. |
Request body
application/json
, required
| Field | Type | Description |
|---|---|---|
merchantId
required |
string (uuid) | The merchant that owns the plan. nullable |
name
required |
string | The plan's operator-facing name. Must be unique within the owning merchant. nullablemax length 128 |
code
required |
string | The merchant's own short code for the plan. Optional, and not resolved by the platform. nullablemax length 64 |
description
required |
string | What the plan covers, in the operator's own words. nullablemax length 1024 |
currencyCode
required |
string | The ISO 4217 alphabetic currency code the plan's amounts are denominated in. nullablemin length 3max length 3pattern ^[A-Za-z]{3}$ |
isActive
required |
boolean | Whether the plan may be subscribed to. Turning it off hides it from the plan picker and blocks new subscriptions; it does not stop billing the contracts already on it. |
defaultSchedule
required |
all of ContractSchedule | The recurrence a new contract on this plan starts from. Optional, and a suggestion only: the contract owns its schedule once created. |
trialDays
required |
integer (int32) | The trial length a new contract on this plan inherits, in days. Optional; empty or zero means no trial. A default for contract creation only: each contract owns its own trial end date once created, and changing this never moves an existing subscriber. nullablemin 0max 365 |
billSubtotalAmount
required |
number (double) | The base amount the plan charges each cycle, before tax. min 0 |
taxAmount
required |
number (double) | The tax added to the base amount each cycle. Leave empty when the plan carries no tax line. nullablemin 0 |
totalAmount
required |
number (double) | The total charged to a subscriber each cycle. This is the amount the billing engine charges; the subtotal and tax are the operator's breakdown of it. min 0 |
This request body has no documented fields.
Responses
200 OK
Body: ContractPlanDto
Each item has these fields.
| Field | Type | Description |
|---|---|---|
id
required |
string (uuid) | |
creationTime
required |
string (date-time) | The date and time when this entity was created. |
creatorId
required |
string (uuid) | The ID of the user who created this entity. nullable |
lastModificationTime
required |
string (date-time) | The date and time when this entity was last modified. nullable |
lastModifierId
required |
string (uuid) | The ID of the user who last modified this entity. nullable |
isDeleted
required |
boolean | Indicates whether this entity has been deleted. |
deleterId
required |
string (uuid) | The ID of the user who deleted this entity, if it is deleted. nullable |
deletionTime
required |
string (date-time) | The date and time when this entity was deleted, if it is deleted. nullable |
merchantId
required |
string (uuid) | The merchant that owns the plan. |
tenantId
required |
string (uuid) | The tenant that owns the plan. Null for host-level plans. nullable |
name
required |
string | The plan's operator-facing name, unique within the owning merchant. nullable |
code
required |
string | The merchant's own short code for the plan, or null. Not resolved by the platform. nullable |
description
required |
string | What the plan covers, in the operator's own words. nullable |
currencyCode
required |
string | The ISO 4217 alphabetic currency code the plan's amounts are denominated in. nullable |
isActive
required |
boolean | Whether the plan may be subscribed to. An inactive plan keeps pricing the contracts already on it. |
defaultSchedule
required |
all of ContractSchedule | The recurrence a new contract on this plan starts from, or null when the plan suggests none. |
trialDays
required |
integer (int32) | The trial length a new contract on this plan inherits, in days, or null when the plan offers no trial. nullable |
currentPrice
required |
all of ContractPlanPriceDto | The plan's price today: the revision in force at the moment the plan was read, with no scheduled run to measure a next-cycle change against. |
pendingPrice
required |
all of ContractPlanPriceDto | The revision that will take over next, when one is scheduled and has not taken effect yet. Null when the plan has no pending change. |
prices
required |
array of ContractPlanPriceDto | Every price the plan has carried, oldest first. nullable |
concurrencyStamp
required |
string | The concurrency stamp used for optimistic concurrency control. nullable |
entityVersion
required |
integer (int32) | The entity version, incremented on each modification. |
This response has no documented body fields.
403 Forbidden
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
401 Unauthorized
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
400 Bad Request
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
404 Not Found
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
501 Not Implemented
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
500 Internal Server Error
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
default The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. See the error-code reference in this document's description for the values `error.code` can take.
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
429 The request was refused because a rate limit was exceeded. Wait at least the interval `Retry-After` names before retrying, then back off. Limits are tuned per deployment, so read the allowance from the response headers rather than assuming a fixed ceiling.
Body: RateLimitProblemDetails
Each item has these fields.
| Field | Type | Description |
|---|---|---|
type
required |
string | The problem type identifier. Always the same value: the failure is the status code itself, so there is no sub-type for a caller to branch on. nullable |
title
required |
string | A short, human-readable summary of the problem type. nullable |
status
required |
integer (int32) | The HTTP status code, repeated in the body as the problem-details format defines. |
detail
required |
string | A human-readable explanation of this occurrence of the problem. nullable |
retryAfterSeconds
required |
integer (int32) | How long to wait before retrying, in whole seconds, carrying the same figure as the `Retry-After` header. Always at least one: a value of zero would invite an immediate retry that is certain to be rejected again. |
This response has no documented body fields.
Errors
A failed request returns the platform error envelope. The
error reference lists every value
error.code can carry and shows the four response shapes.