---
title: "send_setup_mail"
description: "Generated reference for the management action send_setup_mail: its description, access metadata, payload contract, and registration status."
slug: /reference/actions/send-setup-mail
order: 103
visibility: public
redirects_from: []
---

# send\_setup\_mail

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

**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.

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

## Contract description

Send the setup email once to each builder account you list that has not connected an AI coding tool, one to fifty a call, and read each account's outcome by name\. Super\-admin \(platform operator\) only\. The messages count in the invitation window, five builder\-realm messages an hour, so a long list takes several hourly calls\. The production estate alone sends; the development estate refuses the call\.

## Access and action metadata

```json
{
  "name": "send_setup_mail",
  "resource": "account",
  "tier": "reversible",
  "grant": "super_admin",
  "summary": "Super-admin: send the setup email once to each builder account you list that has not connected an AI coding tool, one to fifty accounts a call. The answer gives each account's outcome by name: `sent`, `already_sent`, `connected`, `synthetic`, `unbilled`, `suspended`, `no_such_account`, or the send's outcome. The messages count in the builder invitation window of five an hour, beside the invitations and the setup-mail pass. The production estate alone sends; the development estate refuses the call `setup_mail_production_only`. The answer lists accounts and outcomes, never an address.",
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "openWorldHint": true
  }
}
```

## MCP catalog entry

```json
{
  "name": "send_setup_mail",
  "title": "Send setup email",
  "tier": "reversible",
  "scenario": "API-L0-12",
  "summary": "Send the setup email once to each builder account you list that has not connected an AI coding tool, one to fifty a call, and read each account's outcome by name. Super-admin (platform operator) only. The messages count in the invitation window, five builder-realm messages an hour, so a long list takes several hourly calls. The production estate alone sends; the development estate refuses the call.",
  "owners": [
    "ACS-L0-08",
    "ACS-L0-23"
  ]
}
```

## request

| JSON pointer | Description and constraints |
|---|---|
| "" \(root\) | Type: object<br>Required fields: \["accounts"\]<br>Additional properties: false |
| /<wbr>properties/<wbr>accounts | The accounts to send the setup email to, by id, from \`list\_accounts\` or \`list\_sign\_up\_clicks\`: one to fifty\. You get one answer for each\.<br><br>Type: array<br>Minimum items: 1<br>Maximum items: 50 |
| /<wbr>properties/<wbr>accounts/<wbr>items | Type: string<br>Minimum length: 1 |

## response

| JSON pointer | Description and constraints |
|---|---|
| "" \(root\) | Type: object<br>Required fields: \["contract\_version","results","sent"\]<br>Additional properties: false |
| /<wbr>properties/<wbr>contract\_version | Required value: 1 |
| /<wbr>properties/<wbr>results | One entry per distinct account you list, in the order you list them\.<br><br>Type: array |
| /<wbr>properties/<wbr>results/<wbr>items | Type: object<br>Required fields: \["account","outcome"\]<br>Additional properties: false |
| /<wbr>properties/<wbr>results/<wbr>items/<wbr>properties/<wbr>account | Type: string |
| /<wbr>properties/<wbr>results/<wbr>items/<wbr>properties/<wbr>outcome | An account with the outcome \`sent\` was sent the email at every verified address whose domain takes mail\. One with \`already\_sent\` was claimed before, by this action or the pass: sent, or settled \`no\_address\`, \`undeliverable\`, or \`not\_sent\`, and it is never sent again\. One with \`connected\` has connected an AI coding tool\. One with \`synthetic\`, \`unbilled\`, or \`suspended\` is that kind of account\. The answer \`no\_such\_account\` means no builder account exists under the id\. The answer \`window\_full\` means the invitation window has no room this hour, and the account stays unclaimed for a later call\. The answers \`no\_address\` and \`undeliverable\` mean the account holds no verified address, or none whose domain takes mail\. The answer \`no\_sender\` means the plane holds no sender\. The answer \`not\_sent\` means the provider refused the message or the send passed its bound\. The answer \`failed\` means a store read failed before the claim\.<br><br>Allowed values: \["sent","already\_sent","connected","synthetic","unbilled","suspended","no\_such\_account","window\_full","no\_address","undeliverable","no\_sender","not\_sent","failed"\] |
| /<wbr>properties/<wbr>sent | The count of accounts with the outcome \`sent\`\.<br><br>Type: integer<br>Minimum: 0 |
| /<wbr>properties/<wbr>detail | Type: string |

## Complete payload contract

```json
{
  "request": {
    "type": "object",
    "required": [
      "accounts"
    ],
    "properties": {
      "accounts": {
        "type": "array",
        "minItems": 1,
        "maxItems": 50,
        "items": {
          "type": "string",
          "minLength": 1
        },
        "description": "The accounts to send the setup email to, by id, from `list_accounts` or `list_sign_up_clicks`: one to fifty. You get one answer for each."
      }
    },
    "additionalProperties": false
  },
  "response": {
    "type": "object",
    "required": [
      "contract_version",
      "results",
      "sent"
    ],
    "properties": {
      "contract_version": {
        "const": 1
      },
      "results": {
        "type": "array",
        "description": "One entry per distinct account you list, in the order you list them.",
        "items": {
          "type": "object",
          "required": [
            "account",
            "outcome"
          ],
          "properties": {
            "account": {
              "type": "string"
            },
            "outcome": {
              "enum": [
                "sent",
                "already_sent",
                "connected",
                "synthetic",
                "unbilled",
                "suspended",
                "no_such_account",
                "window_full",
                "no_address",
                "undeliverable",
                "no_sender",
                "not_sent",
                "failed"
              ],
              "description": "An account with the outcome `sent` was sent the email at every verified address whose domain takes mail. One with `already_sent` was claimed before, by this action or the pass: sent, or settled `no_address`, `undeliverable`, or `not_sent`, and it is never sent again. One with `connected` has connected an AI coding tool. One with `synthetic`, `unbilled`, or `suspended` is that kind of account. The answer `no_such_account` means no builder account exists under the id. The answer `window_full` means the invitation window has no room this hour, and the account stays unclaimed for a later call. The answers `no_address` and `undeliverable` mean the account holds no verified address, or none whose domain takes mail. The answer `no_sender` means the plane holds no sender. The answer `not_sent` means the provider refused the message or the send passed its bound. The answer `failed` means a store read failed before the claim."
            }
          },
          "additionalProperties": false
        }
      },
      "sent": {
        "type": "integer",
        "minimum": 0,
        "description": "The count of accounts with the outcome `sent`."
      },
      "detail": {
        "type": "string"
      }
    },
    "additionalProperties": false
  }
}
```

## Shared contracts

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