# API Reference

## Endpoints

* [**GET** `/sybil-resistance/gov-id/<network>`](#get-sybil-resistance-less-than-credential-type-greater-than-less-than-network-greater-than-user-less)
* [**GET** `/sybil-resistance/epassport/<network>`](#get-sybil-resistance-less-than-credential-type-greater-than-less-than-network-greater-than-user-less)
* [**GET** `/sybil-resistance/phone/<network>`](#get-sybil-resistance-less-than-credential-type-greater-than-less-than-network-greater-than-user-less)
* [**GET** `/sybil-resistance/biometrics/<network>`](#get-sybil-resistance-less-than-credential-type-greater-than-less-than-network-greater-than-user-less)
* [**GET** `/residence/country/us/<network>`](#get-residence-country-us-less-than-network-greater-than-user-less-than-user-address-greater-than)
* [**GET** `/snapshot-strategies/residence/country/us`](#get-snapshot-strategies-residence-country-us-network-less-than-network-greater-than-and-snapshot-les)
* [**GET** `/snapshot-strategies/sybil-resistance/gov-id`](#get-snapshot-strategies-sybil-resistance-gov-id-network-less-than-network-greater-than-and-snapshot)
* [**GET** `/snapshot-strategies/sybil-resistance/phone`](#get-snapshot-strategies-sybil-resistance-phone-network-less-than-network-greater-than-and-snapshot-l)
* [**GET** `/snapshot-strategies/sybil-resistance/biometrics`](#get-snapshot-strategies-sybil-resistance-biometrics-network-less-than-network-greater-than-and-snaps)

#### **GET** `/sybil-resistance/<credential-type>/<network>?user=<user-address>&action-id=<action-id>`

Get whether the user has registered for the given action-id.

When a user "registers", they are establishing that the given blockchain address is a unique person for the action ID. See the section Sybil resistance for more information about how action IDs can be used.

If `credential-type` is `gov-id`, this endpoint uses Holonym smart contracts to check whether the user has completed KYC with a unique government ID. If `credential-type` is `epassport`, this endpoint uses Holonym smart contracts to check whether the user has a unique NFC-enabled passport. If `credential-type` is `phone`, this endpoint uses Holonym smart contract to check whether the user has proven ownership of a unique phone number. If `credential-type` is `biometrics`, this endpoint uses Holonym smart contract to check whether the user has proven ownership of a unique (non-personally identifying) face.

See the following documentation [How to get user's proofs](https://holonym.gitbook.io/holonym-alpha/usage/how-to-stop-sybil-attacks-using-holonym#how-to-get-the-proof) for how to use action IDs.

* Parameters

  | name              | description                         | type   | in    | required |
  | ----------------- | ----------------------------------- | ------ | ----- | -------- |
  | `credential-type` | 'gov-id' or 'phone' or 'biometrics' | string | path  | true     |
  | `network`         | 'optimism' or 'base-sepolia'        | string | path  | true     |
  | `user`            | User's blockchain address           | string | query | true     |
  | `action-id`       | Action ID                           | string | query | true     |
* Example

  ```JavaScript
  const resp = await fetch('https://api.holonym.io/sybil-resistance/gov-id/optimism?user=0x0000000000000000000000000000000000000000&action-id=123456789');
  const { result: isUnique } = await resp.json();
  ```
* Responses
  * 200

    ```JSON
    {
        "result": true,
    }
    ```
  * 200

    Result if user has not submitted a valid proof.

    ```JSON
    {
        "result": false,
    }
    ```

#### **GET** `/residence/country/us/<network>?user=<user-address>`

Get whether the user resides in the US.

For the `/residence/country/<country-code>` endpoints, `<country-code>` will be a 2-letter country code following the [ISO 3166 standard](https://www.iso.org/iso-3166-country-codes.html). Holonym currently only supports queries for US residency.

* Parameters

  | name      | description                     | type   | in    | required |
  | --------- | ------------------------------- | ------ | ----- | -------- |
  | `network` | 'optimism' or 'optimism-goerli' | string | path  | true     |
  | `user`    | User's blockchain address       | string | query | true     |
* Example

  ```
  const resp = await fetch('https://api.holonym.io/residence/country/us/optimism?user=0x0000000000000000000000000000000000000000');
  const { result: isUSResident } = await resp.json();
  ```
* Responses
  * 200

    Result if user resides in the US.

    ```
    {
        "result": true,
    }
    ```
  * 200

    Result if user has not submitted a valid proof that they reside in the US.

    ```
    {
        "result": false,
    }
    ```

#### **GET** `/snapshot-strategies/residence/country/us?network=<network>&snapshot=<snapshot>&addresses=<addresses>`

Returns a list of scores indicating, for each address, whether the address has submitted a valid and unique proof of US residency.

Every score is either 1 or 0.

| score | description                           |
| ----- | ------------------------------------- |
| 1     | Address has proven US residency       |
| 0     | Address has *not* proven US residency |

**Use with Snapshot**

To use with the ["api"](https://github.com/snapshot-labs/snapshot-strategies/tree/master/src/strategies/api) Snapshot strategy, specify the strategy parameters using the following format.

```
{
  "api": "https://api.holonym.io",
  "symbol": "",
  "decimals": 0,
  "strategy": "snapshot-strategies/residence/country/us"
}
```

**Use without Snapshot**

* Parameters

  | name        | description                                    | type   | in    | required |
  | ----------- | ---------------------------------------------- | ------ | ----- | -------- |
  | `network`   | Chain ID                                       | string | query | true     |
  | `snapshot`  | Block height                                   | string | query | true     |
  | `addresses` | List of blockchain address separated by commas | string | query | true     |
* Example

  ```
  const resp = await fetch('https://api.holonym.io/snapshot-strategies/residence/country/us?network=420&snapshot=9001&addresses=0x0000000000000000000000000000000000000000,0x0000000000000000000000000000000000000001');
  const data = await resp.json();
  ```
* Responses
  * 200

    ```
    {
      "score" : [
          {
            "address" : "0x0000000000000000000000000000000000000000",
            "score" : 0
          },
          {
            "address" : "0x0000000000000000000000000000000000000001",
            "score" : 1
          }
      ]
    }
    ```

#### **GET** `/snapshot-strategies/sybil-resistance/gov-id?network=<network>&snapshot=<snapshot>&addresses=<addresses>&action-id=<action-id>`

Returns a list of scores indicating, for each address, whether the address has submitted a valid proof of uniqueness for the given action-id.

Every score is either 1 or 0.

| score | description                                       |
| ----- | ------------------------------------------------- |
| 1     | Address has proven uniqueness for action-id       |
| 0     | Address has *not* proven uniqueness for action-id |

**Use with Snapshot**

To use with the ["api"](https://github.com/snapshot-labs/snapshot-strategies/tree/master/src/strategies/api) Snapshot strategy, specify the strategy parameters using the following format. We highly recommend that projects use the default action-id `123456789` to avoid cases where users sell actions associated with action-ids that they do not care about.

```
{
  "api": "https://api.holonym.io",
  "symbol": "",
  "decimals": 0,
  "strategy": "snapshot-strategies/sybil-resistance/gov-id",
  "additionalParameters": "action-id=123456789"
}
```

**Use without Snapshot**

* Parameters

  | name        | description                                    | type   | in    | required |
  | ----------- | ---------------------------------------------- | ------ | ----- | -------- |
  | `network`   | Chain ID                                       | string | query | true     |
  | `snapshot`  | Block height                                   | string | query | true     |
  | `addresses` | List of blockchain address separated by commas | string | query | true     |
* Example

  ```
  const resp = await fetch('https://api.holonym.io/snapshot-strategies/sybil-resistance/gov-id?network=420&snapshot=9001&addresses=0x0000000000000000000000000000000000000000,0x0000000000000000000000000000000000000001&action-id=123');
  const data = await resp.json();
  ```
* Responses
  * 200

    ```
    {
      "score" : [
          {
            "address" : "0x0000000000000000000000000000000000000000",
            "score" : 0
          },
          {
            "address" : "0x0000000000000000000000000000000000000001",
            "score" : 1
          }
      ]
    }
    ```

#### **GET** `/snapshot-strategies/sybil-resistance/phone?network=<network>&snapshot=<snapshot>&addresses=<addresses>&action-id=<action-id>`

Returns a list of scores indicating, for each address, whether the address has submitted a valid proof of uniqueness (using phone number) for the given action-id.

Every score is either 1 or 0.

| score | description                                       |
| ----- | ------------------------------------------------- |
| 1     | Address has proven uniqueness for action-id       |
| 0     | Address has *not* proven uniqueness for action-id |

**Use with Snapshot**

To use with the ["api"](https://github.com/snapshot-labs/snapshot-strategies/tree/master/src/strategies/api) Snapshot strategy, specify the strategy parameters using the following format. We suggest that you use the default action-id `123456789`. If you are using a different action-id, replace `123456789` with your action-id.

```
{
  "api": "https://api.holonym.io",
  "symbol": "",
  "decimals": 0,
  "strategy": "snapshot-strategies/sybil-resistance/phone",
  "additionalParameters": "action-id=123456789"
}
```

**Use without Snapshot**

* Parameters

  | name        | description                                    | type   | in    | required |
  | ----------- | ---------------------------------------------- | ------ | ----- | -------- |
  | `network`   | Chain ID                                       | string | query | true     |
  | `snapshot`  | Block height                                   | string | query | true     |
  | `addresses` | List of blockchain address separated by commas | string | query | true     |
* Example

  ```JavaScript
  const resp = await fetch('https://api.holonym.io/snapshot-strategies/sybil-resistance/phone?network=420&snapshot=9001&addresses=0x0000000000000000000000000000000000000000,0x0000000000000000000000000000000000000001&action-id=123');
  const data = await resp.json();
  ```
* Responses
  * 200

    ```JSON
    {
      "score" : [
          {
            "address" : "0x0000000000000000000000000000000000000000",
            "score" : 0
          },
          {
            "address" : "0x0000000000000000000000000000000000000001",
            "score" : 1
          }
      ]
    }
    ```

#### **GET** `/snapshot-strategies/sybil-resistance/biometrics?network=<network>&snapshot=<snapshot>&addresses=<addresses>&action-id=<action-id>`

Returns a list of scores indicating, for each address, whether the address has submitted a valid proof of uniqueness (using non-personally identifying face vectors) for the given action-id.

Every score is either 1 or 0.

| score | description                                       |
| ----- | ------------------------------------------------- |
| 1     | Address has proven uniqueness for action-id       |
| 0     | Address has *not* proven uniqueness for action-id |

**Use with Snapshot**

To use with the ["api"](https://github.com/snapshot-labs/snapshot-strategies/tree/master/src/strategies/api) Snapshot strategy, specify the strategy parameters using the following format. We suggest that you use the default action-id `123456789`. If you are using a different action-id, replace `123456789` with your action-id.

```
{
  "api": "https://api.holonym.io",
  "symbol": "",
  "decimals": 0,
  "strategy": "snapshot-strategies/sybil-resistance/biometrics",
  "additionalParameters": "action-id=123456789"
}
```

**Use without Snapshot**

* Parameters

  | name        | description                                    | type   | in    | required |
  | ----------- | ---------------------------------------------- | ------ | ----- | -------- |
  | `network`   | Chain ID                                       | string | query | true     |
  | `snapshot`  | Block height                                   | string | query | true     |
  | `addresses` | List of blockchain address separated by commas | string | query | true     |
* Example

  ```JavaScript
  const resp = await fetch('https://api.holonym.io/snapshot-strategies/sybil-resistance/biometrics?network=420&snapshot=9001&addresses=0x0000000000000000000000000000000000000000,0x0000000000000000000000000000000000000001&action-id=123');
  const data = await resp.json();
  ```
* Responses
  * 200

    ```JSON
    {
      "score" : [
          {
            "address" : "0x0000000000000000000000000000000000000000",
            "score" : 0
          },
          {
            "address" : "0x0000000000000000000000000000000000000001",
            "score" : 1
          }
      ]
    }
    ```


---

# 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://zeronym-docs.holonym.id/for-developers/api-reference.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.
