# Member Subscriptions

**Summary:** Endpoints for Member Subscriptions

- Role: [Developers](https://www.subrite.no/developers)
- Source: https://www.subrite.no/developers/member-subscriptions
- Updated: 2026-10-13
- Markdown index: https://www.subrite.no/developers/llms.txt

<a id="get-api-v1-members-memberid-subscriptions"></a>
## Get all subscriptions of a member

`GET /api/v1/members/{memberId}/subscriptions`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |

### Responses

#### 200

Content type: `application/json` · `array of SubscriptionListItem`

| Name | Type | Description |
| --- | --- | --- |
| `[].id` (Required when parent is present) | `number` |   |
| `[].packageId` (Required when parent is present) | `number` |   |
| `[].name` (Required when parent is present) | `string` |   |
| `[].slug` (Required when parent is present) | `string` |   |
| `[].status` (Required when parent is present) | `string` | Allowed values: `"active"`, `"inactive"`, `"pending"`, `"paused"`, `"stopped"`, `"expired"`, `"waiting_for_activation"` |
| `[].nextRenewal` (Required when parent is present) | `string (date-time)` |   |
| `[].hasChange` (Required when parent is present) | `boolean` |   |
| `[].changePlanName` | `string` | Can be null |
| `[].scheduledActivationDate` | `string (date-time)` | Can be null |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` |   |
| `message` | `string` |   |
| `errors` (Required) | `array of FieldError` |   |
| `errors[].field` (Required when parent is present) | `string` |   |
| `errors[].fieldValue` (Required when parent is present) | `string` |   |
| `errors[].identifier` (Required when parent is present) | `string` |   |
| `errors[].identifierValue` (Required when parent is present) | `string` |   |
| `errors[].messageCode` (Required when parent is present) | `string` |   |
| `errors[].message` | `string` |   |
| `errors[].errorType` (Required when parent is present) | `string` |   |

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
[
  {
    "id": 0,
    "packageId": 0,
    "name": "string",
    "slug": "string",
    "status": "active",
    "nextRenewal": "2019-08-24T14:15:22Z",
    "hasChange": true,
    "changePlanName": "string",
    "scheduledActivationDate": "2019-08-24T14:15:22Z"
  }
]
```

<a id="get-api-v1-members-memberid-subscriptions-list-with-products"></a>
## Get all subscriptions along with products of a member

`GET /api/v1/members/{memberId}/subscriptions/list-with-products`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |

### Responses

#### 200

Content type: `application/json` · `array of MemberSubscribedPackage`

| Name | Type | Description |
| --- | --- | --- |
| `[].stripeCardInfo` (Required when parent is present) | `StripeCardInfo` |   |
| `[].stripeCardInfo.brand` (Required when parent is present) | `string` |   |
| `[].stripeCardInfo.expMonth` (Required when parent is present) | `number` |   |
| `[].stripeCardInfo.expYear` (Required when parent is present) | `number` |   |
| `[].stripeCardInfo.last4` (Required when parent is present) | `string` |   |
| `[].stripeCardInfo.country` (Required when parent is present) | `string` |   |
| `[].vippsPaymentInfo` (Required when parent is present) | `VippsPaymentInfo` |   |
| `[].vippsPaymentInfo.agreementId` (Required when parent is present) | `string` |   |
| `[].vippsPaymentInfo.phone` (Required when parent is present) | `string` |   |
| `[].netsCardInfo` (Required when parent is present) | `NetsCardInfo` |   |
| `[].paymentInfo` (Required when parent is present) | `Payment` |   |
| `[].paymentInfo.packageId` (Required when parent is present) | `number` |   |
| `[].paymentInfo.accountingDate` (Required when parent is present) | `string (date-time)` |   |
| `[].paymentInfo.registrationDate` (Required when parent is present) | `string (date-time)` |   |
| `[].paymentInfo.paymentProvider` (Required when parent is present) | `string` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `[].paymentInfo.paymentMethod` (Required when parent is present) | `string` | Allowed values: `"card"`, `"vipps"`, `"manual_registration"`, `"efaktura"`, `"ehf"`, `"avtalegiro"` |
| `[].paymentInfo.amount` (Required when parent is present) | `number` |   |
| `[].paymentInfo.currency` (Required when parent is present) | `string` |   |
| `[].paymentInfo.status` (Required when parent is present) | `string` | Allowed values: `"pending"`, `"succeeded"`, `"failed"` |
| `[].paymentInfo.note` (Required when parent is present) | `string` |   |
| `[].paymentInfo.isAdminAction` (Required when parent is present) | `boolean` |   |
| `[].paymentInfo.memberId` (Required when parent is present) | `string` |   |
| `[].paymentInfo.stripePayment` (Required when parent is present) | `StripePayment` | Nested fields omitted: field limit. |
| `[].paymentInfo.vippsPayment` (Required when parent is present) | `VippsPayment` | Nested fields omitted: field limit. |
| `[].paymentInfo.netsPayment` (Required when parent is present) | `NetsPayment` | Nested fields omitted: field limit. |
| `[].paymentInfo.eInvoicePayment` (Required when parent is present) | `EInvoicePayment` | Nested fields omitted: field limit. |
| `[].paymentInfo.swedbankpayPayment` (Required when parent is present) | `SwedbankpayPayment` | Nested fields omitted: field limit. |
| `[].paymentInfo.package` (Required when parent is present) | `Package` | Nested fields omitted: field limit. |
| `[].paymentInfo.order` (Required when parent is present) | `Order` | Nested fields omitted: field limit. |
| `[].paymentInfo.checkoutState` (Required when parent is present) | `CheckoutState` | Nested fields omitted: field limit. |
| `[].paymentInfo.invoiceId` (Required when parent is present) | `number` |   |
| `[].paymentInfo.invoice` (Required when parent is present) | `Invoice` | Nested fields omitted: field limit. |
| `[].paymentInfo.member` (Required when parent is present) | `Member` | Nested fields omitted: field limit. |
| `[].paymentInfo.updatedBy` (Required when parent is present) | `number` |   |
| `[].paymentInfo.id` (Required when parent is present) | `number` |   |
| `[].paymentInfo.createdAt` (Required when parent is present) | `string (date-time)` |   |
| `[].paymentInfo.updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].paymentInfo.deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].paymentInfo.metaData` (Required when parent is present) | `object` |   |
| `[].paymentProvider` (Required when parent is present) | `string` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `[].id` (Required when parent is present) | `number` |   |
| `[].status` (Required when parent is present) | `string` | Allowed values: `"active"`, `"inactive"`, `"pending"`, `"paused"`, `"stopped"`, `"expired"`, `"waiting_for_activation"` |
| `[].planName` (Required when parent is present) | `string` |   |
| `[].packName` (Required when parent is present) | `string` |   |
| `[].packageId` (Required when parent is present) | `number` |   |
| `[].slug` (Required when parent is present) | `string` |   |
| `[].recurringPrice` (Required when parent is present) | `number` |   |
| `[].currentPrice` (Required when parent is present) | `number` |   |
| `[].introPeriodInfo` (Required when parent is present) | `BillingPeriodInfo` |   |
| `[].introPeriodInfo.billingPeriod` (Required when parent is present) | `string` |   |
| `[].introPeriodInfo.customBillingPeriod` (Required when parent is present) | `BillingPeriodDetails` |   |
| `[].introPeriodInfo.customBillingPeriod.billingPeriodFrequency` (Required when parent is present) | `number` |   |
| `[].introPeriodInfo.customBillingPeriod.billingPeriodUnit` (Required when parent is present) | `string` |   |
| `[].recurringPeriodInfo` (Required when parent is present) | `BillingPeriodInfo` |   |
| `[].recurringPeriodInfo.billingPeriod` (Required when parent is present) | `string` |   |
| `[].recurringPeriodInfo.customBillingPeriod` (Required when parent is present) | `BillingPeriodDetails` |   |
| `[].recurringPeriodInfo.customBillingPeriod.billingPeriodFrequency` (Required when parent is present) | `number` |   |
| `[].recurringPeriodInfo.customBillingPeriod.billingPeriodUnit` (Required when parent is present) | `string` |   |
| `[].products` (Required when parent is present) | `array of MemberSubscribedProduct` | Nested fields omitted: field limit. |
| `[].billingPeriod` (Required when parent is present) | `string` | Allowed values: `"monthly"`, `"thirty_days"`, `"quarterly"`, `"half_yearly"`, `"yearly"`, `"custom"` |
| `[].billingPeriodFrequency` (Required when parent is present) | `number` |   |
| `[].billingPeriodUnit` (Required when parent is present) | `string` | Allowed values: `"day"`, `"week"`, `"month"`, `"year"` |
| `[].currentPeriodStart` (Required when parent is present) | `string (date-time)` |   |
| `[].currentPeriodEnd` (Required when parent is present) | `string (date-time)` |   |
| `[].nextRenewal` (Required when parent is present) | `string (date-time)` |   |
| `[].expiresAt` (Required when parent is present) | `string (date-time)` |   |
| `[].cancelledAt` (Required when parent is present) | `string (date-time)` |   |
| `[].autoRenew` (Required when parent is present) | `boolean` |   |
| `[].activeSince` (Required when parent is present) | `string (date-time)` |   |
| `[].isOwner` (Required when parent is present) | `boolean` |   |
| `[].groupOwnerMemberId` (Required when parent is present) | `string` |   |
| `[].groupOwnerMemberNumber` (Required when parent is present) | `number` |   |
| `[].groupOwnerMemberName` (Required when parent is present) | `string` |   |
| `[].groupInfo` (Required when parent is present) | `GroupSubscriptionResponse` | Can be null · Nested fields omitted: field limit. |
| `[].isPayable` (Required when parent is present) | `boolean` |   |
| `[].change` (Required when parent is present) | `MemberPackageChange` | Can be null · Nested fields omitted: field limit. |
| `[].subscriptionPlanId` (Required when parent is present) | `number` |   |
| `[].subscriptionPlanName` (Required when parent is present) | `string` |   |
| `[].scheduledActivationDate` (Required when parent is present) | `string (date-time)` | Can be null |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/list-with-products' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
[
  {
    "stripeCardInfo": {},
    "vippsPaymentInfo": {},
    "netsCardInfo": {},
    "paymentInfo": {
      "metaData": {}
    },
    "paymentProvider": "stripe",
    "id": 0,
    "status": "active",
    "planName": "string",
    "packName": "string",
    "packageId": 0,
    "slug": "string",
    "recurringPrice": 0,
    "currentPrice": 0,
    "introPeriodInfo": {},
    "recurringPeriodInfo": {},
    "products": [],
    "billingPeriod": "monthly",
    "billingPeriodFrequency": 0,
    "billingPeriodUnit": "day",
    "currentPeriodStart": "2019-08-24T14:15:22Z",
    "currentPeriodEnd": "2019-08-24T14:15:22Z",
    "nextRenewal": "2019-08-24T14:15:22Z",
    "expiresAt": "2019-08-24T14:15:22Z",
    "cancelledAt": "2019-08-24T14:15:22Z",
    "autoRenew": true,
    "activeSince": "2019-08-24T14:15:22Z",
    "isOwner": true,
    "groupOwnerMemberId": "string",
    "groupOwnerMemberNumber": 0,
    "groupOwnerMemberName": "<groupOwnerMemberName>",
    "groupInfo": {
      "seats": []
    },
    "isPayable": true,
    "change": {
      "metaData": {}
    },
    "subscriptionPlanId": 0,
    "subscriptionPlanName": "string",
    "scheduledActivationDate": "2019-08-24T14:15:22Z"
  }
]
```

<a id="get-api-v1-members-memberid-subscriptions-has-blocking-subscription"></a>
## Whether the member has an active/pending/paused subscription that blocks deletion

`GET /api/v1/members/{memberId}/subscriptions/has-blocking-subscription`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |

### Responses

#### 200

Content type: `application/json` · `HasBlockingSubscriptionResponse`

| Name | Type | Description |
| --- | --- | --- |
| `hasBlockingSubscription` (Required) | `boolean` | True when the member has an active, pending, or paused subscription (direct or via seat) that should block hard deletion. |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/has-blocking-subscription' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
{
  "hasBlockingSubscription": true
}
```

<a id="get-api-v1-members-memberid-subscriptions-missing-info"></a>
## Get missing info alerts for member info, invited member info

`GET /api/v1/members/{memberId}/subscriptions/missing-info`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |

### Responses

#### 200

Content type: `application/json` · `array of MissingInfoResponse`

| Name | Type | Description |
| --- | --- | --- |
| `[].missingInfoType` (Required when parent is present) | `MISSING_INFO` | Allowed values: `"member_details"`, `"invited_member_details"`, `"member_not_invited"`, `"gift_receiver_not_added"`, `"activation_date"`, `"available_subscriptions_to_join"`, `"active_subscriptions"` |
| `[].alertIndex` (Required when parent is present) | `string` |   |
| `[].missingFields` (Required when parent is present) | `array of string` |   |
| `[].invitedMemberInfo` (Required when parent is present) | `InvitedMemberInfo` |   |
| `[].invitedMemberInfo.subscriptionId` (Required when parent is present) | `number` |   |
| `[].invitedMemberInfo.seatId` (Required when parent is present) | `number` |   |
| `[].invitedMemberInfo.memberPackageProductId` (Required when parent is present) | `number` |   |
| `[].invitedMemberInfo.productName` (Required when parent is present) | `string` |   |
| `[].invitedMemberInfo.invitedMemberEmail` (Required when parent is present) | `string` |   |
| `[].memberNotInvitedInfo` (Required when parent is present) | `MemberNotInvitedInfo` |   |
| `[].memberNotInvitedInfo.subscriptionId` (Required when parent is present) | `number` |   |
| `[].memberNotInvitedInfo.packageName` (Required when parent is present) | `string` |   |
| `[].memberNotInvitedInfo.subscriptionProductInfo` (Required when parent is present) | `array of SubscriptionProductInfo` |   |
| `[].memberNotInvitedInfo.subscriptionProductInfo[].memberPackageProductId` (Required when parent is present) | `number` |   |
| `[].memberNotInvitedInfo.subscriptionProductInfo[].productName` (Required when parent is present) | `string` |   |
| `[].giftReceiverNotAddedInfo` (Required when parent is present) | `GiftReceiverNotAddedInfo` |   |
| `[].giftReceiverNotAddedInfo.subscriptionId` (Required when parent is present) | `number` |   |
| `[].giftReceiverNotAddedInfo.planName` (Required when parent is present) | `string` |   |
| `[].giftReceiverNotAddedInfo.subscriptionProductInfo` (Required when parent is present) | `array of SubscriptionProductInfo` |   |
| `[].giftReceiverNotAddedInfo.subscriptionProductInfo[].memberPackageProductId` (Required when parent is present) | `number` |   |
| `[].giftReceiverNotAddedInfo.subscriptionProductInfo[].productName` (Required when parent is present) | `string` |   |
| `[].activationDateMissingInfo` (Required when parent is present) | `ActivationDateMissingInfo` |   |
| `[].activationDateMissingInfo.subscriptionId` (Required when parent is present) | `number` |   |
| `[].activationDateMissingInfo.planName` (Required when parent is present) | `string` |   |
| `[].availableSubscriptionsToJoin` (Required when parent is present) | `array of MemberPackageProduct` |   |
| `[].availableSubscriptionsToJoin[].memberPackageId` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].productId` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].price` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].recurringPrice` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].quantity` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].hasAccess` (Required when parent is present) | `boolean` |   |
| `[].availableSubscriptionsToJoin[].shippingCountry` (Required when parent is present) | `string` |   |
| `[].availableSubscriptionsToJoin[].shippingProvider` (Required when parent is present) | `string` | Allowed values: `"Helthjem"`, `"Bring - Posten"`, `"Distribution Innovation"` |
| `[].availableSubscriptionsToJoin[].allowDistributorToUpdateDeliveryAddress` (Required when parent is present) | `boolean` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductEmailDomains` (Required when parent is present) | `array of MemberPackageProductEmailDomain` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductEmailDomains[].memberPackageProductId` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductEmailDomains[].emailDomain` (Required when parent is present) | `string` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductEmailDomains[].updatedBy` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductEmailDomains[].memberPackageProduct` (Required when parent is present) | `MemberPackageProduct` | Recursive schema; nested fields are not repeated. |
| `[].availableSubscriptionsToJoin[].memberPackageProductEmailDomains[].id` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductEmailDomains[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductEmailDomains[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductEmailDomains[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductEmailDomains[].metaData` (Required when parent is present) | `object` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps` (Required when parent is present) | `array of MemberPackageProductIp` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps[].memberPackageProductId` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps[].ipRange` (Required when parent is present) | `string` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps[].label` (Required when parent is present) | `string` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps[].updatedBy` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps[].memberPackageProduct` (Required when parent is present) | `MemberPackageProduct` | Recursive schema; nested fields are not repeated. |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps[].id` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].memberPackageProductIps[].metaData` (Required when parent is present) | `object` |   |
| `[].availableSubscriptionsToJoin[].memberPackage` (Required when parent is present) | `MemberPackage` | Nested fields omitted: field limit. |
| `[].availableSubscriptionsToJoin[].product` (Required when parent is present) | `Product` | Nested fields omitted: field limit. |
| `[].availableSubscriptionsToJoin[].seats` (Required when parent is present) | `array of MemberPackageProductSeat` |   |
| `[].availableSubscriptionsToJoin[].seats[].memberPackageProductId` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].seats[].memberId` (Required when parent is present) | `string` |   |
| `[].availableSubscriptionsToJoin[].seats[].email` (Required when parent is present) | `string` | Can be null |
| `[].availableSubscriptionsToJoin[].seats[].accepted` (Required when parent is present) | `boolean` |   |
| `[].availableSubscriptionsToJoin[].seats[].acceptedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].seats[].expiresAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].seats[].uuid` (Required when parent is present) | `string` |   |
| `[].availableSubscriptionsToJoin[].seats[].memberPackageProduct` (Required when parent is present) | `MemberPackageProduct` | Recursive schema; nested fields are not repeated. |
| `[].availableSubscriptionsToJoin[].seats[].member` (Required when parent is present) | `Member` | Nested fields omitted: depth limit. |
| `[].availableSubscriptionsToJoin[].seats[].id` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].seats[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].seats[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].seats[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].seats[].metaData` (Required when parent is present) | `object` |   |
| `[].availableSubscriptionsToJoin[].recipients` (Required when parent is present) | `array of MemberPackageProductRecipient` | Nested fields omitted: field limit. |
| `[].availableSubscriptionsToJoin[].id` (Required when parent is present) | `number` |   |
| `[].availableSubscriptionsToJoin[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].availableSubscriptionsToJoin[].metaData` (Required when parent is present) | `object` |   |
| `[].buyNewSubscriptionPackageSlug` (Required when parent is present) | `string` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/missing-info' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
[
  {
    "missingInfoType": "member_details",
    "alertIndex": "string",
    "missingFields": [],
    "invitedMemberInfo": {},
    "memberNotInvitedInfo": {
      "subscriptionProductInfo": []
    },
    "giftReceiverNotAddedInfo": {
      "subscriptionProductInfo": []
    },
    "activationDateMissingInfo": {},
    "availableSubscriptionsToJoin": [],
    "buyNewSubscriptionPackageSlug": "string"
  }
]
```

<a id="get-api-v1-members-memberid-subscriptions-id"></a>
## Get subscription details

`GET /api/v1/members/{memberId}/subscriptions/{id}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Responses

#### 200

Content type: `application/json` · `SubscriptionDetails`

| Name | Type | Description |
| --- | --- | --- |
| `id` (Required) | `number` |   |
| `packageId` (Required) | `number` |   |
| `name` (Required) | `string` |   |
| `slug` (Required) | `string` |   |
| `subscriptionPlanId` (Required) | `number` |   |
| `subscriptionPlanName` (Required) | `string` |   |
| `recurringPrice` (Required) | `number` |   |
| `autoRenew` (Required) | `boolean` |   |
| `paymentInfo` (Required) | `PaymentInfo` |   |
| `paymentInfo.stripeCardInfo` (Required) | `StripeCardInfo` |   |
| `paymentInfo.stripeCardInfo.brand` (Required) | `string` |   |
| `paymentInfo.stripeCardInfo.expMonth` (Required) | `number` |   |
| `paymentInfo.stripeCardInfo.expYear` (Required) | `number` |   |
| `paymentInfo.stripeCardInfo.last4` (Required) | `string` |   |
| `paymentInfo.stripeCardInfo.country` (Required) | `string` |   |
| `paymentInfo.isLink` (Required) | `boolean` |   |
| `paymentInfo.netsCardInfo` (Required) | `NetsCardInfo` |   |
| `paymentInfo.swedbankpayCardInfo` (Required) | `SwedbankpayCardInfo` | Nested fields omitted: field limit. |
| `paymentInfo.vippsPaymentInfoWithDueCharge` (Required) | `VippsPaymentInfoWithDueCharge` | Nested fields omitted: field limit. |
| `paymentInfo.eInvoicePaymentInfo` (Required) | `EInvoicePaymentInfo` | Nested fields omitted: field limit. |
| `paymentInfo.externalPaymentInfo` (Required) | `ExternalPaymentInfo` |   |
| `paymentInfo.externalPaymentInfo.isPaid` (Required) | `boolean` |   |
| `paymentInfo.externalPaymentInfo.paidTill` (Required) | `string (date-time)` |   |
| `paymentProvider` | `string` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `isOwner` (Required) | `boolean` |   |
| `canRemovePaymentMethod` (Required) | `boolean` | Whether the paying owner may remove the stored payment method. False while the subscription can still be charged, for seat holders, and when nothing is stored. Which provider holds the credential does not gate it: a subscription that has moved to invoice billing can still be holding a card, and that orphan is removable. True for Vipps too, where the stored credential is an agreement rather than a card — name it accordingly in the UI. |
| `hasStoredPaymentMethod` (Required) | `boolean` | Whether a chargeable credential is actually stored. Read from paymentInfo, never from the card details: a Stripe Link method is live while storing no brand or last4, so absent card details do not mean absent credential. The UI needs this to tell "no payment method" from "stored, but nothing to display". |
| `isGroupSubscription` (Required) | `boolean` |   |
| `status` (Required) | `MEMBER_PACKAGE_STATUS` | Allowed values: `"active"`, `"inactive"`, `"pending"`, `"paused"`, `"stopped"`, `"expired"`, `"waiting_for_activation"` |
| `groupOwnerName` (Required) | `string` |   |
| `products` (Required) | `array of ProductPackage` |   |
| `products[].circulationType` | `CIRCULATION_TYPE` | Allowed values: `"subscription"`, `"single_copy"` · Can be null |
| `products[].id` (Required when parent is present) | `number` |   |
| `products[].name` (Required when parent is present) | `string` |   |
| `products[].productId` (Required when parent is present) | `number` |   |
| `products[].productCategory` (Required when parent is present) | `string` | Allowed values: `"digital_subscription"`, `"physical_subscription"`, `"physical"`, `"event_ticket"`, `"PHYSICAL_PRODUCT"` |
| `products[].price` (Required when parent is present) | `number` |   |
| `products[].recurringPrice` (Required when parent is present) | `number` |   |
| `products[].quantity` (Required when parent is present) | `number` |   |
| `products[].hasAccess` (Required when parent is present) | `boolean` |   |
| `products[].isOptional` (Required when parent is present) | `boolean` |   |
| `products[].shippingCountry` (Required when parent is present) | `string` |   |
| `products[].shippingCharges` (Required when parent is present) | `array of ShippingCharge` | Nested fields omitted: field limit. |
| `products[].shippingCountries` (Required when parent is present) | `array of string` |   |
| `products[].shippingPrice` (Required when parent is present) | `number` |   |
| `products[].groupInfo` (Required when parent is present) | `GroupSubscriptionResponse` | Nested fields omitted: field limit. |
| `currentPeriodBillingInfo` (Required) | `BillingPeriodInfo` |   |
| `currentPeriodBillingInfo.billingPeriod` (Required) | `string` |   |
| `currentPeriodBillingInfo.customBillingPeriod` (Required) | `BillingPeriodDetails` | Nested fields omitted: field limit. |
| `nextPeriodBillingInfo` (Required) | `BillingPeriodInfo` |   |
| `nextPeriodBillingInfo.billingPeriod` (Required) | `string` |   |
| `nextPeriodBillingInfo.customBillingPeriod` (Required) | `BillingPeriodDetails` | Nested fields omitted: field limit. |
| `currentPeriodPrice` (Required) | `number` |   |
| `nextPeriodPrice` (Required) | `number` |   |
| `nextRenewal` (Required) | `string (date-time)` |   |
| `expiresAt` (Required) | `string (date-time)` |   |
| `changeBlockReason` | `SUBSCRIPTION_CHANGE_BLOCK_REASON` | Allowed values: `"ON_INTRO_PERIOD"`, `"NOT_ACTIVE"`, `"PAST_DUE"`, `"ON_RENEWAL_DAY"`, `"VIPPS_RECURRING_CHARGE_CREATED"`, `"VIPPS_CHARGE_CREATION_WINDOW"`, `"INVOICE_ALREADY_PAID_FOR_NEXT_PERIOD"`, `"INVOICE_NOT_PAID_FOR_CURRENT_PERIOD"` · Can be null |
| `allowSameSubscriptionChange` (Required) | `boolean` |   |
| `allowDifferentSubscriptionSwitch` (Required) | `boolean` |   |
| `allowAdminSameSubscriptionChange` (Required) | `boolean` |   |
| `allowAdminDifferentSubscriptionSwitch` (Required) | `boolean` |   |
| `enableGiftSubscription` (Required) | `boolean` |   |
| `allowFutureStartDate` (Required) | `boolean` |   |
| `allowAutoRenewChange` (Required) | `boolean` |   |
| `changeData` | `ChangeSubscriptionDetails` | Can be null · Nested fields omitted: field limit. |
| `primaryAddress` (Required) | `ProfileAddress` | Nested fields omitted: field limit. |
| `invoiceAddress` (Required) | `ProfileAddress` | Can be null · Nested fields omitted: field limit. |
| `groupOwnerMemberName` (Required) | `string` |   |
| `groupOwnerMemberId` (Required) | `string` |   |
| `groupOwnerMemberNumber` (Required) | `number` |   |
| `groupOwnerPhoneNumber` (Required) | `string` |   |
| `activeSince` (Required) | `string (date-time)` |   |
| `currentPeriodStart` (Required) | `string (date-time)` |   |
| `currentPeriodEnd` (Required) | `string (date-time)` |   |
| `scheduledActivationDate` (Required) | `string (date-time)` |   |
| `lastActiveAt` | `string (date-time)` | Can be null |
| `hasOptionalProductsInPlan` (Required) | `boolean` |   |
| `inviteAcceptedProducts` (Required) | `array of MemberPackageProductSeat` | Nested fields omitted: field limit. |
| `recipientAttachedProducts` (Required) | `array of MemberPackageProduct` | Nested fields omitted: field limit. |
| `isLink` | `boolean` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/{id}' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
{
  "id": 0,
  "packageId": 0,
  "name": "string",
  "slug": "string",
  "subscriptionPlanId": 0,
  "subscriptionPlanName": "string",
  "recurringPrice": 0,
  "autoRenew": true,
  "paymentInfo": {
    "stripeCardInfo": {},
    "isLink": true,
    "netsCardInfo": {},
    "swedbankpayCardInfo": {},
    "vippsPaymentInfoWithDueCharge": {},
    "eInvoicePaymentInfo": {},
    "externalPaymentInfo": {}
  },
  "paymentProvider": "stripe",
  "isOwner": true,
  "canRemovePaymentMethod": true,
  "hasStoredPaymentMethod": true,
  "isGroupSubscription": true,
  "status": "active",
  "groupOwnerName": "<groupOwnerName>",
  "products": [
    {
      "shippingCharges": [],
      "shippingCountries": []
    }
  ],
  "currentPeriodBillingInfo": {
    "billingPeriod": "string",
    "customBillingPeriod": {}
  },
  "nextPeriodBillingInfo": {
    "billingPeriod": "string",
    "customBillingPeriod": {}
  },
  "currentPeriodPrice": 0,
  "nextPeriodPrice": 0,
  "nextRenewal": "2019-08-24T14:15:22Z",
  "expiresAt": "2019-08-24T14:15:22Z",
  "changeBlockReason": "ON_INTRO_PERIOD",
  "allowSameSubscriptionChange": true,
  "allowDifferentSubscriptionSwitch": true,
  "allowAdminSameSubscriptionChange": true,
  "allowAdminDifferentSubscriptionSwitch": true,
  "enableGiftSubscription": true,
  "allowFutureStartDate": true,
  "allowAutoRenewChange": true,
  "changeData": {
    "id": 0,
    "currentPlanName": "string",
    "newPlanName": "string",
    "currentProducts": [],
    "newProducts": [],
    "currentPaymentProviderInfo": {},
    "currentBillingPeriod": {},
    "newBillingPeriod": {},
    "currentPeriodStart": "2019-08-24T14:15:22Z",
    "nextRenewal": "2019-08-24T14:15:22Z",
    "newPeriodStart": "2019-08-24T14:15:22Z",
    "changeInPrice": 0,
    "currentRecurringPrice": 0,
    "nextRenewalPrice": 0,
    "autoRenew": true,
    "newPackageAutoRenew": true,
    "orderId": 0
  },
  "primaryAddress": {
    "line1": "string",
    "line2": "string",
    "city": "string",
    "postCode": "string",
    "country": "string",
    "name": "string",
    "email": "string",
    "companyName": "string",
    "organizationNo": "string",
    "invoiceReference": "string",
    "isSynced": true,
    "lastSyncedAt": "2019-08-24T14:15:22Z"
  },
  "invoiceAddress": {
    "line1": "string",
    "line2": "string",
    "city": "string",
    "postCode": "string",
    "country": "string",
    "name": "string",
    "email": "string",
    "companyName": "string",
    "organizationNo": "string",
    "invoiceReference": "string",
    "isSynced": true,
    "lastSyncedAt": "2019-08-24T14:15:22Z"
  },
  "groupOwnerMemberName": "<groupOwnerMemberName>",
  "groupOwnerMemberId": "string",
  "groupOwnerMemberNumber": 0,
  "groupOwnerPhoneNumber": "<groupOwnerPhoneNumber>",
  "activeSince": "2019-08-24T14:15:22Z",
  "currentPeriodStart": "2019-08-24T14:15:22Z",
  "currentPeriodEnd": "2019-08-24T14:15:22Z",
  "scheduledActivationDate": "2019-08-24T14:15:22Z",
  "lastActiveAt": "2019-08-24T14:15:22Z",
  "hasOptionalProductsInPlan": true,
  "inviteAcceptedProducts": [
    {
      "metaData": {}
    }
  ],
  "recipientAttachedProducts": [
    {
      "memberPackageProductEmailDomains": [],
      "memberPackageProductIps": [],
      "seats": [],
      "recipients": [],
      "metaData": {}
    }
  ],
  "isLink": true
}
```

<a id="patch-api-v1-members-memberid-subscriptions-id"></a>
## Update particular subscription of a member

`PATCH /api/v1/members/{memberId}/subscriptions/{id}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `UpdateMemberPackageDto`

| Name | Type | Description |
| --- | --- | --- |
| `autoRenew` | `boolean` |   |
| `nextRenewal` | `string (date-time)` |   |
| `scheduledActivationDate` | `string (date-time)` |   |

**Example request body**

`application/json`

```json
{
  "autoRenew": true,
  "nextRenewal": "2019-08-24T14:15:22Z",
  "scheduledActivationDate": "2019-08-24T14:15:22Z"
}
```

### Responses

#### 200

#### 400

Content type: `application/json` · `ErrorResponse`

alreadyOn

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/{id}' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "autoRenew": true,
  "nextRenewal": "2019-08-24T14:15:22Z",
  "scheduledActivationDate": "2019-08-24T14:15:22Z"
}'
```

<a id="patch-api-v1-members-memberid-subscriptions-id-stop"></a>
## Stop particular subscription of a member

`PATCH /api/v1/members/{memberId}/subscriptions/{id}/stop`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Responses

#### 200

#### 400

Content type: `application/json` · `ErrorResponse`

alreadyStopped, canNotStopSubscriptionAsVippsChargeMightOnProgress

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/{id}/stop' \
  --request PATCH \
  --header 'Authorization: Bearer <token>'
```

<a id="patch-api-v1-members-memberid-subscriptions-id-change"></a>
## Switch,Upgrade,downgrade particular subscription of a member

`PATCH /api/v1/members/{memberId}/subscriptions/{id}/change`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `ChangeSubscriptionDto`

| Name | Type | Description |
| --- | --- | --- |
| `planId` | `number` |   |
| `isImmediate` (Required) | `boolean` |   |
| `products` | `array of OptionalProductWithQuantity` |   |
| `products[].productId` (Required when parent is present) | `number` | `minimum`: `1` |
| `products[].quantity` (Required when parent is present) | `number` | `minimum`: `1` |
| `products[].shippingCountry` | `string` | `maxLength`: `64` |
| `products[].manualPrice` | `number` |   |
| `seatTransferMap` | `array of SeatTransferMappingDto` | Optional per-source-product mapping used when switching to a different plan on a group subscription. Required for group plan switches when the old plan has member-package-products with existing seats; must map each such product to a product on the new plan that has enough seat capacity. |
| `seatTransferMap[].fromMemberPackageProductId` (Required when parent is present) | `number` | Id of the existing MemberPackageProduct whose seats should be transferred to the new plan. |
| `seatTransferMap[].toNewPlanProductId` (Required when parent is present) | `number` | Id of the Product on the new plan that will receive the transferred seats. Must be present in the change payload products list. |

**Example request body**

`application/json`

```json
{
  "planId": 0,
  "isImmediate": true
}
```

### Responses

#### 200

Content type: `application/json` · `ChangeSubscriptionResponse`

| Name | Type | Description |
| --- | --- | --- |
| `subscriptionChangeId` (Required) | `number` |   |
| `orderId` | `number` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/{id}/change' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "planId": 0,
  "isImmediate": true,
  "products": [
    {}
  ],
  "seatTransferMap": [
    {}
  ]
}'
```

### Example response

200 · `application/json`

```json
{
  "subscriptionChangeId": 0,
  "orderId": 0
}
```

<a id="get-api-v1-members-memberid-subscriptions-subscriptions-id-change-changeid"></a>
## Get subscription change details

`GET /api/v1/members/{memberId}/subscriptions/subscriptions/{id}/change/{changeId}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |
| `changeId` (Required) | path | `number` |   |

### Responses

#### 200

Content type: `application/json` · `ChangeSubscriptionDetails`

| Name | Type | Description |
| --- | --- | --- |
| `id` (Required) | `number` |   |
| `currentPlanName` (Required) | `string` |   |
| `newPlanName` (Required) | `string` |   |
| `currentProducts` (Required) | `array of ProductPackage` |   |
| `currentProducts[].circulationType` | `CIRCULATION_TYPE` | Allowed values: `"subscription"`, `"single_copy"` · Can be null |
| `currentProducts[].id` (Required when parent is present) | `number` |   |
| `currentProducts[].name` (Required when parent is present) | `string` |   |
| `currentProducts[].productId` (Required when parent is present) | `number` |   |
| `currentProducts[].productCategory` (Required when parent is present) | `string` | Allowed values: `"digital_subscription"`, `"physical_subscription"`, `"physical"`, `"event_ticket"`, `"PHYSICAL_PRODUCT"` |
| `currentProducts[].price` (Required when parent is present) | `number` |   |
| `currentProducts[].recurringPrice` (Required when parent is present) | `number` |   |
| `currentProducts[].quantity` (Required when parent is present) | `number` |   |
| `currentProducts[].hasAccess` (Required when parent is present) | `boolean` |   |
| `currentProducts[].isOptional` (Required when parent is present) | `boolean` |   |
| `currentProducts[].shippingCountry` (Required when parent is present) | `string` |   |
| `currentProducts[].shippingCharges` (Required when parent is present) | `array of ShippingCharge` |   |
| `currentProducts[].shippingCharges[].country` (Required when parent is present) | `string` |   |
| `currentProducts[].shippingCharges[].charge` (Required when parent is present) | `number` |   |
| `currentProducts[].shippingCountries` (Required when parent is present) | `array of string` |   |
| `currentProducts[].shippingPrice` (Required when parent is present) | `number` |   |
| `currentProducts[].groupInfo` (Required when parent is present) | `GroupSubscriptionResponse` |   |
| `currentProducts[].groupInfo.ownerHasAccess` (Required when parent is present) | `boolean` | Default: `false` |
| `currentProducts[].groupInfo.seatsAllowed` (Required when parent is present) | `number` | Default: `0` |
| `currentProducts[].groupInfo.seatsActive` (Required when parent is present) | `number` | Default: `0` |
| `currentProducts[].groupInfo.seatsRemaining` (Required when parent is present) | `number` | Default: `0` |
| `currentProducts[].groupInfo.groupMemberCount` (Required when parent is present) | `number` | Group members holding a live seat (accepted or open invitation). Excludes the owner's own access and expired invitations. · Default: `0` |
| `currentProducts[].groupInfo.maxQuantityPerOrder` (Required when parent is present) | `number` |   |
| `currentProducts[].groupInfo.assignSeatToOwner` (Required when parent is present) | `boolean` |   |
| `currentProducts[].groupInfo.groupOwnerMemberName` (Required when parent is present) | `string` |   |
| `currentProducts[].groupInfo.groupOwnerMemberId` (Required when parent is present) | `string` |   |
| `currentProducts[].groupInfo.groupOwnerMemberNumber` (Required when parent is present) | `number` |   |
| `currentProducts[].groupInfo.seats` (Required when parent is present) | `array of SeatData` | Default: `[]` · Deprecated · Nested fields omitted: depth limit. |
| `newProducts` (Required) | `array of ProductPackage` |   |
| `newProducts[].circulationType` | `CIRCULATION_TYPE` | Allowed values: `"subscription"`, `"single_copy"` · Can be null |
| `newProducts[].id` (Required when parent is present) | `number` |   |
| `newProducts[].name` (Required when parent is present) | `string` |   |
| `newProducts[].productId` (Required when parent is present) | `number` |   |
| `newProducts[].productCategory` (Required when parent is present) | `string` | Allowed values: `"digital_subscription"`, `"physical_subscription"`, `"physical"`, `"event_ticket"`, `"PHYSICAL_PRODUCT"` |
| `newProducts[].price` (Required when parent is present) | `number` |   |
| `newProducts[].recurringPrice` (Required when parent is present) | `number` |   |
| `newProducts[].quantity` (Required when parent is present) | `number` |   |
| `newProducts[].hasAccess` (Required when parent is present) | `boolean` |   |
| `newProducts[].isOptional` (Required when parent is present) | `boolean` |   |
| `newProducts[].shippingCountry` (Required when parent is present) | `string` |   |
| `newProducts[].shippingCharges` (Required when parent is present) | `array of ShippingCharge` |   |
| `newProducts[].shippingCharges[].country` (Required when parent is present) | `string` |   |
| `newProducts[].shippingCharges[].charge` (Required when parent is present) | `number` |   |
| `newProducts[].shippingCountries` (Required when parent is present) | `array of string` |   |
| `newProducts[].shippingPrice` (Required when parent is present) | `number` |   |
| `newProducts[].groupInfo` (Required when parent is present) | `GroupSubscriptionResponse` | Nested fields omitted: field limit. |
| `currentPaymentProviderInfo` (Required) | `PaymentInfo` |   |
| `currentPaymentProviderInfo.stripeCardInfo` (Required) | `StripeCardInfo` |   |
| `currentPaymentProviderInfo.stripeCardInfo.brand` (Required) | `string` |   |
| `currentPaymentProviderInfo.stripeCardInfo.expMonth` (Required) | `number` |   |
| `currentPaymentProviderInfo.stripeCardInfo.expYear` (Required) | `number` |   |
| `currentPaymentProviderInfo.stripeCardInfo.last4` (Required) | `string` |   |
| `currentPaymentProviderInfo.stripeCardInfo.country` (Required) | `string` |   |
| `currentPaymentProviderInfo.isLink` (Required) | `boolean` |   |
| `currentPaymentProviderInfo.netsCardInfo` (Required) | `NetsCardInfo` |   |
| `currentPaymentProviderInfo.swedbankpayCardInfo` (Required) | `SwedbankpayCardInfo` | Nested fields omitted: field limit. |
| `currentPaymentProviderInfo.vippsPaymentInfoWithDueCharge` (Required) | `VippsPaymentInfoWithDueCharge` | Nested fields omitted: field limit. |
| `currentPaymentProviderInfo.eInvoicePaymentInfo` (Required) | `EInvoicePaymentInfo` | Nested fields omitted: field limit. |
| `currentPaymentProviderInfo.externalPaymentInfo` (Required) | `ExternalPaymentInfo` |   |
| `currentPaymentProviderInfo.externalPaymentInfo.isPaid` (Required) | `boolean` |   |
| `currentPaymentProviderInfo.externalPaymentInfo.paidTill` (Required) | `string (date-time)` |   |
| `currentBillingPeriod` (Required) | `BillingPeriodInfo` |   |
| `currentBillingPeriod.billingPeriod` (Required) | `string` |   |
| `currentBillingPeriod.customBillingPeriod` (Required) | `BillingPeriodDetails` | Nested fields omitted: field limit. |
| `newBillingPeriod` (Required) | `BillingPeriodInfo` |   |
| `newBillingPeriod.billingPeriod` (Required) | `string` |   |
| `newBillingPeriod.customBillingPeriod` (Required) | `BillingPeriodDetails` | Nested fields omitted: field limit. |
| `currentPeriodStart` (Required) | `string (date-time)` |   |
| `nextRenewal` (Required) | `string (date-time)` |   |
| `newPeriodStart` (Required) | `string (date-time)` |   |
| `changeInPrice` (Required) | `number` |   |
| `currentRecurringPrice` (Required) | `number` |   |
| `nextRenewalPrice` (Required) | `number` |   |
| `autoRenew` (Required) | `boolean` |   |
| `newPackageAutoRenew` (Required) | `boolean` |   |
| `orderId` (Required) | `number` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/subscriptions/{id}/change/{changeId}' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
{
  "id": 0,
  "currentPlanName": "string",
  "newPlanName": "string",
  "currentProducts": [
    {
      "shippingCharges": [],
      "shippingCountries": []
    }
  ],
  "newProducts": [
    {
      "shippingCharges": [],
      "shippingCountries": []
    }
  ],
  "currentPaymentProviderInfo": {
    "stripeCardInfo": {},
    "isLink": true,
    "netsCardInfo": {},
    "swedbankpayCardInfo": {},
    "vippsPaymentInfoWithDueCharge": {},
    "eInvoicePaymentInfo": {},
    "externalPaymentInfo": {}
  },
  "currentBillingPeriod": {
    "billingPeriod": "string",
    "customBillingPeriod": {}
  },
  "newBillingPeriod": {
    "billingPeriod": "string",
    "customBillingPeriod": {}
  },
  "currentPeriodStart": "2019-08-24T14:15:22Z",
  "nextRenewal": "2019-08-24T14:15:22Z",
  "newPeriodStart": "2019-08-24T14:15:22Z",
  "changeInPrice": 0,
  "currentRecurringPrice": 0,
  "nextRenewalPrice": 0,
  "autoRenew": true,
  "newPackageAutoRenew": true,
  "orderId": 0
}
```

<a id="patch-api-v1-members-memberid-subscriptions-subscriptions-subscriptionplanid-change-changeid-cancel"></a>
## Cancel subscription change details

`PATCH /api/v1/members/{memberId}/subscriptions/subscriptions/{subscriptionPlanId}/change/{changeId}/cancel`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `subscriptionPlanId` (Required) | path | `number` |   |
| `changeId` (Required) | path | `number` |   |

### Responses

#### 200

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/subscriptions/{subscriptionPlanId}/change/{changeId}/cancel' \
  --request PATCH \
  --header 'Authorization: Bearer <token>'
```

<a id="patch-api-v1-members-memberid-subscriptions-subscriptions-subscriptionplanid-change-changeid-confirm"></a>
## Confirm subscription change

`PATCH /api/v1/members/{memberId}/subscriptions/subscriptions/{subscriptionPlanId}/change/{changeId}/confirm`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `subscriptionPlanId` (Required) | path | `number` |   |
| `changeId` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `ConfirmChangeSubscriptionDto`

| Name | Type | Description |
| --- | --- | --- |
| `isImmediate` (Required) | `boolean` |   |

**Example request body**

`application/json`

```json
{
  "isImmediate": true
}
```

### Responses

#### 200

#### 400

Content type: `application/json` · `ErrorResponse`

invalidStatus \| seatTransferDuplicateSource \| seatTransferSourceMissing \| seatTransferTargetMissing

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 404

Content type: `application/json` · `ErrorResponse`

notFound \| subscriptionPlanNotFound \| memberPackageNotFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/subscriptions/{subscriptionPlanId}/change/{changeId}/confirm' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "isImmediate": true
}'
```

<a id="patch-api-v1-members-memberid-subscriptions-id-activation-date"></a>
## Change activation date of a subscription

`PATCH /api/v1/members/{memberId}/subscriptions/{id}/activation-date`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `UpdateMemberPackageDto`

Same fields as [Update particular subscription of a member (Request body)](https://www.subrite.no/developers/member-subscriptions?md=true#patch-api-v1-members-memberid-subscriptions-id).

**Example request body**

`application/json`

```json
{
  "autoRenew": true,
  "nextRenewal": "2019-08-24T14:15:22Z",
  "scheduledActivationDate": "2019-08-24T14:15:22Z"
}
```

### Responses

#### 200

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/{id}/activation-date' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "autoRenew": true,
  "nextRenewal": "2019-08-24T14:15:22Z",
  "scheduledActivationDate": "2019-08-24T14:15:22Z"
}'
```

<a id="get-api-v1-members-memberid-subscriptions-product-id"></a>
## Get subscribed product details

`GET /api/v1/members/{memberId}/subscriptions/product/{id}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Responses

#### 200

Content type: `application/json` · `MemberSubscribedProduct`

| Name | Type | Description |
| --- | --- | --- |
| `id` (Required) | `number` |   |
| `productId` (Required) | `number` |   |
| `name` (Required) | `string` |   |
| `productCategory` | `ProductCategory` | Allowed values: `"digital_subscription"`, `"physical_subscription"`, `"physical"`, `"event_ticket"`, `"PHYSICAL_PRODUCT"` |
| `circulationType` | `CIRCULATION_TYPE` | Allowed values: `"subscription"`, `"single_copy"` · Can be null |
| `quantity` (Required) | `number` |   |
| `price` (Required) | `number` |   |
| `recurringPrice` (Required) | `number` |   |
| `isOptional` (Required) | `boolean` |   |
| `shippingCountry` (Required) | `string` |   |
| `shippingProvider` (Required) | `SHIPPING_PROVIDER` | Allowed values: `"Helthjem"`, `"Bring - Posten"`, `"Distribution Innovation"` |
| `allowDistributorToUpdateDeliveryAddress` (Required) | `boolean` |   |
| `deliveryAddresses` | `array of DeliveryAddress` |   |
| `deliveryAddresses[].id` (Required when parent is present) | `number` |   |
| `deliveryAddresses[].route` | `string` | The DI carrier route for this address. · Can be null |
| `deliveryAddresses[].line1` (Required when parent is present) | `string` |   |
| `deliveryAddresses[].line2` (Required when parent is present) | `string` |   |
| `deliveryAddresses[].city` (Required when parent is present) | `string` |   |
| `deliveryAddresses[].postCode` (Required when parent is present) | `string` |   |
| `deliveryAddresses[].country` (Required when parent is present) | `string` |   |
| `deliveryAddresses[].name` (Required when parent is present) | `string` |   |
| `deliveryAddresses[].email` (Required when parent is present) | `string` |   |
| `deliveryAddresses[].companyName` (Required when parent is present) | `string` |   |
| `deliveryAddresses[].organizationNo` (Required when parent is present) | `string` |   |
| `deliveryAddresses[].invoiceReference` | `string` |   |
| `deliveryAddresses[].isSynced` | `boolean` |   |
| `deliveryAddresses[].lastSyncedAt` | `string (date-time)` |   |
| `groupInfo` | `GroupSubscriptionResponse` |   |
| `groupInfo.ownerHasAccess` (Required when parent is present) | `boolean` | Default: `false` |
| `groupInfo.seatsAllowed` (Required when parent is present) | `number` | Default: `0` |
| `groupInfo.seatsActive` (Required when parent is present) | `number` | Default: `0` |
| `groupInfo.seatsRemaining` (Required when parent is present) | `number` | Default: `0` |
| `groupInfo.groupMemberCount` (Required when parent is present) | `number` | Group members holding a live seat (accepted or open invitation). Excludes the owner's own access and expired invitations. · Default: `0` |
| `groupInfo.maxQuantityPerOrder` (Required when parent is present) | `number` |   |
| `groupInfo.assignSeatToOwner` (Required when parent is present) | `boolean` |   |
| `groupInfo.groupOwnerMemberName` (Required when parent is present) | `string` |   |
| `groupInfo.groupOwnerMemberId` (Required when parent is present) | `string` |   |
| `groupInfo.groupOwnerMemberNumber` (Required when parent is present) | `number` |   |
| `groupInfo.seats` (Required when parent is present) | `array of SeatData` | Default: `[]` · Deprecated |
| `groupInfo.seats[].id` (Required when parent is present) | `number` |   |
| `groupInfo.seats[].name` (Required when parent is present) | `string` |   |
| `groupInfo.seats[].email` (Required when parent is present) | `string` | Can be null |
| `groupInfo.seats[].status` (Required when parent is present) | `string` | Allowed values: `"pending"`, `"accepted"`, `"expired"`, `"awaiting_activation"` |
| `groupInfo.seats[].memberId` (Required when parent is present) | `string` |   |
| `groupInfo.seats[].memberData` (Required when parent is present) | `MemberPersonalInfo` | Nested fields omitted: depth limit. |
| `groupInfo.seats[].expiresAt` (Required when parent is present) | `string` |   |
| `giftReceiverInfo` | `GiftReceiverResponse` |   |
| `giftReceiverInfo.seatsAllowed` (Required when parent is present) | `number` | Default: `0` |
| `giftReceiverInfo.seatsActive` (Required when parent is present) | `number` | Default: `0` |
| `giftReceiverInfo.seatsRemaining` (Required when parent is present) | `number` | Default: `0` |
| `giftReceiverInfo.maxQuantityPerOrder` (Required when parent is present) | `number` |   |
| `giftReceiverInfo.groupOwnerMemberName` (Required when parent is present) | `string` |   |
| `giftReceiverInfo.groupOwnerMemberId` (Required when parent is present) | `string` |   |
| `giftReceiverInfo.groupOwnerMemberNumber` (Required when parent is present) | `number` |   |
| `giftReceiverInfo.seats` (Required when parent is present) | `array of SeatData` | Default: `[]` · Nested fields omitted: field limit. |
| `primaryAddress` | `ProfileAddress` |   |
| `primaryAddress.line1` (Required when parent is present) | `string` |   |
| `primaryAddress.line2` (Required when parent is present) | `string` |   |
| `primaryAddress.city` (Required when parent is present) | `string` |   |
| `primaryAddress.postCode` (Required when parent is present) | `string` |   |
| `primaryAddress.country` (Required when parent is present) | `string` |   |
| `primaryAddress.name` (Required when parent is present) | `string` |   |
| `primaryAddress.email` (Required when parent is present) | `string` |   |
| `primaryAddress.companyName` (Required when parent is present) | `string` |   |
| `primaryAddress.organizationNo` (Required when parent is present) | `string` |   |
| `primaryAddress.invoiceReference` | `string` |   |
| `primaryAddress.isSynced` | `boolean` |   |
| `primaryAddress.lastSyncedAt` | `string (date-time)` |   |
| `emailDomains` | `array of string` |   |
| `supportsIpAccess` (Required) | `boolean` | Whether this product allows configuring IP-based access ranges. |
| `supportsIpRangeConfiguration` (Required) | `boolean` | True when the IP-range editor should be shown: subscription is ACTIVE, product category is DIGITAL\_SUBSCRIPTION, and the product has IP access enabled. |
| `ipRanges` (Required) | `array of IpRangeDto` |   |
| `ipRanges[].ipRange` (Required when parent is present) | `string` |   |
| `ipRanges[].label` | `string` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
{
  "id": 0,
  "productId": 0,
  "name": "string",
  "productCategory": "digital_subscription",
  "circulationType": "subscription",
  "quantity": 0,
  "price": 0,
  "recurringPrice": 0,
  "isOptional": true,
  "shippingCountry": "string",
  "shippingProvider": "Helthjem",
  "allowDistributorToUpdateDeliveryAddress": true,
  "deliveryAddresses": [
    {}
  ],
  "groupInfo": {
    "ownerHasAccess": false,
    "seatsAllowed": 0,
    "seatsActive": 0,
    "seatsRemaining": 0,
    "groupMemberCount": 0,
    "maxQuantityPerOrder": 0,
    "assignSeatToOwner": true,
    "groupOwnerMemberName": "<groupOwnerMemberName>",
    "groupOwnerMemberId": "string",
    "groupOwnerMemberNumber": 0,
    "seats": []
  },
  "giftReceiverInfo": {
    "seatsAllowed": 0,
    "seatsActive": 0,
    "seatsRemaining": 0,
    "maxQuantityPerOrder": 0,
    "groupOwnerMemberName": "<groupOwnerMemberName>",
    "groupOwnerMemberId": "string",
    "groupOwnerMemberNumber": 0,
    "seats": []
  },
  "primaryAddress": {
    "line1": "string",
    "line2": "string",
    "city": "string",
    "postCode": "string",
    "country": "string",
    "name": "string",
    "email": "string",
    "companyName": "string",
    "organizationNo": "string",
    "invoiceReference": "string",
    "isSynced": true,
    "lastSyncedAt": "2019-08-24T14:15:22Z"
  },
  "emailDomains": [
    "string"
  ],
  "supportsIpAccess": true,
  "supportsIpRangeConfiguration": true,
  "ipRanges": [
    {}
  ]
}
```

<a id="get-api-v1-members-memberid-subscriptions-product-id-seats"></a>
## Get paginated seats for a subscribed product

`GET /api/v1/members/{memberId}/subscriptions/product/{id}/seats`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |
| `page` | query | `number` | Default: `1` · `minimum`: `1` |
| `take` | query | `number` | Default: `10` · `minimum`: `1`, `maximum`: `50` |
| `orderBy` | query | `string` | Allowed values: `"createdAt"`, `"id"`, `"updatedAt"` · Default: `"createdAt"` |
| `orderDirection` | query | `string` | Allowed values: `"asc"`, `"desc"` · Default: `"desc"` |
| `search` | query | `string` | Search by seat member name or email |
| `status` | query | `string` | Allowed values: `"active"`, `"invite_sent"`, `"expired"` |

### Responses

#### 200

Content type: `application/json` · `SeatDataPaginated`

| Name | Type | Description |
| --- | --- | --- |
| `items` (Required) | `array of SeatData` |   |
| `items[].id` (Required when parent is present) | `number` |   |
| `items[].name` (Required when parent is present) | `string` |   |
| `items[].email` (Required when parent is present) | `string` | Can be null |
| `items[].status` (Required when parent is present) | `string` | Allowed values: `"pending"`, `"accepted"`, `"expired"`, `"awaiting_activation"` |
| `items[].memberId` (Required when parent is present) | `string` |   |
| `items[].memberData` (Required when parent is present) | `MemberPersonalInfo` |   |
| `items[].memberData.id` (Required when parent is present) | `string` |   |
| `items[].memberData.fullName` (Required when parent is present) | `string` |   |
| `items[].memberData.nickName` (Required when parent is present) | `string` |   |
| `items[].memberData.createdAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].memberData.avatar` (Required when parent is present) | `string` |   |
| `items[].memberData.countryCode` | `string` |   |
| `items[].memberData.birthDate` (Required when parent is present) | `string (date-time)` |   |
| `items[].memberData.deleteAfterExpiration` (Required when parent is present) | `boolean` |   |
| `items[].memberData.isCompany` (Required when parent is present) | `boolean` |   |
| `items[].memberData.companyName` (Required when parent is present) | `string` |   |
| `items[].memberData.organizationNo` (Required when parent is present) | `string` |   |
| `items[].memberData.customPropertyValues` (Required when parent is present) | `object` |   |
| `items[].memberData.emailVerified` | `string` |   |
| `items[].memberData.phoneVerified` (Required when parent is present) | `boolean` |   |
| `items[].memberData.memberNumber` (Required when parent is present) | `number` |   |
| `items[].memberData.userId` (Required when parent is present) | `number` |   |
| `items[].memberData.emailStatus` | `SENDGRID_MAIL_EVENTS` | Allowed values: `"scheduled"`, `"processed"`, `"dropped"`, `"deferred"`, `"bounce"`, `"hard_bounce"`, `"soft_bounce"`, `"spamreport"`, `"delivered"`, `"unsubscribe"`, `"group_unsubscribe"`, `"group_resubscribe"`, `"open"`, `"failed"`, `"click"`, `"skipped_bounced"` |
| `items[].memberData.email` (Required when parent is present) | `string (email)` |   |
| `items[].memberData.phone` (Required when parent is present) | `string` |   |
| `items[].memberData.address` (Required when parent is present) | `ProfileAddress` | Nested fields omitted: depth limit. |
| `items[].expiresAt` (Required when parent is present) | `string` |   |
| `meta` (Required) | `PageMeta` |   |
| `meta.page` (Required) | `number` |   |
| `meta.take` (Required) | `number` |   |
| `meta.count` (Required) | `number` |   |
| `meta.pageCount` (Required) | `number` |   |
| `meta.hasPreviousPage` (Required) | `boolean` |   |
| `meta.hasNextPage` (Required) | `boolean` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/seats' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
{
  "items": [
    {}
  ],
  "meta": {
    "page": 0,
    "take": 0,
    "count": 0,
    "pageCount": 0,
    "hasPreviousPage": true,
    "hasNextPage": true
  }
}
```

