# Retrieve Webhook

## Introduction <a href="#introduction" id="introduction"></a>

We will notify you on each incoming payment to a [Proxy Wallet](https://docs.curra.io/curra-documentation/features/create-proxy-wallet) and when of assets transferred to your Omnibus accounts (Forwarding webhooks).

{% hint style="warning" %}
We will notify you up to 10 times until your server respond http <mark style="color:green;">**success**</mark> status (200-299)

We use exponential backoff with a 1-minute delay as a seed value, so it will retry at most 10 times spaced after 1 minute, 2 minutes, 4 minutes, 8 minutes, etc.
{% endhint %}

{% hint style="success" %}
In order to maintain non-custodial nature of Curra - we strongly recommend to double-check incoming webhooks via your own RPC.
{% endhint %}

## Setup <a href="#setup" id="setup"></a>

You can set your server URL on the [notifications page](https://app.curra.io/notifications) to receive webhooks:

<figure><img src="https://2269132824-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FA5QccW6BVD5fheygh32z%2Fuploads%2F5iitBgv78x5weC3MBiww%2Fimage.png?alt=media&#x26;token=2cfe5b1d-a169-4420-8263-f4eeb02360ea" alt=""><figcaption></figcaption></figure>

## Webhook payload <a href="#webhook-payload" id="webhook-payload"></a>

{% hint style="info" %}
In order to authorize Curra notifications, like [incoming payments notifications](https://docs.curra.io/curra-documentation/features/retrieve-webhook), you should compare webhook request's `X-API-KEY` header with your [API key](https://docs.curra.io/curra-documentation/features/broken-reference).
{% endhint %}

**Method**: POST

**Headers**:

* content-type: `application/json`
* x-api-key: `your_api_key`

<mark style="color:blue;">`GET`</mark> `https://yourwebsite.com/curra/incoming-payment-hook`

### **Body**:

<table><thead><tr><th width="219.33333333333331">Key</th><th width="184">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td><em>string*</em></td><td>unique identifier</td></tr><tr><td><code>toAddress</code></td><td>value: <em>string*</em><br>uniqueId: <em>string*</em><br>meta: <em>string</em><br></td><td>value – receive address<br>uniqueId - uniqueId provided on address creation, generated if not provided<br>meta – meta provided on address creation</td></tr><tr><td><code>fromAddress</code></td><td>string*</td><td>sender address</td></tr><tr><td><code>valueUnits</code></td><td>string*</td><td>payment amount in units</td></tr><tr><td><code>value</code></td><td>string*</td><td>payment amount in decimal format</td></tr><tr><td><code>blockchain</code></td><td>string*</td><td>available values at "API value" column <a href="https://docs.curra.io/curraprotocol">here</a></td></tr><tr><td><code>block</code></td><td>number*</td><td>block number in which payment was mined</td></tr><tr><td><code>txHash</code></td><td>string*</td><td>trasaction hash</td></tr><tr><td><code>confirmations</code></td><td>number*</td><td>blockchain confirmations count</td></tr><tr><td><code>assetId</code></td><td>string*</td><td>asset id of a payment</td></tr><tr><td><code>status</code></td><td>string*<br>"pending" or "success"</td><td>pending – payment is not confirmed yet<br>success - payment confirmed on the address</td></tr><tr><td><code>subStatus</code></td><td>string*</td><td>blockchain-specific status, can be used in informational purposes</td></tr><tr><td><code>statusDescription</code></td><td>string*</td><td>human-readable description of status field</td></tr></tbody></table>

### Examples:

{% tabs %}
{% tab title="Pending payment" %}
You will receive notification on each `"confirmations"` field update

{% code lineNumbers="true" %}

```json
{
    "id": 99,
    "toAddress": {
        "value": "0xf51eb0786cbdb8eb6e8175f0f32ecf90b04ceb84",
        "uniqueId": "unique id you specified on address generation",
        "meta": "meta you specified when address was created"
    },
    "value": "1.0",
    "valueUnits": "1000000000000000000",
    "blockchain": "ETHEREUM",
    "fromAddresses": ["0x67b1d87101671b127f5f8714789c7192f7ad340e"],
    "block": 171,
    "txHash": "0x0b15d671d9fe9cfe110c2d3a03867cc0525f6aeee45fe21ff66d07e0fd38ef46",
    "confirmations": 10,
    "assetId": "asset-id-123-123",
    "status": "pending",
    "subStatus": "pending",
    "statusDescription": "Waiting for confirmations"
}
```

{% endcode %}
{% endtab %}

{% tab title="Successful payment" %}
Payment considered `"successful"` after 21 confirmations.

{% code lineNumbers="true" %}

```json
{
    "id": 99,
    "toAddress": {
        "value": "0xf51eb0786cbdb8eb6e8175f0f32ecf90b04ceb84",
        "uniqueId": "unique id you specified on address generation",
        "meta": "meta you specified when address was created"
    },
    "value": "1.0",
    "valueUnits": "1000000000000000000",
    "blockchain": "ETHEREUM",
    "fromAddresses": ["0x67b1d87101671b127f5f8714789c7192f7ad340e"],
    "block": 171,
    "txHash": "0x0b15d671d9fe9cfe110c2d3a03867cc0525f6aeee45fe21ff66d07e0fd38ef46",
    "confirmations": 21,
    "assetId": "asset-id-123-123",
    "status": "success",
    "subStatus": "deposited",
    "statusDescription": "Deposited"
}
```

{% endcode %}
{% endtab %}

{% tab title="Forwarding" %}

```json
{
    "id": 99,
    "toAddress": {
        "value": "0xf51eb0786cbdb8eb6e8175f0f32ecf90b04ceb84",
        "uniqueId": "unique id you specified on address generation or default one",
        "meta": "meta you specified when address was created"
    },
    "value": "1.0",
    "valueUnits": "1000000000000000000",
    "blockchain": "ETHEREUM",
    "fromAddress": "0x67b1d87101671b127f5f8714789c7192f7ad340e",
    "block": 171,
    "txHash": "0x0b15d671d9fe9cfe110c2d3a03867cc0525f6aeee45fe21ff66d07e0fd38ef46",
    "confirmations": 21,
    "assetId": "asset-id-123-123",
    "status": "success",
    "subStatus": "forwarded",
    "statusDescription": "Waiting for confirmations"
}
```

{% endtab %}
{% endtabs %}
