# URI

{% embed url="<https://share.synthesia.io/1505836e-99cb-4964-bebd-84fddf956c78>" %}

#### A Uniform Resource Identifier

In Bitcoin, there are over 30 combinations sharing address formats. Some include **memos**, which are short messages to the receiver, others include payment **requests** of specified amounts.&#x20;

{% hint style="info" %}
The URI endpoint resolves a variety of address formats such as **<63@relysia.com>** or **1McLoHnGZnXBinS82dqPnRDV9VQJjJpBZF** and it automatically resolves and returns the underlying information.&#x20;
{% endhint %}

Since p2p paymails resolve differently than normal paymails, and invoices can be sometimes just a web link instead of an address. To make it easier for app developers, we created a URI function to catch them all, no matter the format. The function enables developers to scan QR codes without worrying to ever not having the right resolver at hand.&#x20;

Lets have a closer look at what addresses can look like:

{% code title="Address Format variations" %}

```html
//// address ////
19KXpbJMt1SjUNh3ATMgj8FkzvSX7C83gq

//// bip21 ////
bitcoin:19KXpbJMt1SjUNh3ATMgj8FkzvSX7C83gq?amount=10000

//// paymail ////
payto:90@relysia.com?purpose=cashback&amount=10000

//// paymail-noScheme ////
90@relysia.com

//// bip272 ////
bitcoin:?sv=&r=https%3A%2F%2Fstaging.centi.ch%2Fpayment%2Fapi%2Fpayment_request%2F2662e521-ff52-418a-b7e5-c98aefd7295a

//// DPP ////
pay:?r=https://api.relysia.com/v1/paymentRequest/8f9f4c27-3782-46e2-b76f-1ef956f52c61
```

{% endcode %}

As we can see above, a unified resolver reduces the uncertainty of interpreting QR codes and address inputs. Instead of enforcing a single format, the URI endpoint helps to enhance app user friendliness and compatibility with the greater ecosystem.&#x20;

{% hint style="info" %}
The response body of the URI can be used as input for the [/pay](https://docs.relysia.com/payments) endpoint (for invoices) or simply be used to decode the string of a QR code.&#x20;
{% endhint %}

```javascript
const resp = await relysia.utility.v1.uri({uri: '90@relysia.com'});
```

The response body schema looks as follows, independent of the input.&#x20;

```json
{
  "statusCode": 200,
  "data": {
    "status": "success",
    "msg": "Operation completed successfully",
    "data": {
      "uri": "90@relysia.com",
      "type": "paymail",
      "mainProtocol": "paymail",
      "outputs": [
        {
          "script": "76a9149196f6ef3234d17080ebf16460c502c21157125988ac",
          "satoshis": 10000
        }
      ],
      "inputs": [],
      "memo": "Send to 90@relysia.com",
      "isBSV": true,
      "peer": "https://api.relysia.com/v1/bsvalias/receive-transaction/90@relysia.com",
      "peerData": "i164psehd1a",
      "peerProtocol": "paymail"
    }
  }
}
```
