# List links

URL: https://docs.hanzo.ai/docs/openapi/affiliate/get-affiliate-me-links

> Answers the caller's share links, each with its URL and its funnel: clicks tracked, signups — orgs attributed with that code — and conversions, meaning how many of those signups have actually produced commission.

`GET /v1/affiliate/me/links`

> [Affiliate →](https://docs.hanzo.ai/docs/openapi/affiliate) · [All API references →](https://docs.hanzo.ai/docs/openapi) · [Get started →](https://docs.hanzo.ai/docs/guides)

|               |                                              |
| ------------- | -------------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/affiliate/me/links` |
| **Method**    | `GET`                                        |
| **Operation** | `get_affiliate_me_links`                     |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`       |

Answers the caller's share links, each with its URL and its funnel:
clicks tracked, signups — orgs attributed with that code — and conversions,
meaning how many of those signups have actually produced commission.

Signups and conversions are DERIVED from the commission ledger and never
stored, so they cannot drift from the money. Clicks are the one stored counter
and the one that is pure vanity.

Any pending public click pings are folded into the store before the read, in
one batch — which is how the counters stay current without a database write
per click. Scoped to the validated caller's own affiliate; a non-affiliate
gets `isAffiliate:false` and the link cap.

## Request

`GET /v1/affiliate/me/links` takes no parameters and no body — the credential is the whole request.

## Response

| Status    | Body                     | Meaning |
| --------- | ------------------------ | ------- |
| `200`     | affiliate.affiliateLinks | ok      |
| `default` | problem-details          | refused |

`200` body — 11 fields.

| Field                 | In   | Type                  | Always | Description                                                                                                                                        |
| --------------------- | ---- | --------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `isAffiliate`         | body | boolean               | —      | IsAffiliate says whether the caller org has an affiliate record.                                                                                   |
| `links`               | body | affiliate.codeView\[] | —      | Links is the caller's share links, each with its URL and funnel.                                                                                   |
| `links[].clicks`      | body | integer (int64)       | —      | Clicks is how many pings this code has taken.                                                                                                      |
| `links[].code`        | body | string                | —      | Code is the link's slug — 3–32 chars of a–z, 0–9 and hyphen — unique across the WHOLE directory, so any affiliate's code resolves an attribution.  |
| `links[].conversions` | body | integer (int64)       | —      | Conversions is how many of those signups have actually produced positive commission for the caller.                                                |
| `links[].createdAt`   | body | integer (int64)       | —      | CreatedAt is when the link was minted, Unix seconds UTC.                                                                                           |
| `links[].label`       | body | string                | —      | Label is the caller's own note for the link ("twitter", "newsletter").                                                                             |
| `links[].signups`     | body | integer (int64)       | —      | Signups is how many orgs were attributed with this code — DERIVED by counting attribution edges, never stored, so it cannot drift from the ledger. |
| `links[].url`         | body | string                | —      | URL is the full shareable link, the brand host plus ?aff=\<code>.                                                                                  |
| `maxLinks`            | body | integer (int64)       | —      | MaxLinks is how many share links one affiliate may hold.                                                                                           |
| `status`              | body | string                | —      | Status is the caller's affiliate status: "applied", "approved" or "suspended"; absent for a non-affiliate.                                         |

Failure carries the platform error shape — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo affiliate me links get
```

**SDK**

**.ts**

```ts
import { Configuration, AffiliateApi } from 'hanzoai';

const api = new AffiliateApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getAffiliateMeLinks();
```

**.py**

```python
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import AffiliateApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = AffiliateApi(client).get_affiliate_me_links()
```

**.go**

```go
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.AffiliateAPI.GetAffiliateMeLinks(context.Background()).Execute()
if err != nil {
	return err
}
```

**.rs**

```rust
use hanzo_client::apis::{configuration::Configuration, affiliate_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = affiliate_api::get_affiliate_me_links(&cfg, Default::default()).await?;
```

**.java**

```java
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.AffiliateApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new AffiliateApi(client).getAffiliateMeLinks();
```

**HTTP**

```bash
curl https://api.hanzo.ai/v1/affiliate/me/links \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

MCP reaches **affiliate** through the `affiliate` tool, which names its 10 operations with its own verbs — this one among them, under a name only MCP declares. `describe` explains any of them:

```bash
curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_affiliates"
         }
       }
     }'
```

---

[Affiliate API](https://docs.hanzo.ai/docs/openapi/affiliate) · [All Hanzo APIs](https://docs.hanzo.ai/docs/openapi) · [Interactive reference](https://docs.hanzo.ai/docs/openapi/reference)
