---
title: "choose_products"
description: "Generated reference for the management action choose_products: its description, access metadata, payload contract, and registration status."
slug: /reference/actions/choose-products
order: 49
visibility: public
redirects_from: []
---

# choose\_products

Generated automatically from the [published contract sources](/cloud/reference/about/#contract-sources).

A script calls this action over HTTPS at `POST https://turnzero.ai/api/v1/actions/choose_products`, with a bearer credential and the action's payload as the JSON body.

**Build metadata:** Registered in this build. Registration describes the default dispatcher in this build. It does not guarantee that a caller has the required credential or grant, that a tool is listed for that connection, or that the required service is configured.

## Contract description

Choose which of your account's products this connection's tools reach\. Name every product to have on: the call replaces the connection's choice, so a product you leave out is turned off and its tools leave the list\.

Only a person's sign\-in can call it, including an AI tool under that sign\-in, and the choice lasts until that sign\-in ends\. If the new tools don't show up: on claude\.ai, choose Refresh tools list in the connector's menu; on ChatGPT, press the connector's Refresh, then open a new chat; elsewhere, start a new session or restart your AI tool\.

## Access and action metadata

```json
{
  "name": "choose_products",
  "resource": "connection",
  "tier": "reversible",
  "admits": [
    "device_sign_in"
  ],
  "summary": "Choose which of the account's products this connection reaches: the call lists the products to have on and replaces the connection's choice, under the connection's own sign-in alone.",
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "openWorldHint": false,
    "idempotentHint": true
  }
}
```

## MCP catalog entry

```json
{
  "name": "choose_products",
  "title": "Choose this connection's products",
  "tier": "reversible",
  "summary": "Choose which of your account's products this connection's tools reach. Name every product to have on: the call replaces the connection's choice, so a product you leave out is turned off and its tools leave the list.\n\nOnly a person's sign-in can call it, including an AI tool under that sign-in, and the choice lasts until that sign-in ends. If the new tools don't show up: on claude.ai, choose Refresh tools list in the connector's menu; on ChatGPT, press the connector's Refresh, then open a new chat; elsewhere, start a new session or restart your AI tool.",
  "scenario": "API-L0-21",
  "owners": [
    "API-L0-21",
    "MAPI-19",
    "MCP-01",
    "MCP-08"
  ]
}
```

## request

| JSON pointer | Description and constraints |
|---|---|
| "" \(root\) | Type: object<br>Required fields: \["products"\] |
| /<wbr>properties/<wbr>products | The products to have on for this connection, each named once\. The call replaces the connection's choice, so a product you leave out is turned off\. A product your account does not hold is refused\.<br><br>Type: array<br>Minimum items: 1<br>Maximum items: 3<br>uniqueItems: true |
| /<wbr>properties/<wbr>products/<wbr>items | Allowed values: \["tzcloud","tztrack","tzmesh"\] |

## response

| JSON pointer | Description and constraints |
|---|---|
| "" \(root\) | Type: object<br>Required fields: \["contract\_version","on","off","detail"\]<br>Additional properties: false |
| /<wbr>properties/<wbr>contract\_version | Required value: 1 |
| /<wbr>properties/<wbr>on | The products now on for this connection, by the words this call takes\.<br><br>Type: array |
| /<wbr>properties/<wbr>on/<wbr>items | Type: string |
| /<wbr>properties/<wbr>off | Each product your account holds that is now off for this connection\.<br><br>Type: array |
| /<wbr>properties/<wbr>off/<wbr>items | Type: string |
| /<wbr>properties/<wbr>detail | Type: string |

## Complete payload contract

```json
{
  "request": {
    "type": "object",
    "required": [
      "products"
    ],
    "properties": {
      "products": {
        "type": "array",
        "minItems": 1,
        "maxItems": 3,
        "uniqueItems": true,
        "items": {
          "enum": [
            "tzcloud",
            "tztrack",
            "tzmesh"
          ]
        },
        "description": "The products to have on for this connection, each named once. The call replaces the connection's choice, so a product you leave out is turned off. A product your account does not hold is refused."
      }
    }
  },
  "response": {
    "type": "object",
    "required": [
      "contract_version",
      "on",
      "off",
      "detail"
    ],
    "properties": {
      "contract_version": {
        "const": 1
      },
      "on": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "The products now on for this connection, by the words this call takes."
      },
      "off": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Each product your account holds that is now off for this connection."
      },
      "detail": {
        "type": "string"
      }
    },
    "additionalProperties": false
  }
}
```

## Shared contracts

- [Refusals](/cloud/reference/refusals/): every refusal, by surface, with its cause and its remedy
- [schemas/wire\_error\.schema\.json](/cloud/reference/sources/schemas/wire-error-schema/)
- [schemas/wire\_errors\.json](/cloud/reference/sources/schemas/wire-errors/)
- [schemas/action\_payloads\.json](/cloud/reference/sources/schemas/action-payloads/) (includes shared shapes)
- [management\_api\_contract\.md](/cloud/reference/sources/management-api-contract/)
