# 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](/payments/lookup.md) 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"
    }
  }
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.relysia.com/payments/uri.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