<a id="post-api-v1-members-memberid-subscriptions-product-id-create-member"></a>
## Create additional member for a product seat

`POST /api/v1/members/{memberId}/subscriptions/product/{id}/create-member`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `CreateAdditionalMemberDto`

| Name | Type | Description |
| --- | --- | --- |
| `fullName` | `string` |   |
| `memberPackageProductId` | `number` | `minimum`: `1` |
| `email` | `string (email)` |   |
| `birthDate` | `string (date-time)` |   |
| `nickName` | `string` | `maxLength`: `255` |
| `phone` | `string` | `maxLength`: `32` |
| `countryCode` | `string` | `maxLength`: `8` |
| `isCompany` | `boolean` |   |
| `companyName` | `string` | `maxLength`: `255` |
| `address` | `MemberAddressDto` |   |
| `address.line1` | `string` | `maxLength`: `255` |
| `address.line2` | `string` | `maxLength`: `255` |
| `address.city` | `string` | `maxLength`: `255` |
| `address.state` | `string` | `maxLength`: `255` |
| `address.postCode` | `string` | `maxLength`: `32` |
| `address.country` | `string` | `maxLength`: `64` |
| `address.name` | `string` | `maxLength`: `255` |
| `address.email` | `string (email)` | `maxLength`: `255` |
| `address.organizationNo` | `string` | `maxLength`: `64` |
| `address.companyName` | `string` | `maxLength`: `255` |
| `address.invoiceReference` | `string` | `maxLength`: `255` |
| `customPropertyValues` | `object` |   |

