> ## Documentation Index
> Fetch the complete documentation index at: https://learn.nexudus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Tariff

> Create a new Tariff record.

A **Tariff** (also called a Plan) is a membership plan that customers can sign up to in exchange for access to a coworking space and other benefits. Tariffs are the foundation for contracts — every time a customer signs up to a plan, Nexudus generates a `CoworkerContract` for that member based on the plan's settings.

Plans define billing frequency (in months or weeks via `InvoiceEvery` / `InvoiceEveryWeeks`), pricing, cancellation rules, and limits on check-ins, booking minutes, visitor passes, and hours. Members are invoiced at the end of each billing cycle. Plans can include benefits such as day passes, booking credits, and money credits — these are configured through `CoworkerExtraService` and `Product` entities linked to the contract.

Use `SystemTariffType` to categorise the plan (e.g. FullTimeHotDesk, VirtualOffice, Storage). Use `Visible` to control whether the plan appears on the members portal. Plans can optionally require identity checks before activation, enforce contract terms, support pausing, and define delivery handling preferences for virtual office mail.

When you edit a plan, changes impact all members signed up to that plan. To customise settings for an individual member, edit their `CoworkerContract` instead.

## Authentication

<Note>
  This endpoint requires OAuth2 authentication. Include a valid bearer token in the `Authorization` header.
  The authenticated user must be a full unrestricted administrator or have the **`Tariff-Create`** role.
</Note>

## Enums

<Accordion title="eTariffType — SystemTariffType values">
  | Value | Name                  |
  | ----- | --------------------- |
  | 1     | FullTimePrivateOffice |
  | 2     | PartTimePrivateOffice |
  | 3     | FullTimeDedicatedDesk |
  | 4     | PartTimeDedicatedDesk |
  | 5     | FullTimeHotDesk       |
  | 6     | PartTimeHotDesk       |
  | 7     | FullTimeOther         |
  | 8     | PartTimeOther         |
  | 9     | Storage               |
  | 10    | VirtualOffice         |
  | 11    | Virtual               |
  | 99    | Other                 |
</Accordion>

<Accordion title="eTariffBookingDueDateStrategy — BookingDueDateStrategy values">
  | Value | Name                |
  | ----- | ------------------- |
  | 1     | RenewalDate         |
  | 2     | BookingEndDate      |
  | 3     | BookingCreationDate |
  | 4     | NextNthOfMonth      |
</Accordion>

<Accordion title="eIdentityCheckProvider — AddressIdentityCheckProvider values">
  | Value | Name           |
  | ----- | -------------- |
  | 1     | Manual         |
  | 2     | StripeIdentity |
</Accordion>

<Accordion title="eIdentityCheckRepeatPattern — AddressIdentityCheckRepeatPattern values">
  | Value | Name          |
  | ----- | ------------- |
  | 1     | Never         |
  | 2     | Every3Months  |
  | 3     | Every6Months  |
  | 4     | Every12Months |
  | 5     | Every24Months |
</Accordion>

<Accordion title="eDeliveryHandlingPreference">
  | Value | Name                       |
  | ----- | -------------------------- |
  | 1     | StoreForCollection         |
  | 2     | Forward                    |
  | 3     | OpenScanForward            |
  | 4     | OpenScanRecycle            |
  | 5     | OpenScanShred              |
  | 6     | OpenScanStoreForCollection |
  | 7     | Recycle                    |
  | 8     | ReturnToSender             |
  | 9     | Shred                      |
  | 10    | DepositCheck               |
  | 11    | Unknown                    |
</Accordion>

## Request Body

### Required Fields

<ParamField body="BusinessId" type="integer" required>
  ID of the business linked to this record.
</ParamField>

<ParamField body="Name" type="string" required>
  Plan name.
</ParamField>

<ParamField body="SystemTariffType" type="integer" required>
  Category of the plan: FullTimePrivateOffice, PartTimePrivateOffice, FullTimeDedicatedDesk, PartTimeDedicatedDesk, FullTimeHotDesk, PartTimeHotDesk, FullTimeOther, PartTimeOther, Storage, VirtualOffice, Virtual, or Other. Defaults to `eTariffType.FullTimePrivateOffice`.
</ParamField>

<ParamField body="Price" type="number" required>
  Recurring price charged per billing cycle.
</ParamField>

<ParamField body="CurrencyId" type="integer" required>
  ID of the currency linked to this record.
</ParamField>

<ParamField body="CancellationPeriod" type="integer" required>
  Number of days' notice required before a contract can be cancelled.
</ParamField>

