> For the complete documentation index, see [llms.txt](https://developer.paywall.one/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.paywall.one/payment-orchestration-integration-document/callback-examples/recurring-payment.md).

# Recurring Payment

<table><thead><tr><th>Key</th><th>Description</th></tr></thead><tbody><tr><td><pre><code>SubscriptionId
</code></pre></td><td>Recurring payment identifier</td></tr><tr><td><pre><code>SubscriptionType
</code></pre></td><td><p>Recurring payment type</p><p><br>See: <a href="/pages/d2AtkIXnzzRXGJGBClju">Review</a></p></td></tr><tr><td><pre><code>SubscriptionCode
</code></pre></td><td>Paywall tracking number of the recurring payment</td></tr><tr><td><pre><code>SubscriptionMerchantCode
</code></pre></td><td>Tracking number provided at the time of creation</td></tr><tr><td><pre><code>Amount
</code></pre></td><td>Recurring payment amount</td></tr><tr><td><pre><code>Success
</code></pre></td><td>True | False</td></tr><tr><td><pre><code>FailReason
</code></pre></td><td>Reason for failure when unsuccessful</td></tr><tr><td><pre><code>PaymentErrorCode
</code></pre></td><td>The error code of the payment transaction. Carries the error code returned by the payment provider for failed transactions. Returns <code>null</code> when <code>Success: true</code>.</td></tr><tr><td><pre><code>PaymentMessage
</code></pre></td><td>The description message of the payment transaction. Carries the message returned by the payment provider for failed transactions. Returns <code>null</code> when <code>Success: true</code>.</td></tr><tr><td><pre><code>PaymentId
</code></pre></td><td>Paywall payment identifier</td></tr><tr><td><pre><code>Attempt
</code></pre></td><td>Number of attempts</td></tr><tr><td><pre><code>AttemptFinished
</code></pre></td><td>Information on whether the attempt has ended</td></tr><tr><td><pre><code>Hash
</code></pre></td><td><p><strong>The Hash value used to verify that the notification was sent from Paywall.</strong><br>It is generated using the <strong><code>System Webhook Hash Key</code></strong> activated in the Paywall panel.</p><p></p><p>The key mentioned above may vary depending on the value of the <code>HashKeyType</code> parameter. A dynamic structure should be implemented.</p></td></tr><tr><td><pre><code>HashFormat
</code></pre></td><td>The format type used to generate the hash value<br><br>See: <a href="/pages/CwGK9IsyjWbnxDaBvQOq">Hash Formats</a></td></tr><tr><td><pre><code>HashKeyType
</code></pre></td><td>The type of key used in generating the hash value<br><br>See: <a href="/pages/rGeM863mExwJKspEaXUG">Key Types </a></td></tr></tbody></table>

```csharp
public class RecurringCallbackRequest
{
    public int SubscriptionId { get; set; }
    public int SubscriptionType { get; set; }
    public Guid SubscriptionCode { get; set; }
    public string SubscriptionMerchantCode { get; set; }
    public decimal Amount { get; set; }
    public bool Success { get; set; }
    public string FailReason { get; set; }
    public int? PaymentErrorCode { get; set; }
    public string PaymentMessage { get; set; }
    public int? PaymentId { get; set; }
    public int Attempt { get; set; }
    public bool AttemptFinished { get; set; }
    public string Hash { get; set; }
    public string HashFormat { get; set; }
    public short? HashKeyType { get; set; }
}
```