**Example request body**

`application/json`

```json
{
  "fullName": "<fullName>",
  "memberPackageProductId": 1,
  "email": "user@example.com",
  "birthDate": "<birthDate>",
  "nickName": "string",
  "phone": "<phone>",
  "countryCode": "string",
  "isCompany": true,
  "companyName": "string",
  "address": {
    "line1": "string",
    "line2": "string",
    "city": "string",
    "state": "string",
    "postCode": "string",
    "country": "string",
    "name": "string",
    "email": "user@example.com",
    "organizationNo": "string",
    "companyName": "string",
    "invoiceReference": "string"
  },
  "customPropertyValues": {}
}
```

### Responses

#### 201

Content type: `application/json` · `MemberPersonalInfo`

| Name | Type | Description |
| --- | --- | --- |
| `id` (Required) | `string` |   |
| `fullName` (Required) | `string` |   |
| `nickName` (Required) | `string` |   |
| `createdAt` (Required) | `string (date-time)` |   |
| `avatar` (Required) | `string` |   |
| `countryCode` | `string` |   |
| `birthDate` (Required) | `string (date-time)` |   |
| `deleteAfterExpiration` (Required) | `boolean` |   |
| `isCompany` (Required) | `boolean` |   |
| `companyName` (Required) | `string` |   |
| `organizationNo` (Required) | `string` |   |
| `customPropertyValues` (Required) | `object` |   |
| `emailVerified` | `string` |   |
| `phoneVerified` (Required) | `boolean` |   |
| `memberNumber` (Required) | `number` |   |
| `userId` (Required) | `number` |   |
| `emailStatus` | `SENDGRID_MAIL_EVENTS` | Allowed values: `"scheduled"`, `"processed"`, `"dropped"`, `"deferred"`, `"bounce"`, `"hard_bounce"`, `"soft_bounce"`, `"spamreport"`, `"delivered"`, `"unsubscribe"`, `"group_unsubscribe"`, `"group_resubscribe"`, `"open"`, `"failed"`, `"click"`, `"skipped_bounced"` |
| `email` (Required) | `string (email)` |   |
| `phone` (Required) | `string` |   |
| `address` (Required) | `ProfileAddress` |   |
| `address.line1` (Required) | `string` |   |
| `address.line2` (Required) | `string` |   |
| `address.city` (Required) | `string` |   |
| `address.postCode` (Required) | `string` |   |
| `address.country` (Required) | `string` |   |
| `address.name` (Required) | `string` |   |
| `address.email` (Required) | `string` |   |
| `address.companyName` (Required) | `string` |   |
| `address.organizationNo` (Required) | `string` |   |
| `address.invoiceReference` | `string` |   |
| `address.isSynced` | `boolean` |   |
| `address.lastSyncedAt` | `string (date-time)` |   |

