> ## Documentation Index
> Fetch the complete documentation index at: https://linkskipper.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Providers

> GET /v1/providers — the supported shorteners, their hosts, tiers, per-resolve cost, and latency.

<Note>
  **`GET https://api.linkskipper.app/v1/providers`** · Any valid API key.
</Note>

Returns the full catalog of supported shorteners. Each entry tells you which hosts the
provider covers, its tier, the credits a successful resolve costs, and a rough latency
band. Read it to validate a URL or show a cost before you call [`/v1/resolve`](/docs/resolve).

## Request

### Headers

<ParamField header="Authorization" type="string" required>
  `Bearer sk_live_…`. See [Authentication](/docs/authentication).
</ParamField>

## Response

<ResponseField name="providers" type="object[]">
  The provider catalog.

  <Expandable title="provider object">
    <ResponseField name="provider" type="string">
      Provider id, e.g. `ouo`. Matches the `provider` field on resolve/job responses.
    </ResponseField>

    <ResponseField name="label" type="string">
      Human-readable name, e.g. `Ouo`.
    </ResponseField>

    <ResponseField name="hosts" type="string[]">
      The domains this provider handles. A URL on any of these hosts is resolvable.
    </ResponseField>

    <ResponseField name="tier" type="string">
      `"standard"` or `"premium"`. See [Tiers](#tiers).
    </ResponseField>

    <ResponseField name="resolve_cost" type="number">
      Credits charged for a **successful** resolve of this provider. `1` for standard, `2`
      for premium. Cached resolves always cost `0`.
    </ResponseField>

    <ResponseField name="latency" type="string">
      A rough human-readable latency band for the tier.
    </ResponseField>
  </Expandable>
</ResponseField>

```json 200 OK theme={null}
{
  "providers": [
    {
      "provider": "aylink",
      "label": "Aylink",
      "hosts": ["aylink.co", "cpmlink.pro", "ay.live", "cpmlink.co"],
      "tier": "standard",
      "resolve_cost": 1,
      "latency": "2-8s"
    },
    {
      "provider": "linktl",
      "label": "LinkTL",
      "hosts": ["lnk.news", "link.tl"],
      "tier": "standard",
      "resolve_cost": 1,
      "latency": "2-8s"
    },
    {
      "provider": "ouo",
      "label": "Ouo",
      "hosts": ["ouo.io", "ouo.press"],
      "tier": "standard",
      "resolve_cost": 1,
      "latency": "2-8s"
    },
    {
      "provider": "exe",
      "label": "Exe.io",
      "hosts": ["exe.io", "exeygo.com", "cuty.io", "cuttty.com"],
      "tier": "premium",
      "resolve_cost": 2,
      "latency": "15-25s, best-effort"
    }
  ]
}
```

## Supported providers

| Provider | Label  | Hosts                                               | Tier     | Cost | Latency             |
| -------- | ------ | --------------------------------------------------- | -------- | ---- | ------------------- |
| `aylink` | Aylink | `aylink.co`, `cpmlink.pro`, `ay.live`, `cpmlink.co` | standard | 1    | 2–8s                |
| `linktl` | LinkTL | `lnk.news`, `link.tl`                               | standard | 1    | 2–8s                |
| `ouo`    | Ouo    | `ouo.io`, `ouo.press`                               | standard | 1    | 2–8s                |
| `exe`    | Exe.io | `exe.io`, `exeygo.com`, `cuty.io`, `cuttty.com`     | premium  | 2    | 15–25s, best-effort |

<Info>
  This catalog is the source of truth and grows over time. Fetch it at runtime rather than
  hard-coding the host list, so new providers and hosts work without a code change.
</Info>

## Tiers

Every provider has a tier that reflects how expensive a link is to resolve.

<CardGroup cols={2}>
  <Card title="Standard" icon="circle-check">
    Resolved directly. Fast and inexpensive — **1 credit** per successful resolve, typically
    2–8 seconds.
  </Card>

  <Card title="Premium" icon="star">
    Harder targets (currently `exe.io` and friends) that need extra processing. **2 credits**
    per successful resolve, 15–25 seconds, best-effort.
  </Card>
</CardGroup>

A link on a host that isn't in this catalog returns `unsupported_link` (`422`) from
[`/v1/resolve`](/docs/resolve) — you are not charged for it.

## Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.linkskipper.app/v1/providers \
    -H "Authorization: Bearer sk_live_XXXXXXXXXXXXXXXXXXXXXXXX"
  ```

  ```ts JavaScript theme={null}
  const providers = await client.providers();

  for (const p of providers) {
    console.log(`${p.label} (${p.tier}) — ${p.hosts.join(", ")}`);
  }
  ```

  ```php PHP theme={null}
  <?php

  $providers = $client->providers();

  foreach ($providers as $p) {
      printf("%s (%s) — %s\n", $p->label, $p->tier->value, implode(", ", $p->hosts));
  }
  ```
</CodeGroup>

<Note>
  The JS/PHP SDK provider entry exposes `provider`, `label`, `hosts`, `tier`, and `latency`.
  Use the raw `resolve_cost` field from the HTTP response (or the tier) to compute the credit
  cost before resolving.
</Note>
