# Member

**Summary:** Endpoints for Member

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

<a id="post-api-v1-members"></a>
## Create a new member

`POST /api/v1/members`

**Authentication:** Bearer token (JWT)

### Request body

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

| Name | Type | Description |
| --- | --- | --- |
| `fullName` (Required) | `string` |   |
| `email` (Required) | `string (email)` |   |
| `birthDate` (Required) | `string (date-time)` |   |
| `nickName` (Required) | `string` | `maxLength`: `255` |
| `phone` (Required) | `string` | `maxLength`: `32` |
| `countryCode` | `string` | `maxLength`: `8` |
| `isCompany` (Required) | `boolean` |   |
| `companyName` (Required) | `string` | `maxLength`: `255` |
| `address` (Required) | `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>",
  "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`

shouldNotBeEmpty, mustBeAnEmail, mustBeADateInstance, invalidFormat, alreadyExists, phoneAlreadyVerified, unknownCustomProperty

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"shouldNotBeEmpty"`, `"mustBeAnEmail"`, `"mustBeADateInstance"`, `"invalidFormat"`, `"alreadyExists"`, `"phoneAlreadyVerified"`, `"unknownCustomProperty"` |
| `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": "shouldNotBeEmpty",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 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 [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl https://api.subrite.no/api/v1/members \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "fullName": "<fullName>",
  "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-list"></a>
## Get all members of the tenant with minimal data with pagination

`POST /api/v1/members/list`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `page` | query | `number` | Default: `1` · `minimum`: `1` |
| `take` | query | `number` | Default: `10` · `minimum`: `1`, `maximum`: `50` |
| `orderDirection` | query | `string` | Allowed values: `"asc"`, `"desc"` · Default: `"desc"` |
| `orderBy` | query | `string` | Allowed values: `"email"`, `"createdAt"`, `"id"`, `"updatedAt"`, `"totalRevenue"` |

### Request body

Content type: `application/json` · Optional · `MemberFilterDto`

| Name | Type | Description |
| --- | --- | --- |
| `filters` (Required) | `array of MemberFilter` |   |
| `filters[].field` (Required when parent is present) | `MEMBER_FILTER_FIELD` | Allowed values: `"email"`, `"id"`, `"userId"`, `"updatedAt"`, `"subscriptionStatus"`, `"subscriptionPlanId"`, `"customProperty"`, `"postCode"`, `"phone"`, `"name"`, `"isCompany"`, `"type"`, `"consent"`, `"inactivity"`, `"emailStatus"`, `"search"` |
| `filters[].operator` (Required when parent is present) | `MEMBER_FILTER_OPERATOR` | Allowed values: `"eq"`, `"neq"`, `"gt"`, `"gte"`, `"lt"`, `"lte"`, `"contains"`, `"between"` |
| `filters[].value` (Required when parent is present) | `object` |   |

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `items` (Required) | `array of MemberListData` |   |
| `items[].memberId` (Required when parent is present) | `string` |   |
| `items[].memberNumber` (Required when parent is present) | `number` |   |
| `items[].userId` (Required when parent is present) | `number` | Can be null |
| `items[].fullName` (Required when parent is present) | `string` |   |
| `items[].isCompany` (Required when parent is present) | `boolean` |   |
| `items[].companyName` (Required when parent is present) | `string` |   |
| `items[].email` (Required when parent is present) | `string` |   |
| `items[].phone` (Required when parent is present) | `string` |   |
| `items[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].memberEmailStatus` (Required when parent is present) | `SendgridEmailActivityStatus` | The sendgrid email activity status of the member email · Allowed values: `"scheduled"`, `"processed"`, `"dropped"`, `"deferred"`, `"bounce"`, `"hard_bounce"`, `"soft_bounce"`, `"spamreport"`, `"delivered"`, `"unsubscribe"`, `"group_unsubscribe"`, `"group_resubscribe"`, `"open"`, `"failed"`, `"click"`, `"skipped_bounced"` |
| `items[].totalRevenue` (Required when parent is present) | `number` |   |
| `items[].hasActiveSubscription` (Required when parent is present) | `boolean` |   |
| `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` |   |

#### 201

#### 400

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

