# GET /api/twilio/sms-consent

Lists SMS consent records for the caller's scope, newest transition first, with cursor-based paging.

Filters (phone number, status) are optional and combined with AND. Paging is keyset / cursor-based,
not skip/take: pass `NextContinuationToken` from the previous response back as
`ContinuationToken` to fetch the next page. Sorting supports `StatusChangedAt ASC` /
`StatusChangedAt DESC` only and defaults to descending.

**Operation ID:** `GET_api_twilio_sms-consent`

## Authorization

Requires: Twilio.SmsConsent.View, merchant scope.

Required permissions:
- `Twilio.SmsConsent.View`

## Parameters

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| MaxResultCount | query | no | integer(int32) | Maximum rows per page (1 to PhoeniXGate.Twilio.Sms.GetSmsConsentListInput.MaxPageSize). Values at or below zero use the default page size. |
| ContinuationToken | query | no | string | Opaque cursor returned by a prior call. `null` for the first page. |
| IncludeDeleted | query | no | boolean | Part of the continuation-paging contract (Phoenix.Abp.Core.Application.Contracts.IContinuationPagedRequest). Not applied by  the consent list endpoint: consent records are never soft-deleted, so there is no soft-delete  filter to toggle. Kept to satisfy the interface; ignored here. |
| IncludeInactive | query | no | boolean | Part of the continuation-paging contract (Phoenix.Abp.Core.Application.Contracts.IContinuationPagedRequest). Not applied by  the consent list endpoint: `SmsConsent` has no active/inactive concept. Kept to satisfy the  interface; ignored here. |
| Sorting | query | no | string | Sort direction. Only `StatusChangedAt ASC` and `StatusChangedAt DESC` are supported —  the cursor encodes (StatusChangedAt, Id). Anything else falls back to `StatusChangedAt DESC`. |
| PhoneNumber | query | no | string | Optional exact-match E.164 phone number filter. |
| Status | query | no | PhoeniXGateTwilioSmsSmsConsentStatus | Optional status filter (opted in / opted out). |
| MerchantId | query | no | string(uuid) | Caller-requested merchant scope. Honoured only when the caller holds  `SmsConsent.ViewAllMerchants`; otherwise the app service substitutes the operating-context  merchant. |
| suppressNulls | query | no | boolean | If true, omit properties with null values. |

## Responses

### 200

OK

**Content type:** `text/plain`

Schema: `PhoenixAbpCoreApplicationContractsContinuationPagedResultDtoOfPhoeniXGateTwilioSmsSmsConsentDto`

**Content type:** `application/json`

Schema: `PhoenixAbpCoreApplicationContractsContinuationPagedResultDtoOfPhoeniXGateTwilioSmsSmsConsentDto`

**Content type:** `text/json`

Schema: `PhoenixAbpCoreApplicationContractsContinuationPagedResultDtoOfPhoeniXGateTwilioSmsSmsConsentDto`

### 403

Forbidden

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 401

Unauthorized

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 400

Bad Request

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 404

Not Found

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 501

Not Implemented

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 500

Internal Server Error

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### default

The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. See the error-code reference in this document's description for the values `error.code` can take.

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

## See also

- [All documentation](https://docs.winkpg.io/llms.txt): the machine-readable index of every public page on this site.