<ParamField body="DisplayOrder" type="integer" required>
  Display order on the members portal (lower numbers appear first).
</ParamField>

<ParamField body="InvoiceEvery" type="integer" required>
  Billing cycle length in months. Set to 0 if billing by weeks instead.
</ParamField>

<ParamField body="InvoiceEveryWeeks" type="integer" required>
  Billing cycle length in weeks. Set to 0 if billing by months instead.
</ParamField>

<ParamField body="BookingDueDateStrategy" type="integer" required>
  Strategy for determining when booking charges are due: RenewalDate, BookingEndDate, BookingCreationDate, or NextNthOfMonth. Defaults to `eTariffBookingDueDateStrategy.RenewalDate`.
</ParamField>

<ParamField body="AddressIdentityCheckProvider" type="integer" required>
  Provider used for address identity checks: Manual or StripeIdentity. Defaults to `eIdentityCheckProvider.Manual`.
</ParamField>

<ParamField body="AddressIdentityCheckRepeatPattern" type="integer" required>
  How often to repeat the address identity check: Never, Every3Months, Every6Months, Every12Months, or Every24Months. Defaults to `eIdentityCheckRepeatPattern.Never`.
</ParamField>

<ParamField body="IdentityCheckProvider" type="integer" required>
  Provider used for identity checks: Manual or StripeIdentity. Defaults to `eIdentityCheckProvider.Manual`.
</ParamField>

<ParamField body="IdentityCheckRepeatPattern" type="integer" required>
  How often to repeat the identity check: Never, Every3Months, Every6Months, Every12Months, or Every24Months. Defaults to `eIdentityCheckRepeatPattern.Never`.
</ParamField>

<ParamField body="DeliveryPreferencesMail" type="integer" required>
  Allowed handling preferences for mail deliveries (virtual office).
</ParamField>

<ParamField body="DeliveryPreferencesParcels" type="integer" required>
  Allowed handling preferences for parcel deliveries (virtual office).
</ParamField>

<ParamField body="DeliveryPreferencesChecks" type="integer" required>
  Allowed handling preferences for check deliveries (virtual office).
</ParamField>

<ParamField body="DeliveryPreferencesPublicity" type="integer" required>
  Allowed handling preferences for publicity deliveries (virtual office).
</ParamField>

<ParamField body="DeliveryPreferencesOther" type="integer" required>
  Allowed handling preferences for other deliveries (virtual office).
</ParamField>

### Optional Fields

<ParamField body="DefaultInvoicingDay" type="integer">
  Day of the month on which invoices are generated for members on this plan.
</ParamField>

<ParamField body="Visible" type="boolean">
  Whether the plan is visible to customers on the members portal and mobile app.
</ParamField>

<ParamField body="AvailableToAi" type="boolean">
  Whether this plan is available to any AI channels (Email, Chat or WhatsApp) for recommendations for private offices;.
</ParamField>

<ParamField body="NotesForAi" type="string">
  Custom notes provided to the AI assistant when describing this plan.
</ParamField>

<ParamField body="ShowPriceForAi" type="boolean">
  Whether to show the plan price to the AI assistant.
</ParamField>

<ParamField body="PriceForAi" type="number">
  Custom price shown to the AI assistant instead of the actual price.
</ParamField>

<ParamField body="UseTimePasses" type="boolean">
  Whether this plan uses time passes for check-in access.
</ParamField>

<ParamField body="Description" type="string">
  Plan description shown to customers.
</ParamField>

<ParamField body="InvoiceLineDisplayAs" type="string">
  Custom text shown on the invoice line instead of the plan name.
</ParamField>

<ParamField body="SignUpFee" type="number">
  One-off fee charged when a customer first signs up to this plan.
</ParamField>

<ParamField body="TaxRateId" type="integer">
  Standard tax rate applied to charges on this plan.
</ParamField>

<ParamField body="ReducedTaxRateId" type="integer">
  Reduced tax rate applied when applicable.
</ParamField>

<ParamField body="ExemptTaxRateId" type="integer">
  Tax-exempt rate applied when applicable.
</ParamField>

<ParamField body="FinancialAccountId" type="integer">
  Financial account used for revenue tracking.
</ParamField>

<ParamField body="TermsAndConditions" type="string">
  Terms and conditions text that members must accept when signing up.
</ParamField>

<ParamField body="NewContractDocumentUrl" type="string">
  URL to upload a new contract document template.
</ParamField>

<ParamField body="ClearContractDocumentFile" type="boolean">
  Set to true to remove the uploaded contract document file.
</ParamField>

<ParamField body="GroupName" type="string">
  Group name used to visually group plans together on the members portal.