shouldNotBeEmpty, invalidFormat, memberFilterFieldUnsupported

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"shouldNotBeEmpty"`, `"invalidFormat"`, `"memberFilterFieldUnsupported"` |
| `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": "shouldNotBeEmpty",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl https://api.subrite.no/api/v1/members/list \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "filters": [
    {
      "value": {}
    }
  ]
}'
```

### 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-filter"></a>
## Get all members of the tenant with filter & pagination

`POST /api/v1/members/filter`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `page` | query | `number` | Default: `1` · `minimum`: `1` |
| `take` | query | `number` | Default: `10` · `minimum`: `1`, `maximum`: `50` |
| `orderDirection` | query | `string` | Allowed values: `"asc"`, `"desc"` · Default: `"desc"` |
| `orderBy` | query | `string` | Allowed values: `"email"`, `"createdAt"`, `"id"`, `"updatedAt"`, `"totalRevenue"` |
| `legacySupport` | query | `boolean` |   |

### Request body

Content type: `application/json` · Optional · `MemberFilterDto`

A custom-property filter is sent as `field: "customProperty.<propertyName>"`. That dotted form is applied by this endpoint only; POST /members/list rejects it.

Same fields as [Get all members of the tenant with minimal data with pagination (Request body)](https://www.subrite.no/developers/member?md=true#post-api-v1-members-list).

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `items` (Required) | `array of MemberPersonalInfo` |   |
| `items[].id` (Required when parent is present) | `string` |   |
| `items[].fullName` (Required when parent is present) | `string` |   |
| `items[].nickName` (Required when parent is present) | `string` |   |
| `items[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].avatar` (Required when parent is present) | `string` |   |
| `items[].countryCode` | `string` |   |
| `items[].birthDate` (Required when parent is present) | `string (date-time)` |   |
| `items[].deleteAfterExpiration` (Required when parent is present) | `boolean` |   |
| `items[].isCompany` (Required when parent is present) | `boolean` |   |
| `items[].companyName` (Required when parent is present) | `string` |   |
| `items[].organizationNo` (Required when parent is present) | `string` |   |
| `items[].customPropertyValues` (Required when parent is present) | `object` |   |
| `items[].emailVerified` | `string` |   |
| `items[].phoneVerified` (Required when parent is present) | `boolean` |   |
| `items[].memberNumber` (Required when parent is present) | `number` |   |
| `items[].userId` (Required when parent is present) | `number` |   |
| `items[].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[].email` (Required when parent is present) | `string (email)` |   |
| `items[].phone` (Required when parent is present) | `string` |   |
| `items[].address` (Required when parent is present) | `ProfileAddress` |   |
| `items[].address.line1` (Required when parent is present) | `string` |   |
| `items[].address.line2` (Required when parent is present) | `string` |   |
| `items[].address.city` (Required when parent is present) | `string` |   |
| `items[].address.postCode` (Required when parent is present) | `string` |   |
| `items[].address.country` (Required when parent is present) | `string` |   |
| `items[].address.name` (Required when parent is present) | `string` |   |
| `items[].address.email` (Required when parent is present) | `string` |   |
| `items[].address.companyName` (Required when parent is present) | `string` |   |
| `items[].address.organizationNo` (Required when parent is present) | `string` |   |
| `items[].address.invoiceReference` | `string` |   |
| `items[].address.isSynced` | `boolean` |   |
| `items[].address.lastSyncedAt` | `string (date-time)` |   |
| `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` |   |

#### 201

#### 400

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

shouldNotBeEmpty, invalidFormat, memberFilterFieldUnsupported

Same fields as [Get all members of the tenant with minimal data with pagination (400)](https://www.subrite.no/developers/member?md=true#post-api-v1-members-list).

**Example response**

`application/json`

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

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl https://api.subrite.no/api/v1/members/filter \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "filters": [
    {
      "value": {}
    }
  ]
}'
```

### Example response

200 · `application/json`

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

<a id="get-api-v1-members-id"></a>
## Get a member by id

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

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `string` |   |
| `legacySupport` | query | `boolean` |   |

### Responses

#### 200

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

