> For the complete documentation index, see [llms.txt](https://docs.subsprotocol.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.subsprotocol.com/developer-docs/subscription-contracts.md).

# Subscription Contracts

***Subscription Contracts*** is the main contract that allow providers users to interact with the providers created app.

## **View Methods**

### isMySubscriber

```solidity
function isMySubscriber(
      uint256 _appId,
      address _user
)
```

Returns  user subscription information for check if a specific address is a user of specific app.&#x20;

Return values :

<table><thead><tr><th width="266">Types</th><th width="228.33333333333331">Description</th><th>Description</th></tr></thead><tbody><tr><td>isSubscriber</td><td><pre class="language-solidity"><code class="lang-solidity">bool
</code></pre></td><td>True if user is a current subscriber of the app, false if not.</td></tr><tr><td>isTrialSubscriber</td><td><pre class="language-solidity"><code class="lang-solidity">bool
</code></pre></td><td>True if user is a trial subscriber of the app, false if not</td></tr><tr><td>paymentId</td><td><pre class="language-solidity"><code class="lang-solidity">bytes32
</code></pre></td><td>The id of the payment that is used in the subscription</td></tr><tr><td>subscriptionId</td><td><pre class="language-solidity"><code class="lang-solidity">bytes32
</code></pre></td><td>The subscription id</td></tr></tbody></table>

### paymentDue

```solidity
function paymentDue(bytes32 _subscriptionId)
```

Returns `subscription status`

Return values :

<table><thead><tr><th>Name</th><th>Types</th><th>Description</th></tr></thead><tbody><tr><td>isDue</td><td><pre class="language-solidity"><code class="lang-solidity">bool
</code></pre></td><td>True, if it is the time for user to pay, false if not.</td></tr><tr><td>isOver</td><td><pre class="language-solidity"><code class="lang-solidity">bool
</code></pre></td><td>True if the user has not paid and the subscription must be stopped.</td></tr></tbody></table>

## **Write Methods**

### createSubscription

```solidity
function createSubscription(
        uint256 _appId,
        bytes32 _paymentId,
        address _token,
        uint256 _userChoosenPeriod
)
```

Subscribe to an app

### cancelSubscription

```solidity
function cancelSubscription(
        bytes32 _subscriptionId,
        uint256 _appId
)
```

Stop subscription

### processSubscription

```solidity
function processSubscription(bytes32 _subscriptionId)
```

Restart subscription if stopped.

### renewSubscription

```solidity
function renewSubscription(bytes32 _subscriptionId)
```

Renewal of the subscription if it has expired.

### migrateToNewPayment

```solidity
function migrateToNewPayment(
        bytes32 _subscriptionId,
        bytes32 _newPayment,
        address _token
)
```

Migrate existing subscripiton to a new payment

### refundSubscription

```solidity
function refundSubscription(bytes32 _subscriptionId)
```

Pay subscription all at once

## **Events & ABI**

<pre class="language-solidity"><code class="lang-solidity">event NewSubscription(
    address subscriber,
    uint256 indexed appId,
    bytes32 subscriptionId
)

event TrialSubscription(
    address subscriber,
    uint256 indexed appId,
    bytes32 subscriptionId
);

event SubscriptionCancelled(
    address subscriber,
    uint256 indexed appId,
    bytes32 subscriptionId
);

<strong>event SubscriptionProcessed(
</strong>    address subscriber,
    uint indexed appId,
    bytes32 subscriptionId
);

event RefundSubscription(
    address subscriber,
    uint256 indexed appId,
    bytes32 subscriptionId
);

event RenewSubscription(
    address subscriber,
    uint256 indexed appId,
    bytes32 subscriptionId
);
</code></pre>

```json
[
    {
        "name": "NewSubscription",
        "type": "event",
        "anonymous": false,
        "inputs": [
            {
                "type": "address",
                "name": "subscriber",
                "indexed": false
            },
            {
                "type": "uint256",
                "name": "appId",
                "indexed": true
            },
            {
                "type": "bytes32",
                "name": "subscriptionId",
                "indexed": false
            }
        ]
    }
]
```