</ParamField>

<ParamField body="DisablePortalCancellations" type="boolean">
  Prevents members from cancelling this plan through the members portal.
</ParamField>

<ParamField body="SubscribersLimit" type="integer">
  Maximum number of members that can be signed up to this plan at any time.
</ParamField>

<ParamField body="CancellationLimitDays" type="integer">
  Minimum number of days a contract must be active before it can be cancelled.
</ParamField>

<ParamField body="DefaultContractTerm" type="integer">
  Default minimum contract term in months for new sign-ups.
</ParamField>

<ParamField body="CancelMemeberAccountAfter" type="integer">
  Number of days after contract cancellation before the member account is deactivated.
</ParamField>

<ParamField body="CheckinPricePlanLimit" type="integer">
  Maximum number of check-ins included per billing cycle.
</ParamField>

<ParamField body="CheckinMonthLimit" type="integer">
  Maximum number of check-ins allowed per month.
</ParamField>

<ParamField body="CheckinWeekLimit" type="integer">
  Maximum number of check-ins allowed per week.
</ParamField>

<ParamField body="VisitorMonthLimit" type="integer">
  Maximum number of visitor passes allowed per month.
</ParamField>

<ParamField body="VisitorWeekLimit" type="integer">
  Maximum number of visitor passes allowed per week.
</ParamField>

<ParamField body="VisitorDayLimit" type="integer">
  Maximum number of visitor passes allowed per day.
</ParamField>

<ParamField body="HoursPricePlanLimit" type="integer">
  Maximum number of hours included per billing cycle.
</ParamField>

<ParamField body="HoursMonthLimit" type="integer">
  Maximum number of hours allowed per month.
</ParamField>

<ParamField body="HoursWeekLimit" type="integer">
  Maximum number of hours allowed per week.
</ParamField>

<ParamField body="BookingMinuteWeekLimit" type="integer">
  Maximum booking minutes allowed per week.
</ParamField>

<ParamField body="BookingMinuteMonthLimit" type="integer">
  Maximum booking minutes allowed per month.
</ParamField>

<ParamField body="DiscountExtraServices" type="number">
  Discount percentage for extra services.
</ParamField>

<ParamField body="DiscountTimePasses" type="number">
  Discount percentage for time passes.
</ParamField>

<ParamField body="DiscountCharges" type="number">
  Discount percentage for charges.
</ParamField>

<ParamField body="AutoCancelAfter" type="integer">
  Number of days after which the contract is automatically cancelled if not paid.
</ParamField>

<ParamField body="AdvanceInvoiceCycles" type="integer">
  Number of billing cycles to invoice in advance.
</ParamField>

<ParamField body="ProrateDayOfMonth" type="integer">
  Day of the month used to align billing cycles when prorating.
</ParamField>

<ParamField body="ProrateDaysBefore" type="integer">
  Number of days before the prorate day to start prorating.
</ParamField>

<ParamField body="ProrateCancellations" type="boolean">
  Whether to prorate the final invoice when a contract is cancelled mid-cycle.
</ParamField>

<ParamField body="ChargeAndExtend" type="integer">
  Number of days to extend a contract after payment is received.
</ParamField>

<ParamField body="ExcludeFromInvoice" type="boolean">
  Whether to exclude this plan's charges from member invoices.
</ParamField>

<ParamField body="AutoRaiseInvoices" type="boolean">
  Whether to automatically generate invoices at the end of each billing cycle.
</ParamField>

<ParamField body="RaiseInvoiceEvery" type="integer">
  Raise invoice every N months.
</ParamField>

<ParamField body="RaiseInvoiceEveryWeeks" type="integer">
  Raise invoice every N weeks.
</ParamField>

<ParamField body="MinimumPrice" type="number">
  Minimum total amount charged per billing cycle regardless of usage.
</ParamField>

<ParamField body="MinimumPriceIncludeTimePasses" type="boolean">
  Whether time pass charges count towards the minimum price.
</ParamField>

<ParamField body="MinimumPriceIncludeExtraServices" type="boolean">
  Whether extra service charges count towards the minimum price.
</ParamField>

<ParamField body="MinimumPriceIncludeEvents" type="boolean">
  Whether event charges count towards the minimum price.
</ParamField>

<ParamField body="Archived" type="boolean">
  Whether the plan is archived and no longer available for new sign-ups.
</ParamField>

<ParamField body="Starred" type="boolean">
  Whether the plan is starred (highlighted) on the members portal.
</ParamField>

<ParamField body="KeepNewAccountsOnHold" type="boolean">
  Whether new sign-ups are kept on hold until manually approved.