Same fields as [Create a new member (201)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**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 [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

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

### Example response

200 · `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="delete-api-v1-members-id"></a>
## Delete a member

`DELETE /api/v1/members/{id}`

**Authentication:** Bearer token (JWT)

### Parameters

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

### Responses

#### 200

#### 400

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

hasActiveSubscriptions, hasOpenInvoices

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"hasActiveSubscriptions"`, `"hasOpenInvoices"` |
| `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": "hasActiveSubscriptions",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 404

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

notFound

Same fields as [Get a member by id (404)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-id).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

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

<a id="patch-api-v1-members-id"></a>
## Update a member

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

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `string` |   |
| `legacySupport` | query | `boolean` |   |

### Request body

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

| Name | Type | Description |
| --- | --- | --- |
| `fullName` | `string` |   |
| `deleteAfterExpiration` | `boolean` |   |
| `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` |
| `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` |
| `customPropertyValues` | `object` |   |

**Example request body**

`application/json`

```json
{
  "fullName": "<fullName>",
  "deleteAfterExpiration": true,
  "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"
  },
  "email": "user@example.com",
  "birthDate": "<birthDate>",
  "nickName": "string",
  "phone": "<phone>",
  "countryCode": "string",
  "isCompany": true,
  "companyName": "string",
  "customPropertyValues": {}
}
```

### Responses

#### 200

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

Same fields as [Create a new member (201)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

#### 400

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

shouldNotBeEmpty, mustBeAnEmail, mustBeADateInstance, invalidFormat, alreadyExists, phoneAlreadyVerified, unknownCustomProperty

Same fields as [Create a new member (400)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 404

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

notFound

Same fields as [Get a member by id (404)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-id).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{id}' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "fullName": "<fullName>",
  "deleteAfterExpiration": true,
  "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"
  },
  "email": "user@example.com",
  "birthDate": "<birthDate>",
  "nickName": "string",
  "phone": "<phone>",
  "countryCode": "string",
  "isCompany": true,
  "companyName": "string",
  "customPropertyValues": {}
}'
```

### Example response

200 · `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="get-api-v1-members-id-invoices"></a>
## Get all invoices of a member

`GET /api/v1/members/{id}/invoices`

**Authentication:** Bearer token (JWT)

### Parameters

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

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `[].id` (Required when parent is present) | `number` |   |
| `[].type` (Required when parent is present) | `TransactionResponseType` | Allowed values: `"payment"`, `"refund"`, `"invoice"`, `"credit_note"`, `"rounding_adjustment"` |
| `[].invoiceNo` (Required when parent is present) | `number` |   |
| `[].invoiceDate` (Required when parent is present) | `string (date-time)` |   |
| `[].packName` (Required when parent is present) | `string` |   |
| `[].memberPackageId` (Required when parent is present) | `number` |   |
| `[].memberId` (Required when parent is present) | `string` |   |
| `[].memberEmail` (Required when parent is present) | `string` |   |
| `[].memberName` | `string` |   |
| `[].totalAmount` (Required when parent is present) | `number` |   |
| `[].status` (Required when parent is present) | `INVOICE_STATUS` | Allowed values: `"paid"`, `"unpaid"`, `"over-due"`, `"over-paid"`, `"partially-paid"`, `"refunded"`, `"credited"`, `"partially-credited"` |
| `[].memberPackageStatus` | `MEMBER_PACKAGE_STATUS` | Allowed values: `"active"`, `"inactive"`, `"pending"`, `"paused"`, `"stopped"`, `"expired"`, `"waiting_for_activation"` |
| `[].deliveryStatus` | `INVOICE_DELIVERY_STATUS` | Allowed values: `"sent_via_einvoice"`, `"sent_via_email"`, `"sent_via_sms"`, `"sent_via_payment_gateway"`, `"sent_manually"`, `"in_progress"`, `"not_sent"` |
| `[].isCreditNote` (Required when parent is present) | `boolean` |   |
| `[].referencedInvoiceNumber` | `number` |   |
| `[].kid` (Required when parent is present) | `string` |   |
| `[].note` (Required when parent is present) | `string` |   |
| `[].paymentProvider` (Required when parent is present) | `PAYMENT_PROVIDER` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `[].memberNumber` (Required when parent is present) | `number` |   |
| `[].invoiceDueDate` | `string (date-time)` |   |
| `[].orderId` (Required when parent is present) | `number` |   |
| `[].autoGenerated` (Required when parent is present) | `boolean` |   |
| `[].creditNoteNumbers` | `array of number` | Numbers of the credit notes referencing this invoice. Only populated by endpoints that load credit notes (currently the member invoice list); undefined elsewhere does not mean nothing was credited. |

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

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

### Example response

200 · `application/json`

```json
[
  {
    "id": 0,
    "type": "payment",
    "invoiceNo": 0,
    "invoiceDate": "2019-08-24T14:15:22Z",
    "packName": "string",
    "memberPackageId": 0,
    "memberId": "string",
    "memberEmail": "string",
    "memberName": "<memberName>",
    "totalAmount": 0,
    "status": "paid",
    "memberPackageStatus": "active",
    "deliveryStatus": "sent_via_einvoice",
    "isCreditNote": true,
    "referencedInvoiceNumber": 0,
    "kid": "string",
    "note": "string",
    "paymentProvider": "stripe",
    "memberNumber": 0,
    "invoiceDueDate": "2019-08-24T14:15:22Z",
    "orderId": 0,
    "autoGenerated": true,
    "creditNoteNumbers": []
  }
]
```

<a id="get-api-v1-members-search"></a>
## Search members, orders, and invoices

`GET /api/v1/members/search`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `query` (Required) | query | `string` |   |
| `take` | query | `number` | Default: `100` · `minimum`: `1`, `maximum`: `100` |

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `[].entityType` (Required when parent is present) | `object` |   |
| `[].id` (Required when parent is present) | `string` |   |
| `[].fullName` (Required when parent is present) | `string` |   |
| `[].email` (Required when parent is present) | `string` |   |
| `[].companyName` (Required when parent is present) | `string` |   |
| `[].memberNumber` (Required when parent is present) | `number` |   |

#### 400

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

invalidFormat, searchQueryTooShort

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"invalidFormat"`, `"searchQueryTooShort"` |
| `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": "invalidFormat",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/search?query=%3Cquery%3E' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
[
  {
    "entityType": {},
    "id": "string",
    "fullName": "<fullName>",
    "email": "string",
    "companyName": "string",
    "memberNumber": 0
  }
]
```

<a id="get-api-v1-members-enqueue-cleanup-s3-files"></a>
## Enqueue cleanup s3 files

`GET /api/v1/members/enqueue-cleanup-s3-files`

**Authentication:** Bearer token (JWT)

### Responses

#### 200

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl https://api.subrite.no/api/v1/members/enqueue-cleanup-s3-files \
  --header 'Authorization: Bearer <token>'
```

<a id="get-api-v1-members-by-member-number-membernumber"></a>
## Get a member by member number

`GET /api/v1/members/by-member-number/{memberNumber}`

**Authentication:** Bearer token (JWT)

### Parameters

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

### Responses

#### 200

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

| 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"` |
| `activeSubscriptionDays` (Required) | `number` |   |
| `hasOwnSubscription` (Required) | `boolean` |   |
| `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`

memberNumberInvalid

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"memberNumberInvalid"` |
| `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": "memberNumberInvalid",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 404

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

notFound

Same fields as [Get a member by id (404)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-id).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

#### default

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

Same fields as [Get a member by member number (200)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-by-member-number-membernumber).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/by-member-number/{memberNumber}' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `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",
  "activeSubscriptionDays": 0,
  "hasOwnSubscription": true,
  "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="get-api-v1-members-id-revenue"></a>
## Get revenue data of a member

`GET /api/v1/members/{id}/revenue`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `string` |   |
| `datePeriod` (Required) | query | `DATE_PERIOD` | Allowed values: `"since_start"`, `"last_3_years"`, `"last_2_years"`, `"last_1_year"`, `"last_3_months"` |

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `subscriptionRevenue` (Required) | `number` |   |
| `customOrderRevenue` (Required) | `number` |   |
| `totalRevenue` (Required) | `number` |   |
| `subscriptionRevenueAverageOfTenant` (Required) | `number` |   |
| `customOrderRevenueAverageOfTenant` (Required) | `number` |   |
| `totalRevenueAverageOfTenant` (Required) | `number` |   |
| `subscriptionRevenuePercentageDiff` (Required) | `number` |   |
| `customOrderRevenuePercentageDiff` (Required) | `number` |   |
| `totalRevenuePercentageDiff` (Required) | `number` |   |
| `refundedAmount` (Required) | `number` |   |
| `refundedAmountAverageOfTenant` (Required) | `number` |   |
| `refundedAmountPercentageDiff` (Required) | `number` |   |

#### 400

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

invalidFormat

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"invalidFormat"` |
| `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": "invalidFormat",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 404

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

notFound

Same fields as [Get a member by id (404)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-id).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{id}/revenue?datePeriod=since_start' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
{
  "subscriptionRevenue": 0,
  "customOrderRevenue": 0,
  "totalRevenue": 0,
  "subscriptionRevenueAverageOfTenant": 0,
  "customOrderRevenueAverageOfTenant": 0,
  "totalRevenueAverageOfTenant": 0,
  "subscriptionRevenuePercentageDiff": 0,
  "customOrderRevenuePercentageDiff": 0,
  "totalRevenuePercentageDiff": 0,
  "refundedAmount": 0,
  "refundedAmountAverageOfTenant": 0,
  "refundedAmountPercentageDiff": 0
}
```

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

`GET /api/v1/members/{id}/orders`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `string` |   |
| `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"` |

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `items` (Required) | `array of OrderResponse` |   |
| `items[].id` (Required when parent is present) | `number` |   |
| `items[].orderDate` (Required when parent is present) | `string (date-time)` |   |
| `items[].orderNumber` (Required when parent is present) | `number` |   |
| `items[].paymentStatus` (Required when parent is present) | `PAYMENT_STATUS` | Allowed values: `"pending"`, `"succeeded"`, `"failed"` |
| `items[].amount` (Required when parent is present) | `number` |   |
| `items[].credit` (Required when parent is present) | `number` |   |
| `items[].debit` (Required when parent is present) | `number` |   |
| `items[].packageName` (Required when parent is present) | `string` |   |
| `items[].planName` (Required when parent is present) | `string` |   |
| `items[].paymentProvider` (Required when parent is present) | `PAYMENT_PROVIDER` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `items[].currency` (Required when parent is present) | `string` |   |
| `items[].billingPeriodInfo` (Required when parent is present) | `BillingPeriodInfo` |   |
| `items[].billingPeriodInfo.billingPeriod` (Required when parent is present) | `string` |   |
| `items[].billingPeriodInfo.customBillingPeriod` (Required when parent is present) | `BillingPeriodDetails` | Nested fields omitted: depth limit. |
| `items[].allowedPaymentProviders` (Required when parent is present) | `array of PAYMENT_PROVIDER` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `items[].tenantId` (Required when parent is present) | `number` |   |
| `items[].upgradeData` | `MemberPackageChangeData` |   |
| `items[].upgradeData.planChange` (Required when parent is present) | `PlanChange` | Nested fields omitted: depth limit. |
| `items[].upgradeData.productChange` (Required when parent is present) | `array of ProductChange` | Nested fields omitted: depth limit. |
| `items[].upgradeData.optionalProducts` (Required when parent is present) | `array of OptionalProductWithQuantity` | Nested fields omitted: depth limit. |
| `items[].upgradeData.planProductPrices` | `array of PlanProductPriceSnapshot` | Nested fields omitted: depth limit. |
| `items[].upgradeData.seatTransferMap` | `array of SeatTransferMappingDto` | Nested fields omitted: depth limit. |
| `items[].memberPackageId` (Required when parent is present) | `number` |   |
| `items[].recurringPriceAtOrder` (Required when parent is present) | `number` |   |
| `items[].paymentId` (Required when parent is present) | `number` |   |
| `items[].paymentToken` (Required when parent is present) | `string` |   |
| `items[].type` (Required when parent is present) | `string` | Allowed values: `"initial"`, `"recurrent"`, `"upgrade"`, `"credit-note"`, `"standalone"` |
| `items[].orderItems` (Required when parent is present) | `array of OrderItem` |   |
| `items[].orderItems[].orderId` (Required when parent is present) | `number` |   |
| `items[].orderItems[].productId` (Required when parent is present) | `number` |   |
| `items[].orderItems[].name` (Required when parent is present) | `string` |   |
| `items[].orderItems[].price` (Required when parent is present) | `number` |   |
| `items[].orderItems[].tax` (Required when parent is present) | `number` |   |
| `items[].orderItems[].quantity` (Required when parent is present) | `number` |   |
| `items[].orderItems[].note` (Required when parent is present) | `string` |   |
| `items[].orderItems[].order` (Required when parent is present) | `Order` | Nested fields omitted: depth limit. |
| `items[].orderItems[].product` (Required when parent is present) | `Product` | Nested fields omitted: depth limit. |
| `items[].orderItems[].id` (Required when parent is present) | `number` |   |
| `items[].orderItems[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].orderItems[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].orderItems[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].orderItems[].metaData` (Required when parent is present) | `object` |   |
| `items[].payment` (Required when parent is present) | `Payment` | Nested fields omitted: field limit. |
| `items[].memberPackage` (Required when parent is present) | `MemberPackage` | Nested fields omitted: field limit. |
| `items[].invoice` (Required when parent is present) | `Invoice` | Nested fields omitted: field limit. |
| `items[].tenant` (Required when parent is present) | `Tenant` | Nested fields omitted: field limit. |
| `items[].memberPackageChange` (Required when parent is present) | `MemberPackageChange` |   |
| `items[].memberPackageChange.isImmediate` (Required when parent is present) | `boolean` |   |
| `items[].memberPackageChange.changeInPrice` (Required when parent is present) | `number` |   |
| `items[].memberPackageChange.status` (Required when parent is present) | `string` | Allowed values: `"CREATED"`, `"PAYMENT_PENDING"`, `"CONFIRMATION_PENDING_FOR_NEXT_RENEWAL"`, `"PENDING_FOR_NEXT_RENEWAL"`, `"COMPLETED"`, `"CANCELLED"` |
| `items[].memberPackageChange.data` (Required when parent is present) | `MemberPackageChangeData` | Nested fields omitted: depth limit. |
| `items[].memberPackageChange.updatedBy` (Required when parent is present) | `number` |   |
| `items[].memberPackageChange.memberPackage` (Required when parent is present) | `MemberPackage` | Nested fields omitted: depth limit. |
| `items[].memberPackageChange.order` (Required when parent is present) | `Order` | Nested fields omitted: depth limit. |
| `items[].memberPackageChange.id` (Required when parent is present) | `number` |   |
| `items[].memberPackageChange.createdAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].memberPackageChange.updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].memberPackageChange.deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].memberPackageChange.metaData` (Required when parent is present) | `object` |   |
| `items[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].deletedAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].metaData` (Required when parent is present) | `object` |   |
| `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` |   |

#### 400

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

invalidFormat

Same fields as [Get revenue data of a member (400)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-id-revenue).

**Example response**

`application/json`

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

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

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

### Example response

200 · `application/json`

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

<a id="get-api-v1-members-id-payments"></a>
## Get all payments and refunds of a member

`GET /api/v1/members/{id}/payments`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `string` |   |
| `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"` |
| `type` | query | `string` | Allowed values: `"payment"`, `"refund"`, `"invoice"`, `"credit_note"`, `"rounding_adjustment"` |

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `items` (Required) | `array of PaymentAndRefundResponse` |   |
| `items[].id` (Required when parent is present) | `number` |   |
| `items[].type` (Required when parent is present) | `TransactionResponseType` | Allowed values: `"payment"`, `"refund"`, `"invoice"`, `"credit_note"`, `"rounding_adjustment"` |
| `items[].paymentDate` (Required when parent is present) | `string (date-time)` |   |
| `items[].amount` (Required when parent is present) | `number` |   |
| `items[].paymentMethod` (Required when parent is present) | `string` | Allowed values: `"card"`, `"vipps"`, `"manual_registration"`, `"efaktura"`, `"ehf"`, `"avtalegiro"` |
| `items[].paymentProvider` (Required when parent is present) | `string` | Allowed values: `"stripe"`, `"vipps"`, `"external"`, `"nets"`, `"efaktura-avtalegiro-ehf"`, `"swedbankpay"` |
| `items[].memberPackageId` (Required when parent is present) | `number` |   |
| `items[].paymentReference` (Required when parent is present) | `string` |   |
| `items[].invoiceNumber` (Required when parent is present) | `number` |   |
| `items[].invoiceId` (Required when parent is present) | `number` |   |
| `items[].orderNumber` (Required when parent is present) | `number` |   |
| `items[].orderId` (Required when parent is present) | `number` |   |
| `items[].refundNumber` | `number` |   |
| `items[].status` (Required when parent is present) | `string` | Allowed values: `"pending"`, `"succeeded"`, `"failed"` |
| `items[].note` (Required when parent is present) | `string` |   |
| `items[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].registrationDate` (Required when parent is present) | `string (date-time)` |   |
| `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` |   |

#### 400

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

invalidFormat

Same fields as [Get revenue data of a member (400)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-id-revenue).

**Example response**

`application/json`

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

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{id}/payments' \
  --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="get-api-v1-members-id-notes"></a>
## Get all notes of a member

`GET /api/v1/members/{id}/notes`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `string` |   |
| `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"` |

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `items` (Required) | `array of NoteResponse` |   |
| `items[].id` (Required when parent is present) | `number` |   |
| `items[].note` (Required when parent is present) | `string` |   |
| `items[].memberId` (Required when parent is present) | `string` |   |
| `items[].adminUserId` (Required when parent is present) | `number` |   |
| `items[].adminUserName` (Required when parent is present) | `string` |   |
| `items[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `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` |   |

#### 400

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

invalidFormat

Same fields as [Get revenue data of a member (400)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-id-revenue).

**Example response**

`application/json`

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

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{id}/notes' \
  --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="get-api-v1-members-id-communication-activities"></a>
## Get all communication activities of a member

`GET /api/v1/members/{id}/communication-activities`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `string` |   |
| `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"` |

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `items` (Required) | `array of MemberCommunicationActivitiesResponseDto` |   |
| `items[].communicationChannel` (Required when parent is present) | `COMMUNICATION_CHANNEL` | Allowed values: `"sms"`, `"email"` |
| `items[].status` (Required when parent is present) | `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[].bounceClassification` | `string` | Allowed values: `"Invalid Address"`, `"Technical"`, `"Content"`, `"Reputation"`, `"Frequency or Volume Too High"`, `"Mailbox Unavailable"`, `"Unclassified"` |
| `items[].deliveredAt` (Required when parent is present) | `string (date-time)` | Can be null |
| `items[].firstOpenedAt` (Required when parent is present) | `string (date-time)` | Can be null |
| `items[].memberId` (Required when parent is present) | `string` |   |
| `items[].lastUpdatedAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].subject` (Required when parent is present) | `string` |   |
| `items[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].communicationId` (Required when parent is present) | `number` |   |
| `items[].id` (Required when parent is present) | `number` |   |
| `items[].showCommunicationDetails` (Required when parent is present) | `boolean` |   |
| `items[].messageId` | `string` |   |
| `items[].recipient` | `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` |   |

#### 400

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

invalidFormat

Same fields as [Get revenue data of a member (400)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-id-revenue).

**Example response**

`application/json`

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

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 404

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

notFound, memberNotFound

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"notFound"`, `"memberNotFound"` |
| `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 [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{id}/communication-activities' \
  --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="get-api-v1-members-id-consents"></a>
## Get all consents of a member

`GET /api/v1/members/{id}/consents`

**Authentication:** Bearer token (JWT)

### Parameters

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

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `[].id` (Required when parent is present) | `number` |   |
| `[].updatedAt` (Required when parent is present) | `string (date-time)` |   |
| `[].title` (Required when parent is present) | `string` |   |
| `[].description` (Required when parent is present) | `string` |   |
| `[].image` (Required when parent is present) | `string` |   |
| `[].showOnCheckoutPage` (Required when parent is present) | `boolean` |   |
| `[].showOnMyPage` (Required when parent is present) | `boolean` |   |
| `[].status` (Required when parent is present) | `object` |   |
| `[].sortOrder` (Required when parent is present) | `number` |   |
| `[].frequency` (Required when parent is present) | `string` |   |
| `[].newsletterProviderConfigId` (Required when parent is present) | `number` | Can be null |
| `[].consentStatus` (Required when parent is present) | `string` |   |
| `[].purpose` (Required when parent is present) | `string` | Allowed values: `"marketing_and_newsletter"`, `"consent"` |
| `[].visibility` (Required when parent is present) | `string` | Allowed values: `"subscriber"`, `"nonSubscriber"`, `"all"` |

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 404

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

memberNotFound

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"memberNotFound"` |
| `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": "memberNotFound",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

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

### Example response

200 · `application/json`

```json
[
  {
    "id": 0,
    "updatedAt": "2019-08-24T14:15:22Z",
    "title": "string",
    "description": "string",
    "image": "string",
    "showOnCheckoutPage": true,
    "showOnMyPage": true,
    "status": {},
    "sortOrder": 0,
    "frequency": "string",
    "newsletterProviderConfigId": 0,
    "consentStatus": "string",
    "purpose": "marketing_and_newsletter",
    "visibility": "subscriber"
  }
]
```

<a id="get-api-v1-members-id-consents-history-consentid"></a>
## Get a specific consent history of a member

`GET /api/v1/members/{id}/consents/history/{consentId}`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `id` (Required) | path | `string` |   |
| `consentId` (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"` |

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `items` (Required) | `array of ActivityLogResponse` |   |
| `items[].action` (Required when parent is present) | `ActivityLogAction` | Allowed values: `"initial_purchase"`, `"subscription_renewed"`, `"auto_renewal_turned_off"`, `"auto_renewal_turned_on"`, `"subscription_expired"`, `"payment_failed"`, `"subscription_activated"`, `"subscription_deactivated"`, `"subscription_inactive"`, `"subscription_reactivated"`, `"subscription_stopped"`, `"subscription_canceled_before_activation"`, `"activation_date_updated"`, `"next_renewal_updated"`, `"recurring_price_updated"`, `"change_initiated"`, `"change_completed"`, `"change_cancelled"`, `"seat_invitation_sent"`, `"seat_invitation_removed"`, `"seat_invitation_accepted"`, `"seat_member_added"`, `"group_owner_access_enabled"`, `"group_owner_access_disabled"`, `"seat_gift_receiver_added"`, `"seat_gift_receiver_removed"`, `"seat_gift_receiver_accepted"`, `"seat_gift_receiver_invitation_sent"`, `"invoice_sent"`, `"payment_method_updated"`, `"payment_method_removed"`, `"payment_provider_updated"`, `"invoice_address_updated"`, `"delivery_address_updated"`, `"credit_note_created"`, `"refund_registered"`, `"payment_registered"`, `"vipps_recurring_charge_initiated"`, `"ledger_matched"`, `"ledger_unmatched"`, `"ledger_transaction_ignored"`, `"update_member_profile"`, `"update_consent"`, `"login"`, `"signup"`, `"gdpr_deleted"` |
| `items[].feed` (Required when parent is present) | `object` |   |
| `items[].createdAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].memberId` (Required when parent is present) | `string` |   |
| `items[].memberNumber` (Required when parent is present) | `number` |   |
| `items[].id` (Required when parent is present) | `number` |   |
| `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` |   |

#### 400

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

badRequest, invalidFormat

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"badRequest"`, `"invalidFormat"` |
| `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": "badRequest",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

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

### Example response

200 · `application/json`

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

<a id="patch-api-v1-members-id-consents-consentid"></a>
## Update consent of a member

`PATCH /api/v1/members/{id}/consents/{consentId}`

**Authentication:** Bearer token (JWT)

### Parameters

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

### Request body

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

| Name | Type | Description |
| --- | --- | --- |
| `channel` (Required) | `string` | Allowed values: `"mypage"`, `"onboarding"`, `"newsletter"`, `"admin"`, `"mailchimp"`, `"make"`, `"m2m"`, `"mailmojo"`, `"import"` |
| `reference` | `string` | Can be null |
| `note` (Required) | `string` | `maxLength`: `1000` |

**Example request body**

`application/json`

```json
{
  "channel": "mypage",
  "reference": "string",
  "note": "string"
}
```

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `id` (Required) | `number` |   |
| `updatedAt` (Required) | `string (date-time)` |   |
| `title` (Required) | `string` |   |
| `description` (Required) | `string` |   |
| `image` (Required) | `string` |   |
| `showOnCheckoutPage` (Required) | `boolean` |   |
| `showOnMyPage` (Required) | `boolean` |   |
| `status` (Required) | `object` |   |
| `sortOrder` (Required) | `number` |   |
| `frequency` (Required) | `string` |   |
| `newsletterProviderConfigId` (Required) | `number` | Can be null |
| `consentStatus` (Required) | `string` |   |
| `purpose` (Required) | `string` | Allowed values: `"marketing_and_newsletter"`, `"consent"` |
| `visibility` (Required) | `string` | Allowed values: `"subscriber"`, `"nonSubscriber"`, `"all"` |

#### 400

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

badRequest, invalidFormat, invalidConsent, mailchimpBadRequest

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"badRequest"`, `"invalidFormat"`, `"invalidConsent"`, `"mailchimpBadRequest"` |
| `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": "badRequest",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 404

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

notFound, memberNotFound

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

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

#### 502

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

newsletterProviderError

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"newsletterProviderError"` |
| `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": "newsletterProviderError",
  "message": "string",
  "errors": [
    {}
  ]
}
```

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{id}/consents/{consentId}' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "channel": "mypage",
  "reference": "string",
  "note": "string"
}'
```

### Example response

200 · `application/json`

```json
{
  "id": 0,
  "updatedAt": "2019-08-24T14:15:22Z",
  "title": "string",
  "description": "string",
  "image": "string",
  "showOnCheckoutPage": true,
  "showOnMyPage": true,
  "status": {},
  "sortOrder": 0,
  "frequency": "string",
  "newsletterProviderConfigId": 0,
  "consentStatus": "string",
  "purpose": "marketing_and_newsletter",
  "visibility": "subscriber"
}
```

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

`GET /api/v1/members/{id}/settings`

**Authentication:** Bearer token (JWT)

### Parameters

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

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `id` (Required) | `string` |   |
| `userType` (Required) | `string` |   |
| `isTestUser` (Required) | `boolean` |   |
| `fixedOTP` (Required) | `string` |   |

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 404

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

notFound

Same fields as [Get a member by id (404)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-id).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

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

### Example response

200 · `application/json`

```json
{
  "id": "string",
  "userType": "string",
  "isTestUser": true,
  "fixedOTP": "<fixedOTP>"
}
```

<a id="patch-api-v1-members-id-settings"></a>
## Update settings of a member

`PATCH /api/v1/members/{id}/settings`

**Authentication:** Bearer token (JWT)

### Parameters

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

### Request body

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

| Name | Type | Description |
| --- | --- | --- |
| `isTestUser` | `boolean` |   |
| `fixedOTP` | `string` |   |
| `removeFromHardBounceList` | `boolean` |   |
| `removeFromSpamReportList` | `boolean` |   |

**Example request body**

`application/json`

```json
{
  "isTestUser": true,
  "fixedOTP": "<fixedOTP>",
  "removeFromHardBounceList": true,
  "removeFromSpamReportList": true
}
```

### Responses

#### 200

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

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

#### 400

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

adminUsersCantBeTestUsers, notAllowedToUpdateOwnTestUserSettings, invalidOtp, memberHasNoLoginAccount, invalidFormat

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"adminUsersCantBeTestUsers"`, `"notAllowedToUpdateOwnTestUserSettings"`, `"invalidOtp"`, `"memberHasNoLoginAccount"`, `"invalidFormat"` |
| `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": "adminUsersCantBeTestUsers",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 404

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

notFound

Same fields as [Get a member by id (404)](https://www.subrite.no/developers/member?md=true#get-api-v1-members-id).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl 'https://api.subrite.no/api/v1/members/{id}/settings' \
  --request PATCH \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "isTestUser": true,
  "fixedOTP": "<fixedOTP>",
  "removeFromHardBounceList": true,
  "removeFromSpamReportList": true
}'
```

### Example response

200 · `application/json`

```json
{
  "id": "string",
  "userType": "string",
  "isTestUser": true,
  "fixedOTP": "<fixedOTP>"
}
```

<a id="post-api-v1-members-subscriptions-list"></a>
## Get all subscriptions of the tenant with pagination

`POST /api/v1/members/subscriptions/list`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `page` | query | `number` | Default: `1` · `minimum`: `1` |
| `take` | query | `number` | Default: `10` · `minimum`: `1`, `maximum`: `50` |
| `orderDirection` | query | `string` | Allowed values: `"asc"`, `"desc"` · Default: `"desc"` |
| `orderBy` | query | `string` | Allowed values: `"id"`, `"createdAt"`, `"updatedAt"`, `"status"`, `"nextRenewal"`, `"recurringPrice"` |

### Request body

Content type: `application/json` · Optional · `MemberSubscriptionFilterDto`

| Name | Type | Description |
| --- | --- | --- |
| `filters` (Required) | `array of MemberSubscriptionFilter` |   |
| `filters[].field` (Required when parent is present) | `MEMBER_SUBSCRIPTION_FILTER_FIELD` | Allowed values: `"subscriptionStatus"`, `"autoRenew"`, `"nextRenewal"`, `"startedAt"`, `"endedAt"`, `"paymentProvider"`, `"subscriptionPlanId"`, `"packageId"`, `"productId"`, `"payerName"`, `"payerEmail"`, `"hasCustomPrice"` |
| `filters[].operator` (Required when parent is present) | `MEMBER_SUBSCRIPTION_FILTER_OPERATOR` | Allowed values: `"eq"`, `"neq"`, `"gt"`, `"gte"`, `"lt"`, `"lte"`, `"contains"` |
| `filters[].value` (Required when parent is present) | `object` |   |

### Responses

#### 200

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

| Name | Type | Description |
| --- | --- | --- |
| `items` (Required) | `array of MemberSubscriptionListData` |   |
| `items[].id` (Required when parent is present) | `number` |   |
| `items[].payer` (Required when parent is present) | `string` |   |
| `items[].memberNumber` (Required when parent is present) | `number` |   |
| `items[].subscriptionPlan` (Required when parent is present) | `string` |   |
| `items[].lastPaidAmount` (Required when parent is present) | `number` |   |
| `items[].recurringPrice` (Required when parent is present) | `number` |   |
| `items[].autoRenew` (Required when parent is present) | `boolean` |   |
| `items[].hasCustomPrice` (Required when parent is present) | `boolean` |   |
| `items[].activeSubscriptionDays` (Required when parent is present) | `number` |   |
| `items[].nextRenewal` (Required when parent is present) | `string (date-time)` | Can be null |
| `items[].paymentProvider` (Required when parent is present) | `string` | Can be null |
| `items[].status` (Required when parent is present) | `string` |   |
| `items[].scheduledActivationDate` (Required when parent is present) | `string (date-time)` | Can be null |
| `items[].startedAt` (Required when parent is present) | `string (date-time)` |   |
| `items[].endedAt` (Required when parent is present) | `string (date-time)` | Can be null |
| `items[].endReason` (Required when parent is present) | `SUBSCRIPTION_END_REASON` | Allowed values: `"payment_failed"`, `"expired"`, `"stopped"`, `"deactivated"`, `"cancelled_before_activation"`, `"cancelled"` · Can be null |
| `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` |   |

#### 201

#### 400

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

subscriptionFilterFieldUnsupported, subscriptionFilterOperatorUnsupported, subscriptionFilterValueInvalid, invalidSubscriptionStatus, shouldNotBeEmpty, invalidFormat

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` | Allowed values: `"subscriptionFilterFieldUnsupported"`, `"subscriptionFilterOperatorUnsupported"`, `"subscriptionFilterValueInvalid"`, `"invalidSubscriptionStatus"`, `"shouldNotBeEmpty"`, `"invalidFormat"` |
| `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": "subscriptionFilterFieldUnsupported",
  "message": "string",
  "errors": [
    {}
  ]
}
```

#### 401

unauthorized

#### 403

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

forbiddenResource

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

**Example response**

`application/json`

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

#### 500

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

internalServerError

Same fields as [Create a new member (403)](https://www.subrite.no/developers/member?md=true#post-api-v1-members).

### Example request

```bash
curl https://api.subrite.no/api/v1/members/subscriptions/list \
  --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "filters": [
    {
      "value": {}
    }
  ]
}'
```

### Example response

200 · `application/json`

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