#### 400

Content type: `application/json` · `ErrorResponse`

alreadyExists

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/create-member' \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "fullName": "<fullName>",
  "memberPackageProductId": 1,
  "email": "user@example.com",
  "birthDate": "<birthDate>",
  "nickName": "string",
  "phone": "<phone>",
  "countryCode": "string",
  "isCompany": true,
  "companyName": "string",
  "address": {
    "line1": "string",
    "line2": "string",
    "city": "string",
    "state": "string",
    "postCode": "string",
    "country": "string",
    "name": "string",
    "email": "user@example.com",
    "organizationNo": "string",
    "companyName": "string",
    "invoiceReference": "string"
  },
  "customPropertyValues": {}
}'
```

### Example response

201 · `application/json`

```json
{
  "id": "string",
  "fullName": "<fullName>",
  "nickName": "string",
  "createdAt": "2019-08-24T14:15:22Z",
  "avatar": "string",
  "countryCode": "string",
  "birthDate": "<birthDate>",
  "deleteAfterExpiration": true,
  "isCompany": true,
  "companyName": "string",
  "organizationNo": "string",
  "customPropertyValues": {},
  "emailVerified": "string",
  "phoneVerified": true,
  "memberNumber": 0,
  "userId": 0,
  "emailStatus": "scheduled",
  "email": "user@example.com",
  "phone": "<phone>",
  "address": {
    "line1": "string",
    "line2": "string",
    "city": "string",
    "postCode": "string",
    "country": "string",
    "name": "string",
    "email": "string",
    "companyName": "string",
    "organizationNo": "string",
    "invoiceReference": "string",
    "isSynced": true,
    "lastSyncedAt": "2019-08-24T14:15:22Z"
  }
}
```

<a id="post-api-v1-members-memberid-subscriptions-product-id-assign-member-userid"></a>
## Assign existing member to a product seat

`POST /api/v1/members/{memberId}/subscriptions/product/{id}/assign-member/{userId}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |
| `userId` (Required) | path | `string` |   |

### Responses

#### 201

Content type: `application/json` · `MemberPersonalInfo`

Same fields as [Create additional member for a product seat (201)](https://www.subrite.no/developers/member-subscriptions?md=true#post-api-v1-members-memberid-subscriptions-product-id-create-member).

#### 400

seatLimitReached, cannotAssignToTheOwner, alreadyAssigned

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/assign-member/{userId}' \
  --request POST \
  --header 'Authorization: Bearer <token>'
```

### Example response

201 · `application/json`

```json
{
  "id": "string",
  "fullName": "<fullName>",
  "nickName": "string",
  "createdAt": "2019-08-24T14:15:22Z",
  "avatar": "string",
  "countryCode": "string",
  "birthDate": "<birthDate>",
  "deleteAfterExpiration": true,
  "isCompany": true,
  "companyName": "string",
  "organizationNo": "string",
  "customPropertyValues": {},
  "emailVerified": "string",
  "phoneVerified": true,
  "memberNumber": 0,
  "userId": 0,
  "emailStatus": "scheduled",
  "email": "user@example.com",
  "phone": "<phone>",
  "address": {
    "line1": "string",
    "line2": "string",
    "city": "string",
    "postCode": "string",
    "country": "string",
    "name": "string",
    "email": "string",
    "companyName": "string",
    "organizationNo": "string",
    "invoiceReference": "string",
    "isSynced": true,
    "lastSyncedAt": "2019-08-24T14:15:22Z"
  }
}
```

<a id="post-api-v1-members-memberid-subscriptions-product-id-create-gift-receiver"></a>
## Create gift receiver for a product seat

`POST /api/v1/members/{memberId}/subscriptions/product/{id}/create-gift-receiver`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |
| `sendInvitation` | query | `boolean` |   |

### Request body

Content type: `application/json` · Required · `CreateGiftReceiverDto`

| Name | Type | Description |
| --- | --- | --- |
| `fullName` (Required) | `string` |   |
| `email` (Required) | `string (email)` | Required unless a phone is given: a receiver needs an email or a phone. |
| `phone` (Required) | `string` | Required unless an email is given. A phone-only receiver is accepted by this endpoint but cannot be seated until SUBRITE-965. |
| `memberPackageProductId` | `number` | `minimum`: `1` |

**Example request body**

`application/json`

```json
{
  "fullName": "<fullName>",
  "email": "user@example.com",
  "phone": "<phone>",
  "memberPackageProductId": 1
}
```

### Responses

#### 201

Content type: `application/json` · `MemberPersonalInfo`

Same fields as [Create additional member for a product seat (201)](https://www.subrite.no/developers/member-subscriptions?md=true#post-api-v1-members-memberid-subscriptions-product-id-create-member).

#### 400

Content type: `application/json` · `ErrorResponse`

alreadyExists, seatLimitReached, invitationAlreadyAccepted, invitationAlreadySent, phoneAlreadyVerified

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/create-gift-receiver' \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "fullName": "<fullName>",
  "email": "user@example.com",
  "phone": "<phone>",
  "memberPackageProductId": 1
}'
```

### Example response

201 · `application/json`

```json
{
  "id": "string",
  "fullName": "<fullName>",
  "nickName": "string",
  "createdAt": "2019-08-24T14:15:22Z",
  "avatar": "string",
  "countryCode": "string",
  "birthDate": "<birthDate>",
  "deleteAfterExpiration": true,
  "isCompany": true,
  "companyName": "string",
  "organizationNo": "string",
  "customPropertyValues": {},
  "emailVerified": "string",
  "phoneVerified": true,
  "memberNumber": 0,
  "userId": 0,
  "emailStatus": "scheduled",
  "email": "user@example.com",
  "phone": "<phone>",
  "address": {
    "line1": "string",
    "line2": "string",
    "city": "string",
    "postCode": "string",
    "country": "string",
    "name": "string",
    "email": "string",
    "companyName": "string",
    "organizationNo": "string",
    "invoiceReference": "string",
    "isSynced": true,
    "lastSyncedAt": "2019-08-24T14:15:22Z"
  }
}
```

<a id="post-api-v1-members-memberid-subscriptions-product-id-delivery-address"></a>
## Add delivery address of a subscribed product

`POST /api/v1/members/{memberId}/subscriptions/product/{id}/delivery-address`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `AdminDeliveryAddressDto`

| Name | Type | Description |
| --- | --- | --- |
| `route` | `string` | The DI carrier route for this address, for example 1 or P-203. · `maxLength`: `255` · Can be null |
| `line1` | `string` | `maxLength`: `255` |
| `line2` | `string` | `maxLength`: `255` |
| `city` | `string` | `maxLength`: `255` |
| `state` | `string` | `maxLength`: `255` |
| `postCode` | `string` | `maxLength`: `32` |
| `country` | `string` | `maxLength`: `64` |
| `name` | `string` | `maxLength`: `255` |
| `email` | `string (email)` | `maxLength`: `255` |
| `organizationNo` | `string` | `maxLength`: `64` |
| `companyName` | `string` | `maxLength`: `255` |
| `invoiceReference` | `string` | `maxLength`: `255` |

**Example request body**

`application/json`

```json
{
  "route": "string",
  "line1": "string",
  "line2": "string",
  "city": "string",
  "state": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "user@example.com",
  "organizationNo": "string",
  "companyName": "string",
  "invoiceReference": "string"
}
```

### Responses

#### 201

Content type: `application/json` · `DeliveryAddress`

| Name | Type | Description |
| --- | --- | --- |
| `id` (Required) | `number` |   |
| `route` | `string` | The DI carrier route for this address. · Can be null |
| `line1` (Required) | `string` |   |
| `line2` (Required) | `string` |   |
| `city` (Required) | `string` |   |
| `postCode` (Required) | `string` |   |
| `country` (Required) | `string` |   |
| `name` (Required) | `string` |   |
| `email` (Required) | `string` |   |
| `companyName` (Required) | `string` |   |
| `organizationNo` (Required) | `string` |   |
| `invoiceReference` | `string` |   |
| `isSynced` | `boolean` |   |
| `lastSyncedAt` | `string (date-time)` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/delivery-address' \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "route": "string",
  "line1": "string",
  "line2": "string",
  "city": "string",
  "state": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "user@example.com",
  "organizationNo": "string",
  "companyName": "string",
  "invoiceReference": "string"
}'
```

### Example response

201 · `application/json`

```json
{
  "id": 0,
  "route": "string",
  "line1": "string",
  "line2": "string",
  "city": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "string",
  "companyName": "string",
  "organizationNo": "string",
  "invoiceReference": "string",
  "isSynced": true,
  "lastSyncedAt": "2019-08-24T14:15:22Z"
}
```

<a id="patch-api-v1-members-memberid-subscriptions-product-id-recurring-price"></a>
## Update recurring price of a product

`PATCH /api/v1/members/{memberId}/subscriptions/product/{id}/recurring-price`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `UpdateRecurringPriceDto`

| Name | Type | Description |
| --- | --- | --- |
| `recurringPrice` (Required) | `number` | `minimum`: `1` |

**Example request body**

`application/json`

```json
{
  "recurringPrice": 1
}
```

### Responses

#### 200

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/recurring-price' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "recurringPrice": 1
}'
```

<a id="post-api-v1-members-memberid-subscriptions-id-invoice-address"></a>
## Add delivery address of a subscribed package

`POST /api/v1/members/{memberId}/subscriptions/{id}/invoice-address`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `MemberAddressDto`