</ParamField>

<ParamField body="CanBePaused" type="boolean">
  Whether members can pause their contract on this plan.
</ParamField>

<ParamField body="PauseYearlyLimit" type="integer">
  Maximum number of times a contract can be paused per year.
</ParamField>

<ParamField body="PauseCyclesLimit" type="integer">
  Maximum number of billing cycles a contract can be paused for.
</ParamField>

<ParamField body="BookingDueDateDayOfMonth" type="integer">
  Day of the month used when BookingDueDateStrategy is NextNthOfMonth.
</ParamField>

<ParamField body="IsVirtualOffice" type="boolean">
  Whether this is a virtual office plan with mail handling features.
</ParamField>

<ParamField body="WaitForIdentityChecksToActivate" type="boolean">
  Whether to keep the contract on hold until all required identity checks are completed.
</ParamField>

<ParamField body="RequestAddressIdentityCheck" type="boolean">
  Whether to request an address identity check from members signing up to this plan.
</ParamField>

<ParamField body="AddressIdentityCheckDescription" type="string">
  Instructions shown to members when completing the address identity check.
</ParamField>

<ParamField body="KeepPausedIfAddressMismatch" type="boolean">
  Whether to keep the contract paused if the address identity check reveals a mismatch.
</ParamField>

<ParamField body="RequestIdentityCheck" type="boolean">
  Whether to request an identity (ID document) check from members signing up to this plan.
</ParamField>

<ParamField body="IdentityCheckDescription" type="string">
  Instructions shown to members when completing the identity check.
</ParamField>

<ParamField body="RequestAmlCheck" type="boolean">
  Whether to request an AML check from members signing up to this plan.
</ParamField>

<ParamField body="AmlCheckOpenSanctionsEnabled" type="boolean">
  Whether to enable AML checks against the OpenSanctions dataset.
</ParamField>

<ParamField body="AmlCheckPappersEnabled" type="boolean">
  Whether to enable AML checks against the Pappers dataset.
</ParamField>

<ParamField body="AmlCheckOpenSanctionsDataset" type="string">
  Which OpenSanctions dataset to check against for AML screening (e.g. 'default').
</ParamField>

<ParamField body="AmlCheckScoreThreshold" type="number">
  Score threshold for AML checks, between 0 and 1. Matches with a score above this threshold will be considered a positive match. Default is 0.7.
</ParamField>

<ParamField body="SendOnBoardingFormByEmail" type="boolean">
  Whether to email the onboarding form to new members signing up to this plan.
</ParamField>

<ParamField body="FormPageId" type="integer">
  ID of the onboarding form page sent to new members.
</ParamField>

<ParamField body="ProductsStore" type="integer[]">
  Product IDs for mail stored for collection (virtual office).
</ParamField>

<ParamField body="ProductsForward" type="integer[]">
  Product IDs for mail forwarding (virtual office).
</ParamField>

<ParamField body="ProductsRecycle" type="integer[]">
  Product IDs for mail recycling (virtual office).
</ParamField>

<ParamField body="ProductsShred" type="integer[]">
  Product IDs for mail shredding (virtual office).
</ParamField>

<ParamField body="ProductsScan" type="integer[]">
  Product IDs for mail scanning (virtual office).
</ParamField>

<ParamField body="ProductsReturn" type="integer[]">
  Product IDs for returning mail to sender (virtual office).
</ParamField>

<ParamField body="ProductsDeposit" type="integer[]">
  Product IDs for check deposits (virtual office).
</ParamField>

<ParamField body="ProductsCollect" type="integer[]">
  Product IDs for mail collection (virtual office).
</ParamField>

<ParamField body="MaximumDeliveryStorageDays" type="integer">
  Maximum number of days deliveries are stored before being returned (virtual office).
</ParamField>

<ParamField body="MaximumCompanyAliases" type="integer">
  Maximum number of company name aliases allowed for mail handling (virtual office).
</ParamField>

<ParamField body="MaximumRecipients" type="integer">
  Maximum number of mail recipients allowed (virtual office).
</ParamField>

<ParamField body="MaximumAddresses" type="integer">
  Maximum number of forwarding addresses allowed (virtual office).
</ParamField>

<ParamField body="TransferProductsToContract" type="boolean">
  Whether to automatically transfer mail handling products to the member's contract.
