---
title: "One link's funnel"
method: GET
path: "/v1/projects/{project}/links/{smartLink}/funnel"
tags: ["Smart Links"]
---

# One link's funnel

`GET /v1/projects/{project}/links/{smartLink}/funnel`

## Request

- Base URL: `https://api.subscriby.net`
- URL: `https://api.subscriby.net/v1/projects/{project}/links/{smartLink}/funnel`
- Auth: HTTP bearer

The same row for one link, under `data`.

## Path parameters

- `project` string, uuid, required
- `smartLink` string, uuid, required

## Response `200`

The link's own funnel row.

- object
  - `data` SmartLinkFunnelResource, required: One row of the Smart Links funnel: the link's lifetime clicks, the members it brought, those who started a purchase, those who paid, and everything those members ever paid, per currency and restated in US dollars. The Direct row has no link and counts the members no link brought, so the rows add up to the project's totals.
    - `link_id` string, nullable, required: The link, or null on the Direct row.
    - `name` string, required: The link's name, or `Direct`.
    - `slug` string, nullable, required: The link's slug, or null on the Direct row.
    - `archived` boolean, required: Whether the link has been archived; false on the Direct row.
    - `clicks` integer, required: Lifetime clicks on the web address; 0 on the Direct row, which has no address.
    - `leads` integer, required: Members credited to the link: everyone who signed in through it, whether or not they bought.
    - `checkouts` integer, required: Those members who started at least one purchase, in any state.
    - `paid` integer, required: Those members who made at least one successful payment.
    - `conversion_rate` number, required: Paid members per hundred clicks, as a decimal; 0 when there were no clicks.
    - `revenue` object, required: Everything those members ever paid, lifetime.
      - `usd` string, required: The total restated in US dollars at the current rates, a decimal string with two places.
      - `by_currency` object[], required: The same total per currency, as it was paid.
        - `currency_id` string, required: The currency.
        - `currency` string, nullable, required: Its ISO 4217 code, when known.
        - `amount` string, required: The amount in that currency, a decimal string with two places.

## Other responses

- `401`: `AUTHENTICATION_REQUIRED`: the request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an `sbt_test_` token on production).
- `403`: `TOKEN_MISSING_ABILITY`: the token is valid but does not carry the ability this endpoint requires; `error.context.required_ability` names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers `FORBIDDEN`, `TEAM_TIER_REQUIRED` or `CONNECTOR_TIER_REQUIRED` with the same status, and says so in its own description.
- `404`: `RESOURCE_NOT_FOUND`: an id in the path names nothing the token can see. `TENANT_MISMATCH`: the project sits outside the token's `scope:project:` allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
- `429`: `RATE_LIMITED`: the token has spent its 300 requests a minute or 10,000 an hour; `Retry-After` says when the next one is accepted.

---

[API](https://skmtc.dev/memberpass/apis/subscriby-rest-api.md) · [All operations](https://skmtc.dev/memberpass/apis/subscriby-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/memberpass/apis/subscriby-rest-api/revisions/59c4df91d764?raw)
