rate_experience

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/rate_experience, with a bearer credential and the action's payload as the JSON body.

Contract description

Record a rating of the platform: the person's own answer to its question, relayed, or your own rating of a task's difficulty. For the person's own answer to the platform's question, `series` `human_nps` with their score from 0 to 10 and their main reason in `text`, on the `relayed` channel with your `provider` and `session`. Never answer for the person, and name the pending `ask` when one stands. For your own answer, `series` `agent_effort` with a difficulty from 1 to 5 on the `agent` channel and the one obstacle in `text`. A test fixture account is refused the human series. With `space`, the identifier of an issue space your account holds, the rating or the close is recorded in that space.

Access and action metadata

{
  "name": "rate_experience",
  "resource": "account",
  "tier": "reversible",
  "summary": "Record a rating: `series` `human_nps`, the person's score from 0 to 10 on the `direct` channel or `relayed` by the agent that put the question, which names its `provider` and `session`, or `agent_effort`, the agent's own difficulty from 1 to 5 on the `agent` channel, never averaged with the other; an optional `text` of at most 2,000 characters; `ask` naming the pending ask `read_feedback` answered, which the human series answers and closes, refused `ask_not_pending` where it is not open to the acting account; and an optional `key`. The human series is refused `rating_not_admitted` from an account carrying the synthetic flag. Bounded and answered as `submit_feedback` is; the answer carries the signal and the ask it answered, `null` where none. Registered while the issue service's origin is configured. With `space`, naming an issue space the acting account holds, the signal or the close is recorded in that space under its own token. A token bounded to an application is refused `token_scope_refused`.",
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "openWorldHint": false
  }
}

MCP catalog entry

{
  "name": "rate_experience",
  "tier": "reversible",
  "scenario": "CHI-L0-14",
  "summary": "Record a rating of the platform: the person's own answer to its question, relayed, or your own rating of a task's difficulty. For the person's own answer to the platform's question, `series` `human_nps` with their score from 0 to 10 and their main reason in `text`, on the `relayed` channel with your `provider` and `session`. Never answer for the person, and name the pending `ask` when one stands. For your own answer, `series` `agent_effort` with a difficulty from 1 to 5 on the `agent` channel and the one obstacle in `text`. A test fixture account is refused the human series. With `space`, the identifier of an issue space your account holds, the rating or the close is recorded in that space.",
  "owners": [
    "PLD-L0-40"
  ]
}

request

JSON pointer Description and constraints
"" (root) Type: object
Replaced members: application and environment were replaced by space
/properties/series A rating names it: the person’s series, a score from 0 to 10, or the agent’s own, a difficulty from 1 to 5; the two are never averaged. Absent on a close.

Type: string
Allowed values: ["human_nps","agent_effort"]
/properties/score A rating names it: a whole number in the series’ range. Absent on a close.

Type: integer
Minimum: 0
Maximum: 10
/properties/channel A rating names it: the human series rides `direct` or `relayed`, the latter naming the relaying agent through `provider` and `session`; the agent series rides `agent`. Absent on a close.

Type: string
Allowed values: ["direct","relayed","agent"]
/properties/provider An agent’s provider, 1 to 32 lowercase letters, digits, and hyphens opening with a letter; with `session`, both or neither.

Type: string
Pattern: ^[a-z][a-z0-9-]{0,31}$
/properties/session An agent’s session identifier, 1 to 200 printable characters; with `provider`, both or neither.

Type: string
Maximum length: 200
/properties/text Optional: the main reason, or the one obstacle, at most 2,000 characters.

Type: string
Maximum length: 2000
/properties/ask The pending ask `read_feedback` answered. A human-series rating naming it answers and closes the ask, an agent-series rating naming it leaves the ask as it stands, and a close names it. Required with `close`.

Type: string
Maximum length: 200
/properties/close The close form, in place of a rating: `declined`, the person’s own answer that they will not rate, or `cancelled`, the tool’s word that the question could not be put to them. Rides with `ask` and no rating member; the ask closes without a score.

Type: string
Allowed values: ["declined","cancelled"]
/properties/key Optional: the rating’s idempotency key.