</ParamField>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST \
    "https://spaces.nexudus.com/api/billing/tariffs" \
    -H "Authorization: Bearer YOUR_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "BusinessId": 0,
      "Name": "",
      "SystemTariffType": 0,
      "Price": 0,
      "CurrencyId": 0,
      "CancellationPeriod": 0,
      "DisplayOrder": 0,
      "InvoiceEvery": 0,
      "InvoiceEveryWeeks": 0,
      "BookingDueDateStrategy": 0,
      "AddressIdentityCheckProvider": 0,
      "AddressIdentityCheckRepeatPattern": 0,
      "IdentityCheckProvider": 0,
      "IdentityCheckRepeatPattern": 0,
      "DeliveryPreferencesMail": 0,
      "DeliveryPreferencesParcels": 0,
      "DeliveryPreferencesChecks": 0,
      "DeliveryPreferencesPublicity": 0,
      "DeliveryPreferencesOther": 0
  }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://spaces.nexudus.com/api/billing/tariffs',
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_TOKEN',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        BusinessId: 0,
        Name: '',
        SystemTariffType: 0,
        Price: 0,
        CurrencyId: 0,
        CancellationPeriod: 0,
        DisplayOrder: 0,
        InvoiceEvery: 0,
        InvoiceEveryWeeks: 0,
        BookingDueDateStrategy: 0,
        AddressIdentityCheckProvider: 0,
        AddressIdentityCheckRepeatPattern: 0,
        IdentityCheckProvider: 0,
        IdentityCheckRepeatPattern: 0,
        DeliveryPreferencesMail: 0,
        DeliveryPreferencesParcels: 0,
        DeliveryPreferencesChecks: 0,
        DeliveryPreferencesPublicity: 0,
        DeliveryPreferencesOther: 0
      })
    }
  );

  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      'https://spaces.nexudus.com/api/billing/tariffs',
      headers={
          'Authorization': 'Bearer YOUR_TOKEN',
          'Content-Type': 'application/json'
      },
      json={
          'BusinessId': 0,
          'Name': '',
          'SystemTariffType': 0,
          'Price': 0,
          'CurrencyId': 0,
          'CancellationPeriod': 0,
          'DisplayOrder': 0,
          'InvoiceEvery': 0,
          'InvoiceEveryWeeks': 0,
          'BookingDueDateStrategy': 0,
          'AddressIdentityCheckProvider': 0,
          'AddressIdentityCheckRepeatPattern': 0,
          'IdentityCheckProvider': 0,
          'IdentityCheckRepeatPattern': 0,
          'DeliveryPreferencesMail': 0,
          'DeliveryPreferencesParcels': 0,
          'DeliveryPreferencesChecks': 0,
          'DeliveryPreferencesPublicity': 0,
          'DeliveryPreferencesOther': 0
      }
  )

  data = response.json()
  ```
</CodeGroup>

## Response

### 200

<ResponseField name="Status" type="integer">
  HTTP status code. `200` on success.
</ResponseField>

<ResponseField name="Message" type="string">
  A human-readable message confirming the creation.
</ResponseField>

<ResponseField name="Value" type="object">
  Contains the `Id` of the newly created record.
</ResponseField>

<ResponseField name="WasSuccessful" type="boolean">
  `true` if the tariff was created successfully.
</ResponseField>

<ResponseField name="Errors" type="array">
  `null` on success.
</ResponseField>

```json Example Response theme={null}
{
  "Status": 200,
  "Message": "Tariff was successfully created.",
  "Value": {
    "Id": 87654321
  },
  "OpenInDialog": false,
  "OpenInWindow": false,
  "RedirectURL": null,
  "JavaScript": null,
  "UpdatedOn": "2025-01-15T10:30:00Z",
  "UpdatedBy": "admin@example.com",
  "Errors": null,
  "WasSuccessful": true
}
```

### 400

<ResponseField name="Message" type="string">
  A summary of the validation error(s), in the format `PropertyName: error message`.
</ResponseField>

<ResponseField name="Value" type="any">
  `null` on validation failure.
</ResponseField>

<ResponseField name="Errors" type="object[]">
  Array of validation errors.

  <Expandable>
    <ResponseField name="AttemptedValue" type="any">
      The value that was submitted for the field, or `null` if missing.
    </ResponseField>

    <ResponseField name="Message" type="string">
      The validation error message.
    </ResponseField>

    <ResponseField name="PropertyName" type="string">
      The name of the property that failed validation.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="WasSuccessful" type="boolean">
  `false` when the request fails validation.
</ResponseField>

```json Example Response theme={null}
{
  "Message": "Name: is a required field",
  "Value": null,
  "Errors": [
    {
      "AttemptedValue": null,
      "Message": "is a required field",
      "PropertyName": "Name"
    }
  ],
  "WasSuccessful": false
}
```
