# Sold as and channel

> Every transaction says whether it was one of Routegate's plans or your own, and which route served it.

Source: https://useroutegate.com/docs/concepts/sold-as-and-channel

Two fields on every transaction, in the API and in every `transaction.*` webhook, answer the two questions a support ticket starts with: what was sold, and what sent it.

```json
{
  "reference": "txn_01a0d8dfa6b87d10a3e54c2b9f86d1e4",
  "product_code": "vendor:mtn-500mb-weekly",
  "sold_as": "vendor_only",
  "vendor_only_plan": {
    "id": "01a0d8e2-3c41-7d58-9a06-2f4b7e1c8d93",
    "code": "vendor:mtn-500mb-weekly",
    "name": "MTN 500MB Weekly"
  },
  "channel": "vendor",
  "vendor_account_id": "01a0d8e1-77b2-7e0c-8f3a-5d9c2b6e4a10"
}
```

## `sold_as`

| Value         | Meaning                                                                                                |
| ------------- | ------------------------------------------------------------------------------------------------------ |
| `plan`        | One of Routegate's plans, by its code or [plan number](/docs/concepts/plan-numbers).                   |
| `vendor_only` | One of your [vendor-only plans](/docs/concepts/vendor-links#vendor-only-plans), by its `vendor:` code. |

`vendor_only_plan` is the plan as it was when sold, `{id, code, name}`, and null for one of Routegate's plans. Its `id` goes null if you delete the plan later; the code and name stay.

## `channel`

The route that served the latest attempt. The dashboard shows it as Route.

| Value    | Route   | What served it                                                                         |
| -------- | ------- | -------------------------------------------------------------------------------------- |
| `sim`    | Line    | One of your own lines.                                                                 |
| `stock`  | Reserve | A line in [Routegate Reserve](/docs/concepts/vendor-links#routegate-reserve).          |
| `vendor` | Vendor  | One of your [vendor links](/docs/concepts/vendor-links). `vendor_account_id` names it. |
| `test`   | Test    | The test-mode mock.                                                                    |

`channel` is null until the first attempt, so a `queued` transaction has none. A sale that failed over from a line to a vendor shows `vendor`: the field follows the latest attempt.

## Filtering

[List transactions](/docs/api/public/listPublicTransactions) filters by both: `?sold_as=vendor_only`, `?channel=vendor`. Any other value is `400 VALIDATION_FAILED`.

## Channels

[List channels](/docs/api/public/listChannels) shows what your sales go out through: with a live key, your own lines and vendor links, with a line's last read airtime and their success rate over your attempts in the last 24 hours; with a test key, the mock. It reads only; nothing is called to answer it.
