list_invitations

Generated automatically from the published 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/list_invitations, with a bearer credential and the action's payload as the JSON body. It also accepts GET.

Contract description

List a realm's invitations with their state, paged; never a URL. An optional `email` narrows the page to the invitations issued to one address, matched as redemption matches it (case-insensitively, trimmed), a cursor valid within that filter. With no `application`, the platform operator's own builder invitations, each row carrying `products`, the profiles its redemption adds. An optional `environment` (`development` or `production`; absent, `production`) names the realm the call addresses, development's standing only once `create_environment` has turned development on.

Access and action metadata

{
  "name": "list_invitations",
  "resource": "realm",
  "tier": "observe",
  "summary": "Each invitation of a realm — the identifier issue_invitation answered, the address, the issue, expiry, redemption, and revocation stamps, the user a redemption created or the existing account that redeemed it, and the state those decide — paged in issue order, never a URL or its token; with no application member the builder realm's, admitted to super_admin alone, each row then carrying `products`, the profiles its redemption adds.",
  "annotations": {
    "readOnlyHint": true,
    "destructiveHint": false,
    "openWorldHint": false,
    "idempotentHint": true
  }
}

MCP catalog entry

{
  "name": "list_invitations",
  "tier": "observe",
  "summary": "List a realm's invitations with their state, paged; never a URL. An optional `email` narrows the page to the invitations issued to one address, matched as redemption matches it (case-insensitively, trimmed), a cursor valid within that filter. With no `application`, the platform operator's own builder invitations, each row carrying `products`, the profiles its redemption adds. An optional `environment` (`development` or `production`; absent, `production`) names the realm the call addresses, development's standing only once `create_environment` has turned development on.",
  "owners": [
    "ACS-L0-01",
    "ACS-L0-08",
    "ACC-L0-23",
    "PLD-L0-40"
  ],
  "scenario": "ACS-L0-08"
}

request

JSON pointer Description and constraints
"" (root) Type: object
Additional properties: false
/properties/application The application whose realm's invitations are answered; absent, the builder realm, admitted to super_admin alone.

Type: string
/properties/email Optional. One address; with it, the page holds the invitations issued to that address alone, in issue order under the same paging. The match is redemption's own: case-insensitive, trimmed. A cursor is valid within the filter that answered it; one naming a row the filter excludes refuses invalid_request. Absent, every invitation of the realm.

Type: string
Minimum length: 1
/properties/cursor The next_cursor a previous page answered.

Type: string
/properties/limit Invitations per page, 1 to 200; 50 where none is given.

Type: integer
Minimum: 1
Maximum: 200
/properties/environment Optional. The environment whose realm the call addresses, `development` or `production` (the accounts service PRD's realm statement); absent, `production`. Ignored where `application` is absent, because the builder realm has no environment.

Type: string
Pattern: ^(development|production)$

response

JSON pointer Description and constraints
"" (root) Type: object
Required fields: ["contract_version","invitations","next_cursor"]
Additional properties: false
/properties/contract_version Required value: 1
/properties/invitations Type: array
/properties/invitations/items Type: object
Required fields: ["id","email","created_at","expires_at","redeemed_at","redeemed_by","revoked_at","state"]
Additional properties: false
/properties/invitations/items/properties/id The identifier issue_invitation answered.

Type: string
/properties/invitations/items/properties/email Type: string
/properties/invitations/items/properties/created_at Type: string
/properties/invitations/items/properties/expires_at Type: string
/properties/invitations/items/properties/redeemed_at Type: ["string","null"]
/properties/invitations/items/properties/redeemed_by The end user the redemption created — the identifier list_end_users answered while the user stood, which delete_end_user may since have removed. On the builder realm it is the account the redemption created or the existing account whose sign-in redeemed it for a product it lacked (ACB-L0-77). Null until redeemed.

Type: ["string","null"]
/properties/invitations/items/properties/revoked_at Type: ["string","null"]
/properties/invitations/items/properties/state What the stamps and the clock decide (ACS-L0-08): revoked where revoked_at is set, redeemed where redeemed_at is set, expired where expires_at has passed on a row neither redeemed nor revoked, standing otherwise.

Allowed values: ["standing","redeemed","revoked","expired"]
/properties/invitations/items/properties/products The builder realm's rows alone, the form with no `application`: the product profiles the invitation's redemption adds, `["cloud"]` on an invitation that named none (ACB-L0-77). An application's rows carry no such member, because an end user holds no product profile.

Type: array
/properties/invitations/items/properties/products/items Type: string
/properties/next_cursor Type: ["string","null"]
/properties/detail Type: string

Complete payload contract

{
  "request": {
    "type": "object",
    "properties": {
      "application": {
        "type": "string",
        "description": "The application whose realm's invitations are answered; absent, the builder realm, admitted to super_admin alone."
      },
      "email": {
        "type": "string",
        "minLength": 1,
        "description": "Optional. One address; with it, the page holds the invitations issued to that address alone, in issue order under the same paging. The match is redemption's own: case-insensitive, trimmed. A cursor is valid within the filter that answered it; one naming a row the filter excludes refuses invalid_request. Absent, every invitation of the realm."
      },
      "cursor": {
        "type": "string",
        "description": "The next_cursor a previous page answered."
      },
      "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 200,
        "description": "Invitations per page, 1 to 200; 50 where none is given."
      },
      "environment": {
        "type": "string",
        "pattern": "^(development|production)$",
        "description": "Optional. The environment whose realm the call addresses, `development` or `production` (the accounts service PRD's realm statement); absent, `production`. Ignored where `application` is absent, because the builder realm has no environment."
      }
    },
    "additionalProperties": false
  },
  "response": {
    "type": "object",
    "required": [
      "contract_version",
      "invitations",
      "next_cursor"
    ],
    "properties": {
      "contract_version": {
        "const": 1
      },
      "invitations": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "id",
            "email",
            "created_at",
            "expires_at",
            "redeemed_at",
            "redeemed_by",
            "revoked_at",
            "state"
          ],
          "properties": {
            "id": {
              "type": "string",
              "description": "The identifier issue_invitation answered."
            },
            "email": {
              "type": "string"
            },
            "created_at": {
              "type": "string"
            },
            "expires_at": {
              "type": "string"
            },
            "redeemed_at": {
              "type": [
                "string",
                "null"
              ]
            },
            "redeemed_by": {
              "type": [
                "string",
                "null"
              ],
              "description": "The end user the redemption created — the identifier list_end_users answered while the user stood, which delete_end_user may since have removed. On the builder realm it is the account the redemption created or the existing account whose sign-in redeemed it for a product it lacked (ACB-L0-77). Null until redeemed."
            },
            "revoked_at": {
              "type": [
                "string",
                "null"
              ]
            },
            "state": {
              "enum": [
                "standing",
                "redeemed",
                "revoked",
                "expired"
              ],
              "description": "What the stamps and the clock decide (ACS-L0-08): revoked where revoked_at is set, redeemed where redeemed_at is set, expired where expires_at has passed on a row neither redeemed nor revoked, standing otherwise."
            },
            "products": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "The builder realm's rows alone, the form with no `application`: the product profiles the invitation's redemption adds, `[\"cloud\"]` on an invitation that named none (ACB-L0-77). An application's rows carry no such member, because an end user holds no product profile."
            }
          },
          "additionalProperties": false
        }
      },
      "next_cursor": {
        "type": [
          "string",
          "null"
        ]
      },
      "detail": {
        "type": "string"
      }
    },
    "additionalProperties": false
  }
}

Shared contracts