| Name | Type | Description |
| --- | --- | --- |
| `line1` | `string` | `maxLength`: `255` |
| `line2` | `string` | `maxLength`: `255` |
| `city` | `string` | `maxLength`: `255` |
| `state` | `string` | `maxLength`: `255` |
| `postCode` | `string` | `maxLength`: `32` |
| `country` | `string` | `maxLength`: `64` |
| `name` | `string` | `maxLength`: `255` |
| `email` | `string (email)` | `maxLength`: `255` |
| `organizationNo` | `string` | `maxLength`: `64` |
| `companyName` | `string` | `maxLength`: `255` |
| `invoiceReference` | `string` | `maxLength`: `255` |

**Example request body**

`application/json`

```json
{
  "line1": "string",
  "line2": "string",
  "city": "string",
  "state": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "user@example.com",
  "organizationNo": "string",
  "companyName": "string",
  "invoiceReference": "string"
}
```

### Responses

#### 201

Content type: `application/json` · `ProfileAddress`

| Name | Type | Description |
| --- | --- | --- |
| `line1` (Required) | `string` |   |
| `line2` (Required) | `string` |   |
| `city` (Required) | `string` |   |
| `postCode` (Required) | `string` |   |
| `country` (Required) | `string` |   |
| `name` (Required) | `string` |   |
| `email` (Required) | `string` |   |
| `companyName` (Required) | `string` |   |
| `organizationNo` (Required) | `string` |   |
| `invoiceReference` | `string` |   |
| `isSynced` | `boolean` |   |
| `lastSyncedAt` | `string (date-time)` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/{id}/invoice-address' \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "line1": "string",
  "line2": "string",
  "city": "string",
  "state": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "user@example.com",
  "organizationNo": "string",
  "companyName": "string",
  "invoiceReference": "string"
}'
```

### Example response

201 · `application/json`

```json
{
  "line1": "string",
  "line2": "string",
  "city": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "string",
  "companyName": "string",
  "organizationNo": "string",
  "invoiceReference": "string",
  "isSynced": true,
  "lastSyncedAt": "2019-08-24T14:15:22Z"
}
```

<a id="patch-api-v1-members-memberid-subscriptions-id-invoice-address"></a>
## Update invoice address of a subscribed package

`PATCH /api/v1/members/{memberId}/subscriptions/{id}/invoice-address`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `MemberAddressDto`

Same fields as [Add delivery address of a subscribed package (Request body)](https://www.subrite.no/developers/member-subscriptions?md=true#post-api-v1-members-memberid-subscriptions-id-invoice-address).

**Example request body**

`application/json`

```json
{
  "line1": "string",
  "line2": "string",
  "city": "string",
  "state": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "user@example.com",
  "organizationNo": "string",
  "companyName": "string",
  "invoiceReference": "string"
}
```

### Responses

#### 200

Content type: `application/json` · `ProfileAddress`

Same fields as [Add delivery address of a subscribed package (201)](https://www.subrite.no/developers/member-subscriptions?md=true#post-api-v1-members-memberid-subscriptions-id-invoice-address).

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/{id}/invoice-address' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "line1": "string",
  "line2": "string",
  "city": "string",
  "state": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "user@example.com",
  "organizationNo": "string",
  "companyName": "string",
  "invoiceReference": "string"
}'
```

### Example response

200 · `application/json`

```json
{
  "line1": "string",
  "line2": "string",
  "city": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "string",
  "companyName": "string",
  "organizationNo": "string",
  "invoiceReference": "string",
  "isSynced": true,
  "lastSyncedAt": "2019-08-24T14:15:22Z"
}
```

<a id="patch-api-v1-members-memberid-subscriptions-product-id-owner-access-activate"></a>
## Trigger own access of a product

`PATCH /api/v1/members/{memberId}/subscriptions/product/{id}/owner-access/{activate}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `number` |   |
| `activate` (Required) | path | `boolean` |   |

### Responses

#### 200

#### 400

Content type: `application/json` · `ErrorResponse`

alreadyActivated, alreadyDeactivated, seatLimitReached

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/owner-access/{activate}' \
  --request PATCH \
  --header 'Authorization: Bearer <token>'
```

<a id="get-api-v1-members-memberid-subscriptions-product-id-delivery-address-addressid"></a>
## Get delivery address of a subscribed product

`GET /api/v1/members/{memberId}/subscriptions/product/{id}/delivery-address/{addressId}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `addressId` (Required) | path | `number` |   |

### Responses

#### 200

Content type: `application/json` · `DeliveryAddress`

Same fields as [Add delivery address of a subscribed product (201)](https://www.subrite.no/developers/member-subscriptions?md=true#post-api-v1-members-memberid-subscriptions-product-id-delivery-address).

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/delivery-address/{addressId}' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
{
  "id": 0,
  "route": "string",
  "line1": "string",
  "line2": "string",
  "city": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "string",
  "companyName": "string",
  "organizationNo": "string",
  "invoiceReference": "string",
  "isSynced": true,
  "lastSyncedAt": "2019-08-24T14:15:22Z"
}
```

<a id="delete-api-v1-members-memberid-subscriptions-product-id-delivery-address-addressid"></a>
## Soft Remove delivery address of a subscribed product

`DELETE /api/v1/members/{memberId}/subscriptions/product/{id}/delivery-address/{addressId}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `addressId` (Required) | path | `number` |   |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Responses

#### 200

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/delivery-address/{addressId}' \
  --request DELETE \
  --header 'Authorization: Bearer <token>'
```

<a id="patch-api-v1-members-memberid-subscriptions-product-productid-delivery-address-addressid"></a>
## Update delivery address of a subscribed product

`PATCH /api/v1/members/{memberId}/subscriptions/product/{productId}/delivery-address/{addressId}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `productId` (Required) | path | `number` |   |
| `addressId` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `AdminDeliveryAddressDto`

Same fields as [Add delivery address of a subscribed product (Request body)](https://www.subrite.no/developers/member-subscriptions?md=true#post-api-v1-members-memberid-subscriptions-product-id-delivery-address).

**Example request body**

`application/json`

```json
{
  "route": "string",
  "line1": "string",
  "line2": "string",
  "city": "string",
  "state": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "user@example.com",
  "organizationNo": "string",
  "companyName": "string",
  "invoiceReference": "string"
}
```

### Responses

#### 200

Content type: `application/json` · `DeliveryAddress`

Same fields as [Add delivery address of a subscribed product (201)](https://www.subrite.no/developers/member-subscriptions?md=true#post-api-v1-members-memberid-subscriptions-product-id-delivery-address).

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{productId}/delivery-address/{addressId}' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "route": "string",
  "line1": "string",
  "line2": "string",
  "city": "string",
  "state": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "user@example.com",
  "organizationNo": "string",
  "companyName": "string",
  "invoiceReference": "string"
}'
```

### Example response

200 · `application/json`

```json
{
  "id": 0,
  "route": "string",
  "line1": "string",
  "line2": "string",
  "city": "string",
  "postCode": "string",
  "country": "string",
  "name": "string",
  "email": "string",
  "companyName": "string",
  "organizationNo": "string",
  "invoiceReference": "string",
  "isSynced": true,
  "lastSyncedAt": "2019-08-24T14:15:22Z"
}
```

<a id="patch-api-v1-members-memberid-subscriptions-product-id-shipping-provider"></a>
## Update shipping provider of a subscribed product

`PATCH /api/v1/members/{memberId}/subscriptions/product/{id}/shipping-provider`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `UpdateShippingProviderInfoDto`

| Name | Type | Description |
| --- | --- | --- |
| `shippingProvider` (Required) | `string` | Allowed values: `"Helthjem"`, `"Bring - Posten"`, `"Distribution Innovation"` |
| `allowDistributorToUpdateDeliveryAddress` (Required) | `boolean` |   |

**Example request body**

`application/json`

```json
{
  "shippingProvider": "Helthjem",
  "allowDistributorToUpdateDeliveryAddress": true
}
```

### Responses