Type: string
Maximum length: 200
/properties/space Optional. The identifier of an issue space the acting account holds, a lower-case UUID: a space of the account's own, an application's own space as `submit_manifest`'s receipt names it, or one space of an application's per-environment pair. The signal, or the close, is recorded in that space under its own token, the actor the acting account's. Absent, the call addresses the platform's own space. A request naming `application` or `environment` is refused `invalid_request` naming `space`.

Type: string
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

response

JSON pointer Description and constraints
"" (root) Type: object
Required fields: ["contract_version","signal","ask"]
/properties/contract_version Required value: 1
/properties/reference The short reference the platform recorded this call under, ten lowercase hexadecimal characters, the value the call’s record row carries; quote it when reporting the call.

Type: string
Pattern: ^[0-9a-f]{10}$
/properties/signal The signal as recorded: its id, series, score, channel, trigger, ask, actor, relayed_by, text, and instant; null on a close.

Type: ["object","null"]
/properties/ask The ask the rating answered or the close closed, as it now stands, or null.

Type: ["object","null"]

Complete payload contract

{
  "request": {
    "type": "object",
    "properties": {
      "series": {
        "type": "string",
        "enum": [
          "human_nps",
          "agent_effort"
        ],
        "description": "A rating names it: the person’s series, a score from 0 to 10, or the agent’s own, a difficulty from 1 to 5; the two are never averaged. Absent on a close."
      },
      "score": {
        "type": "integer",
        "minimum": 0,
        "maximum": 10,
        "description": "A rating names it: a whole number in the series’ range. Absent on a close."
      },
      "channel": {
        "type": "string",
        "enum": [
          "direct",
          "relayed",
          "agent"
        ],
        "description": "A rating names it: the human series rides `direct` or `relayed`, the latter naming the relaying agent through `provider` and `session`; the agent series rides `agent`. Absent on a close."
      },
      "provider": {
        "type": "string",
        "pattern": "^[a-z][a-z0-9-]{0,31}$",
        "description": "An agent’s provider, 1 to 32 lowercase letters, digits, and hyphens opening with a letter; with `session`, both or neither."
      },
      "session": {
        "type": "string",
        "maxLength": 200,
        "description": "An agent’s session identifier, 1 to 200 printable characters; with `provider`, both or neither."
      },
      "text": {
        "type": "string",
        "maxLength": 2000,
        "description": "Optional: the main reason, or the one obstacle, at most 2,000 characters."
      },
      "ask": {
        "type": "string",
        "maxLength": 200,
        "description": "The pending ask `read_feedback` answered. A human-series rating naming it answers and closes the ask, an agent-series rating naming it leaves the ask as it stands, and a close names it. Required with `close`."
      },
      "close": {
        "type": "string",
        "enum": [
          "declined",
          "cancelled"
        ],
        "description": "The close form, in place of a rating: `declined`, the person’s own answer that they will not rate, or `cancelled`, the tool’s word that the question could not be put to them. Rides with `ask` and no rating member; the ask closes without a score."
      },
      "key": {
        "type": "string",
        "maxLength": 200,
        "description": "Optional: the rating’s idempotency key."
      },
      "space": {
        "type": "string",
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
        "description": "Optional. The identifier of an issue space the acting account holds, a lower-case UUID: a space of the account's own, an application's own space as `submit_manifest`'s receipt names it, or one space of an application's per-environment pair. The signal, or the close, is recorded in that space under its own token, the actor the acting account's. Absent, the call addresses the platform's own space. A request naming `application` or `environment` is refused `invalid_request` naming `space`."
      }
    },
    "x-renamed": {
      "application": "space",
      "environment": "space"
    }
  },
  "response": {
    "type": "object",
    "required": [
      "contract_version",
      "signal",
      "ask"
    ],
    "properties": {
      "contract_version": {
        "const": 1
      },
      "reference": {
        "type": "string",
        "pattern": "^[0-9a-f]{10}$",
        "description": "The short reference the platform recorded this call under, ten lowercase hexadecimal characters, the value the call’s record row carries; quote it when reporting the call."
      },
      "signal": {
        "type": [
          "object",
          "null"
        ],
        "description": "The signal as recorded: its id, series, score, channel, trigger, ask, actor, relayed_by, text, and instant; null on a close."
      },
      "ask": {
        "type": [
          "object",
          "null"
        ],
        "description": "The ask the rating answered or the close closed, as it now stands, or null."
      }
    }
  }
}

Shared contracts