#### 200

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/shipping-provider' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "shippingProvider": "Helthjem",
  "allowDistributorToUpdateDeliveryAddress": true
}'
```

<a id="patch-api-v1-members-memberid-subscriptions-product-id-email-domains"></a>
## Update email domains of a subscribed product

`PATCH /api/v1/members/{memberId}/subscriptions/product/{id}/email-domains`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `UpdateEmailDomainsDto`

| Name | Type | Description |
| --- | --- | --- |
| `emailDomains` | `array of string` |   |

**Example request body**

`application/json`

```json
{
  "emailDomains": [
    "string"
  ]
}
```

### Responses

#### 200

Content type: `application/json` · `MemberPackageProduct`

| Name | Type | Description |
| --- | --- | --- |
| `memberPackageId` (Required) | `number` |   |
| `productId` (Required) | `number` |   |
| `price` (Required) | `number` |   |
| `recurringPrice` (Required) | `number` |   |
| `quantity` (Required) | `number` |   |
| `hasAccess` (Required) | `boolean` |   |
| `shippingCountry` (Required) | `string` |   |
| `shippingProvider` (Required) | `string` | Allowed values: `"Helthjem"`, `"Bring - Posten"`, `"Distribution Innovation"` |
| `allowDistributorToUpdateDeliveryAddress` (Required) | `boolean` |   |
| `memberPackageProductEmailDomains` (Required) | `array of MemberPackageProductEmailDomain` |   |
| `memberPackageProductEmailDomains[].memberPackageProductId` (Required when parent is present) | `number` |   |
| `memberPackageProductEmailDomains[].emailDomain` (Required when parent is present) | `string` |   |
| `memberPackageProductEmailDomains[].updatedBy` (Required when parent is present) | `number` |   |
| `memberPackageProductEmailDomains[].memberPackageProduct` (Required when parent is present) | `MemberPackageProduct` | Recursive schema; nested fields are not repeated. |
| `memberPackageProductEmailDomains[].id` (Required when parent is present) | `number` |   |
| `memberPackageProductEmailDomains[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProductEmailDomains[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProductEmailDomains[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProductEmailDomains[].metaData` (Required when parent is present) | `object` |   |
| `memberPackageProductIps` (Required) | `array of MemberPackageProductIp` |   |
| `memberPackageProductIps[].memberPackageProductId` (Required when parent is present) | `number` |   |
| `memberPackageProductIps[].ipRange` (Required when parent is present) | `string` |   |
| `memberPackageProductIps[].label` (Required when parent is present) | `string` |   |
| `memberPackageProductIps[].updatedBy` (Required when parent is present) | `number` |   |
| `memberPackageProductIps[].memberPackageProduct` (Required when parent is present) | `MemberPackageProduct` | Recursive schema; nested fields are not repeated. |
| `memberPackageProductIps[].id` (Required when parent is present) | `number` |   |
| `memberPackageProductIps[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProductIps[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProductIps[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProductIps[].metaData` (Required when parent is present) | `object` |   |
| `memberPackage` (Required) | `MemberPackage` |   |
| `memberPackage.memberId` (Required) | `string` |   |
| `memberPackage.packageId` (Required) | `number` |   |
| `memberPackage.subscriptionPlanId` (Required) | `number` |   |
| `memberPackage.recurringPrice` (Required) | `number` |   |
| `memberPackage.hasCustomPrice` (Required) | `boolean` |   |
| `memberPackage.currentPrice` (Required) | `number` |   |
| `memberPackage.status` (Required) | `string` | Allowed values: `"active"`, `"inactive"`, `"pending"`, `"paused"`, `"stopped"`, `"expired"`, `"waiting_for_activation"` |
| `memberPackage.autoRenew` (Required) | `boolean` |   |
| `memberPackage.nextRenewal` (Required) | `string (date-time)` |   |
| `memberPackage.renewalAnchorDate` (Required) | `string (date-time)` |   |
| `memberPackage.currentPeriodStart` (Required) | `string (date-time)` |   |
| `memberPackage.forcedStopDate` (Required) | `string (date-time)` |   |
| `memberPackage.cancelledAt` (Required) | `string (date-time)` |   |
| `memberPackage.isCustomized` (Required) | `boolean` |   |
| `memberPackage.paymentProvider` (Required) | `string` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `memberPackage.reference` (Required) | `string` |   |
| `memberPackage.lastActiveAt` (Required) | `string (date-time)` |   |
| `memberPackage.isOnIntroPeriod` (Required) | `boolean` |   |
| `memberPackage.nextOrderDate` (Required) | `string (date-time)` |   |
| `memberPackage.scheduledActivationDate` (Required) | `string (date-time)` | Can be null |
| `memberPackage.package` (Required) | `Package` | Nested fields omitted: field limit. |
| `memberPackage.subscriptionPlan` (Required) | `SubscriptionPlan` | Nested fields omitted: field limit. |
| `memberPackage.member` (Required) | `Member` | Nested fields omitted: field limit. |
| `memberPackage.memberPackageProducts` (Required) | `array of MemberPackageProduct` | Recursive schema; nested fields are not repeated. |
| `memberPackage.orders` (Required) | `array of Order` | Nested fields omitted: field limit. |
| `memberPackage.memberPackageProviderPayment` (Required) | `MemberPackageProviderPayment` | Nested fields omitted: field limit. |
| `memberPackage.changes` (Required) | `array of MemberPackageChange` | Nested fields omitted: field limit. |
| `memberPackage.histories` (Required) | `array of MemberPackageHistory` | Nested fields omitted: field limit. |
| `memberPackage.tenantId` (Required) | `number` |   |
| `memberPackage.tenant` (Required) | `Tenant` | Nested fields omitted: field limit. |
| `memberPackage.id` (Required) | `number` |   |
| `memberPackage.createdAt` (Required) | `string (date-time)` |   |
| `memberPackage.updatedAt` (Required) | `string (date-time)` |   |
| `memberPackage.deletedAt` (Required) | `string (date-time)` |   |
| `memberPackage.metaData` (Required) | `object` |   |
| `product` (Required) | `Product` | Nested fields omitted: field limit. |
| `seats` (Required) | `array of MemberPackageProductSeat` | Nested fields omitted: field limit. |
| `recipients` (Required) | `array of MemberPackageProductRecipient` | Nested fields omitted: field limit. |
| `id` (Required) | `number` |   |
| `createdAt` (Required) | `string (date-time)` |   |
| `updatedAt` (Required) | `string (date-time)` |   |
| `deletedAt` (Required) | `string (date-time)` |   |
| `metaData` (Required) | `object` |   |

#### 400

Content type: `application/json` · `ErrorResponse`

invalidEmailDomains

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/email-domains' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "emailDomains": [
    "string"
  ]
}'
```

### Example response

200 · `application/json`

```json
{
  "memberPackageId": 0,
  "productId": 0,
  "price": 0,
  "recurringPrice": 0,
  "quantity": 0,
  "hasAccess": true,
  "shippingCountry": "string",
  "shippingProvider": "Helthjem",
  "allowDistributorToUpdateDeliveryAddress": true,
  "memberPackageProductEmailDomains": [
    {
      "metaData": {}
    }
  ],
  "memberPackageProductIps": [
    {
      "metaData": {}
    }
  ],
  "memberPackage": {
    "memberId": "string",
    "packageId": 0,
    "subscriptionPlanId": 0,
    "recurringPrice": 0,
    "hasCustomPrice": true,
    "currentPrice": 0,
    "status": "active",
    "autoRenew": true,
    "nextRenewal": "2019-08-24T14:15:22Z",
    "renewalAnchorDate": "2019-08-24T14:15:22Z",
    "currentPeriodStart": "2019-08-24T14:15:22Z",
    "forcedStopDate": "2019-08-24T14:15:22Z",
    "cancelledAt": "2019-08-24T14:15:22Z",
    "isCustomized": true,
    "paymentProvider": "stripe",
    "reference": "string",
    "lastActiveAt": "2019-08-24T14:15:22Z",
    "isOnIntroPeriod": true,
    "nextOrderDate": "2019-08-24T14:15:22Z",
    "scheduledActivationDate": "2019-08-24T14:15:22Z",
    "package": {
      "paymentProviders": [],
      "description": {},
      "packageProducts": [],
      "payments": [],
      "memberPackages": [],
      "metaData": {}
    },
    "subscriptionPlan": {
      "paymentProviders": [],
      "entityTags": [],
      "subscriptionPlanProducts": [],
      "packages": [],
      "memberPackages": [],
      "metaData": {}
    },
    "member": {
      "customPropertyValues": {},
      "productRecipients": [],
      "metaData": {}
    },
    "memberPackageProducts": [],
    "orders": [],
    "memberPackageProviderPayment": {
      "paymentInfo": {},
      "cardInfo": {},
      "metaData": {}
    },
    "changes": [],
    "histories": [],
    "tenantId": 0,
    "tenant": {
      "additionalFeatures": [],
      "disabledFeatures": [],
      "taxRates": [],
      "products": [],
      "users": [],
      "members": [],
      "roles": [],
      "subscriptionPlans": [],
      "packages": [],
      "invoices": [],
      "orders": [],
      "paymentProviders": [],
      "newslettersProviderConfig": [],
      "paymentProviderConfigs": [],
      "oidcClients": [],
      "oauthProviders": [],
      "activityLogs": [],
      "m2m_api_clients": [],
      "customProperties": [],
      "consents": [],
      "communicationTemplates": [],
      "additionalHostnames": [],
      "exportHistory": [],
      "arReportHistory": [],
      "mypageCardsSettings": [],
      "webhooks": [],
      "customOrders": [],
      "customOrderSources": [],
      "brandKits": [],
      "communicationReceivers": [],
      "metaData": {}
    },
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "product": {
    "productCategory": "digital_subscription",
    "tenantId": 0,
    "name": "string",
    "uuid": "string",
    "isOptional": true,
    "price": 0,
    "currency": "string",
    "tax": 0,
    "stock": 0,
    "maxQuantityPerOrder": 0,
    "ean": "string",
    "allowFutureStartDate": true,
    "assignSeatToOwner": true,
    "supportsIpAccess": true,
    "status": "draft",
    "properties": {},
    "shippingCharges": [],
    "description": "string",
    "circulationType": "subscription",
    "publicationDays": "string",
    "diProductCode": "string",
    "tenant": {
      "additionalFeatures": [],
      "disabledFeatures": [],
      "taxRates": [],
      "products": [],
      "users": [],
      "members": [],
      "roles": [],
      "subscriptionPlans": [],
      "packages": [],
      "invoices": [],
      "orders": [],
      "paymentProviders": [],
      "newslettersProviderConfig": [],
      "paymentProviderConfigs": [],
      "oidcClients": [],
      "oauthProviders": [],
      "activityLogs": [],
      "m2m_api_clients": [],
      "customProperties": [],
      "consents": [],
      "communicationTemplates": [],
      "additionalHostnames": [],
      "exportHistory": [],
      "arReportHistory": [],
      "mypageCardsSettings": [],
      "webhooks": [],
      "customOrders": [],
      "customOrderSources": [],
      "brandKits": [],
      "communicationReceivers": [],
      "metaData": {}
    },
    "entityTags": [],
    "subscriptionPlanProducts": [],
    "packageProducts": [],
    "memberPackageProducts": [],
    "orderItem": [],
    "productContents": [],
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "seats": [
    {
      "metaData": {}
    }
  ],
  "recipients": [
    {
      "metaData": {}
    }
  ],
  "id": 0,
  "createdAt": "2019-08-24T14:15:22Z",
  "updatedAt": "2019-08-24T14:15:22Z",
  "deletedAt": "2019-08-24T14:15:22Z",
  "metaData": {}
}
```

<a id="delete-api-v1-members-memberid-subscriptions-product-id-email-domains-domain"></a>
## Remove a specific email domain from a subscribed product

`DELETE /api/v1/members/{memberId}/subscriptions/product/{id}/email-domains/{domain}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `number` |   |
| `domain` (Required) | path | `string` |   |

### Responses

#### 200

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

emailDomainNotFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/email-domains/{domain}' \
  --request DELETE \
  --header 'Authorization: Bearer <token>'
```

<a id="put-api-v1-members-memberid-subscriptions-product-id-ip-ranges"></a>
## Replace the full IP-range list for a subscribed product (full snapshot)

`PUT /api/v1/members/{memberId}/subscriptions/product/{id}/ip-ranges`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `ReplaceIpRangesDto`

| Name | Type | Description |
| --- | --- | --- |
| `ipRanges` (Required) | `array of IpRangeInputDto` | Full replacement of the IP-range list. Maximum 200 entries; saving replaces every existing range for this product. |
| `ipRanges[].value` (Required when parent is present) | `string` | IP range. Accepted formats: CIDR (1.2.3.0/24, 2001:db8::/32), range (1.2.3.0-1.2.3.255), trailing wildcard (1.2.3.\*), or bare IP (1.2.3.4). Server normalizes to canonical CIDR. Minimum prefix length: /16 for IPv4, /32 for IPv6 (broader ranges are rejected). |
| `ipRanges[].label` | `string` | `maxLength`: `120` |

### Responses

#### 200

Content type: `application/json` · `array of IpRangeDto`

| Name | Type | Description |
| --- | --- | --- |
| `[].ipRange` (Required when parent is present) | `string` |   |
| `[].label` | `string` |   |

#### 400

Content type: `application/json` · `ErrorResponse`

invalidIpRanges

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/ip-ranges' \
  --request PUT \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "ipRanges": [
    {}
  ]
}'
```

### Example response

200 · `application/json`

```json
[
  {
    "ipRange": "string",
    "label": "string"
  }
]
```

<a id="delete-api-v1-members-memberid-subscriptions-product-id-ip-ranges-iprange"></a>
## Remove a specific IP range from a subscribed product. The :ipRange path segment is the canonical CIDR (URL-encode "/" as %2F).

`DELETE /api/v1/members/{memberId}/subscriptions/product/{id}/ip-ranges/{ipRange}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `number` |   |
| `ipRange` (Required) | path | `string` |   |

### Responses

#### 200

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

ipRangeNotFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/product/{id}/ip-ranges/{ipRange}' \
  --request DELETE \
  --header 'Authorization: Bearer <token>'
```

<a id="get-api-v1-members-memberid-subscriptions-seats-id"></a>
## Get product seat details

`GET /api/v1/members/{memberId}/subscriptions/seats/{id}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Responses

#### 200

Content type: `application/json` · `SeatData`

| Name | Type | Description |
| --- | --- | --- |
| `id` (Required) | `number` |   |
| `name` (Required) | `string` |   |
| `email` (Required) | `string` | Can be null |
| `status` (Required) | `string` | Allowed values: `"pending"`, `"accepted"`, `"expired"`, `"awaiting_activation"` |
| `memberId` (Required) | `string` |   |
| `memberData` (Required) | `MemberPersonalInfo` |   |
| `memberData.id` (Required) | `string` |   |
| `memberData.fullName` (Required) | `string` |   |
| `memberData.nickName` (Required) | `string` |   |
| `memberData.createdAt` (Required) | `string (date-time)` |   |
| `memberData.avatar` (Required) | `string` |   |
| `memberData.countryCode` | `string` |   |
| `memberData.birthDate` (Required) | `string (date-time)` |   |
| `memberData.deleteAfterExpiration` (Required) | `boolean` |   |
| `memberData.isCompany` (Required) | `boolean` |   |
| `memberData.companyName` (Required) | `string` |   |
| `memberData.organizationNo` (Required) | `string` |   |
| `memberData.customPropertyValues` (Required) | `object` |   |
| `memberData.emailVerified` | `string` |   |
| `memberData.phoneVerified` (Required) | `boolean` |   |
| `memberData.memberNumber` (Required) | `number` |   |
| `memberData.userId` (Required) | `number` |   |
| `memberData.emailStatus` | `SENDGRID_MAIL_EVENTS` | Allowed values: `"scheduled"`, `"processed"`, `"dropped"`, `"deferred"`, `"bounce"`, `"hard_bounce"`, `"soft_bounce"`, `"spamreport"`, `"delivered"`, `"unsubscribe"`, `"group_unsubscribe"`, `"group_resubscribe"`, `"open"`, `"failed"`, `"click"`, `"skipped_bounced"` |
| `memberData.email` (Required) | `string (email)` |   |
| `memberData.phone` (Required) | `string` |   |
| `memberData.address` (Required) | `ProfileAddress` |   |
| `memberData.address.line1` (Required) | `string` |   |
| `memberData.address.line2` (Required) | `string` |   |
| `memberData.address.city` (Required) | `string` |   |
| `memberData.address.postCode` (Required) | `string` |   |
| `memberData.address.country` (Required) | `string` |   |
| `memberData.address.name` (Required) | `string` |   |
| `memberData.address.email` (Required) | `string` |   |
| `memberData.address.companyName` (Required) | `string` |   |
| `memberData.address.organizationNo` (Required) | `string` |   |
| `memberData.address.invoiceReference` | `string` |   |
| `memberData.address.isSynced` | `boolean` |   |
| `memberData.address.lastSyncedAt` | `string (date-time)` |   |
| `expiresAt` (Required) | `string` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/seats/{id}' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
{
  "id": 0,
  "name": "string",
  "email": "string",
  "status": "pending",
  "memberId": "string",
  "memberData": {
    "id": "string",
    "fullName": "<fullName>",
    "nickName": "string",
    "createdAt": "2019-08-24T14:15:22Z",
    "avatar": "string",
    "countryCode": "string",
    "birthDate": "<birthDate>",
    "deleteAfterExpiration": true,
    "isCompany": true,
    "companyName": "string",
    "organizationNo": "string",
    "customPropertyValues": {},
    "emailVerified": "string",
    "phoneVerified": true,
    "memberNumber": 0,
    "userId": 0,
    "emailStatus": "scheduled",
    "email": "user@example.com",
    "phone": "<phone>",
    "address": {}
  },
  "expiresAt": "string"
}
```

<a id="delete-api-v1-members-memberid-subscriptions-seats-id"></a>
## Remove invitation to a product seat

`DELETE /api/v1/members/{memberId}/subscriptions/seats/{id}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Responses

#### 200

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/seats/{id}' \
  --request DELETE \
  --header 'Authorization: Bearer <token>'
```

<a id="post-api-v1-members-memberid-subscriptions-seats-invite"></a>
## Invite member to a product seat

`POST /api/v1/members/{memberId}/subscriptions/seats/invite`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |

### Request body

Content type: `application/json` · Required · `InviteSeatDto`

| Name | Type | Description |
| --- | --- | --- |
| `email` (Required) | `string (email)` |   |
| `id` (Required) | `number` | `minimum`: `1` |

**Example request body**

`application/json`

```json
{
  "email": "user@example.com",
  "id": 1
}
```

### Responses

#### 201

Content type: `application/json` · `MemberPackageProductSeat`

| Name | Type | Description |
| --- | --- | --- |
| `memberPackageProductId` (Required) | `number` |   |
| `memberId` (Required) | `string` |   |
| `email` (Required) | `string` | Can be null |
| `accepted` (Required) | `boolean` |   |
| `acceptedAt` (Required) | `string (date-time)` |   |
| `expiresAt` (Required) | `string (date-time)` |   |
| `uuid` (Required) | `string` |   |
| `memberPackageProduct` (Required) | `MemberPackageProduct` |   |
| `memberPackageProduct.memberPackageId` (Required) | `number` |   |
| `memberPackageProduct.productId` (Required) | `number` |   |
| `memberPackageProduct.price` (Required) | `number` |   |
| `memberPackageProduct.recurringPrice` (Required) | `number` |   |
| `memberPackageProduct.quantity` (Required) | `number` |   |
| `memberPackageProduct.hasAccess` (Required) | `boolean` |   |
| `memberPackageProduct.shippingCountry` (Required) | `string` |   |
| `memberPackageProduct.shippingProvider` (Required) | `string` | Allowed values: `"Helthjem"`, `"Bring - Posten"`, `"Distribution Innovation"` |
| `memberPackageProduct.allowDistributorToUpdateDeliveryAddress` (Required) | `boolean` |   |
| `memberPackageProduct.memberPackageProductEmailDomains` (Required) | `array of MemberPackageProductEmailDomain` |   |
| `memberPackageProduct.memberPackageProductEmailDomains[].memberPackageProductId` (Required when parent is present) | `number` |   |
| `memberPackageProduct.memberPackageProductEmailDomains[].emailDomain` (Required when parent is present) | `string` |   |
| `memberPackageProduct.memberPackageProductEmailDomains[].updatedBy` (Required when parent is present) | `number` |   |
| `memberPackageProduct.memberPackageProductEmailDomains[].memberPackageProduct` (Required when parent is present) | `MemberPackageProduct` | Recursive schema; nested fields are not repeated. |
| `memberPackageProduct.memberPackageProductEmailDomains[].id` (Required when parent is present) | `number` |   |
| `memberPackageProduct.memberPackageProductEmailDomains[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProduct.memberPackageProductEmailDomains[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProduct.memberPackageProductEmailDomains[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProduct.memberPackageProductEmailDomains[].metaData` (Required when parent is present) | `object` |   |
| `memberPackageProduct.memberPackageProductIps` (Required) | `array of MemberPackageProductIp` |   |
| `memberPackageProduct.memberPackageProductIps[].memberPackageProductId` (Required when parent is present) | `number` |   |
| `memberPackageProduct.memberPackageProductIps[].ipRange` (Required when parent is present) | `string` |   |
| `memberPackageProduct.memberPackageProductIps[].label` (Required when parent is present) | `string` |   |
| `memberPackageProduct.memberPackageProductIps[].updatedBy` (Required when parent is present) | `number` |   |
| `memberPackageProduct.memberPackageProductIps[].memberPackageProduct` (Required when parent is present) | `MemberPackageProduct` | Recursive schema; nested fields are not repeated. |
| `memberPackageProduct.memberPackageProductIps[].id` (Required when parent is present) | `number` |   |
| `memberPackageProduct.memberPackageProductIps[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProduct.memberPackageProductIps[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProduct.memberPackageProductIps[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `memberPackageProduct.memberPackageProductIps[].metaData` (Required when parent is present) | `object` |   |
| `memberPackageProduct.memberPackage` (Required) | `MemberPackage` | Nested fields omitted: field limit. |
| `memberPackageProduct.product` (Required) | `Product` | Nested fields omitted: field limit. |
| `memberPackageProduct.seats` (Required) | `array of MemberPackageProductSeat` | Recursive schema; nested fields are not repeated. |
| `memberPackageProduct.recipients` (Required) | `array of MemberPackageProductRecipient` | Nested fields omitted: field limit. |
| `memberPackageProduct.id` (Required) | `number` |   |
| `memberPackageProduct.createdAt` (Required) | `string (date-time)` |   |
| `memberPackageProduct.updatedAt` (Required) | `string (date-time)` |   |
| `memberPackageProduct.deletedAt` (Required) | `string (date-time)` |   |
| `memberPackageProduct.metaData` (Required) | `object` |   |
| `member` (Required) | `Member` |   |
| `member.userId` (Required) | `number` | Can be null |
| `member.memberNumber` (Required) | `number` | Can be null |
| `member.tenantId` (Required) | `number` |   |
| `member.externalId` (Required) | `string` | Can be null |
| `member.fullName` (Required) | `string` |   |
| `member.nickName` (Required) | `string` |   |
| `member.avatar` (Required) | `string` |   |
| `member.email` (Required) | `string` |   |
| `member.birthDate` (Required) | `string (date-time)` | Can be null |
| `member.phone` (Required) | `string` |   |
| `member.isCompany` (Required) | `boolean` |   |
| `member.companyName` (Required) | `string` | Can be null |
| `member.organizationNo` (Required) | `string` | Can be null |
| `member.deleteAfterExpiration` (Required) | `boolean` |   |
| `member.customPropertyValues` (Required) | `object` |   |
| `member.productRecipients` (Required) | `array of MemberPackageProductRecipient` | Nested fields omitted: field limit. |
| `member.id` (Required) | `string` |   |
| `member.createdAt` (Required) | `string (date-time)` |   |
| `member.updatedAt` (Required) | `string (date-time)` |   |
| `member.deletedAt` (Required) | `string (date-time)` |   |
| `member.metaData` (Required) | `object` |   |
| `id` (Required) | `number` |   |
| `createdAt` (Required) | `string (date-time)` |   |
| `updatedAt` (Required) | `string (date-time)` |   |
| `deletedAt` (Required) | `string (date-time)` |   |
| `metaData` (Required) | `object` |   |

#### 400

cannotInviteYourself, invitationNotSupported, invitationLimitReached,invitationAlreadyAccepted, invitationAlreadySent

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/seats/invite' \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "email": "user@example.com",
  "id": 1
}'
```

### Example response

201 · `application/json`

```json
{
  "memberPackageProductId": 0,
  "memberId": "string",
  "email": "string",
  "accepted": true,
  "acceptedAt": "2019-08-24T14:15:22Z",
  "expiresAt": "2019-08-24T14:15:22Z",
  "uuid": "string",
  "memberPackageProduct": {
    "memberPackageId": 0,
    "productId": 0,
    "price": 0,
    "recurringPrice": 0,
    "quantity": 0,
    "hasAccess": true,
    "shippingCountry": "string",
    "shippingProvider": "Helthjem",
    "allowDistributorToUpdateDeliveryAddress": true,
    "memberPackageProductEmailDomains": [],
    "memberPackageProductIps": [],
    "memberPackage": {
      "memberPackageProducts": [],
      "orders": [],
      "changes": [],
      "histories": [],
      "metaData": {}
    },
    "product": {
      "properties": {},
      "shippingCharges": [],
      "entityTags": [],
      "subscriptionPlanProducts": [],
      "packageProducts": [],
      "memberPackageProducts": [],
      "orderItem": [],
      "productContents": [],
      "metaData": {}
    },
    "seats": [],
    "recipients": [],
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "member": {
    "userId": 0,
    "memberNumber": 0,
    "tenantId": 0,
    "externalId": "string",
    "fullName": "<fullName>",
    "nickName": "string",
    "avatar": "string",
    "email": "string",
    "birthDate": "<birthDate>",
    "phone": "<phone>",
    "isCompany": true,
    "companyName": "string",
    "organizationNo": "string",
    "deleteAfterExpiration": true,
    "customPropertyValues": {},
    "productRecipients": [],
    "id": "string",
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "id": 0,
  "createdAt": "2019-08-24T14:15:22Z",
  "updatedAt": "2019-08-24T14:15:22Z",
  "deletedAt": "2019-08-24T14:15:22Z",
  "metaData": {}
}
```

<a id="post-api-v1-members-memberid-subscriptions-seats-seatid-resend"></a>
## Resend invitation to a product seat

`POST /api/v1/members/{memberId}/subscriptions/seats/{seatId}/resend`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `seatId` (Required) | path | `number` |   |

### Responses

#### 201

Content type: `application/json` · `MemberPackageProductSeat`

Same fields as [Invite member to a product seat (201)](https://www.subrite.no/developers/member-subscriptions?md=true#post-api-v1-members-memberid-subscriptions-seats-invite).

#### 400

invitationLimitReached, invitationAlreadyAccepted, invitationAlreadySent

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/seats/{seatId}/resend' \
  --request POST \
  --header 'Authorization: Bearer <token>'
```

### Example response

201 · `application/json`

```json
{
  "memberPackageProductId": 0,
  "memberId": "string",
  "email": "string",
  "accepted": true,
  "acceptedAt": "2019-08-24T14:15:22Z",
  "expiresAt": "2019-08-24T14:15:22Z",
  "uuid": "string",
  "memberPackageProduct": {
    "memberPackageId": 0,
    "productId": 0,
    "price": 0,
    "recurringPrice": 0,
    "quantity": 0,
    "hasAccess": true,
    "shippingCountry": "string",
    "shippingProvider": "Helthjem",
    "allowDistributorToUpdateDeliveryAddress": true,
    "memberPackageProductEmailDomains": [],
    "memberPackageProductIps": [],
    "memberPackage": {
      "memberPackageProducts": [],
      "orders": [],
      "changes": [],
      "histories": [],
      "metaData": {}
    },
    "product": {
      "properties": {},
      "shippingCharges": [],
      "entityTags": [],
      "subscriptionPlanProducts": [],
      "packageProducts": [],
      "memberPackageProducts": [],
      "orderItem": [],
      "productContents": [],
      "metaData": {}
    },
    "seats": [],
    "recipients": [],
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "member": {
    "userId": 0,
    "memberNumber": 0,
    "tenantId": 0,
    "externalId": "string",
    "fullName": "<fullName>",
    "nickName": "string",
    "avatar": "string",
    "email": "string",
    "birthDate": "<birthDate>",
    "phone": "<phone>",
    "isCompany": true,
    "companyName": "string",
    "organizationNo": "string",
    "deleteAfterExpiration": true,
    "customPropertyValues": {},
    "productRecipients": [],
    "id": "string",
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "id": 0,
  "createdAt": "2019-08-24T14:15:22Z",
  "updatedAt": "2019-08-24T14:15:22Z",
  "deletedAt": "2019-08-24T14:15:22Z",
  "metaData": {}
}
```

<a id="post-api-v1-members-memberid-subscriptions-free"></a>
## Subscribe to a free subscription with 0 payment

`POST /api/v1/members/{memberId}/subscriptions/free`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |

### Request body

Content type: `application/json` · Required · `FreePackageRequestDto`

| Name | Type | Description |
| --- | --- | --- |
| `packageId` (Required) | `number` |   |
| `email` | `string` |   |

**Example request body**

`application/json`

```json
{
  "packageId": 0,
  "email": "string"
}
```

### Responses

#### 201

#### 400

invalidPackage, badRequest

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/free' \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "packageId": 0,
  "email": "string"
}'
```

<a id="post-api-v1-members-memberid-subscriptions-faktura"></a>
## Subscribe to a faktura subscription

`POST /api/v1/members/{memberId}/subscriptions/faktura`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |

### Request body

Content type: `application/json` · Required · `FakturaPackageSubscriptionDto`

| Name | Type | Description |
| --- | --- | --- |
| `packageId` (Required) | `number` |   |
| `paidPaymentProvider` | `string` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `paymentDate` | `string (date-time)` |   |
| `isPaid` | `boolean` |   |
| `note` | `string` |   |
| `optionalProducts` | `array of OptionalProductWithQuantity` |   |
| `optionalProducts[].productId` (Required when parent is present) | `number` | `minimum`: `1` |
| `optionalProducts[].quantity` (Required when parent is present) | `number` | `minimum`: `1` |
| `optionalProducts[].shippingCountry` | `string` | `maxLength`: `64` |
| `optionalProducts[].manualPrice` | `number` |   |
| `mainProductsWithManualPrice` | `array of MainProductWithManualPrice` |   |
| `mainProductsWithManualPrice[].productId` (Required when parent is present) | `number` |   |
| `mainProductsWithManualPrice[].manualPrice` (Required when parent is present) | `number` | `minimum`: `1` |
| `userData` (Required) | `FakturaCheckoutUser` |   |
| `userData.memberId` | `string` |   |
| `userData.email` | `string (email)` |   |
| `userData.fullName` (Required) | `string` |   |
| `userData.phone` | `string` | `maxLength`: `20` |
| `userData.countryCode` | `string` | Allowed values: `"NO"`, `"SE"`, `"DK"`, `"FI"`, `"FO"`, `"GB"` |
| `userData.isCompany` | `boolean` |   |
| `userData.companyName` | `string` |   |
| `userData.organizationNo` | `string` |   |
| `userData.reference` | `string` |   |
| `userData.onCheckoutCompletedUrl` | `string` |   |
| `userData.sourceUrl` | `string` |   |
| `userData.referrerUrl` | `string` |   |
| `billingAddress` | `BillingAddress` |   |
| `billingAddress.address` (Required when parent is present) | `string` |   |
| `billingAddress.addressTwo` | `string` |   |
| `billingAddress.companyName` | `string` |   |
| `billingAddress.organizationNo` | `string` |   |
| `billingAddress.postCode` (Required when parent is present) | `string` |   |
| `billingAddress.city` | `string` |   |
| `billingAddress.country` (Required when parent is present) | `string` |   |
| `billingAddress.invoiceReference` | `string` |   |
| `billingAddress.email` | `string` |   |
| `billingAddress.fullName` | `string` |   |
| `billingAddress.phone` | `string` |   |

**Example request body**

`application/json`

```json
{
  "packageId": 0,
  "paidPaymentProvider": "stripe",
  "paymentDate": "2019-08-24T14:15:22Z",
  "isPaid": true,
  "note": "string",
  "userData": {
    "memberId": "string",
    "email": "user@example.com",
    "fullName": "<fullName>",
    "phone": "<phone>",
    "countryCode": "NO",
    "isCompany": true,
    "companyName": "string",
    "organizationNo": "string",
    "reference": "string",
    "onCheckoutCompletedUrl": "string",
    "sourceUrl": "string",
    "referrerUrl": "string"
  },
  "billingAddress": {
    "address": "<address>",
    "addressTwo": "<addressTwo>",
    "companyName": "string",
    "organizationNo": "string",
    "postCode": "string",
    "city": "string",
    "country": "string",
    "invoiceReference": "string",
    "email": "string",
    "fullName": "<fullName>",
    "phone": "<phone>"
  }
}
```

### Responses

#### 201

#### 400

invalidPackage, badRequest

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/faktura' \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "packageId": 0,
  "paidPaymentProvider": "stripe",
  "paymentDate": "2019-08-24T14:15:22Z",
  "isPaid": true,
  "note": "string",
  "optionalProducts": [
    {}
  ],
  "mainProductsWithManualPrice": [
    {}
  ],
  "userData": {
    "memberId": "string",
    "email": "user@example.com",
    "fullName": "<fullName>",
    "phone": "<phone>",
    "countryCode": "NO",
    "isCompany": true,
    "companyName": "string",
    "organizationNo": "string",
    "reference": "string",
    "onCheckoutCompletedUrl": "string",
    "sourceUrl": "string",
    "referrerUrl": "string"
  },
  "billingAddress": {
    "address": "<address>",
    "addressTwo": "<addressTwo>",
    "companyName": "string",
    "organizationNo": "string",
    "postCode": "string",
    "city": "string",
    "country": "string",
    "invoiceReference": "string",
    "email": "string",
    "fullName": "<fullName>",
    "phone": "<phone>"
  }
}'
```

<a id="patch-api-v1-members-memberid-subscriptions-faktura-update"></a>
## Update a faktura subscription

`PATCH /api/v1/members/{memberId}/subscriptions/faktura/update`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |

### Request body

Content type: `application/json` · Required · `FakturaSubscriptionUpdateDto`

| Name | Type | Description |
| --- | --- | --- |
| `memPackId` (Required) | `number` |   |
| `paymentDate` | `string (date-time)` |   |
| `isPaid` | `boolean` |   |
| `note` | `string` |   |
| `paymentProvider` | `string` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |

**Example request body**

`application/json`

```json
{
  "memPackId": 0,
  "paymentDate": "2019-08-24T14:15:22Z",
  "isPaid": true,
  "note": "string",
  "paymentProvider": "stripe"
}
```

### Responses

#### 200

Content type: `application/json` · `Payment`

| Name | Type | Description |
| --- | --- | --- |
| `packageId` (Required) | `number` |   |
| `accountingDate` (Required) | `string (date-time)` |   |
| `registrationDate` (Required) | `string (date-time)` |   |
| `paymentProvider` (Required) | `string` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `paymentMethod` (Required) | `string` | Allowed values: `"card"`, `"vipps"`, `"manual_registration"`, `"efaktura"`, `"ehf"`, `"avtalegiro"` |
| `amount` (Required) | `number` |   |
| `currency` (Required) | `string` |   |
| `status` (Required) | `string` | Allowed values: `"pending"`, `"succeeded"`, `"failed"` |
| `note` (Required) | `string` |   |
| `isAdminAction` (Required) | `boolean` |   |
| `memberId` (Required) | `string` |   |
| `stripePayment` (Required) | `StripePayment` |   |
| `stripePayment.paymentId` (Required) | `number` |   |
| `stripePayment.email` (Required) | `string` | Can be null |
| `stripePayment.customerId` (Required) | `string` |   |
| `stripePayment.paymentMethodId` (Required) | `string` |   |
| `stripePayment.paymentIntentId` (Required) | `string` |   |
| `stripePayment.status` (Required) | `string` | Allowed values: `"requires_payment_method"`, `"requires_confirmation"`, `"requires_action"`, `"processing"`, `"requires_capture"`, `"canceled"`, `"succeeded"` |
| `stripePayment.isSaved` (Required) | `boolean` |   |
| `stripePayment.cardInfo` (Required) | `StripeCardInfo` | Nested fields omitted: field limit. |
| `stripePayment.payment` (Required) | `Payment` | Recursive schema; nested fields are not repeated. |
| `stripePayment.id` (Required) | `number` |   |
| `stripePayment.createdAt` (Required) | `string (date-time)` |   |
| `stripePayment.updatedAt` (Required) | `string (date-time)` |   |
| `stripePayment.deletedAt` (Required) | `string (date-time)` |   |
| `stripePayment.metaData` (Required) | `object` |   |
| `vippsPayment` (Required) | `VippsPayment` |   |
| `vippsPayment.uuid` (Required) | `string` |   |
| `vippsPayment.agreementId` (Required) | `string` |   |
| `vippsPayment.externalId` (Required) | `string` |   |
| `vippsPayment.phone` (Required) | `string` |   |
| `vippsPayment.chargeId` (Required) | `string` |   |
| `vippsPayment.due` (Required) | `string (date-time)` |   |
| `vippsPayment.transactionId` (Required) | `string` |   |
| `vippsPayment.vippsConfirmationUrl` (Required) | `string` |   |
| `vippsPayment.failureReason` (Required) | `string` |   |
| `vippsPayment.failureDescription` (Required) | `string` |   |
| `vippsPayment.status` (Required) | `string` | Allowed values: `"PENDING"`, `"ACTIVE"`, `"STOPPED"`, `"EXPIRED"`, `"DUE"`, `"CHARGED"`, `"RESERVED"`, `"PARTIALLY_CAPTURED"`, `"FAILED"`, `"CANCELLED"`, `"PARTIALLY_REFUNDED"`, `"REFUNDED"`, `"PROCESSING"`, `"CHARGE_CREATION_FAILED"` |
| `vippsPayment.summary` (Required) | `string` |   |
| `vippsPayment.history` (Required) | `string` |   |
| `vippsPayment.paymentId` (Required) | `number` |   |
| `vippsPayment.payment` (Required) | `Payment` | Recursive schema; nested fields are not repeated. |
| `vippsPayment.id` (Required) | `number` |   |
| `vippsPayment.createdAt` (Required) | `string (date-time)` |   |
| `vippsPayment.updatedAt` (Required) | `string (date-time)` |   |
| `vippsPayment.deletedAt` (Required) | `string (date-time)` |   |
| `vippsPayment.metaData` (Required) | `object` |   |
| `netsPayment` (Required) | `NetsPayment` |   |
| `netsPayment.email` (Required) | `string` | Can be null |
| `netsPayment.uuid` (Required) | `string` |   |
| `netsPayment.paymentIntentId` (Required) | `string` |   |
| `netsPayment.reference` (Required) | `string` |   |
| `netsPayment.status` (Required) | `string` | Allowed values: `"pending"`, `"succeeded"`, `"failed"` |
| `netsPayment.isRecurring` (Required) | `boolean` |   |
| `netsPayment.isRestartByCardUpdate` (Required) | `boolean` |   |
| `netsPayment.chargeId` (Required) | `string` |   |
| `netsPayment.bulkId` (Required) | `string` |   |
| `netsPayment.subscriptionId` (Required) | `string` |   |
| `netsPayment.cardInfo` (Required) | `NetsCardInfo` |   |
| `netsPayment.paymentId` (Required) | `number` |   |
| `netsPayment.payment` (Required) | `Payment` | Recursive schema; nested fields are not repeated. |
| `netsPayment.id` (Required) | `number` |   |
| `netsPayment.createdAt` (Required) | `string (date-time)` |   |
| `netsPayment.updatedAt` (Required) | `string (date-time)` |   |
| `netsPayment.deletedAt` (Required) | `string (date-time)` |   |
| `netsPayment.metaData` (Required) | `object` |   |
| `eInvoicePayment` (Required) | `EInvoicePayment` | Nested fields omitted: field limit. |
| `swedbankpayPayment` (Required) | `SwedbankpayPayment` | Nested fields omitted: field limit. |
| `package` (Required) | `Package` | Nested fields omitted: field limit. |
| `order` (Required) | `Order` | Nested fields omitted: field limit. |
| `checkoutState` (Required) | `CheckoutState` | Nested fields omitted: field limit. |
| `invoiceId` (Required) | `number` |   |
| `invoice` (Required) | `Invoice` | Nested fields omitted: field limit. |
| `member` (Required) | `Member` | Nested fields omitted: field limit. |
| `updatedBy` (Required) | `number` |   |
| `id` (Required) | `number` |   |
| `createdAt` (Required) | `string (date-time)` |   |
| `updatedAt` (Required) | `string (date-time)` |   |
| `deletedAt` (Required) | `string (date-time)` |   |
| `metaData` (Required) | `object` |   |

#### 400

invalidPackage, badRequest

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/faktura/update' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "memPackId": 0,
  "paymentDate": "2019-08-24T14:15:22Z",
  "isPaid": true,
  "note": "string",
  "paymentProvider": "stripe"
}'
```

### Example response

200 · `application/json`

```json
{
  "packageId": 0,
  "accountingDate": "2019-08-24T14:15:22Z",
  "registrationDate": "2019-08-24T14:15:22Z",
  "paymentProvider": "stripe",
  "paymentMethod": "card",
  "amount": 0,
  "currency": "string",
  "status": "pending",
  "note": "string",
  "isAdminAction": true,
  "memberId": "string",
  "stripePayment": {
    "paymentId": 0,
    "email": "string",
    "customerId": "string",
    "paymentMethodId": "string",
    "paymentIntentId": "string",
    "status": "requires_payment_method",
    "isSaved": true,
    "cardInfo": {},
    "payment": {},
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "vippsPayment": {
    "uuid": "string",
    "agreementId": "string",
    "externalId": "string",
    "phone": "<phone>",
    "chargeId": "string",
    "due": "2019-08-24T14:15:22Z",
    "transactionId": "string",
    "vippsConfirmationUrl": "string",
    "failureReason": "string",
    "failureDescription": "string",
    "status": "PENDING",
    "summary": "string",
    "history": "string",
    "paymentId": 0,
    "payment": {},
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "netsPayment": {
    "email": "string",
    "uuid": "string",
    "paymentIntentId": "string",
    "reference": "string",
    "status": "pending",
    "isRecurring": true,
    "isRestartByCardUpdate": true,
    "chargeId": "string",
    "bulkId": "string",
    "subscriptionId": "string",
    "cardInfo": {},
    "paymentId": 0,
    "payment": {},
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "eInvoicePayment": {
    "kid": "string",
    "status": "PENDING",
    "channel": "Efaktura 2.0",
    "summary": "string",
    "xml": "string",
    "invoiceId": 0,
    "paymentId": 0,
    "invoice": {
      "orderItemInfo": [],
      "taxGroupInfo": [],
      "refunds": [],
      "creditNotes": [],
      "payments": [],
      "metaData": {}
    },
    "payment": {},
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "swedbankpayPayment": {
    "email": "string",
    "uuid": "string",
    "paymentIntentId": "string",
    "reference": "string",
    "status": "pending",
    "isRecurring": true,
    "isRestartByCardUpdate": true,
    "chargeId": "string",
    "subscriptionId": "string",
    "cardInfo": {},
    "paymentId": 0,
    "payment": {},
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "package": {
    "paymentProviders": [],
    "repeatPurchaseControl": "allow",
    "repeatPurchaseCooldownDays": 0,
    "displayOrder": 0,
    "seo": {},
    "salesTitle": "string",
    "uuid": "string",
    "subscriptionPlanId": 0,
    "slug": "string",
    "image": "string",
    "name": "string",
    "description": {},
    "billingPeriod": "monthly",
    "billingPeriodUnit": "day",
    "billingPeriodFrequency": 0,
    "status": "draft",
    "isAvailableOnMyPage": true,
    "isAvailableViaSlug": true,
    "isAvailableForManualOrderViaAdmin": true,
    "allowSameSubscriptionChange": true,
    "allowDifferentSubscriptionSwitch": true,
    "tenantId": 0,
    "onboardingWelcomeRedirectCTAText": {},
    "customPeriodText": {},
    "orderCtaLabel": {},
    "introPeriodFixedEndDate": "2019-08-24T14:15:22Z",
    "packageProducts": [],
    "subscriptionPlan": {
      "paymentProviders": [],
      "entityTags": [],
      "subscriptionPlanProducts": [],
      "packages": [],
      "memberPackages": [],
      "metaData": {}
    },
    "payments": [],
    "memberPackages": [],
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "order": {
    "orderNumber": 0,
    "memberPackageId": 0,
    "recurringPriceAtOrder": 0,
    "paymentId": 0,
    "paymentToken": "<paymentToken>",
    "type": "initial",
    "orderItems": [],
    "payment": {},
    "memberPackage": {
      "memberPackageProducts": [],
      "orders": [],
      "changes": [],
      "histories": [],
      "metaData": {}
    },
    "invoice": {
      "orderItemInfo": [],
      "taxGroupInfo": [],
      "refunds": [],
      "creditNotes": [],
      "payments": [],
      "metaData": {}
    },
    "tenantId": 0,
    "tenant": {
      "additionalFeatures": [],
      "disabledFeatures": [],
      "taxRates": [],
      "products": [],
      "users": [],
      "members": [],
      "roles": [],
      "subscriptionPlans": [],
      "packages": [],
      "invoices": [],
      "orders": [],
      "paymentProviders": [],
      "newslettersProviderConfig": [],
      "paymentProviderConfigs": [],
      "oidcClients": [],
      "oauthProviders": [],
      "activityLogs": [],
      "m2m_api_clients": [],
      "customProperties": [],
      "consents": [],
      "communicationTemplates": [],
      "additionalHostnames": [],
      "exportHistory": [],
      "arReportHistory": [],
      "mypageCardsSettings": [],
      "webhooks": [],
      "customOrders": [],
      "customOrderSources": [],
      "brandKits": [],
      "communicationReceivers": [],
      "metaData": {}
    },
    "memberPackageChange": {
      "metaData": {}
    },
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "checkoutState": {
    "uuid": "string",
    "memberId": "string",
    "status": "created",
    "steps": [],
    "paymentData": {},
    "memberData": {
      "customPropertyValues": {}
    },
    "additionalMemberData": [],
    "physicalProductData": {
      "memberAddressData": [],
      "productData": []
    },
    "giftReceiverData": [],
    "giftReceiverDeliveryData": {
      "giftReceiverAddressData": [],
      "productData": []
    },
    "paymentId": 0,
    "memberPackageId": 0,
    "payment": {},
    "member": {
      "customPropertyValues": {},
      "productRecipients": [],
      "metaData": {}
    },
    "memberPackage": {
      "memberPackageProducts": [],
      "orders": [],
      "changes": [],
      "histories": [],
      "metaData": {}
    },
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "invoiceId": 0,
  "invoice": {
    "status": "paid",
    "deliveryStatus": "sent_via_einvoice",
    "remainingAmount": 0,
    "totalTaxAmount": 0,
    "taxExclusiveAmount": 0,
    "invoiceNumber": 0,
    "language": "en",
    "packName": "string",
    "planName": "string",
    "autoGenerated": true,
    "periodStartDate": "2019-08-24T14:15:22Z",
    "periodEndDate": "2019-08-24T14:15:22Z",
    "memberInfo": {},
    "addressInfo": {},
    "tenantInfo": {},
    "orderNumber": 0,
    "orderItemInfo": [],
    "taxGroupInfo": [],
    "paymentProvider": "stripe",
    "paymentMethod": "card",
    "amount": 0,
    "paidAmount": 0,
    "dueDate": "2019-08-24T14:15:22Z",
    "paymentDate": "2019-08-24T14:15:22Z",
    "accountingDate": "2019-08-24T14:15:22Z",
    "currency": "string",
    "tenantId": 0,
    "order": {
      "orderItems": [],
      "metaData": {}
    },
    "eInvoicePayment": {
      "metaData": {}
    },
    "member": {
      "customPropertyValues": {},
      "productRecipients": [],
      "metaData": {}
    },
    "tenant": {
      "additionalFeatures": [],
      "disabledFeatures": [],
      "taxRates": [],
      "products": [],
      "users": [],
      "members": [],
      "roles": [],
      "subscriptionPlans": [],
      "packages": [],
      "invoices": [],
      "orders": [],
      "paymentProviders": [],
      "newslettersProviderConfig": [],
      "paymentProviderConfigs": [],
      "oidcClients": [],
      "oauthProviders": [],
      "activityLogs": [],
      "m2m_api_clients": [],
      "customProperties": [],
      "consents": [],
      "communicationTemplates": [],
      "additionalHostnames": [],
      "exportHistory": [],
      "arReportHistory": [],
      "mypageCardsSettings": [],
      "webhooks": [],
      "customOrders": [],
      "customOrderSources": [],
      "brandKits": [],
      "communicationReceivers": [],
      "metaData": {}
    },
    "refunds": [],
    "isCreditNote": true,
    "note": "string",
    "referencedInvoiceNumber": 0,
    "referencedInvoiceId": 0,
    "referencedInvoice": {},
    "creditNotes": [],
    "payments": [],
    "transaction": {
      "metaData": {}
    },
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "member": {
    "userId": 0,
    "memberNumber": 0,
    "tenantId": 0,
    "externalId": "string",
    "fullName": "<fullName>",
    "nickName": "string",
    "avatar": "string",
    "email": "string",
    "birthDate": "<birthDate>",
    "phone": "<phone>",
    "isCompany": true,
    "companyName": "string",
    "organizationNo": "string",
    "deleteAfterExpiration": true,
    "customPropertyValues": {},
    "productRecipients": [],
    "id": "string",
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "updatedBy": 0,
  "id": 0,
  "createdAt": "2019-08-24T14:15:22Z",
  "updatedAt": "2019-08-24T14:15:22Z",
  "deletedAt": "2019-08-24T14:15:22Z",
  "metaData": {}
}
```

<a id="post-api-v1-members-memberid-subscriptions-subscription-plan-price-by-quantity"></a>
## Get recurring price by quantity of optional products of a member subscription

`POST /api/v1/members/{memberId}/subscriptions/subscription-plan/price-by-quantity`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |

### Request body

Content type: `application/json` · Required · `SubscriptionPlanPriceByQuantityDto`

| Name | Type | Description |
| --- | --- | --- |
| `planId` (Required) | `number` | `minimum`: `1` |
| `products` (Required) | `array of OptionalProductWithQuantity` |   |
| `products[].productId` (Required when parent is present) | `number` | `minimum`: `1` |
| `products[].quantity` (Required when parent is present) | `number` | `minimum`: `1` |
| `products[].shippingCountry` | `string` | `maxLength`: `64` |
| `products[].manualPrice` | `number` |   |
| `memberPackageId` | `number` |   |

### Responses

#### 201

Content type: `application/json` · `SubscriptionPlanResponse`

| Name | Type | Description |
| --- | --- | --- |
| `paymentProviders` (Required) | `array of PAYMENT_PROVIDER` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `name` (Required) | `string` |   |
| `uuid` (Required) | `string` |   |
| `billingPeriod` (Required) | `string` | Allowed values: `"monthly"`, `"thirty_days"`, `"quarterly"`, `"half_yearly"`, `"yearly"`, `"custom"` |
| `billingPeriodUnit` (Required) | `string` | Allowed values: `"day"`, `"week"`, `"month"`, `"year"` |
| `billingPeriodFrequency` (Required) | `number` |   |
| `autoRenew` (Required) | `boolean` |   |
| `status` (Required) | `string` | Allowed values: `"draft"`, `"published"`, `"archived"` |
| `tenantId` (Required) | `number` |   |
| `allowSameSubscriptionChange` (Required) | `boolean` |   |
| `allowDifferentSubscriptionSwitch` (Required) | `boolean` |   |
| `allowAdminSameSubscriptionChange` (Required) | `boolean` |   |
| `allowAdminDifferentSubscriptionSwitch` (Required) | `boolean` |   |
| `enableGiftSubscription` (Required) | `boolean` |   |
| `allowFutureStartDate` (Required) | `boolean` |   |
| `showAsOptionOnSubscriptionSwitch` (Required) | `boolean` |   |
| `showAsOptionOnAdminSubscriptionSwitch` (Required) | `boolean` |   |
| `offerSwitchOnCheckout` (Required) | `boolean` |   |
| `tenant` (Required) | `Tenant` | Nested fields omitted: field limit. |
| `entityTags` (Required) | `array of EntityTag` |   |
| `entityTags[].productId` (Required when parent is present) | `number` |   |
| `entityTags[].tagId` (Required when parent is present) | `number` |   |
| `entityTags[].subscriptionPlanId` (Required when parent is present) | `number` |   |
| `entityTags[].tag` (Required when parent is present) | `Tag` | Nested fields omitted: field limit. |
| `entityTags[].product` (Required when parent is present) | `Product` | Nested fields omitted: field limit. |
| `entityTags[].subscriptionPlan` (Required when parent is present) | `SubscriptionPlan` | Nested fields omitted: field limit. |
| `entityTags[].visualWorkflowId` (Required when parent is present) | `number` |   |
| `entityTags[].visualWorkflow` (Required when parent is present) | `VisualWorkflow` | Nested fields omitted: field limit. |
| `entityTags[].id` (Required when parent is present) | `number` |   |
| `entityTags[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `entityTags[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `entityTags[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `entityTags[].metaData` (Required when parent is present) | `object` |   |
| `subscriptionPlanProducts` (Required) | `array of SubscriptionPlanProduct` |   |
| `subscriptionPlanProducts[].subscriptionPlanId` (Required when parent is present) | `number` |   |
| `subscriptionPlanProducts[].productId` (Required when parent is present) | `number` |   |
| `subscriptionPlanProducts[].price` (Required when parent is present) | `number` |   |
| `subscriptionPlanProducts[].properties` (Required when parent is present) | `OptionalProductProperties` |   |
| `subscriptionPlanProducts[].properties.isRequired` (Required when parent is present) | `boolean` |   |
| `subscriptionPlanProducts[].properties.quantityRange` (Required when parent is present) | `number` |   |
| `subscriptionPlanProducts[].subscriptionPlan` (Required when parent is present) | `SubscriptionPlan` | Nested fields omitted: field limit. |
| `subscriptionPlanProducts[].product` (Required when parent is present) | `Product` | Nested fields omitted: field limit. |
| `subscriptionPlanProducts[].tenantId` (Required when parent is present) | `number` |   |
| `subscriptionPlanProducts[].tenant` (Required when parent is present) | `Tenant` | Nested fields omitted: field limit. |
| `subscriptionPlanProducts[].id` (Required when parent is present) | `number` |   |
| `subscriptionPlanProducts[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `subscriptionPlanProducts[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `subscriptionPlanProducts[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `subscriptionPlanProducts[].metaData` (Required when parent is present) | `object` |   |
| `packages` (Required) | `array of Package` | Nested fields omitted: field limit. |
| `memberPackages` (Required) | `array of MemberPackage` | Nested fields omitted: field limit. |
| `id` (Required) | `number` |   |
| `createdAt` (Required) | `string (date-time)` |   |
| `updatedAt` (Required) | `string (date-time)` |   |
| `deletedAt` (Required) | `string (date-time)` |   |
| `metaData` (Required) | `object` |   |
| `subscriptionCount` (Required) | `number` |   |
| `products` (Required) | `array of SubscriptionProduct` |   |
| `products[].circulationType` | `CIRCULATION_TYPE` | Allowed values: `"subscription"`, `"single_copy"` · Can be null |
| `products[].productId` (Required when parent is present) | `number` |   |
| `products[].name` (Required when parent is present) | `string` |   |
| `products[].price` (Required when parent is present) | `number` |   |
| `products[].currency` (Required when parent is present) | `string` |   |
| `products[].isOptional` (Required when parent is present) | `boolean` |   |
| `products[].basePrice` (Required when parent is present) | `number` |   |
| `products[].properties` (Required when parent is present) | `OptionalProductProperties` |   |
| `products[].properties.isRequired` (Required when parent is present) | `boolean` |   |
| `products[].properties.quantityRange` (Required when parent is present) | `number` |   |
| `products[].shippingCharges` (Required when parent is present) | `array of ShippingCharge` |   |
| `products[].shippingCharges[].country` (Required when parent is present) | `string` |   |
| `products[].shippingCharges[].charge` (Required when parent is present) | `number` |   |
| `products[].productCategory` (Required when parent is present) | `string` | Allowed values: `"digital_subscription"`, `"physical_subscription"`, `"physical"`, `"event_ticket"`, `"PHYSICAL_PRODUCT"` |
| `products[].tax` (Required when parent is present) | `number` |   |
| `products[].description` (Required when parent is present) | `string` |   |
| `products[].maxQuantityPerOrder` (Required when parent is present) | `number` |   |
| `tags` | `array of string` |   |
| `price` (Required) | `number` |   |
| `hasOptionalProducts` (Required) | `boolean` |   |

#### 400

Content type: `application/json` · `ErrorResponse`

invalidProducts

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/subscription-plan/price-by-quantity' \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "planId": 1,
  "products": [
    {}
  ],
  "memberPackageId": 0
}'
```

### Example response

201 · `application/json`

```json
{
  "paymentProviders": [
    "stripe"
  ],
  "name": "string",
  "uuid": "string",
  "billingPeriod": "monthly",
  "billingPeriodUnit": "day",
  "billingPeriodFrequency": 0,
  "autoRenew": true,
  "status": "draft",
  "tenantId": 0,
  "allowSameSubscriptionChange": true,
  "allowDifferentSubscriptionSwitch": true,
  "allowAdminSameSubscriptionChange": true,
  "allowAdminDifferentSubscriptionSwitch": true,
  "enableGiftSubscription": true,
  "allowFutureStartDate": true,
  "showAsOptionOnSubscriptionSwitch": true,
  "showAsOptionOnAdminSubscriptionSwitch": true,
  "offerSwitchOnCheckout": true,
  "tenant": {
    "market": "NO",
    "productName": "enterprise",
    "additionalFeatures": [],
    "disabledFeatures": [],
    "name": "string",
    "isActive": true,
    "defaultLanguage": "en",
    "hostName": "string",
    "logo": "string",
    "favicon": "string",
    "authLogo": "string",
    "authLogoHeight": 0,
    "siteUrl": "string",
    "termsUrl": "string",
    "privacyUrl": "string",
    "gtm": "string",
    "taxRates": [],
    "smsOtp": true,
    "emailProvider": "brevo",
    "tenantContact": "string",
    "registeredBusinessNo": "string",
    "bankAccountNo": "string",
    "swiftCode": "string",
    "iban": "<iban>",
    "defaultLogoutURL": "string",
    "postalAddress": "<postalAddress>",
    "otpTemplateId": {},
    "smsSenderId": 0,
    "emailSenderId": 0,
    "smsSender": {
      "metaData": {}
    },
    "emailSender": {
      "metaData": {}
    },
    "products": [],
    "users": [],
    "members": [],
    "roles": [],
    "subscriptionPlans": [],
    "packages": [],
    "invoices": [],
    "orders": [],
    "paymentProviders": [],
    "newslettersProviderConfig": [],
    "paymentProviderConfigs": [],
    "oidcClients": [],
    "oauthProviders": [],
    "activityLogs": [],
    "m2m_api_clients": [],
    "customProperties": [],
    "consents": [],
    "preference": {
      "inputFieldConfig": [],
      "customFieldsOnMemberCard": [],
      "customFieldsOnInvoice": [],
      "visibleAdditionalFieldsOnMypage": [],
      "metaData": {}
    },
    "settings": {
      "aiResidency": {},
      "metaData": {}
    },
    "communicationTemplates": [],
    "additionalHostnames": [],
    "exportHistory": [],
    "arReportHistory": [],
    "mypageCardsSettings": [],
    "webhooks": [],
    "customOrders": [],
    "customOrderSources": [],
    "brandKits": [],
    "communicationReceivers": [],
    "id": 0,
    "createdAt": "2019-08-24T14:15:22Z",
    "updatedAt": "2019-08-24T14:15:22Z",
    "deletedAt": "2019-08-24T14:15:22Z",
    "metaData": {}
  },
  "entityTags": [
    {
      "metaData": {}
    }
  ],
  "subscriptionPlanProducts": [
    {
      "metaData": {}
    }
  ],
  "packages": [
    {
      "paymentProviders": [],
      "description": {},
      "packageProducts": [],
      "payments": [],
      "memberPackages": [],
      "metaData": {}
    }
  ],
  "memberPackages": [
    {
      "memberPackageProducts": [],
      "orders": [],
      "changes": [],
      "histories": [],
      "metaData": {}
    }
  ],
  "id": 0,
  "createdAt": "2019-08-24T14:15:22Z",
  "updatedAt": "2019-08-24T14:15:22Z",
  "deletedAt": "2019-08-24T14:15:22Z",
  "metaData": {},
  "subscriptionCount": 0,
  "products": [
    {
      "shippingCharges": []
    }
  ],
  "tags": [
    "string"
  ],
  "price": 0,
  "hasOptionalProducts": true
}
```

<a id="post-api-v1-members-memberid-subscriptions-id-subscription-action-help-text"></a>
## Get help text for subscription action

`POST /api/v1/members/{memberId}/subscriptions/{id}/subscription-action-help-text`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Request body

Content type: `application/json` · Required · `SubscriptionActionHelpTextRequestDto`

| Name | Type | Description |
| --- | --- | --- |
| `language` | `LANGUAGE` | Allowed values: `"en"`, `"no"`, `"sv"`, `"da"` |
| `autoRenew` | `boolean` |   |
| `isRestart` | `boolean` |   |

**Example request body**

`application/json`

```json
{
  "language": "en",
  "autoRenew": true,
  "isRestart": true
}
```

### Responses

#### 201

Content type: `application/json` · `SubscriptionActionHelpTextResponse`

| Name | Type | Description |
| --- | --- | --- |
| `helpText` (Required) | `string` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/{id}/subscription-action-help-text' \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "language": "en",
  "autoRenew": true,
  "isRestart": true
}'
```

### Example response

201 · `application/json`

```json
{
  "helpText": "string"
}
```

<a id="patch-api-v1-members-memberid-subscriptions-id-cancel"></a>
## Cancel a subscription, stopping any pending charge first

`PATCH /api/v1/members/{memberId}/subscriptions/{id}/cancel`

Cancels the pending Vipps charge if there is one, then stops the subscription immediately (active → stopped). A charge Vipps will no longer cancel does not block the stop; the response says whether one was cancelled.

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | path | `string` |   |
| `id` (Required) | path | `number` |   |

### Responses

#### 200

Content type: `application/json` · `StopSubscriptionResultDto`

| Name | Type | Description |
| --- | --- | --- |
| `pendingChargeCancelled` (Required) | `boolean` |   |

#### 401

unauthorized

#### 403

Content type: `application/json` · `ErrorResponse`

forbiddenResource

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 404

Content type: `application/json` · `ErrorResponse`

notFound

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"notFound"` |
| `message` | `string` |   |
| `errors` (Required) | `array of FieldError` |   |
| `errors[].field` (Required when parent is present) | `string` |   |
| `errors[].fieldValue` (Required when parent is present) | `string` |   |
| `errors[].identifier` (Required when parent is present) | `string` |   |
| `errors[].identifierValue` (Required when parent is present) | `string` |   |
| `errors[].messageCode` (Required when parent is present) | `string` |   |
| `errors[].message` | `string` |   |
| `errors[].errorType` (Required when parent is present) | `string` |   |

**Example response**

`application/json`

```json
{
  "messageCode": "notFound",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

Content type: `application/json` · `ErrorResponse`

internalServerError

Same fields as [Get all subscriptions of a member (403)](https://www.subrite.no/developers/member-subscriptions?md=true#get-api-v1-members-memberid-subscriptions).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{memberId}/subscriptions/{id}/cancel' \
  --request PATCH \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
{
  "pendingChargeCancelled": true
}
```
