{
  "info": {
    "name": "Travila Platform API",
    "description": "Every public Travila Platform endpoint, generated from the OpenAPI specs that back\nhttps://docs.travila.ai — one folder per gateway.\n\n## Setup\n\nImport the companion environment (`travila-platform.postman_environment.json`) and set:\n\n- `baseUrl` — defaults to `https://api.travila.ai`\n- `apiKey` — a secret (`sk_...`) or publishable (`pk_...`) key. Sent as `X-API-Key` on every request.\n- `jwt` — an end-user Firebase ID token. Required alongside a publishable key; leave empty when using a secret key alone.\n- `onBehalfOf` — a user id. Only needed when a secret key acts for a specific user; sent as `X-On-Behalf-Of` when non-empty.\n\nAuth is set once at the collection level, so every request inherits it. The one\nexception is **Authentication APIs** (key management), which takes an admin JWT and\nrefuses API keys — that folder overrides the collection and sends `jwt` instead.\n\n## Request shape\n\nAll endpoints are `POST` with a JSON body, encoded as protojson (the JSON form of the\nunderlying Protocol Buffer messages).\n\nBodies are generated from the spec schemas, so every field is present with a typed\nplaceholder (`\"<string>\"`, `\"<integer>\"`) rather than a real value — the shape is\ncorrect, the contents are not. Replace them before sending, and drop the optional\nfields you do not need. For enum fields the placeholder does not name the allowed\nvalues; see the endpoint in the [API reference](https://docs.travila.ai/api) for\nthe accepted set.\n\nFree-form map fields (`payload`, `overrides`, `metadata`, …) are shown with a single\n`key_1` string entry. That is only a placeholder: they accept arbitrary keys, and the\nones typed as free-form accept nested JSON values, not just strings.\n\nResponse examples are intentionally omitted — see the API reference for response\nschemas.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-API-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{apiKey}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Attach the optional headers only when their variables are set, so an unused",
          "// variable never sends an empty header.",
          "const jwt = pm.environment.get('jwt');",
          "if (jwt) pm.request.headers.upsert({key: 'Authorization', value: `Bearer ${jwt}`});",
          "",
          "const onBehalfOf = pm.environment.get('onBehalfOf');",
          "if (onBehalfOf) pm.request.headers.upsert({key: 'X-On-Behalf-Of', value: onBehalfOf});"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.travila.ai",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "LLM APIs",
      "description": "Conversational AI gateway for thread management, messaging, tool orchestration (MCP), semantic memory, and LLM proxy. (Voice sessions are in progress — not yet generally available.)\n\nCaller identity and tenant are derived from your credentials — you never pass user or tenant identifiers in the\nrequest body. See the [API Key Integration Guide](/api-keys/customer-guide).\n\nAll endpoints use `POST /api/v1/llm/<method>` with a JSON request body.\n\n### Field naming\n\nRequest bodies accept **either** `snake_case` or `camelCase` — both parse. Response bodies are\nalways **`camelCase`** (`conversationId`, `activeProfileId`, `messageSequence`), because\nresponses are encoded with protojson. Fields that are unset, empty, zero, or `false` are\n**omitted from the response entirely** rather than sent as `null` — read them with a default,\nnot a presence check.\n\nSee the [Conversations guide](/guides/conversations) for thread lifecycle, async generation, and configuration.\nSee the [MCP Tools guide](/guides/mcp-tools) for tool calling, approval flows, and client-side tools.\nSee the [Memory guide](/guides/memory) for semantic memory search and conversation integration.\n",
      "item": [
        {
          "name": "Threads",
          "description": {
            "content": "Conversation containers — create and list threads. See the [Conversations guide](/guides/conversations) for thread lifecycle, async generation, and configuration.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a new conversation thread",
              "request": {
                "name": "Create a new conversation thread",
                "description": {
                  "content": "Creates a new conversation thread for the authenticated user. A thread is a logical container for a conversation with its own message history, generation config, and settings.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/create-thread",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "create-thread"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"<string>\",\n  \"tags\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"activeProfileId\": \"<string>\",\n  \"defaultGenerationConfig\": {\n    \"model\": \"<string>\",\n    \"models\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"systemPrompt\": \"<string>\",\n    \"modelRoutingFilter\": {\n      \"minContextLength\": \"<long>\",\n      \"minMaxCompletionTokens\": \"<long>\",\n      \"requiredInputModalities\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"requiredOutputModalities\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"maxPromptCost\": \"<double>\",\n      \"maxCompletionCost\": \"<double>\",\n      \"excludeModerated\": \"<boolean>\",\n      \"requiredParameters\": [\n        \"<string>\",\n        \"<string>\"\n      ]\n    },\n    \"provider\": {\n      \"order\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"allowFallbacks\": \"<boolean>\",\n      \"requireParameters\": \"<boolean>\",\n      \"dataCollection\": \"<string>\",\n      \"zdr\": \"<boolean>\",\n      \"only\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"ignore\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"quantizations\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"sort\": \"<string>\",\n      \"maxPrice\": {\n        \"prompt\": \"<double>\",\n        \"completion\": \"<double>\",\n        \"request\": \"<double>\",\n        \"image\": \"<double>\",\n        \"audio\": \"<double>\"\n      },\n      \"enforceDistillableText\": \"<boolean>\",\n      \"preferredMinThroughput\": {\n        \"p50\": \"<double>\",\n        \"p90\": \"<double>\"\n      },\n      \"preferredMaxLatency\": {\n        \"p50\": \"<double>\",\n        \"p90\": \"<double>\"\n      }\n    },\n    \"reasoning\": {\n      \"effort\": \"<string>\",\n      \"maxTokens\": \"<integer>\",\n      \"exclude\": \"<boolean>\",\n      \"includeReasoningHistory\": \"<boolean>\"\n    },\n    \"usage\": {\n      \"include\": \"<boolean>\"\n    },\n    \"transforms\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"tools\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      }\n    ],\n    \"toolChoice\": {\n      \"kind\": \"<string>\",\n      \"specificToolName\": \"<string>\"\n    },\n    \"clientTools\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      }\n    ],\n    \"toolPolicy\": {\n      \"requireApprovalToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"requireApprovalServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"approvalMode\": \"<string>\",\n      \"clientToolMode\": \"<string>\",\n      \"approvalTimeoutMs\": \"<integer>\",\n      \"failOnApprovalTimeoutToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"orderRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        }\n      ],\n      \"stableSortByCallIndexOnTie\": \"<boolean>\",\n      \"maxParallelToolCalls\": \"<integer>\",\n      \"maxToolCallsPerLoop\": \"<integer>\",\n      \"maxTotalToolCalls\": \"<integer>\",\n      \"retriableToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"maxRetries\": \"<integer>\",\n      \"retryBackoff\": {\n        \"initialMs\": \"<integer>\",\n        \"multiplier\": \"<double>\",\n        \"maxMs\": \"<integer>\"\n      },\n      \"retryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"nonRetryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeouts\": {\n        \"perToolMs\": \"<integer>\",\n        \"perLoopMs\": \"<integer>\",\n        \"overallMs\": \"<integer>\"\n      },\n      \"failOnTimeout\": \"<boolean>\",\n      \"clientToolTimeoutMs\": \"<integer>\",\n      \"failureMode\": \"<string>\",\n      \"stopOnFailureRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        }\n      ]\n    },\n    \"temperature\": \"<double>\",\n    \"topP\": \"<double>\",\n    \"maxOutputTokens\": \"<integer>\",\n    \"frequencyPenalty\": \"<double>\",\n    \"presencePenalty\": \"<double>\",\n    \"stopSequences\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"seed\": \"<long>\",\n    \"responseFormat\": {\n      \"jsonObject\": \"<boolean>\",\n      \"jsonSchema\": \"<object>\",\n      \"schemaName\": \"<string>\",\n      \"validate\": \"<boolean>\",\n      \"maxValidationRetries\": \"<integer>\",\n      \"responseHealing\": \"<boolean>\"\n    },\n    \"allowParallelToolCalls\": \"<boolean>\",\n    \"topK\": \"<integer>\",\n    \"repetitionPenalty\": \"<double>\",\n    \"logitBias\": {\n      \"key_0\": \"<double>\"\n    },\n    \"topLogprobs\": \"<integer>\",\n    \"minP\": \"<double>\",\n    \"topA\": \"<double>\",\n    \"user\": \"<string>\",\n    \"modalities\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"plugins\": [\n      {\n        \"id\": \"<string>\",\n        \"pdf\": {\n          \"engine\": \"<string>\"\n        },\n        \"web\": {\n          \"engine\": \"<string>\",\n          \"maxResults\": \"<integer>\",\n          \"searchPrompt\": \"<string>\",\n          \"webSearchOptions\": {\n            \"searchContextSize\": \"<string>\"\n          }\n        },\n        \"params\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"id\": \"<string>\",\n        \"pdf\": {\n          \"engine\": \"<string>\"\n        },\n        \"web\": {\n          \"engine\": \"<string>\",\n          \"maxResults\": \"<integer>\",\n          \"searchPrompt\": \"<string>\",\n          \"webSearchOptions\": {\n            \"searchContextSize\": \"<string>\"\n          }\n        },\n        \"params\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"languagePreference\": \"<string>\",\n    \"turnContext\": {\n      \"enabled\": \"<boolean>\",\n      \"includeToolGuidance\": \"<boolean>\",\n      \"format\": \"<string>\"\n    },\n    \"mem0\": {\n      \"enabled\": \"<boolean>\",\n      \"searchTopK\": \"<integer>\",\n      \"searchThreshold\": \"<double>\",\n      \"injectAsSystemContext\": \"<boolean>\",\n      \"searchQueryOverride\": \"<string>\",\n      \"enableRerank\": \"<boolean>\",\n      \"addMemoriesAsync\": \"<boolean>\",\n      \"customExtractionPrompt\": \"<string>\",\n      \"enableGraph\": \"<boolean>\",\n      \"agentIdOverride\": \"<string>\",\n      \"exposeAsMcpTool\": \"<boolean>\",\n      \"includeAssistantMessages\": \"<boolean>\",\n      \"injectMemoryTimestamps\": \"<boolean>\"\n    },\n    \"timeAware\": {\n      \"includeCurrentTime\": \"<boolean>\",\n      \"includeMessageTimestamps\": \"<boolean>\",\n      \"includeFileTimestamps\": \"<boolean>\",\n      \"timezone\": \"<string>\",\n      \"timestampFormat\": \"<string>\"\n    },\n    \"requestTimeoutSeconds\": \"<integer>\",\n    \"fileResolution\": {\n      \"failureMode\": \"<string>\"\n    }\n  },\n  \"conversationSettings\": {\n    \"interruptPolicy\": \"<string>\",\n    \"maxLoops\": \"<integer>\",\n    \"maxParallelTools\": \"<integer>\",\n    \"mcpServers\": [\n      {\n        \"serverId\": \"<string>\",\n        \"enabled\": \"<boolean>\",\n        \"priority\": \"<integer>\",\n        \"allowlistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"blocklistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"serverOverrides\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"serverId\": \"<string>\",\n        \"enabled\": \"<boolean>\",\n        \"priority\": \"<integer>\",\n        \"allowlistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"blocklistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"serverOverrides\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"toolPolicy\": {\n      \"requireApprovalToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"requireApprovalServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"approvalMode\": \"<string>\",\n      \"clientToolMode\": \"<string>\",\n      \"approvalTimeoutMs\": \"<integer>\",\n      \"failOnApprovalTimeoutToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"orderRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        }\n      ],\n      \"stableSortByCallIndexOnTie\": \"<boolean>\",\n      \"maxParallelToolCalls\": \"<integer>\",\n      \"maxToolCallsPerLoop\": \"<integer>\",\n      \"maxTotalToolCalls\": \"<integer>\",\n      \"retriableToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"maxRetries\": \"<integer>\",\n      \"retryBackoff\": {\n        \"initialMs\": \"<integer>\",\n        \"multiplier\": \"<double>\",\n        \"maxMs\": \"<integer>\"\n      },\n      \"retryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"nonRetryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeouts\": {\n        \"perToolMs\": \"<integer>\",\n        \"perLoopMs\": \"<integer>\",\n        \"overallMs\": \"<integer>\"\n      },\n      \"failOnTimeout\": \"<boolean>\",\n      \"clientToolTimeoutMs\": \"<integer>\",\n      \"failureMode\": \"<string>\",\n      \"stopOnFailureRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        }\n      ]\n    },\n    \"promptVariables\": \"<object>\"\n  },\n  \"contextManagementSettings\": {\n    \"strategy\": \"<string>\",\n    \"compactionConfig\": {\n      \"mode\": \"<string>\",\n      \"threshold\": {\n        \"tokenCount\": \"<integer>\",\n        \"percentage\": \"<integer>\"\n      },\n      \"generationConfig\": {\n        \"model\": \"<string>\",\n        \"models\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"systemPrompt\": \"<string>\",\n        \"modelRoutingFilter\": {\n          \"minContextLength\": \"<long>\",\n          \"minMaxCompletionTokens\": \"<long>\",\n          \"requiredInputModalities\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"requiredOutputModalities\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"maxPromptCost\": \"<double>\",\n          \"maxCompletionCost\": \"<double>\",\n          \"excludeModerated\": \"<boolean>\",\n          \"requiredParameters\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        },\n        \"provider\": {\n          \"order\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"allowFallbacks\": \"<boolean>\",\n          \"requireParameters\": \"<boolean>\",\n          \"dataCollection\": \"<string>\",\n          \"zdr\": \"<boolean>\",\n          \"only\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"ignore\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"quantizations\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"sort\": \"<string>\",\n          \"maxPrice\": {\n            \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n          },\n          \"enforceDistillableText\": \"<boolean>\",\n          \"preferredMinThroughput\": {\n            \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n          },\n          \"preferredMaxLatency\": {\n            \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n          }\n        },\n        \"reasoning\": {\n          \"effort\": \"<string>\",\n          \"maxTokens\": \"<integer>\",\n          \"exclude\": \"<boolean>\",\n          \"includeReasoningHistory\": \"<boolean>\"\n        },\n        \"usage\": {\n          \"include\": \"<boolean>\"\n        },\n        \"transforms\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"tools\": [\n          {\n            \"name\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"description\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"parametersJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"metadata\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"serverId\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"tags\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"documentationUrl\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"outputJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          {\n            \"name\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"description\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"parametersJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"metadata\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"serverId\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"tags\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"documentationUrl\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"outputJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          }\n        ],\n        \"toolChoice\": {\n          \"kind\": \"<string>\",\n          \"specificToolName\": \"<string>\"\n        },\n        \"clientTools\": [\n          {\n            \"name\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"description\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"parametersJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"metadata\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"serverId\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"tags\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"documentationUrl\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"outputJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          {\n            \"name\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"description\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"parametersJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"metadata\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"serverId\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"tags\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"documentationUrl\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"outputJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          }\n        ],\n        \"toolPolicy\": {\n          \"requireApprovalToolNamePatterns\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"requireApprovalServerIds\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"autoApproveToolNamePatterns\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"autoApproveServerIds\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"approvalMode\": \"<string>\",\n          \"clientToolMode\": \"<string>\",\n          \"approvalTimeoutMs\": \"<integer>\",\n          \"failOnApprovalTimeoutToolNamePatterns\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"orderRules\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"stableSortByCallIndexOnTie\": \"<boolean>\",\n          \"maxParallelToolCalls\": \"<integer>\",\n          \"maxToolCallsPerLoop\": \"<integer>\",\n          \"maxTotalToolCalls\": \"<integer>\",\n          \"retriableToolNamePatterns\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"maxRetries\": \"<integer>\",\n          \"retryBackoff\": {\n            \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n          },\n          \"retryableErrorSubstrings\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"nonRetryableErrorSubstrings\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"timeouts\": {\n            \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n          },\n          \"failOnTimeout\": \"<boolean>\",\n          \"clientToolTimeoutMs\": \"<integer>\",\n          \"failureMode\": \"<string>\",\n          \"stopOnFailureRules\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        },\n        \"temperature\": \"<double>\",\n        \"topP\": \"<double>\",\n        \"maxOutputTokens\": \"<integer>\",\n        \"frequencyPenalty\": \"<double>\",\n        \"presencePenalty\": \"<double>\",\n        \"stopSequences\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"seed\": \"<long>\",\n        \"responseFormat\": {\n          \"jsonObject\": \"<boolean>\",\n          \"jsonSchema\": \"<object>\",\n          \"schemaName\": \"<string>\",\n          \"validate\": \"<boolean>\",\n          \"maxValidationRetries\": \"<integer>\",\n          \"responseHealing\": \"<boolean>\"\n        },\n        \"allowParallelToolCalls\": \"<boolean>\",\n        \"topK\": \"<integer>\",\n        \"repetitionPenalty\": \"<double>\",\n        \"logitBias\": {\n          \"key_0\": \"<double>\"\n        },\n        \"topLogprobs\": \"<integer>\",\n        \"minP\": \"<double>\",\n        \"topA\": \"<double>\",\n        \"user\": \"<string>\",\n        \"modalities\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"plugins\": [\n          {\n            \"id\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"pdf\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"web\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"params\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          {\n            \"id\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"pdf\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"web\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"params\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          }\n        ],\n        \"languagePreference\": \"<string>\",\n        \"turnContext\": {\n          \"enabled\": \"<boolean>\",\n          \"includeToolGuidance\": \"<boolean>\",\n          \"format\": \"<string>\"\n        },\n        \"mem0\": {\n          \"enabled\": \"<boolean>\",\n          \"searchTopK\": \"<integer>\",\n          \"searchThreshold\": \"<double>\",\n          \"injectAsSystemContext\": \"<boolean>\",\n          \"searchQueryOverride\": \"<string>\",\n          \"enableRerank\": \"<boolean>\",\n          \"addMemoriesAsync\": \"<boolean>\",\n          \"customExtractionPrompt\": \"<string>\",\n          \"enableGraph\": \"<boolean>\",\n          \"agentIdOverride\": \"<string>\",\n          \"exposeAsMcpTool\": \"<boolean>\",\n          \"includeAssistantMessages\": \"<boolean>\",\n          \"injectMemoryTimestamps\": \"<boolean>\"\n        },\n        \"timeAware\": {\n          \"includeCurrentTime\": \"<boolean>\",\n          \"includeMessageTimestamps\": \"<boolean>\",\n          \"includeFileTimestamps\": \"<boolean>\",\n          \"timezone\": \"<string>\",\n          \"timestampFormat\": \"<string>\"\n        },\n        \"requestTimeoutSeconds\": \"<integer>\",\n        \"fileResolution\": {\n          \"failureMode\": \"<string>\"\n        }\n      },\n      \"preserveRecent\": \"<integer>\"\n    },\n    \"windowingConfig\": {\n      \"maxMessages\": \"<integer>\"\n    },\n    \"selectiveExclusionConfig\": {\n      \"excludeToolResults\": \"<boolean>\",\n      \"excludeImages\": \"<boolean>\",\n      \"excludeFiles\": \"<boolean>\",\n      \"excludeReasoning\": \"<boolean>\"\n    }\n  },\n  \"externalId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List conversation threads",
              "request": {
                "name": "List conversation threads",
                "description": {
                  "content": "Returns a paginated list of conversation threads for the authenticated user, ordered by most recently updated.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/list-threads",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "list-threads"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"limit\": \"<integer>\",\n  \"pageToken\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Messages",
          "description": {
            "content": "Send messages and trigger generation. See the [Conversations guide](/guides/conversations) for the full message lifecycle and async polling recipe.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Send a message to a conversation",
              "request": {
                "name": "Send a message to a conversation",
                "description": {
                  "content": "Sends a user message to the specified conversation thread. This appends the message to history and starts a generation workflow run. If a run is already in progress, behavior depends on the conversation's interrupt policy.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/send-message",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "send-message"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"userMessage\": {\n    \"role\": \"<string>\",\n    \"content\": [\n      {\n        \"type\": \"<string>\",\n        \"content\": \"<string>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"cachePreferred\": \"<boolean>\",\n        \"structuredMessage\": {\n          \"jsonPayload\": \"<object>\",\n          \"schemaName\": \"<string>\",\n          \"healed\": \"<boolean>\"\n        }\n      },\n      {\n        \"type\": \"<string>\",\n        \"content\": \"<string>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"cachePreferred\": \"<boolean>\",\n        \"structuredMessage\": {\n          \"jsonPayload\": \"<object>\",\n          \"schemaName\": \"<string>\",\n          \"healed\": \"<boolean>\"\n        }\n      }\n    ],\n    \"toolCalls\": [\n      {\n        \"id\": \"<string>\",\n        \"name\": \"<string>\",\n        \"argumentsJson\": \"<object>\",\n        \"status\": \"<string>\",\n        \"resultJson\": \"<object>\",\n        \"executedAt\": \"<dateTime>\",\n        \"serverId\": \"<string>\",\n        \"isClientTool\": \"<boolean>\",\n        \"requiresApprovalAt\": \"<dateTime>\",\n        \"approvedAt\": \"<dateTime>\",\n        \"approvedBy\": \"<string>\",\n        \"executionDuration\": \"<string>\"\n      },\n      {\n        \"id\": \"<string>\",\n        \"name\": \"<string>\",\n        \"argumentsJson\": \"<object>\",\n        \"status\": \"<string>\",\n        \"resultJson\": \"<object>\",\n        \"executedAt\": \"<dateTime>\",\n        \"serverId\": \"<string>\",\n        \"isClientTool\": \"<boolean>\",\n        \"requiresApprovalAt\": \"<dateTime>\",\n        \"approvedAt\": \"<dateTime>\",\n        \"approvedBy\": \"<string>\",\n        \"executionDuration\": \"<string>\"\n      }\n    ],\n    \"name\": \"<string>\",\n    \"timestamp\": \"<dateTime>\",\n    \"messageId\": \"<string>\",\n    \"annotations\": [\n      {\n        \"kind\": \"<string>\",\n        \"urlCitation\": {\n          \"url\": \"<string>\",\n          \"title\": \"<string>\",\n          \"content\": \"<string>\",\n          \"startIndex\": \"<integer>\",\n          \"endIndex\": \"<integer>\"\n        },\n        \"pdf\": {\n          \"filename\": \"<string>\",\n          \"engine\": \"<string>\",\n          \"token\": \"<string>\",\n          \"sourceUrl\": \"<string>\",\n          \"hash\": \"<string>\",\n          \"content\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        },\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"kind\": \"<string>\",\n        \"urlCitation\": {\n          \"url\": \"<string>\",\n          \"title\": \"<string>\",\n          \"content\": \"<string>\",\n          \"startIndex\": \"<integer>\",\n          \"endIndex\": \"<integer>\"\n        },\n        \"pdf\": {\n          \"filename\": \"<string>\",\n          \"engine\": \"<string>\",\n          \"token\": \"<string>\",\n          \"sourceUrl\": \"<string>\",\n          \"hash\": \"<string>\",\n          \"content\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        },\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"sequence\": \"<long>\",\n    \"generatedBy\": \"<string>\",\n    \"usage\": {\n      \"promptTokens\": \"<integer>\",\n      \"completionTokens\": \"<integer>\",\n      \"totalTokens\": \"<integer>\",\n      \"costEstimate\": \"<float>\",\n      \"completionTokensDetails\": {\n        \"reasoningTokens\": \"<integer>\",\n        \"textTokens\": \"<integer>\"\n      },\n      \"nativeTokensPrompt\": \"<integer>\",\n      \"nativeTokensCompletion\": \"<integer>\",\n      \"promptTokensDetails\": {\n        \"cachedTokens\": \"<integer>\",\n        \"cacheWriteTokens\": \"<integer>\",\n        \"audioTokens\": \"<integer>\",\n        \"videoTokens\": \"<integer>\"\n      },\n      \"costDetails\": {\n        \"upstreamInferenceCost\": \"<float>\",\n        \"upstreamInferencePromptCost\": \"<float>\",\n        \"upstreamInferenceCompletionCost\": \"<float>\"\n      }\n    },\n    \"model\": \"<string>\",\n    \"generationContext\": {\n      \"memories\": [\n        {\n          \"memoryId\": \"<string>\",\n          \"score\": \"<float>\",\n          \"memoryText\": \"<string>\",\n          \"createdAt\": \"<dateTime>\",\n          \"updatedAt\": \"<dateTime>\"\n        },\n        {\n          \"memoryId\": \"<string>\",\n          \"score\": \"<float>\",\n          \"memoryText\": \"<string>\",\n          \"createdAt\": \"<dateTime>\",\n          \"updatedAt\": \"<dateTime>\"\n        }\n      ],\n      \"relations\": [\n        {\n          \"source\": \"<string>\",\n          \"relationship\": \"<string>\",\n          \"destination\": \"<string>\"\n        },\n        {\n          \"source\": \"<string>\",\n          \"relationship\": \"<string>\",\n          \"destination\": \"<string>\"\n        }\n      ],\n      \"memorySearch\": {\n        \"query\": \"<string>\",\n        \"topK\": \"<integer>\",\n        \"threshold\": \"<double>\",\n        \"rerank\": \"<boolean>\",\n        \"resultsReturned\": \"<integer>\",\n        \"relationsReturned\": \"<integer>\"\n      },\n      \"turn\": {\n        \"currentTurn\": \"<integer>\",\n        \"maxTurns\": \"<integer>\"\n      },\n      \"languagePreference\": \"<string>\",\n      \"profileId\": \"<string>\",\n      \"model\": \"<string>\",\n      \"promptSource\": \"<string>\"\n    },\n    \"clientContext\": {\n      \"values\": {\n        \"key_0\": \"<string>\"\n      }\n    }\n  },\n  \"overrideGenerationConfig\": {\n    \"model\": \"<string>\",\n    \"models\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"systemPrompt\": \"<string>\",\n    \"modelRoutingFilter\": {\n      \"minContextLength\": \"<long>\",\n      \"minMaxCompletionTokens\": \"<long>\",\n      \"requiredInputModalities\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"requiredOutputModalities\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"maxPromptCost\": \"<double>\",\n      \"maxCompletionCost\": \"<double>\",\n      \"excludeModerated\": \"<boolean>\",\n      \"requiredParameters\": [\n        \"<string>\",\n        \"<string>\"\n      ]\n    },\n    \"provider\": {\n      \"order\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"allowFallbacks\": \"<boolean>\",\n      \"requireParameters\": \"<boolean>\",\n      \"dataCollection\": \"<string>\",\n      \"zdr\": \"<boolean>\",\n      \"only\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"ignore\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"quantizations\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"sort\": \"<string>\",\n      \"maxPrice\": {\n        \"prompt\": \"<double>\",\n        \"completion\": \"<double>\",\n        \"request\": \"<double>\",\n        \"image\": \"<double>\",\n        \"audio\": \"<double>\"\n      },\n      \"enforceDistillableText\": \"<boolean>\",\n      \"preferredMinThroughput\": {\n        \"p50\": \"<double>\",\n        \"p90\": \"<double>\"\n      },\n      \"preferredMaxLatency\": {\n        \"p50\": \"<double>\",\n        \"p90\": \"<double>\"\n      }\n    },\n    \"reasoning\": {\n      \"effort\": \"<string>\",\n      \"maxTokens\": \"<integer>\",\n      \"exclude\": \"<boolean>\",\n      \"includeReasoningHistory\": \"<boolean>\"\n    },\n    \"usage\": {\n      \"include\": \"<boolean>\"\n    },\n    \"transforms\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"tools\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      }\n    ],\n    \"toolChoice\": {\n      \"kind\": \"<string>\",\n      \"specificToolName\": \"<string>\"\n    },\n    \"clientTools\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      }\n    ],\n    \"toolPolicy\": {\n      \"requireApprovalToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"requireApprovalServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"approvalMode\": \"<string>\",\n      \"clientToolMode\": \"<string>\",\n      \"approvalTimeoutMs\": \"<integer>\",\n      \"failOnApprovalTimeoutToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"orderRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        }\n      ],\n      \"stableSortByCallIndexOnTie\": \"<boolean>\",\n      \"maxParallelToolCalls\": \"<integer>\",\n      \"maxToolCallsPerLoop\": \"<integer>\",\n      \"maxTotalToolCalls\": \"<integer>\",\n      \"retriableToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"maxRetries\": \"<integer>\",\n      \"retryBackoff\": {\n        \"initialMs\": \"<integer>\",\n        \"multiplier\": \"<double>\",\n        \"maxMs\": \"<integer>\"\n      },\n      \"retryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"nonRetryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeouts\": {\n        \"perToolMs\": \"<integer>\",\n        \"perLoopMs\": \"<integer>\",\n        \"overallMs\": \"<integer>\"\n      },\n      \"failOnTimeout\": \"<boolean>\",\n      \"clientToolTimeoutMs\": \"<integer>\",\n      \"failureMode\": \"<string>\",\n      \"stopOnFailureRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        }\n      ]\n    },\n    \"temperature\": \"<double>\",\n    \"topP\": \"<double>\",\n    \"maxOutputTokens\": \"<integer>\",\n    \"frequencyPenalty\": \"<double>\",\n    \"presencePenalty\": \"<double>\",\n    \"stopSequences\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"seed\": \"<long>\",\n    \"responseFormat\": {\n      \"jsonObject\": \"<boolean>\",\n      \"jsonSchema\": \"<object>\",\n      \"schemaName\": \"<string>\",\n      \"validate\": \"<boolean>\",\n      \"maxValidationRetries\": \"<integer>\",\n      \"responseHealing\": \"<boolean>\"\n    },\n    \"allowParallelToolCalls\": \"<boolean>\",\n    \"topK\": \"<integer>\",\n    \"repetitionPenalty\": \"<double>\",\n    \"logitBias\": {\n      \"key_0\": \"<double>\"\n    },\n    \"topLogprobs\": \"<integer>\",\n    \"minP\": \"<double>\",\n    \"topA\": \"<double>\",\n    \"user\": \"<string>\",\n    \"modalities\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"plugins\": [\n      {\n        \"id\": \"<string>\",\n        \"pdf\": {\n          \"engine\": \"<string>\"\n        },\n        \"web\": {\n          \"engine\": \"<string>\",\n          \"maxResults\": \"<integer>\",\n          \"searchPrompt\": \"<string>\",\n          \"webSearchOptions\": {\n            \"searchContextSize\": \"<string>\"\n          }\n        },\n        \"params\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"id\": \"<string>\",\n        \"pdf\": {\n          \"engine\": \"<string>\"\n        },\n        \"web\": {\n          \"engine\": \"<string>\",\n          \"maxResults\": \"<integer>\",\n          \"searchPrompt\": \"<string>\",\n          \"webSearchOptions\": {\n            \"searchContextSize\": \"<string>\"\n          }\n        },\n        \"params\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"languagePreference\": \"<string>\",\n    \"turnContext\": {\n      \"enabled\": \"<boolean>\",\n      \"includeToolGuidance\": \"<boolean>\",\n      \"format\": \"<string>\"\n    },\n    \"mem0\": {\n      \"enabled\": \"<boolean>\",\n      \"searchTopK\": \"<integer>\",\n      \"searchThreshold\": \"<double>\",\n      \"injectAsSystemContext\": \"<boolean>\",\n      \"searchQueryOverride\": \"<string>\",\n      \"enableRerank\": \"<boolean>\",\n      \"addMemoriesAsync\": \"<boolean>\",\n      \"customExtractionPrompt\": \"<string>\",\n      \"enableGraph\": \"<boolean>\",\n      \"agentIdOverride\": \"<string>\",\n      \"exposeAsMcpTool\": \"<boolean>\",\n      \"includeAssistantMessages\": \"<boolean>\",\n      \"injectMemoryTimestamps\": \"<boolean>\"\n    },\n    \"timeAware\": {\n      \"includeCurrentTime\": \"<boolean>\",\n      \"includeMessageTimestamps\": \"<boolean>\",\n      \"includeFileTimestamps\": \"<boolean>\",\n      \"timezone\": \"<string>\",\n      \"timestampFormat\": \"<string>\"\n    },\n    \"requestTimeoutSeconds\": \"<integer>\",\n    \"fileResolution\": {\n      \"failureMode\": \"<string>\"\n    }\n  },\n  \"setActiveProfileId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Append a message without generating",
              "request": {
                "name": "Append a message without generating",
                "description": {
                  "content": "Appends a message to a thread's history WITHOUT starting a generation run. Use it for \"context update\" feeds — the message lands in history for a later message to read, but no LLM turn runs, so there is no token cost and no chance of a stray tool call.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/append-message",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "append-message"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"message\": {\n    \"role\": \"<string>\",\n    \"content\": [\n      {\n        \"type\": \"<string>\",\n        \"content\": \"<string>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"cachePreferred\": \"<boolean>\",\n        \"structuredMessage\": {\n          \"jsonPayload\": \"<object>\",\n          \"schemaName\": \"<string>\",\n          \"healed\": \"<boolean>\"\n        }\n      },\n      {\n        \"type\": \"<string>\",\n        \"content\": \"<string>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"cachePreferred\": \"<boolean>\",\n        \"structuredMessage\": {\n          \"jsonPayload\": \"<object>\",\n          \"schemaName\": \"<string>\",\n          \"healed\": \"<boolean>\"\n        }\n      }\n    ],\n    \"toolCalls\": [\n      {\n        \"id\": \"<string>\",\n        \"name\": \"<string>\",\n        \"argumentsJson\": \"<object>\",\n        \"status\": \"<string>\",\n        \"resultJson\": \"<object>\",\n        \"executedAt\": \"<dateTime>\",\n        \"serverId\": \"<string>\",\n        \"isClientTool\": \"<boolean>\",\n        \"requiresApprovalAt\": \"<dateTime>\",\n        \"approvedAt\": \"<dateTime>\",\n        \"approvedBy\": \"<string>\",\n        \"executionDuration\": \"<string>\"\n      },\n      {\n        \"id\": \"<string>\",\n        \"name\": \"<string>\",\n        \"argumentsJson\": \"<object>\",\n        \"status\": \"<string>\",\n        \"resultJson\": \"<object>\",\n        \"executedAt\": \"<dateTime>\",\n        \"serverId\": \"<string>\",\n        \"isClientTool\": \"<boolean>\",\n        \"requiresApprovalAt\": \"<dateTime>\",\n        \"approvedAt\": \"<dateTime>\",\n        \"approvedBy\": \"<string>\",\n        \"executionDuration\": \"<string>\"\n      }\n    ],\n    \"name\": \"<string>\",\n    \"timestamp\": \"<dateTime>\",\n    \"messageId\": \"<string>\",\n    \"annotations\": [\n      {\n        \"kind\": \"<string>\",\n        \"urlCitation\": {\n          \"url\": \"<string>\",\n          \"title\": \"<string>\",\n          \"content\": \"<string>\",\n          \"startIndex\": \"<integer>\",\n          \"endIndex\": \"<integer>\"\n        },\n        \"pdf\": {\n          \"filename\": \"<string>\",\n          \"engine\": \"<string>\",\n          \"token\": \"<string>\",\n          \"sourceUrl\": \"<string>\",\n          \"hash\": \"<string>\",\n          \"content\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        },\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"kind\": \"<string>\",\n        \"urlCitation\": {\n          \"url\": \"<string>\",\n          \"title\": \"<string>\",\n          \"content\": \"<string>\",\n          \"startIndex\": \"<integer>\",\n          \"endIndex\": \"<integer>\"\n        },\n        \"pdf\": {\n          \"filename\": \"<string>\",\n          \"engine\": \"<string>\",\n          \"token\": \"<string>\",\n          \"sourceUrl\": \"<string>\",\n          \"hash\": \"<string>\",\n          \"content\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        },\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"sequence\": \"<long>\",\n    \"generatedBy\": \"<string>\",\n    \"usage\": {\n      \"promptTokens\": \"<integer>\",\n      \"completionTokens\": \"<integer>\",\n      \"totalTokens\": \"<integer>\",\n      \"costEstimate\": \"<float>\",\n      \"completionTokensDetails\": {\n        \"reasoningTokens\": \"<integer>\",\n        \"textTokens\": \"<integer>\"\n      },\n      \"nativeTokensPrompt\": \"<integer>\",\n      \"nativeTokensCompletion\": \"<integer>\",\n      \"promptTokensDetails\": {\n        \"cachedTokens\": \"<integer>\",\n        \"cacheWriteTokens\": \"<integer>\",\n        \"audioTokens\": \"<integer>\",\n        \"videoTokens\": \"<integer>\"\n      },\n      \"costDetails\": {\n        \"upstreamInferenceCost\": \"<float>\",\n        \"upstreamInferencePromptCost\": \"<float>\",\n        \"upstreamInferenceCompletionCost\": \"<float>\"\n      }\n    },\n    \"model\": \"<string>\",\n    \"generationContext\": {\n      \"memories\": [\n        {\n          \"memoryId\": \"<string>\",\n          \"score\": \"<float>\",\n          \"memoryText\": \"<string>\",\n          \"createdAt\": \"<dateTime>\",\n          \"updatedAt\": \"<dateTime>\"\n        },\n        {\n          \"memoryId\": \"<string>\",\n          \"score\": \"<float>\",\n          \"memoryText\": \"<string>\",\n          \"createdAt\": \"<dateTime>\",\n          \"updatedAt\": \"<dateTime>\"\n        }\n      ],\n      \"relations\": [\n        {\n          \"source\": \"<string>\",\n          \"relationship\": \"<string>\",\n          \"destination\": \"<string>\"\n        },\n        {\n          \"source\": \"<string>\",\n          \"relationship\": \"<string>\",\n          \"destination\": \"<string>\"\n        }\n      ],\n      \"memorySearch\": {\n        \"query\": \"<string>\",\n        \"topK\": \"<integer>\",\n        \"threshold\": \"<double>\",\n        \"rerank\": \"<boolean>\",\n        \"resultsReturned\": \"<integer>\",\n        \"relationsReturned\": \"<integer>\"\n      },\n      \"turn\": {\n        \"currentTurn\": \"<integer>\",\n        \"maxTurns\": \"<integer>\"\n      },\n      \"languagePreference\": \"<string>\",\n      \"profileId\": \"<string>\",\n      \"model\": \"<string>\",\n      \"promptSource\": \"<string>\"\n    },\n    \"clientContext\": {\n      \"values\": {\n        \"key_0\": \"<string>\"\n      }\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Send a message and wait for the result",
              "request": {
                "name": "Send a message and wait for the result",
                "description": {
                  "content": "Sends a user message and blocks until generation completes, returning all generated messages in a single response. Synchronous variant of SendMessage; use SendMessage for fire-and-forget with async polling.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/send-message-sync",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "send-message-sync"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"userMessage\": {\n    \"role\": \"<string>\",\n    \"content\": [\n      {\n        \"type\": \"<string>\",\n        \"content\": \"<string>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"cachePreferred\": \"<boolean>\",\n        \"structuredMessage\": {\n          \"jsonPayload\": \"<object>\",\n          \"schemaName\": \"<string>\",\n          \"healed\": \"<boolean>\"\n        }\n      },\n      {\n        \"type\": \"<string>\",\n        \"content\": \"<string>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"cachePreferred\": \"<boolean>\",\n        \"structuredMessage\": {\n          \"jsonPayload\": \"<object>\",\n          \"schemaName\": \"<string>\",\n          \"healed\": \"<boolean>\"\n        }\n      }\n    ],\n    \"toolCalls\": [\n      {\n        \"id\": \"<string>\",\n        \"name\": \"<string>\",\n        \"argumentsJson\": \"<object>\",\n        \"status\": \"<string>\",\n        \"resultJson\": \"<object>\",\n        \"executedAt\": \"<dateTime>\",\n        \"serverId\": \"<string>\",\n        \"isClientTool\": \"<boolean>\",\n        \"requiresApprovalAt\": \"<dateTime>\",\n        \"approvedAt\": \"<dateTime>\",\n        \"approvedBy\": \"<string>\",\n        \"executionDuration\": \"<string>\"\n      },\n      {\n        \"id\": \"<string>\",\n        \"name\": \"<string>\",\n        \"argumentsJson\": \"<object>\",\n        \"status\": \"<string>\",\n        \"resultJson\": \"<object>\",\n        \"executedAt\": \"<dateTime>\",\n        \"serverId\": \"<string>\",\n        \"isClientTool\": \"<boolean>\",\n        \"requiresApprovalAt\": \"<dateTime>\",\n        \"approvedAt\": \"<dateTime>\",\n        \"approvedBy\": \"<string>\",\n        \"executionDuration\": \"<string>\"\n      }\n    ],\n    \"name\": \"<string>\",\n    \"timestamp\": \"<dateTime>\",\n    \"messageId\": \"<string>\",\n    \"annotations\": [\n      {\n        \"kind\": \"<string>\",\n        \"urlCitation\": {\n          \"url\": \"<string>\",\n          \"title\": \"<string>\",\n          \"content\": \"<string>\",\n          \"startIndex\": \"<integer>\",\n          \"endIndex\": \"<integer>\"\n        },\n        \"pdf\": {\n          \"filename\": \"<string>\",\n          \"engine\": \"<string>\",\n          \"token\": \"<string>\",\n          \"sourceUrl\": \"<string>\",\n          \"hash\": \"<string>\",\n          \"content\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        },\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"kind\": \"<string>\",\n        \"urlCitation\": {\n          \"url\": \"<string>\",\n          \"title\": \"<string>\",\n          \"content\": \"<string>\",\n          \"startIndex\": \"<integer>\",\n          \"endIndex\": \"<integer>\"\n        },\n        \"pdf\": {\n          \"filename\": \"<string>\",\n          \"engine\": \"<string>\",\n          \"token\": \"<string>\",\n          \"sourceUrl\": \"<string>\",\n          \"hash\": \"<string>\",\n          \"content\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        },\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"sequence\": \"<long>\",\n    \"generatedBy\": \"<string>\",\n    \"usage\": {\n      \"promptTokens\": \"<integer>\",\n      \"completionTokens\": \"<integer>\",\n      \"totalTokens\": \"<integer>\",\n      \"costEstimate\": \"<float>\",\n      \"completionTokensDetails\": {\n        \"reasoningTokens\": \"<integer>\",\n        \"textTokens\": \"<integer>\"\n      },\n      \"nativeTokensPrompt\": \"<integer>\",\n      \"nativeTokensCompletion\": \"<integer>\",\n      \"promptTokensDetails\": {\n        \"cachedTokens\": \"<integer>\",\n        \"cacheWriteTokens\": \"<integer>\",\n        \"audioTokens\": \"<integer>\",\n        \"videoTokens\": \"<integer>\"\n      },\n      \"costDetails\": {\n        \"upstreamInferenceCost\": \"<float>\",\n        \"upstreamInferencePromptCost\": \"<float>\",\n        \"upstreamInferenceCompletionCost\": \"<float>\"\n      }\n    },\n    \"model\": \"<string>\",\n    \"generationContext\": {\n      \"memories\": [\n        {\n          \"memoryId\": \"<string>\",\n          \"score\": \"<float>\",\n          \"memoryText\": \"<string>\",\n          \"createdAt\": \"<dateTime>\",\n          \"updatedAt\": \"<dateTime>\"\n        },\n        {\n          \"memoryId\": \"<string>\",\n          \"score\": \"<float>\",\n          \"memoryText\": \"<string>\",\n          \"createdAt\": \"<dateTime>\",\n          \"updatedAt\": \"<dateTime>\"\n        }\n      ],\n      \"relations\": [\n        {\n          \"source\": \"<string>\",\n          \"relationship\": \"<string>\",\n          \"destination\": \"<string>\"\n        },\n        {\n          \"source\": \"<string>\",\n          \"relationship\": \"<string>\",\n          \"destination\": \"<string>\"\n        }\n      ],\n      \"memorySearch\": {\n        \"query\": \"<string>\",\n        \"topK\": \"<integer>\",\n        \"threshold\": \"<double>\",\n        \"rerank\": \"<boolean>\",\n        \"resultsReturned\": \"<integer>\",\n        \"relationsReturned\": \"<integer>\"\n      },\n      \"turn\": {\n        \"currentTurn\": \"<integer>\",\n        \"maxTurns\": \"<integer>\"\n      },\n      \"languagePreference\": \"<string>\",\n      \"profileId\": \"<string>\",\n      \"model\": \"<string>\",\n      \"promptSource\": \"<string>\"\n    },\n    \"clientContext\": {\n      \"values\": {\n        \"key_0\": \"<string>\"\n      }\n    }\n  },\n  \"overrideGenerationConfig\": {\n    \"model\": \"<string>\",\n    \"models\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"systemPrompt\": \"<string>\",\n    \"modelRoutingFilter\": {\n      \"minContextLength\": \"<long>\",\n      \"minMaxCompletionTokens\": \"<long>\",\n      \"requiredInputModalities\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"requiredOutputModalities\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"maxPromptCost\": \"<double>\",\n      \"maxCompletionCost\": \"<double>\",\n      \"excludeModerated\": \"<boolean>\",\n      \"requiredParameters\": [\n        \"<string>\",\n        \"<string>\"\n      ]\n    },\n    \"provider\": {\n      \"order\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"allowFallbacks\": \"<boolean>\",\n      \"requireParameters\": \"<boolean>\",\n      \"dataCollection\": \"<string>\",\n      \"zdr\": \"<boolean>\",\n      \"only\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"ignore\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"quantizations\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"sort\": \"<string>\",\n      \"maxPrice\": {\n        \"prompt\": \"<double>\",\n        \"completion\": \"<double>\",\n        \"request\": \"<double>\",\n        \"image\": \"<double>\",\n        \"audio\": \"<double>\"\n      },\n      \"enforceDistillableText\": \"<boolean>\",\n      \"preferredMinThroughput\": {\n        \"p50\": \"<double>\",\n        \"p90\": \"<double>\"\n      },\n      \"preferredMaxLatency\": {\n        \"p50\": \"<double>\",\n        \"p90\": \"<double>\"\n      }\n    },\n    \"reasoning\": {\n      \"effort\": \"<string>\",\n      \"maxTokens\": \"<integer>\",\n      \"exclude\": \"<boolean>\",\n      \"includeReasoningHistory\": \"<boolean>\"\n    },\n    \"usage\": {\n      \"include\": \"<boolean>\"\n    },\n    \"transforms\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"tools\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      }\n    ],\n    \"toolChoice\": {\n      \"kind\": \"<string>\",\n      \"specificToolName\": \"<string>\"\n    },\n    \"clientTools\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      }\n    ],\n    \"toolPolicy\": {\n      \"requireApprovalToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"requireApprovalServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"approvalMode\": \"<string>\",\n      \"clientToolMode\": \"<string>\",\n      \"approvalTimeoutMs\": \"<integer>\",\n      \"failOnApprovalTimeoutToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"orderRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        }\n      ],\n      \"stableSortByCallIndexOnTie\": \"<boolean>\",\n      \"maxParallelToolCalls\": \"<integer>\",\n      \"maxToolCallsPerLoop\": \"<integer>\",\n      \"maxTotalToolCalls\": \"<integer>\",\n      \"retriableToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"maxRetries\": \"<integer>\",\n      \"retryBackoff\": {\n        \"initialMs\": \"<integer>\",\n        \"multiplier\": \"<double>\",\n        \"maxMs\": \"<integer>\"\n      },\n      \"retryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"nonRetryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeouts\": {\n        \"perToolMs\": \"<integer>\",\n        \"perLoopMs\": \"<integer>\",\n        \"overallMs\": \"<integer>\"\n      },\n      \"failOnTimeout\": \"<boolean>\",\n      \"clientToolTimeoutMs\": \"<integer>\",\n      \"failureMode\": \"<string>\",\n      \"stopOnFailureRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        }\n      ]\n    },\n    \"temperature\": \"<double>\",\n    \"topP\": \"<double>\",\n    \"maxOutputTokens\": \"<integer>\",\n    \"frequencyPenalty\": \"<double>\",\n    \"presencePenalty\": \"<double>\",\n    \"stopSequences\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"seed\": \"<long>\",\n    \"responseFormat\": {\n      \"jsonObject\": \"<boolean>\",\n      \"jsonSchema\": \"<object>\",\n      \"schemaName\": \"<string>\",\n      \"validate\": \"<boolean>\",\n      \"maxValidationRetries\": \"<integer>\",\n      \"responseHealing\": \"<boolean>\"\n    },\n    \"allowParallelToolCalls\": \"<boolean>\",\n    \"topK\": \"<integer>\",\n    \"repetitionPenalty\": \"<double>\",\n    \"logitBias\": {\n      \"key_0\": \"<double>\"\n    },\n    \"topLogprobs\": \"<integer>\",\n    \"minP\": \"<double>\",\n    \"topA\": \"<double>\",\n    \"user\": \"<string>\",\n    \"modalities\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"plugins\": [\n      {\n        \"id\": \"<string>\",\n        \"pdf\": {\n          \"engine\": \"<string>\"\n        },\n        \"web\": {\n          \"engine\": \"<string>\",\n          \"maxResults\": \"<integer>\",\n          \"searchPrompt\": \"<string>\",\n          \"webSearchOptions\": {\n            \"searchContextSize\": \"<string>\"\n          }\n        },\n        \"params\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"id\": \"<string>\",\n        \"pdf\": {\n          \"engine\": \"<string>\"\n        },\n        \"web\": {\n          \"engine\": \"<string>\",\n          \"maxResults\": \"<integer>\",\n          \"searchPrompt\": \"<string>\",\n          \"webSearchOptions\": {\n            \"searchContextSize\": \"<string>\"\n          }\n        },\n        \"params\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"languagePreference\": \"<string>\",\n    \"turnContext\": {\n      \"enabled\": \"<boolean>\",\n      \"includeToolGuidance\": \"<boolean>\",\n      \"format\": \"<string>\"\n    },\n    \"mem0\": {\n      \"enabled\": \"<boolean>\",\n      \"searchTopK\": \"<integer>\",\n      \"searchThreshold\": \"<double>\",\n      \"injectAsSystemContext\": \"<boolean>\",\n      \"searchQueryOverride\": \"<string>\",\n      \"enableRerank\": \"<boolean>\",\n      \"addMemoriesAsync\": \"<boolean>\",\n      \"customExtractionPrompt\": \"<string>\",\n      \"enableGraph\": \"<boolean>\",\n      \"agentIdOverride\": \"<string>\",\n      \"exposeAsMcpTool\": \"<boolean>\",\n      \"includeAssistantMessages\": \"<boolean>\",\n      \"injectMemoryTimestamps\": \"<boolean>\"\n    },\n    \"timeAware\": {\n      \"includeCurrentTime\": \"<boolean>\",\n      \"includeMessageTimestamps\": \"<boolean>\",\n      \"includeFileTimestamps\": \"<boolean>\",\n      \"timezone\": \"<string>\",\n      \"timestampFormat\": \"<string>\"\n    },\n    \"requestTimeoutSeconds\": \"<integer>\",\n    \"fileResolution\": {\n      \"failureMode\": \"<string>\"\n    }\n  },\n  \"setActiveProfileId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Conversations",
          "description": {
            "content": "Conversation state, settings, and context management. See the [Conversations guide](/guides/conversations).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Update conversation settings",
              "request": {
                "name": "Update conversation settings",
                "description": {
                  "content": "Updates conversation-level behavior settings such as interrupt policy, loop limits, MCP server configuration, and tool execution policies.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/update-settings",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "update-settings"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"settings\": {\n    \"interruptPolicy\": \"<string>\",\n    \"maxLoops\": \"<integer>\",\n    \"maxParallelTools\": \"<integer>\",\n    \"mcpServers\": [\n      {\n        \"serverId\": \"<string>\",\n        \"enabled\": \"<boolean>\",\n        \"priority\": \"<integer>\",\n        \"allowlistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"blocklistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"serverOverrides\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"serverId\": \"<string>\",\n        \"enabled\": \"<boolean>\",\n        \"priority\": \"<integer>\",\n        \"allowlistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"blocklistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"serverOverrides\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"toolPolicy\": {\n      \"requireApprovalToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"requireApprovalServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"approvalMode\": \"<string>\",\n      \"clientToolMode\": \"<string>\",\n      \"approvalTimeoutMs\": \"<integer>\",\n      \"failOnApprovalTimeoutToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"orderRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        }\n      ],\n      \"stableSortByCallIndexOnTie\": \"<boolean>\",\n      \"maxParallelToolCalls\": \"<integer>\",\n      \"maxToolCallsPerLoop\": \"<integer>\",\n      \"maxTotalToolCalls\": \"<integer>\",\n      \"retriableToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"maxRetries\": \"<integer>\",\n      \"retryBackoff\": {\n        \"initialMs\": \"<integer>\",\n        \"multiplier\": \"<double>\",\n        \"maxMs\": \"<integer>\"\n      },\n      \"retryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"nonRetryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeouts\": {\n        \"perToolMs\": \"<integer>\",\n        \"perLoopMs\": \"<integer>\",\n        \"overallMs\": \"<integer>\"\n      },\n      \"failOnTimeout\": \"<boolean>\",\n      \"clientToolTimeoutMs\": \"<integer>\",\n      \"failureMode\": \"<string>\",\n      \"stopOnFailureRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        }\n      ]\n    },\n    \"promptVariables\": \"<object>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update prompt variables",
              "request": {
                "name": "Update prompt variables",
                "description": {
                  "content": "Agent Profiles: merges prompt variables into the thread for late-binding. The variables are re-rendered into the active profile's prompt on the next turn. Returns the merged conversation settings.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/update-prompt-variables",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "update-prompt-variables"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"variables\": \"<object>\",\n  \"updateMask\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update default generation config",
              "request": {
                "name": "Update default generation config",
                "description": {
                  "content": "Updates the default LLM generation configuration for a conversation. These defaults apply to every subsequent SendMessage unless overridden per-request.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/update-default-generation-config",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "update-default-generation-config"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"defaultGenerationConfig\": {\n    \"model\": \"<string>\",\n    \"models\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"systemPrompt\": \"<string>\",\n    \"modelRoutingFilter\": {\n      \"minContextLength\": \"<long>\",\n      \"minMaxCompletionTokens\": \"<long>\",\n      \"requiredInputModalities\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"requiredOutputModalities\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"maxPromptCost\": \"<double>\",\n      \"maxCompletionCost\": \"<double>\",\n      \"excludeModerated\": \"<boolean>\",\n      \"requiredParameters\": [\n        \"<string>\",\n        \"<string>\"\n      ]\n    },\n    \"provider\": {\n      \"order\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"allowFallbacks\": \"<boolean>\",\n      \"requireParameters\": \"<boolean>\",\n      \"dataCollection\": \"<string>\",\n      \"zdr\": \"<boolean>\",\n      \"only\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"ignore\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"quantizations\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"sort\": \"<string>\",\n      \"maxPrice\": {\n        \"prompt\": \"<double>\",\n        \"completion\": \"<double>\",\n        \"request\": \"<double>\",\n        \"image\": \"<double>\",\n        \"audio\": \"<double>\"\n      },\n      \"enforceDistillableText\": \"<boolean>\",\n      \"preferredMinThroughput\": {\n        \"p50\": \"<double>\",\n        \"p90\": \"<double>\"\n      },\n      \"preferredMaxLatency\": {\n        \"p50\": \"<double>\",\n        \"p90\": \"<double>\"\n      }\n    },\n    \"reasoning\": {\n      \"effort\": \"<string>\",\n      \"maxTokens\": \"<integer>\",\n      \"exclude\": \"<boolean>\",\n      \"includeReasoningHistory\": \"<boolean>\"\n    },\n    \"usage\": {\n      \"include\": \"<boolean>\"\n    },\n    \"transforms\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"tools\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      }\n    ],\n    \"toolChoice\": {\n      \"kind\": \"<string>\",\n      \"specificToolName\": \"<string>\"\n    },\n    \"clientTools\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"parametersJsonSchema\": \"<object>\",\n        \"metadata\": {\n          \"key_0\": \"<string>\"\n        },\n        \"serverId\": \"<string>\",\n        \"tags\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"documentationUrl\": \"<string>\",\n        \"outputJsonSchema\": \"<object>\"\n      }\n    ],\n    \"toolPolicy\": {\n      \"requireApprovalToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"requireApprovalServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"autoApproveServerIds\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"approvalMode\": \"<string>\",\n      \"clientToolMode\": \"<string>\",\n      \"approvalTimeoutMs\": \"<integer>\",\n      \"failOnApprovalTimeoutToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"orderRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"weight\": \"<integer>\"\n        }\n      ],\n      \"stableSortByCallIndexOnTie\": \"<boolean>\",\n      \"maxParallelToolCalls\": \"<integer>\",\n      \"maxToolCallsPerLoop\": \"<integer>\",\n      \"maxTotalToolCalls\": \"<integer>\",\n      \"retriableToolNamePatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"maxRetries\": \"<integer>\",\n      \"retryBackoff\": {\n        \"initialMs\": \"<integer>\",\n        \"multiplier\": \"<double>\",\n        \"maxMs\": \"<integer>\"\n      },\n      \"retryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"nonRetryableErrorSubstrings\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeouts\": {\n        \"perToolMs\": \"<integer>\",\n        \"perLoopMs\": \"<integer>\",\n        \"overallMs\": \"<integer>\"\n      },\n      \"failOnTimeout\": \"<boolean>\",\n      \"clientToolTimeoutMs\": \"<integer>\",\n      \"failureMode\": \"<string>\",\n      \"stopOnFailureRules\": [\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        },\n        {\n          \"toolNamePatterns\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"serverIds\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"onFailure\": \"<string>\",\n          \"includeTimeouts\": \"<boolean>\",\n          \"errorSubstrings\": [\n            \"<string>\",\n            \"<string>\"\n          ],\n          \"priority\": \"<integer>\"\n        }\n      ]\n    },\n    \"temperature\": \"<double>\",\n    \"topP\": \"<double>\",\n    \"maxOutputTokens\": \"<integer>\",\n    \"frequencyPenalty\": \"<double>\",\n    \"presencePenalty\": \"<double>\",\n    \"stopSequences\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"seed\": \"<long>\",\n    \"responseFormat\": {\n      \"jsonObject\": \"<boolean>\",\n      \"jsonSchema\": \"<object>\",\n      \"schemaName\": \"<string>\",\n      \"validate\": \"<boolean>\",\n      \"maxValidationRetries\": \"<integer>\",\n      \"responseHealing\": \"<boolean>\"\n    },\n    \"allowParallelToolCalls\": \"<boolean>\",\n    \"topK\": \"<integer>\",\n    \"repetitionPenalty\": \"<double>\",\n    \"logitBias\": {\n      \"key_0\": \"<double>\"\n    },\n    \"topLogprobs\": \"<integer>\",\n    \"minP\": \"<double>\",\n    \"topA\": \"<double>\",\n    \"user\": \"<string>\",\n    \"modalities\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"plugins\": [\n      {\n        \"id\": \"<string>\",\n        \"pdf\": {\n          \"engine\": \"<string>\"\n        },\n        \"web\": {\n          \"engine\": \"<string>\",\n          \"maxResults\": \"<integer>\",\n          \"searchPrompt\": \"<string>\",\n          \"webSearchOptions\": {\n            \"searchContextSize\": \"<string>\"\n          }\n        },\n        \"params\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"id\": \"<string>\",\n        \"pdf\": {\n          \"engine\": \"<string>\"\n        },\n        \"web\": {\n          \"engine\": \"<string>\",\n          \"maxResults\": \"<integer>\",\n          \"searchPrompt\": \"<string>\",\n          \"webSearchOptions\": {\n            \"searchContextSize\": \"<string>\"\n          }\n        },\n        \"params\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"languagePreference\": \"<string>\",\n    \"turnContext\": {\n      \"enabled\": \"<boolean>\",\n      \"includeToolGuidance\": \"<boolean>\",\n      \"format\": \"<string>\"\n    },\n    \"mem0\": {\n      \"enabled\": \"<boolean>\",\n      \"searchTopK\": \"<integer>\",\n      \"searchThreshold\": \"<double>\",\n      \"injectAsSystemContext\": \"<boolean>\",\n      \"searchQueryOverride\": \"<string>\",\n      \"enableRerank\": \"<boolean>\",\n      \"addMemoriesAsync\": \"<boolean>\",\n      \"customExtractionPrompt\": \"<string>\",\n      \"enableGraph\": \"<boolean>\",\n      \"agentIdOverride\": \"<string>\",\n      \"exposeAsMcpTool\": \"<boolean>\",\n      \"includeAssistantMessages\": \"<boolean>\",\n      \"injectMemoryTimestamps\": \"<boolean>\"\n    },\n    \"timeAware\": {\n      \"includeCurrentTime\": \"<boolean>\",\n      \"includeMessageTimestamps\": \"<boolean>\",\n      \"includeFileTimestamps\": \"<boolean>\",\n      \"timezone\": \"<string>\",\n      \"timestampFormat\": \"<string>\"\n    },\n    \"requestTimeoutSeconds\": \"<integer>\",\n    \"fileResolution\": {\n      \"failureMode\": \"<string>\"\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update context management settings",
              "request": {
                "name": "Update context management settings",
                "description": {
                  "content": "Updates context management settings for a conversation, including strategy (compaction, windowing, none), compaction thresholds, windowing limits, and selective exclusion rules.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/update-context-management-settings",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "update-context-management-settings"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"contextManagementSettings\": {\n    \"strategy\": \"<string>\",\n    \"compactionConfig\": {\n      \"mode\": \"<string>\",\n      \"threshold\": {\n        \"tokenCount\": \"<integer>\",\n        \"percentage\": \"<integer>\"\n      },\n      \"generationConfig\": {\n        \"model\": \"<string>\",\n        \"models\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"systemPrompt\": \"<string>\",\n        \"modelRoutingFilter\": {\n          \"minContextLength\": \"<long>\",\n          \"minMaxCompletionTokens\": \"<long>\",\n          \"requiredInputModalities\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"requiredOutputModalities\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"maxPromptCost\": \"<double>\",\n          \"maxCompletionCost\": \"<double>\",\n          \"excludeModerated\": \"<boolean>\",\n          \"requiredParameters\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        },\n        \"provider\": {\n          \"order\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"allowFallbacks\": \"<boolean>\",\n          \"requireParameters\": \"<boolean>\",\n          \"dataCollection\": \"<string>\",\n          \"zdr\": \"<boolean>\",\n          \"only\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"ignore\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"quantizations\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"sort\": \"<string>\",\n          \"maxPrice\": {\n            \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n          },\n          \"enforceDistillableText\": \"<boolean>\",\n          \"preferredMinThroughput\": {\n            \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n          },\n          \"preferredMaxLatency\": {\n            \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n          }\n        },\n        \"reasoning\": {\n          \"effort\": \"<string>\",\n          \"maxTokens\": \"<integer>\",\n          \"exclude\": \"<boolean>\",\n          \"includeReasoningHistory\": \"<boolean>\"\n        },\n        \"usage\": {\n          \"include\": \"<boolean>\"\n        },\n        \"transforms\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"tools\": [\n          {\n            \"name\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"description\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"parametersJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"metadata\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"serverId\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"tags\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"documentationUrl\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"outputJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          {\n            \"name\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"description\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"parametersJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"metadata\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"serverId\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"tags\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"documentationUrl\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"outputJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          }\n        ],\n        \"toolChoice\": {\n          \"kind\": \"<string>\",\n          \"specificToolName\": \"<string>\"\n        },\n        \"clientTools\": [\n          {\n            \"name\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"description\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"parametersJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"metadata\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"serverId\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"tags\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"documentationUrl\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"outputJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          {\n            \"name\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"description\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"parametersJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"metadata\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"serverId\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"tags\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"documentationUrl\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"outputJsonSchema\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          }\n        ],\n        \"toolPolicy\": {\n          \"requireApprovalToolNamePatterns\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"requireApprovalServerIds\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"autoApproveToolNamePatterns\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"autoApproveServerIds\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"approvalMode\": \"<string>\",\n          \"clientToolMode\": \"<string>\",\n          \"approvalTimeoutMs\": \"<integer>\",\n          \"failOnApprovalTimeoutToolNamePatterns\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"orderRules\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"stableSortByCallIndexOnTie\": \"<boolean>\",\n          \"maxParallelToolCalls\": \"<integer>\",\n          \"maxToolCallsPerLoop\": \"<integer>\",\n          \"maxTotalToolCalls\": \"<integer>\",\n          \"retriableToolNamePatterns\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"maxRetries\": \"<integer>\",\n          \"retryBackoff\": {\n            \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n          },\n          \"retryableErrorSubstrings\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"nonRetryableErrorSubstrings\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"timeouts\": {\n            \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n          },\n          \"failOnTimeout\": \"<boolean>\",\n          \"clientToolTimeoutMs\": \"<integer>\",\n          \"failureMode\": \"<string>\",\n          \"stopOnFailureRules\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        },\n        \"temperature\": \"<double>\",\n        \"topP\": \"<double>\",\n        \"maxOutputTokens\": \"<integer>\",\n        \"frequencyPenalty\": \"<double>\",\n        \"presencePenalty\": \"<double>\",\n        \"stopSequences\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"seed\": \"<long>\",\n        \"responseFormat\": {\n          \"jsonObject\": \"<boolean>\",\n          \"jsonSchema\": \"<object>\",\n          \"schemaName\": \"<string>\",\n          \"validate\": \"<boolean>\",\n          \"maxValidationRetries\": \"<integer>\",\n          \"responseHealing\": \"<boolean>\"\n        },\n        \"allowParallelToolCalls\": \"<boolean>\",\n        \"topK\": \"<integer>\",\n        \"repetitionPenalty\": \"<double>\",\n        \"logitBias\": {\n          \"key_0\": \"<double>\"\n        },\n        \"topLogprobs\": \"<integer>\",\n        \"minP\": \"<double>\",\n        \"topA\": \"<double>\",\n        \"user\": \"<string>\",\n        \"modalities\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"plugins\": [\n          {\n            \"id\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"pdf\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"web\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"params\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          {\n            \"id\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"pdf\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"web\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"params\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          }\n        ],\n        \"languagePreference\": \"<string>\",\n        \"turnContext\": {\n          \"enabled\": \"<boolean>\",\n          \"includeToolGuidance\": \"<boolean>\",\n          \"format\": \"<string>\"\n        },\n        \"mem0\": {\n          \"enabled\": \"<boolean>\",\n          \"searchTopK\": \"<integer>\",\n          \"searchThreshold\": \"<double>\",\n          \"injectAsSystemContext\": \"<boolean>\",\n          \"searchQueryOverride\": \"<string>\",\n          \"enableRerank\": \"<boolean>\",\n          \"addMemoriesAsync\": \"<boolean>\",\n          \"customExtractionPrompt\": \"<string>\",\n          \"enableGraph\": \"<boolean>\",\n          \"agentIdOverride\": \"<string>\",\n          \"exposeAsMcpTool\": \"<boolean>\",\n          \"includeAssistantMessages\": \"<boolean>\",\n          \"injectMemoryTimestamps\": \"<boolean>\"\n        },\n        \"timeAware\": {\n          \"includeCurrentTime\": \"<boolean>\",\n          \"includeMessageTimestamps\": \"<boolean>\",\n          \"includeFileTimestamps\": \"<boolean>\",\n          \"timezone\": \"<string>\",\n          \"timestampFormat\": \"<string>\"\n        },\n        \"requestTimeoutSeconds\": \"<integer>\",\n        \"fileResolution\": {\n          \"failureMode\": \"<string>\"\n        }\n      },\n      \"preserveRecent\": \"<integer>\"\n    },\n    \"windowingConfig\": {\n      \"maxMessages\": \"<integer>\"\n    },\n    \"selectiveExclusionConfig\": {\n      \"excludeToolResults\": \"<boolean>\",\n      \"excludeImages\": \"<boolean>\",\n      \"excludeFiles\": \"<boolean>\",\n      \"excludeReasoning\": \"<boolean>\"\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Compact a conversation",
              "request": {
                "name": "Compact a conversation",
                "description": {
                  "content": "Triggers context compaction for a conversation, summarizing older messages to reduce token usage. Returns compaction statistics including tokens before and after and tokens saved.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/compact-conversation",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "compact-conversation"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get full conversation state",
              "request": {
                "name": "Get full conversation state",
                "description": {
                  "content": "Returns the complete state of a conversation including message history, generation config, settings, active run status, context management settings, and compaction history. Address the conversation by either the generated `conversationKey` (thread ID) or the `externalId` you supplied at creation — exactly one must be set, and both return the same state. An unknown or non-owned `externalId` returns 404.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/conversation-state",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "conversation-state"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"externalId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Feedback",
          "description": {
            "content": "Rate assistant messages with a thumb or a 1–10 scale, and withdraw ratings. One rating is kept per rater per message; the rater is derived server-side from the request headers.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Rate an assistant message",
              "request": {
                "name": "Rate an assistant message",
                "description": {
                  "content": "Records the caller's rating on an assistant-generated message, addressed by its\nper-conversation `messageSequence`. Two rating styles are available via `kind`:\na binary thumb (`FEEDBACK_KIND_THUMB` + `thumbUp`) or a 1–10 scale\n(`FEEDBACK_KIND_SCALE` + `rating`).\n\nThe rater is derived server-side from the verified request headers — there is\ndeliberately no \"who is rating\" parameter. One rating is kept per rater per\nmessage, so re-rating the same message replaces the caller's previous entry and\nreturns `is_update: true`.\n\nThe response carries the full message with the complete (all-rater) `feedback`\nlist applied.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/rate-message",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "rate-message"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"messageSequence\": \"<long>\",\n  \"kind\": \"<string>\",\n  \"thumbUp\": \"<boolean>\",\n  \"rating\": \"<integer>\",\n  \"reason\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Withdraw your rating on a message",
              "request": {
                "name": "Withdraw your rating on a message",
                "description": {
                  "content": "Removes the caller's own rating from a message. As with `rate-message`, the rater\nis derived server-side from the verified request headers.\n\nThis is idempotent: withdrawing a rating that was never left is a success, not an\nerror — the response returns `removed: false` in that case.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/delete-message-rating",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "delete-message-rating"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"messageSequence\": \"<long>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Voice",
          "description": {
            "content": "Real-time voice sessions via Daily and Pipecat. **In progress — not yet generally available.**",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a voice session (in progress)",
              "request": {
                "name": "Create a voice session (in progress)",
                "description": {
                  "content": "**In progress — not yet generally available.** Creates a Pipecat Daily voice session for the specified conversation. This provisions a Daily room and connects a Pipecat agent for real-time voice interaction tied to the conversation's state and history.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/create-daily-session",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "create-daily-session"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"agentName\": \"<string>\",\n  \"socayoConfig\": {\n    \"conversationKey\": \"<string>\",\n    \"userId\": \"<string>\",\n    \"provider\": \"<string>\",\n    \"tts\": {\n      \"voiceId\": \"<string>\",\n      \"model\": \"<string>\",\n      \"sampleRate\": \"<integer>\",\n      \"volume\": \"<double>\",\n      \"speed\": \"<double>\",\n      \"emotion\": \"<string>\",\n      \"language\": \"<string>\"\n    },\n    \"heygen\": {\n      \"enabled\": \"<boolean>\",\n      \"avatarId\": \"<string>\",\n      \"version\": \"<string>\",\n      \"quality\": \"<string>\",\n      \"videoEncoding\": \"<string>\",\n      \"voice\": {\n        \"voiceId\": \"<string>\",\n        \"rate\": \"<double>\",\n        \"emotion\": \"<string>\",\n        \"elevenlabsSettings\": {\n          \"stability\": \"<double>\",\n          \"similarityBoost\": \"<double>\",\n          \"modelId\": \"<string>\",\n          \"style\": \"<integer>\",\n          \"useSpeakerBoost\": \"<boolean>\"\n        }\n      },\n      \"knowledgeId\": \"<string>\",\n      \"knowledgeBase\": \"<string>\",\n      \"disableIdleTimeout\": \"<boolean>\",\n      \"activityIdleTimeout\": \"<double>\"\n    },\n    \"transport\": {\n      \"audioInSampleRate\": \"<integer>\",\n      \"audioOutSampleRate\": \"<integer>\"\n    },\n    \"extras\": \"<object>\"\n  },\n  \"createDailyRoom\": \"<boolean>\",\n  \"dailyRoomProperties\": {\n    \"nbf\": \"<long>\",\n    \"exp\": \"<long>\",\n    \"maxParticipants\": \"<integer>\",\n    \"enablePeopleUi\": \"<boolean>\",\n    \"enablePipUi\": \"<boolean>\",\n    \"enableEmojiReactions\": \"<boolean>\",\n    \"enableHandRaising\": \"<boolean>\",\n    \"enablePrejoinUi\": \"<boolean>\",\n    \"enableLiveCaptionsUi\": \"<boolean>\",\n    \"enableNetworkUi\": \"<boolean>\",\n    \"enableNoiseCancellationUi\": \"<boolean>\",\n    \"enableBreakoutRooms\": \"<boolean>\",\n    \"enableKnocking\": \"<boolean>\",\n    \"ownerOnlyBroadcast\": \"<boolean>\",\n    \"enforceUniqueUserIds\": \"<boolean>\",\n    \"enableScreenshare\": \"<boolean>\",\n    \"enableVideoProcessingUi\": \"<boolean>\",\n    \"enableChat\": \"<boolean>\",\n    \"enableSharedChatHistory\": \"<boolean>\",\n    \"enableAdvancedChat\": \"<boolean>\",\n    \"enableHiddenParticipants\": \"<boolean>\",\n    \"startVideoOff\": \"<boolean>\",\n    \"startAudioOff\": \"<boolean>\",\n    \"enableRecording\": \"<string>\",\n    \"ejectAtRoomExp\": \"<boolean>\",\n    \"ejectAfterElapsed\": \"<integer>\",\n    \"enableMeshSfu\": \"<boolean>\",\n    \"sfuSwitchover\": \"<float>\",\n    \"enableAdaptiveSimulcast\": \"<boolean>\",\n    \"lang\": \"<string>\",\n    \"geo\": \"<string>\"\n  },\n  \"dailyMeetingTokenProperties\": {\n    \"isOwner\": \"<boolean>\",\n    \"enableAutoRecording\": \"<boolean>\"\n  },\n  \"userData\": {\n    \"fields\": \"<object>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Tool Approvals",
          "description": {
            "content": "Manage tool call approval workflows. See the [MCP Tools guide](/guides/mcp-tools) for the full approval flow.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "List pending tool approvals",
              "request": {
                "name": "List pending tool approvals",
                "description": {
                  "content": "Returns all tool calls in the active generation run that are awaiting human approval. Used when the tool execution policy requires confirmation before executing certain tools.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/list-pending-approvals",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "list-pending-approvals"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Approve or reject pending tool calls",
              "request": {
                "name": "Approve or reject pending tool calls",
                "description": {
                  "content": "Submits approval decisions for one or more pending tool calls. Approved tools proceed to execution; rejected tools are marked as cancelled with the provided reason.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/submit-tool-approvals",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "submit-tool-approvals"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"approvals\": [\n    {\n      \"toolCallId\": \"<string>\",\n      \"toolName\": \"<string>\",\n      \"approved\": \"<boolean>\",\n      \"reason\": \"<string>\"\n    },\n    {\n      \"toolCallId\": \"<string>\",\n      \"toolName\": \"<string>\",\n      \"approved\": \"<boolean>\",\n      \"reason\": \"<string>\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Client Tools",
          "description": {
            "content": "Submit results from client-side tool executions. See the [MCP Tools guide](/guides/mcp-tools) for client-side tool patterns.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Submit client-side tool execution results",
              "request": {
                "name": "Submit client-side tool execution results",
                "description": {
                  "content": "Submits results for tool calls that were designated as client-side tools. The client executes these tools locally and returns the results here, allowing the generation workflow to continue.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/submit-client-tool-results",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "submit-client-tool-results"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationKey\": \"<string>\",\n  \"results\": [\n    {\n      \"toolCallId\": \"<string>\",\n      \"toolName\": \"<string>\",\n      \"resultJson\": \"<object>\",\n      \"error\": {\n        \"code\": \"<string>\",\n        \"message\": \"<string>\",\n        \"isTerminal\": \"<boolean>\",\n        \"details\": {\n          \"errorInfo\": {\n            \"reason\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"domain\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"metadata\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          \"retryInfo\": {\n            \"retryDelayMs\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          \"fieldViolations\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"upstreamError\": {\n            \"provider\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"statusCode\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"rawBody\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          \"modelError\": {\n            \"modelId\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"reason\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"alternativesTried\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          \"helpLinks\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        }\n      }\n    },\n    {\n      \"toolCallId\": \"<string>\",\n      \"toolName\": \"<string>\",\n      \"resultJson\": \"<object>\",\n      \"error\": {\n        \"code\": \"<string>\",\n        \"message\": \"<string>\",\n        \"isTerminal\": \"<boolean>\",\n        \"details\": {\n          \"errorInfo\": {\n            \"reason\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"domain\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"metadata\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          \"retryInfo\": {\n            \"retryDelayMs\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          \"fieldViolations\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ],\n          \"upstreamError\": {\n            \"provider\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"statusCode\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"rawBody\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          \"modelError\": {\n            \"modelId\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"reason\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            \"alternativesTried\": {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          },\n          \"helpLinks\": [\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            },\n            {\n              \"value\": \"<Error: Too many levels of nesting to fake this schema>\"\n            }\n          ]\n        }\n      }\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "MCP Servers",
          "description": {
            "content": "Discover and introspect registered MCP servers. See the [MCP Tools guide](/guides/mcp-tools).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "List available MCP servers",
              "request": {
                "name": "List available MCP servers",
                "description": {
                  "content": "Returns the status of all configured MCP (Model Context Protocol) servers, including connection status, tool counts, and last discovery time. Optionally includes disconnected servers.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/mcp-list-available-servers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "mcp-list-available-servers"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"includeDisconnected\": \"<boolean>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get detailed MCP server info",
              "request": {
                "name": "Get detailed MCP server info",
                "description": {
                  "content": "Returns detailed information about a specific MCP server including its version, capabilities, metadata, connection status, and the full list of tools it provides.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/mcp-get-server-info",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "mcp-get-server-info"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"serverId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Reload MCP server configuration",
              "request": {
                "name": "Reload MCP server configuration",
                "description": {
                  "content": "**Not exposed through the public gateway.** The handler is implemented and registered, but `api.travila.ai` has no route for it, so a call returns 404. This is an operational call rather than an application one and may stay internal.\n\nReloads the MCP server configuration, reconnecting to configured servers and refreshing tool discovery. Returns which servers loaded successfully and which failed.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/mcp-reload-config",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "mcp-reload-config"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"configPath\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "MCP Tools",
          "description": {
            "content": "List and directly invoke MCP tools. See the [MCP Tools guide](/guides/mcp-tools).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "List available MCP tools",
              "request": {
                "name": "List available MCP tools",
                "description": {
                  "content": "Returns all tools discovered across MCP servers. Optionally filters by specific server references. Each tool includes its name, description, parameter schema, and server of origin.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/mcp-list-tools",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "mcp-list-tools"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"servers\": [\n    {\n      \"serverId\": \"<string>\",\n      \"enabled\": \"<boolean>\",\n      \"priority\": \"<integer>\",\n      \"allowlistToolPatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"blocklistToolPatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"serverOverrides\": {\n        \"key_0\": \"<string>\"\n      }\n    },\n    {\n      \"serverId\": \"<string>\",\n      \"enabled\": \"<boolean>\",\n      \"priority\": \"<integer>\",\n      \"allowlistToolPatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"blocklistToolPatterns\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"serverOverrides\": {\n        \"key_0\": \"<string>\"\n      }\n    }\n  ],\n  \"sessionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Execute an MCP tool",
              "request": {
                "name": "Execute an MCP tool",
                "description": {
                  "content": "Directly invokes a specific MCP tool by name with the provided arguments. Returns the tool execution result, status, and timing information. Useful for testing tools outside of a conversation flow.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/mcp-call-tool",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "mcp-call-tool"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"toolCall\": {\n    \"id\": \"<string>\",\n    \"name\": \"<string>\",\n    \"argumentsJson\": \"<object>\",\n    \"status\": \"<string>\",\n    \"resultJson\": \"<object>\",\n    \"executedAt\": \"<dateTime>\",\n    \"serverId\": \"<string>\",\n    \"isClientTool\": \"<boolean>\",\n    \"requiresApprovalAt\": \"<dateTime>\",\n    \"approvedAt\": \"<dateTime>\",\n    \"approvedBy\": \"<string>\",\n    \"executionDuration\": \"<string>\"\n  },\n  \"requestId\": \"<string>\",\n  \"sessionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "MCP Resources",
          "description": {
            "content": "Access structured data resources from MCP servers. See the [MCP Tools guide](/guides/mcp-tools).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "List MCP resources",
              "request": {
                "name": "List MCP resources",
                "description": {
                  "content": "Returns resources exposed by a specific MCP server. Resources are data objects (files, database records, etc.) that can be read by the LLM. Supports filtering by URI pattern.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/mcp-list-resources",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "mcp-list-resources"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"serverId\": \"<string>\",\n  \"uriFilter\": \"<string>\",\n  \"sessionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Read an MCP resource",
              "request": {
                "name": "Read an MCP resource",
                "description": {
                  "content": "Reads the content of a specific resource by URI from an MCP server. Returns the resource metadata and content (text, images, etc.) if available.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/mcp-read-resource",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "mcp-read-resource"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"serverId\": \"<string>\",\n  \"uri\": \"<string>\",\n  \"sessionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "MCP Prompts",
          "description": {
            "content": "Retrieve reusable prompt templates from MCP servers. See the [MCP Tools guide](/guides/mcp-tools).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "List MCP prompt templates",
              "request": {
                "name": "List MCP prompt templates",
                "description": {
                  "content": "Returns prompt templates exposed by a specific MCP server. Prompts are parameterized templates that can be rendered with user-supplied arguments.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/mcp-list-prompts",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "mcp-list-prompts"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"serverId\": \"<string>\",\n  \"nameFilter\": \"<string>\",\n  \"sessionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get an MCP prompt template",
              "request": {
                "name": "Get an MCP prompt template",
                "description": {
                  "content": "Returns a specific prompt template by name from an MCP server, including its parameters and template string.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/mcp-get-prompt",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "mcp-get-prompt"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"serverId\": \"<string>\",\n  \"name\": \"<string>\",\n  \"sessionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Memory",
          "description": {
            "content": "Semantic memory search and CRUD. See the [Memory guide](/guides/memory) for how memories integrate with conversations.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Semantic search over memories",
              "request": {
                "name": "Semantic search over memories",
                "description": {
                  "content": "Performs a semantic search over the authenticated user's memories. Returns memories ranked by relevance along with optional graph relations. Supports filtering by categories and relevance threshold.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/search-memories",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "search-memories"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"query\": \"<string>\",\n  \"topK\": \"<integer>\",\n  \"threshold\": \"<float>\",\n  \"rerank\": \"<boolean>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List user memories",
              "request": {
                "name": "List user memories",
                "description": {
                  "content": "Returns all memories for the authenticated user, optionally filtered by agent ID and categories. Returns up to the specified limit.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/list-memories",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "list-memories"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"agentId\": \"<string>\",\n  \"limit\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get a specific memory",
              "request": {
                "name": "Get a specific memory",
                "description": {
                  "content": "Retrieves a single memory by its ID for the authenticated user.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/get-memory",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "get-memory"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"memoryId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update a memory",
              "request": {
                "name": "Update a memory",
                "description": {
                  "content": "Updates the text content of a specific memory by ID.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/update-memory",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "update-memory"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"memoryId\": \"<string>\",\n  \"text\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete a memory",
              "request": {
                "name": "Delete a memory",
                "description": {
                  "content": "Permanently deletes a specific memory by ID.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/llm/delete-memory",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "llm",
                    "delete-memory"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"memoryId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        }
      ]
    },
    {
      "name": "Storage APIs",
      "description": "File and object storage management for users. Provides folder CRUD, file upload/download (including pre-signed URLs), metadata management, search, and quota tracking.\n\nAll endpoints use `POST /api/v1/storage/<method>` with a JSON request body.\n\n### Field naming\n\nRequest bodies accept **either** `snake_case` or `camelCase` — both parse. Response bodies are\nalways **`camelCase`** (`fileId`, `fullPath`, `requiredHeaders`), because responses are encoded\nwith protojson. Fields that are unset, empty, zero, or `false` are **omitted from the response\nentirely** rather than sent as `null` — read them with a default, not a presence check.\n\nSee the [Storage guide](/guides/storage) for upload patterns, pre-signed URLs, folder management, and quota.\n",
      "item": [
        {
          "name": "Folders",
          "description": {
            "content": "Folder management — create and delete directory containers. See the [Storage guide](/guides/storage).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a new folder",
              "request": {
                "name": "Create a new folder",
                "description": {
                  "content": "Creates a new folder at the specified path. If intermediate folders do not exist they are created automatically. Returns the folder metadata and a flag indicating whether it was newly created.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/create-folder",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "create-folder"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"folderPath\": \"<string>\",\n  \"metadata\": {\n    \"key_0\": \"<string>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete a folder",
              "request": {
                "name": "Delete a folder",
                "description": {
                  "content": "Deletes a folder at the given path. When `recursive` is true, all contained files and subfolders are removed as well. Returns counts of deleted items.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/delete-folder",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "delete-folder"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"folderPath\": \"<string>\",\n  \"recursive\": \"<boolean>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Uploads & Downloads",
          "description": {
            "content": "File upload (inline and pre-signed) and pre-signed download URLs. See the [Storage guide](/guides/storage) for both inline and large-file patterns.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Generate a pre-signed upload URL",
              "request": {
                "name": "Generate a pre-signed upload URL",
                "description": {
                  "content": "Step 1 of the 3-step upload flow. Generates a time-limited pre-signed URL for uploading directly to the storage backend (bypassing the gateway for the actual bytes). `sizeBytes` is **required**: it is pre-checked against the user's quota and cryptographically bound into the URL (`x-goog-content-length-range`), so the storage backend itself rejects larger uploads. The response includes `requiredHeaders` the client must send verbatim with the `PUT`, and the `fileId` to pass to `register-uploaded-file` afterwards.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/generate-upload-url",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "generate-upload-url"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"folderPath\": \"<string>\",\n  \"fileName\": \"<string>\",\n  \"sizeBytes\": \"<long>\",\n  \"contentType\": \"<string>\",\n  \"expiresSeconds\": \"<integer>\",\n  \"metadata\": {\n    \"key_0\": \"<string>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Register a file uploaded via pre-signed URL",
              "request": {
                "name": "Register a file uploaded via pre-signed URL",
                "description": {
                  "content": "Step 3 of the 3-step upload flow. After `PUT`ting the bytes to the pre-signed URL, call this with the `fileId` from `generate-upload-url` (plus the same `folderPath` and the display `fileName`) to make the file visible to `list-files`, `get-file-metadata`, and `generate-download-url`. Size and content type are read from the storage backend — client-declared values are not trusted. Idempotent: re-registering an already-registered `fileId` returns the existing file with `registered: false`. Registering before the upload completed returns `404`.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/register-uploaded-file",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "register-uploaded-file"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fileId\": \"<string>\",\n  \"fileName\": \"<string>\",\n  \"folderPath\": \"<string>\",\n  \"metadata\": {\n    \"key_0\": \"<string>\"\n  },\n  \"tags\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Generate a pre-signed download URL",
              "request": {
                "name": "Generate a pre-signed download URL",
                "description": {
                  "content": "Generates a time-limited pre-signed URL for downloading a file directly from the storage backend. Optionally sets a `Content-Disposition` header to force a download with a specific filename.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/generate-download-url",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "generate-download-url"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fileId\": \"<string>\",\n  \"expiresSeconds\": \"<integer>\",\n  \"responseContentDisposition\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Generate pre-signed download URLs for multiple files",
              "request": {
                "name": "Generate pre-signed download URLs for multiple files",
                "description": {
                  "content": "Generates time-limited pre-signed download URLs for a batch of files (1–50 per request), identified by `fileIds`. Each entry in the response reports success or failure independently, so a bad `fileId` fails only its own entry rather than the whole batch.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/batch-generate-download-urls",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "batch-generate-download-urls"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fileIds\": [\n    \"<string>\"\n  ],\n  \"expiresSeconds\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Files",
          "description": {
            "content": "File listing, search, move, and delete. See the [Storage guide](/guides/storage).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "List files and folders in a directory",
              "request": {
                "name": "List files and folders in a directory",
                "description": {
                  "content": "Lists files and subfolders under the given folder path. Supports recursive listing, pagination, and filtering by extension, tags, size, upload date, or name substring.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/list-files",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "list-files"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"folderPath\": \"<string>\",\n  \"recursive\": \"<boolean>\",\n  \"pageSize\": \"<integer>\",\n  \"pageToken\": \"<string>\",\n  \"filter\": {\n    \"extensions\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"tags\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"minSizeBytes\": \"<long>\",\n    \"maxSizeBytes\": \"<long>\",\n    \"uploadedAfter\": \"<dateTime>\",\n    \"uploadedBefore\": \"<dateTime>\",\n    \"nameContains\": \"<string>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Upload a file (deprecated)",
              "request": {
                "name": "Upload a file (deprecated)",
                "description": {
                  "content": "**Deprecated — use the 3-step pre-signed flow instead** (`generate-upload-url` → `PUT` → `register-uploaded-file`).\n\nUploads a file with inline content (base64-encoded bytes) to the specified folder. Custom metadata and tags may be attached. For large files, prefer the pre-signed flow — inline uploads ship the full bytes synchronously and can be slow.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/upload-file",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "upload-file"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"folderPath\": \"<string>\",\n  \"fileName\": \"<string>\",\n  \"content\": \"<byte>\",\n  \"contentType\": \"<string>\",\n  \"metadata\": {\n    \"key_0\": \"<string>\"\n  },\n  \"tags\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete a file",
              "request": {
                "name": "Delete a file",
                "description": {
                  "content": "Permanently deletes a file by its ID and frees the associated storage quota.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/delete-file",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "delete-file"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fileId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Move or rename a file",
              "request": {
                "name": "Move or rename a file",
                "description": {
                  "content": "Moves a file from its current location to a different folder. Optionally renames the file during the move by supplying `newName`.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/move-file",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "move-file"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fileId\": \"<string>\",\n  \"destinationFolder\": \"<string>\",\n  \"newName\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Search files",
              "request": {
                "name": "Search files",
                "description": {
                  "content": "Searches across the user's storage by query string (matched against file names, tags, and content metadata). Results can be further narrowed with a `FileFilter`.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/search-files",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "search-files"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"query\": \"<string>\",\n  \"filter\": {\n    \"extensions\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"tags\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"minSizeBytes\": \"<long>\",\n    \"maxSizeBytes\": \"<long>\",\n    \"uploadedAfter\": \"<dateTime>\",\n    \"uploadedBefore\": \"<dateTime>\",\n    \"nameContains\": \"<string>\"\n  },\n  \"maxResults\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Metadata",
          "description": {
            "content": "File metadata and tag management. See the [Storage guide](/guides/storage).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Get file metadata",
              "request": {
                "name": "Get file metadata",
                "description": {
                  "content": "Retrieves the full metadata for a single file, including custom metadata, tags, storage reference, and checksum.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/get-file-metadata",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "get-file-metadata"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fileId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update file metadata",
              "request": {
                "name": "Update file metadata",
                "description": {
                  "content": "Updates a file's custom metadata map, tags, and/or description. Provided metadata keys are merged (overwrite existing keys; omit keys to leave unchanged).",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/update-file-metadata",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "update-file-metadata"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fileId\": \"<string>\",\n  \"metadata\": {\n    \"key_0\": \"<string>\"\n  },\n  \"tags\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"description\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Quota & State",
          "description": {
            "content": "Storage quota usage and account state. See the [Storage guide](/guides/storage).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Get storage usage and quota",
              "request": {
                "name": "Get storage usage and quota",
                "description": {
                  "content": "Returns the authenticated user's current storage usage (bytes used, file count, folder count) and quota limit, along with a percentage utilization figure.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/get-storage-quota",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "get-storage-quota"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "<object>",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get complete storage manager state",
              "request": {
                "name": "Get complete storage manager state",
                "description": {
                  "content": "Returns the user's complete storage state in a single call — all folders, files, quota, and timestamps. Primarily intended for debugging and administrative use.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/storage/get-state",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "storage",
                    "get-state"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "<object>",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        }
      ]
    },
    {
      "name": "End User APIs",
      "description": "Self-service profile management for end users — location, locale, default generation\nconfig, and free-form metadata.\n\nEvery endpoint is scoped to **the caller's own profile**. The user is derived\nserver-side from the gateway-verified `x-user-id` / `x-tenant-id` headers, so there\nis deliberately no user identifier in any request body: an end user can only read and\nwrite their own record, and there is no way to address someone else's.\n\n### Field naming\n\nRequest bodies accept **either** `snake_case` or `camelCase` — both parse. Response\nbodies are always **`camelCase`** (`endUser`, `localeOverride`, `defaultGenerationConfig`),\nbecause responses are encoded with protojson. Fields that are unset, empty, zero, or\n`false` are **omitted from the response entirely** rather than sent as `null` — read\nthem with a default, not a presence check.\n\nAll endpoints use `POST /api/v1/enduser/<method>` with a JSON request body.\n",
      "item": [
        {
          "name": "Profile",
          "description": {
            "content": "Read the caller's end-user profile.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Get the caller's end-user profile",
              "request": {
                "name": "Get the caller's end-user profile",
                "description": {
                  "content": "Returns the caller's full end-user record — identity claims sourced from the\nidentity provider, profile settings the user has set, and lifecycle timestamps.\n\nIf no row exists yet for this user, the call still succeeds and returns an empty\n`endUser` object rather than a 404. Treat \"no profile yet\" and \"profile with no\noverrides\" identically.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/enduser/get",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "enduser",
                    "get"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Preferences",
          "description": {
            "content": "Update the caller's location, locale, default generation config, and metadata.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Update the caller's location",
              "request": {
                "name": "Update the caller's location",
                "description": {
                  "content": "Sets the caller's coordinates. The IANA timezone is **derived server-side** from\nthe coordinates and returned on the response — do not send a timezone.\n\n`city` is reserved for a later release and is currently always empty (there is no\nreverse geocoding yet).\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/enduser/update-location",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "enduser",
                    "update-location"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"latitude\": \"<double>\",\n  \"longitude\": \"<double>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update the caller's locale override",
              "request": {
                "name": "Update the caller's locale override",
                "description": {
                  "content": "Sets a BCP-47 locale override for the caller, e.g. `es-MX`. This overrides the\nlocale supplied by the identity provider.\n\nSend an **empty string** to clear the override and fall back to the\nidentity-provider locale.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/enduser/update-locale",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "enduser",
                    "update-locale"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"locale\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update the caller's default generation config",
              "request": {
                "name": "Update the caller's default generation config",
                "description": {
                  "content": "Sets the caller's default generation config, applied as the base for their\nconversations.\n\nOnly **user-settable** fields are accepted: `model`, `models`, the core sampling\nparameters (`temperature`, `topP`, `maxOutputTokens`, `frequencyPenalty`,\n`presencePenalty`, `stopSequences`, `seed`), and `languagePreference`.\n\nOperational fields — `systemPrompt`, `tools`, `clientTools`, `toolPolicy`,\nMCP settings, timeouts, and anything else — are **rejected**, not silently\ndropped: a config carrying any of them fails the whole request. The allowlist is\nclosed by default, so fields added to the generation config in future releases are\nrejected here until they are explicitly opened up.\n\nModels are additionally checked against the platform model allowlist; an\nunpermitted `model` or `models` entry fails the request.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/enduser/update-generation-config",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "enduser",
                    "update-generation-config"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"config\": {\n    \"model\": \"<string>\",\n    \"models\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"temperature\": \"<double>\",\n    \"topP\": \"<double>\",\n    \"maxOutputTokens\": \"<integer>\",\n    \"frequencyPenalty\": \"<double>\",\n    \"presencePenalty\": \"<double>\",\n    \"stopSequences\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"seed\": \"<long>\",\n    \"languagePreference\": \"<string>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update the caller's metadata",
              "request": {
                "name": "Update the caller's metadata",
                "description": {
                  "content": "Merges the supplied key/value pairs into the caller's metadata map.\n\nThis is a **merge, not a replace**: keys you omit are left untouched. To delete a\nkey, send it with an empty-string value.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/enduser/update-metadata",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "enduser",
                    "update-metadata"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"metadata\": {\n    \"key_0\": \"<string>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        }
      ]
    },
    {
      "name": "Notification APIs",
      "description": "Unified notification API covering user-facing and management endpoints.\n\n**User-facing endpoints** at `POST /api/v1/notifications/<method>` handle push device registration, in-app inbox, and notification preferences. User context is derived from authentication headers.\n\n**Management endpoints** at `POST /api/v1/notifications/manage/<method>` handle sending notifications, managing topics, subscribers, workflows, providers, and environment promotion. Requires secret key (`sk_*`) or admin JWT authentication.\n\n### Field naming\n\nRequest bodies accept **either** `snake_case` or `camelCase` — both parse. Response bodies are\nalways **`camelCase`** (`transactionId`, `unseenCount`, `subscriberId`), because responses are\nencoded with protojson. Fields that are unset, empty, zero, or `false` are **omitted from the\nresponse entirely** rather than sent as `null` — read them with a default, not a presence check.\n\nSee the [Notifications guide](/guides/notifications) for push, in-app, email, SMS, and chat delivery — topics, digest, and workflow configuration.\n",
      "item": [
        {
          "name": "User: Channel Registration",
          "description": {
            "content": "Register and manage push notification devices and channels. See the [Notifications guide](/guides/notifications).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Register a push notification device",
              "request": {
                "name": "Register a push notification device",
                "description": {
                  "content": "Registers an FCM device token for push notifications. Associates the token with the user's subscriber profile.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/register-push-device",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "register-push-device"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fcmToken\": \"<string>\",\n  \"platform\": \"<string>\",\n  \"deviceId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Unregister a push notification device",
              "request": {
                "name": "Unregister a push notification device",
                "description": {
                  "content": "Removes an FCM device token from the user's subscriber profile.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/unregister-push-device",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "unregister-push-device"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fcmToken\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get registered notification channels",
              "request": {
                "name": "Get registered notification channels",
                "description": {
                  "content": "Returns the list of notification channels and their registration status for the authenticated user.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/get-registered-channels",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "get-registered-channels"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "<object>",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get an inbox session token",
              "request": {
                "name": "Get an inbox session token",
                "description": {
                  "content": "Returns a session token and connection URLs for the real-time in-app inbox. The token is short-lived and should be refreshed before expiry.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/get-inbox-session",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "get-inbox-session"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "<object>",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "User: In-App Inbox",
          "description": {
            "content": "Real-time in-app inbox — session token, feed, mark, and delete. See the [Notifications guide](/guides/notifications).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Get inbox feed messages",
              "request": {
                "name": "Get inbox feed messages",
                "description": {
                  "content": "Returns a paginated list of in-app inbox messages for the authenticated user, with optional filtering by status and category.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/get-inbox-feed",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "get-inbox-feed"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\",\n  \"filter\": {\n    \"unseenOnly\": \"<boolean>\",\n    \"unreadOnly\": \"<boolean>\",\n    \"feedIds\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"categories\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"tags\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"archived\": \"<boolean>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get unseen and unread inbox counts",
              "request": {
                "name": "Get unseen and unread inbox counts",
                "description": {
                  "content": "Returns the number of unseen and unread messages in the user's inbox, optionally filtered by feed IDs.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/get-inbox-unseen-count",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "get-inbox-unseen-count"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"feedIds\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Mark a single inbox message",
              "request": {
                "name": "Mark a single inbox message",
                "description": {
                  "content": "Marks a specific inbox message as seen, read, unseen, or unread.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/mark-inbox-message",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "mark-inbox-message"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"messageId\": \"<string>\",\n  \"markAs\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Mark all inbox messages",
              "request": {
                "name": "Mark all inbox messages",
                "description": {
                  "content": "Marks all inbox messages as seen, read, unseen, or unread. Optionally scoped to specific feed IDs.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/mark-all-inbox-messages",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "mark-all-inbox-messages"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"markAs\": \"<string>\",\n  \"feedIds\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete an inbox message",
              "request": {
                "name": "Delete an inbox message",
                "description": {
                  "content": "Permanently deletes a specific inbox message for the authenticated user.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/delete-inbox-message",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "delete-inbox-message"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"messageId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Archive an inbox message",
              "request": {
                "name": "Archive an inbox message",
                "description": {
                  "content": "Archives a single inbox message. Archived messages are hidden from the default feed but retained.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/archive-inbox-message",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "archive-inbox-message"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"notificationId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Unarchive an inbox message",
              "request": {
                "name": "Unarchive an inbox message",
                "description": {
                  "content": "Restores a previously archived inbox message back into the default feed.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/unarchive-inbox-message",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "unarchive-inbox-message"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"notificationId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Archive all inbox messages",
              "request": {
                "name": "Archive all inbox messages",
                "description": {
                  "content": "Archives all inbox messages for the authenticated user. Optionally scoped to specific workflow tags (OR logic).",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/archive-all-inbox-messages",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "archive-all-inbox-messages"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tags\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Archive all read inbox messages",
              "request": {
                "name": "Archive all read inbox messages",
                "description": {
                  "content": "Archives every already-read inbox message for the authenticated user. Optionally scoped to specific workflow tags (OR logic).",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/archive-all-read-inbox-messages",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "archive-all-read-inbox-messages"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tags\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Complete an inbox message action",
              "request": {
                "name": "Complete an inbox message action",
                "description": {
                  "content": "Marks a call-to-action button (primary or secondary) on an inbox message as completed.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/complete-inbox-action",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "complete-inbox-action"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"notificationId\": \"<string>\",\n  \"actionType\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Revert an inbox message action",
              "request": {
                "name": "Revert an inbox message action",
                "description": {
                  "content": "Reverts a previously completed call-to-action button (primary or secondary) on an inbox message back to its pending state.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/revert-inbox-action",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "revert-inbox-action"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"notificationId\": \"<string>\",\n  \"actionType\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "User: Preferences",
          "description": {
            "content": "Get and update per-channel notification preferences. See the [Notifications guide](/guides/notifications).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Get notification preferences",
              "request": {
                "name": "Get notification preferences",
                "description": {
                  "content": "Returns the authenticated user's notification preferences, including per-channel and per-category settings.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/get-preferences",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "get-preferences"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "<object>",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update global notification preferences",
              "request": {
                "name": "Update global notification preferences",
                "description": {
                  "content": "Updates the subscriber's global (all-workflow) channel toggles. Omitted channels are left unchanged.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/update-global-preference",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "update-global-preference"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"channels\": {\n    \"inApp\": \"<boolean>\",\n    \"push\": \"<boolean>\",\n    \"email\": \"<boolean>\",\n    \"sms\": \"<boolean>\",\n    \"chat\": \"<boolean>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update per-workflow notification preferences",
              "request": {
                "name": "Update per-workflow notification preferences",
                "description": {
                  "content": "Updates the subscriber's channel toggles for a single workflow. Omitted channels are left unchanged.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/update-workflow-preference",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "update-workflow-preference"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"workflowId\": \"<string>\",\n  \"channels\": {\n    \"inApp\": \"<boolean>\",\n    \"push\": \"<boolean>\",\n    \"email\": \"<boolean>\",\n    \"sms\": \"<boolean>\",\n    \"chat\": \"<boolean>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Bulk-update per-workflow preferences",
              "request": {
                "name": "Bulk-update per-workflow preferences",
                "description": {
                  "content": "Updates channel toggles for up to 100 workflows in a single request.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/bulk-update-preferences",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "bulk-update-preferences"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"entries\": [\n    {\n      \"workflowId\": \"<string>\",\n      \"channels\": {\n        \"inApp\": \"<boolean>\",\n        \"push\": \"<boolean>\",\n        \"email\": \"<boolean>\",\n        \"sms\": \"<boolean>\",\n        \"chat\": \"<boolean>\"\n      }\n    },\n    {\n      \"workflowId\": \"<string>\",\n      \"channels\": {\n        \"inApp\": \"<boolean>\",\n        \"push\": \"<boolean>\",\n        \"email\": \"<boolean>\",\n        \"sms\": \"<boolean>\",\n        \"chat\": \"<boolean>\"\n      }\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Management: Notification Dispatch",
          "description": {
            "content": "Send, broadcast, bulk-send, topic-send, and cancel notifications. See the [Notifications guide](/guides/notifications).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Send a notification to a user",
              "request": {
                "name": "Send a notification to a user",
                "description": {
                  "content": "Sends a notification to a single user by triggering a Novu workflow. Delivery channels (push, in-app, email, SMS, chat) are determined by the workflow configuration. Pass an optional `transactionId` for idempotent sends.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/send",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "send"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"workflowId\": \"<string>\",\n  \"userId\": \"<string>\",\n  \"payload\": {\n    \"key_0\": \"<string>\"\n  },\n  \"overrides\": {\n    \"key_0\": \"<string>\"\n  },\n  \"transactionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Send a notification to multiple users",
              "request": {
                "name": "Send a notification to multiple users",
                "description": {
                  "content": "Sends the same notification to up to 100 users in a single request. Returns per-user delivery results including any individual failures.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/send-bulk",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "send-bulk"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"events\": [\n    {\n      \"workflowId\": \"<string>\",\n      \"userId\": \"<string>\",\n      \"payload\": {\n        \"key_0\": \"<string>\"\n      },\n      \"overrides\": {\n        \"key_0\": \"<string>\"\n      },\n      \"transactionId\": \"<string>\"\n    },\n    {\n      \"workflowId\": \"<string>\",\n      \"userId\": \"<string>\",\n      \"payload\": {\n        \"key_0\": \"<string>\"\n      },\n      \"overrides\": {\n        \"key_0\": \"<string>\"\n      },\n      \"transactionId\": \"<string>\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Broadcast a notification to every subscriber",
              "request": {
                "name": "Broadcast a notification to every subscriber",
                "description": {
                  "content": "**Not exposed through the public gateway.** The handler is implemented and registered, but `api.travila.ai` has no route for it, so a call returns 404. The admin console reaches the same handler through its own gateway, so broadcasting from the console works — this is about the public API only.\n\nTriggers a workflow for every subscriber in the tenant. The payload's `category` must be `system` or `product`; other categories are rejected.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/broadcast",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "broadcast"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"workflowId\": \"<string>\",\n  \"payload\": {\n    \"key_0\": \"<string>\"\n  },\n  \"overrides\": {\n    \"key_0\": \"<string>\"\n  },\n  \"transactionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Cancel a pending notification",
              "request": {
                "name": "Cancel a pending notification",
                "description": {
                  "content": "Cancels a previously sent notification that has not yet been delivered. Only scheduled, delayed, or queued notifications can be cancelled.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/cancel",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "cancel"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"transactionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Management: Topics",
          "description": {
            "content": "Pub/sub fan-out — create topics, manage subscribers, send to topic. See the [Notifications guide](/guides/notifications).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a notification topic",
              "request": {
                "name": "Create a notification topic",
                "description": {
                  "content": "Creates a new topic that users can be subscribed to. Topics enable broadcasting notifications to groups of subscribers.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/create-topic",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "create-topic"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"topicKey\": \"<string>\",\n  \"name\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete a notification topic",
              "request": {
                "name": "Delete a notification topic",
                "description": {
                  "content": "Deletes an existing topic. All subscriber associations with this topic are removed.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/delete-topic",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "delete-topic"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"topicKey\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Add subscribers to a topic",
              "request": {
                "name": "Add subscribers to a topic",
                "description": {
                  "content": "Adds up to 100 users as subscribers to the specified topic.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/add-subscribers-to-topic",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "add-subscribers-to-topic"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"topicKey\": \"<string>\",\n  \"userIds\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Remove subscribers from a topic",
              "request": {
                "name": "Remove subscribers from a topic",
                "description": {
                  "content": "Removes the specified users from the topic's subscriber list.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/remove-subscribers-from-topic",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "remove-subscribers-from-topic"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"topicKey\": \"<string>\",\n  \"userIds\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List subscribers of a topic",
              "request": {
                "name": "List subscribers of a topic",
                "description": {
                  "content": "Returns a paginated list of user IDs subscribed to the specified topic.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/list-topic-subscribers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "list-topic-subscribers"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"topicKey\": \"<string>\",\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Check if a user is subscribed to a topic",
              "request": {
                "name": "Check if a user is subscribed to a topic",
                "description": {
                  "content": "Returns whether the specified user is currently subscribed to the given topic.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/check-topic-subscription",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "check-topic-subscription"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"topicKey\": \"<string>\",\n  \"userId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Send a notification to all topic subscribers",
              "request": {
                "name": "Send a notification to all topic subscribers",
                "description": {
                  "content": "Broadcasts a notification to all subscribers of the specified topic. Optionally excludes a single user (e.g., the action originator).",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/send-to-topic",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "send-to-topic"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"workflowId\": \"<string>\",\n  \"topicKey\": \"<string>\",\n  \"payload\": {\n    \"key_0\": \"<string>\"\n  },\n  \"overrides\": {\n    \"key_0\": \"<string>\"\n  },\n  \"transactionId\": \"<string>\",\n  \"excludeUserId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Management: Digest",
          "description": {
            "content": "Batched digest delivery and cancellation. See the [Notifications guide](/guides/notifications).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Send a notification with digest aggregation",
              "request": {
                "name": "Send a notification with digest aggregation",
                "description": {
                  "content": "Sends a notification that will be aggregated into a digest before delivery. Multiple events within the digest window are batched into a single notification.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/send-with-digest",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "send-with-digest"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"workflowId\": \"<string>\",\n  \"userId\": \"<string>\",\n  \"payload\": {\n    \"key_0\": \"<string>\"\n  },\n  \"overrides\": {\n    \"key_0\": \"<string>\"\n  },\n  \"transactionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Cancel a pending digest event",
              "request": {
                "name": "Cancel a pending digest event",
                "description": {
                  "content": "Cancels a specific event from a pending digest. If the digest has already been sent, this has no effect.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/cancel-digest-event",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "cancel-digest-event"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"transactionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Management: Subscribers",
          "description": {
            "content": "Create, read, update, delete, and list notification subscribers. See the [Notifications guide](/guides/notifications).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a notification subscriber",
              "request": {
                "name": "Create a notification subscriber",
                "description": {
                  "content": "Creates a new subscriber profile in the notification system. The subscriber ID is used to target notifications and manage preferences.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/create-subscriber",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "create-subscriber"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"subscriberId\": \"<string>\",\n  \"email\": \"<string>\",\n  \"phone\": \"<string>\",\n  \"firstName\": \"<string>\",\n  \"lastName\": \"<string>\",\n  \"avatarUrl\": \"<string>\",\n  \"locale\": \"<string>\",\n  \"data\": {\n    \"key_0\": \"<string>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get the caller's subscriber profile",
              "request": {
                "name": "Get the caller's subscriber profile",
                "description": {
                  "content": "Returns the subscriber profile for the authenticated caller, including channel registrations and notification preferences.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/get-subscriber",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "get-subscriber"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "<object>",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update subscriber profile data",
              "request": {
                "name": "Update subscriber profile data",
                "description": {
                  "content": "Updates the subscriber's profile data including name, email, phone, locale, and custom metadata.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/update-subscriber-data",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "update-subscriber-data"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"data\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<string>\",\n    \"phone\": \"<string>\",\n    \"avatarUrl\": \"<string>\",\n    \"locale\": \"<string>\",\n    \"timezone\": \"<string>\",\n    \"customData\": {\n      \"key_0\": \"<string>\"\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete the caller's subscriber profile",
              "request": {
                "name": "Delete the caller's subscriber profile",
                "description": {
                  "content": "Permanently deletes the authenticated caller's subscriber profile and all associated data from the notification system.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/delete-subscriber",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "delete-subscriber"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "<object>",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List all subscribers",
              "request": {
                "name": "List all subscribers",
                "description": {
                  "content": "Returns a paginated list of all subscriber profiles in the notification system.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/list-subscribers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "list-subscribers"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Management: Activity & Status",
          "description": {
            "content": "Query delivery status and notification activity logs. See the [Notifications guide](/guides/notifications).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Get delivery status of a notification",
              "request": {
                "name": "Get delivery status of a notification",
                "description": {
                  "content": "Returns the current delivery status and metadata for a specific notification transaction, including provider-level details and timestamps.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/get-delivery-status",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "get-delivery-status"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"transactionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get notification activity log",
              "request": {
                "name": "Get notification activity log",
                "description": {
                  "content": "Returns a paginated activity log of notifications, filterable by channel, category, and time range.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/get-notification-activity",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "get-notification-activity"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\",\n  \"channels\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"from\": \"<dateTime>\",\n  \"to\": \"<dateTime>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Management: Providers",
          "description": {
            "content": "Configure and list delivery providers (FCM, SendGrid, etc.). See the [Notifications guide](/guides/notifications).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Configure a notification provider",
              "request": {
                "name": "Configure a notification provider",
                "description": {
                  "content": "Configures credentials and activation state for a notification provider (e.g., FCM, SendGrid, Twilio).\n\nUses **upsert** semantics: if an active integration already exists for the specified provider type, it updates the existing integration in place (preserving its ID and subscriber linkages). If no active integration exists, a new one is created.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/configure-provider",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "configure-provider"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": \"<string>\",\n  \"credentials\": {\n    \"key_0\": \"<string>\"\n  },\n  \"active\": \"<boolean>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List configured providers",
              "request": {
                "name": "List configured providers",
                "description": {
                  "content": "Returns all configured notification providers and their activation status.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/get-providers",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "get-providers"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "<object>",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Management: Workflows",
          "description": {
            "content": "Create, update, get, list, and delete notification workflows. See the [Notifications guide](/guides/notifications).",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a notification workflow",
              "request": {
                "name": "Create a notification workflow",
                "description": {
                  "content": "Creates a new notification workflow definition with steps, channel configuration, and preference settings.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/create-workflow",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "create-workflow"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"workflow\": {\n    \"key_0\": \"<string>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update an existing notification workflow",
              "request": {
                "name": "Update an existing notification workflow",
                "description": {
                  "content": "Updates an existing workflow definition. The workflow can be identified by either workflow ID or trigger identifier.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/update-workflow",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "update-workflow"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"workflowId\": \"<string>\",\n  \"workflow\": {\n    \"key_0\": \"<string>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get a notification workflow",
              "request": {
                "name": "Get a notification workflow",
                "description": {
                  "content": "Returns the full workflow definition and metadata. The workflow can be identified by either workflow ID or trigger identifier.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/get-workflow",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "get-workflow"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"workflowId\": \"<string>\",\n  \"triggerIdentifier\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List notification workflows",
              "request": {
                "name": "List notification workflows",
                "description": {
                  "content": "Returns a paginated list of all notification workflows with summary information.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/list-workflows",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "list-workflows"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete a notification workflow",
              "request": {
                "name": "Delete a notification workflow",
                "description": {
                  "content": "Deletes a notification workflow. The workflow can be identified by either workflow ID or trigger identifier.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/notifications/manage/delete-workflow",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "notifications",
                    "manage",
                    "delete-workflow"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"workflowId\": \"<string>\",\n  \"triggerIdentifier\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        }
      ]
    },
    {
      "name": "Scheduler APIs",
      "description": "Scheduled job management for tenant applications — cron, one-shot, and\nrecurring-interval schedules that invoke an HTTP target on a timer.\n\nCaller identity and tenant are derived from your credentials — you never\npass user or tenant identifiers in the request body. Schedules are durable:\nthey survive restarts, track their own execution history, and retry\nautomatically on failure.\n\nAll endpoints use `POST /api/v1/scheduler/<method>` with a JSON request\nbody. Request and response bodies use **protojson** encoding (the JSON\nrepresentation of Protocol Buffer messages): enum fields are serialized as\ntheir string names and timestamps as RFC 3339 strings.\n\nRequest bodies accept **either** `snake_case` or `camelCase` — both parse.\nResponse bodies are always **`camelCase`** (`scheduleId`, `cronExpression`,\n`intervalSeconds`). Fields that are unset, empty, zero, or `false` are\n**omitted from the response entirely** rather than sent as `null` — read them\nwith a default, not a presence check.\n\nSee the [Scheduled Jobs guide](/guides/scheduled-jobs) for\nconcepts, examples, and retry behaviour.\n",
      "item": [
        {
          "name": "Job Lifecycle",
          "description": {
            "content": "Create, manage, pause, resume, and delete scheduled jobs. See the [Scheduled Jobs guide](/guides/scheduled-jobs) for cron, one-shot, and recurring-interval patterns with retry and auto-pause.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a scheduled job",
              "request": {
                "name": "Create a scheduled job",
                "description": {
                  "content": "Creates a new scheduled job. Supply exactly one schedule expression for\nthe chosen `scheduleType`:\n\n- `SCHEDULE_TYPE_CRON` — set `cronExpression` (and optionally `timezone`)\n- `SCHEDULE_TYPE_ONCE` — set `scheduledAt`\n- `SCHEDULE_TYPE_RECURRING_INTERVAL` — set `intervalSeconds`\n\nThe job becomes active immediately and fires on its next matching time.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/scheduler/create-job",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "scheduler",
                    "create-job"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"<string>\",\n  \"target\": {\n    \"url\": \"<uri>\",\n    \"kind\": \"<string>\",\n    \"method\": \"<string>\",\n    \"payload\": {\n      \"key_0\": \"<string>\"\n    }\n  },\n  \"description\": \"<string>\",\n  \"scheduleType\": \"<string>\",\n  \"cronExpression\": \"<string>\",\n  \"timezone\": \"<string>\",\n  \"scheduledAt\": \"<dateTime>\",\n  \"intervalSeconds\": \"<integer>\",\n  \"retryPolicy\": {\n    \"maxAttempts\": \"<integer>\",\n    \"initialBackoffMs\": \"<integer>\",\n    \"maxBackoffMs\": \"<integer>\"\n  },\n  \"metadata\": {\n    \"key_0\": \"<string>\"\n  },\n  \"autoPauseThreshold\": \"<integer>\",\n  \"ownerSubject\": \"<string>\",\n  \"externalId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get a scheduled job",
              "request": {
                "name": "Get a scheduled job",
                "description": {
                  "content": "Returns the metadata and current state of a single scheduled job by ID.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/scheduler/get-job",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "scheduler",
                    "get-job"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"scheduleId\": \"<string>\",\n  \"externalId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List scheduled jobs",
              "request": {
                "name": "List scheduled jobs",
                "description": {
                  "content": "Returns a paginated list of scheduled jobs for the authenticated\ntenant and project. Optionally filter by lifecycle state or target kind.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/scheduler/list-jobs",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "scheduler",
                    "list-jobs"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pageSize\": \"<integer>\",\n  \"pageToken\": \"<string>\",\n  \"stateFilter\": \"<string>\",\n  \"targetKindFilter\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update a scheduled job",
              "request": {
                "name": "Update a scheduled job",
                "description": {
                  "content": "Updates an existing scheduled job. Only the fields present in the\nrequest are modified; omitted fields are left unchanged.\n\nChanging the cron expression may not take effect until the next worker\ndeployment — inspect `effectiveAt` in the response to confirm.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/scheduler/update-job",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "scheduler",
                    "update-job"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"scheduleId\": \"<string>\",\n  \"name\": \"<string>\",\n  \"description\": \"<string>\",\n  \"cronExpression\": \"<string>\",\n  \"timezone\": \"<string>\",\n  \"scheduledAt\": \"<dateTime>\",\n  \"intervalSeconds\": \"<integer>\",\n  \"target\": {\n    \"url\": \"<uri>\",\n    \"kind\": \"<string>\",\n    \"method\": \"<string>\",\n    \"payload\": {\n      \"key_0\": \"<string>\"\n    }\n  },\n  \"retryPolicy\": {\n    \"maxAttempts\": \"<integer>\",\n    \"initialBackoffMs\": \"<integer>\",\n    \"maxBackoffMs\": \"<integer>\"\n  },\n  \"metadata\": {\n    \"key_0\": \"<string>\"\n  },\n  \"autoPauseThreshold\": \"<integer>\",\n  \"externalId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Pause a scheduled job",
              "request": {
                "name": "Pause a scheduled job",
                "description": {
                  "content": "Pauses an active scheduled job. No executions fire while the job is paused.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/scheduler/pause-job",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "scheduler",
                    "pause-job"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"scheduleId\": \"<string>\",\n  \"reason\": \"<string>\",\n  \"externalId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Resume a scheduled job",
              "request": {
                "name": "Resume a scheduled job",
                "description": {
                  "content": "Resumes a previously paused scheduled job, returning it to the active state.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/scheduler/resume-job",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "scheduler",
                    "resume-job"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"scheduleId\": \"<string>\",\n  \"externalId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete a scheduled job",
              "request": {
                "name": "Delete a scheduled job",
                "description": {
                  "content": "Soft-deletes a scheduled job. The job stops firing immediately. Deleted\njobs are retained for audit purposes and can still be inspected by ID.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/scheduler/delete-job",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "scheduler",
                    "delete-job"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"scheduleId\": \"<string>\",\n  \"externalId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete all scheduled jobs for a project",
              "request": {
                "name": "Delete all scheduled jobs for a project",
                "description": {
                  "content": "Soft-deletes every scheduled job belonging to the tenant and project in\nthe request context. Intended as a tenant lifecycle hook invoked during\nproject teardown. The request body carries no fields — tenant and\nproject are derived from ingress headers.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/scheduler/delete-jobs-for-project",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "scheduler",
                    "delete-jobs-for-project"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "<object>",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete all scheduled jobs for the calling owner",
              "request": {
                "name": "Delete all scheduled jobs for the calling owner",
                "description": {
                  "content": "Soft-deletes every scheduled job owned by the caller (derived from the\ningress subject) within the tenant and project carried in the request\ncontext. Used by client apps at sign-out so per-user schedules don't\noutlive the user's session on a given device. The request body carries\nno fields.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/scheduler/delete-jobs-for-owner",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "scheduler",
                    "delete-jobs-for-owner"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "<object>",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Execution History",
          "description": {
            "content": "Query execution records and delivery history. See the [Scheduled Jobs guide](/guides/scheduled-jobs) for status values, retry policy details, and response capture fields.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "List executions for a scheduled job",
              "request": {
                "name": "List executions for a scheduled job",
                "description": {
                  "content": "Returns a paginated execution history for a scheduled job. Each record\ncaptures a single firing — its status, HTTP result, attempt number, and\nduration. Optionally filter by execution status.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/scheduler/list-executions",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "scheduler",
                    "list-executions"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"scheduleId\": \"<string>\",\n  \"pageSize\": \"<integer>\",\n  \"pageToken\": \"<string>\",\n  \"statusFilter\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        }
      ]
    },
    {
      "name": "Webhook APIs",
      "description": "Outbound webhooks — register endpoints, subscribe them to event types, and inspect or\nretry deliveries. All operations are scoped to the authenticated tenant.\n\nAll endpoints use `POST /api/v1/webhooks/<method>` with a JSON request body.\n\n### Field naming\n\nRequest bodies accept **either** `snake_case` or `camelCase` — both parse. Response bodies are\nalways **`camelCase`** (`endpointId`, `eventTypes`, `subscriptionId`), because responses are\nencoded with protojson. Fields that are unset, empty, zero, or `false` are **omitted from the\nresponse entirely** rather than sent as `null` — read them with a default, not a presence check.\n\n### Endpoints and subscriptions\n\nAn **endpoint** is a URL you own. A **subscription** binds an endpoint to a set of\nevent types. Create the endpoint first, then subscribe it — or pass `eventTypes` on\n[`create-endpoint`](/api/webhook-gateway/create-webhook-endpoint) to do both in\none call.\n\nKeep **one subscription per endpoint**. Creating a second subscription on the same\nendpoint double-delivers every matching event.\n\nTo change what an endpoint receives, delete the existing subscription and create a\nreplacement — do not add a second one. There is currently no `update-subscription`\nroute exposed, so delete-then-create is the supported path. Events published in the\ngap between the two calls are not delivered to that endpoint.\n\n### Addressing subscriptions\n\n`create-subscription` accepts an optional `externalId` — your own identifier, unique\namong live subscriptions in the tenant. Where a subscription reference is needed you\nmay supply either `subscriptionId` or `externalId`, but **exactly one**: sending\nboth, or neither, is rejected. An `externalId` is released for reuse once its\nsubscription is deleted.\n",
      "item": [
        {
          "name": "Endpoints",
          "description": {
            "content": "Register and manage the URLs that receive webhook deliveries.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a webhook endpoint",
              "request": {
                "name": "Create a webhook endpoint",
                "description": {
                  "content": "Registers a new webhook endpoint URL for the authenticated tenant. Optionally creates an auto-subscription when `eventTypes` are provided, so the caller can set up both endpoint and subscription in a single call.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/webhooks/create-endpoint",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    "create-endpoint"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"<string>\",\n  \"url\": \"<uri>\",\n  \"description\": \"<string>\",\n  \"eventTypes\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List webhook endpoints",
              "request": {
                "name": "List webhook endpoints",
                "description": {
                  "content": "Returns a paginated list of all webhook endpoints belonging to the authenticated tenant.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/webhooks/list-endpoints",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    "list-endpoints"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"page\": \"<integer>\",\n  \"perPage\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update a webhook endpoint",
              "request": {
                "name": "Update a webhook endpoint",
                "description": {
                  "content": "Updates the mutable fields of an existing webhook endpoint. Only the fields present in the request body are modified; absent fields are left unchanged.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/webhooks/update-endpoint",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    "update-endpoint"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"endpointId\": \"<string>\",\n  \"name\": \"<string>\",\n  \"url\": \"<uri>\",\n  \"description\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete a webhook endpoint",
              "request": {
                "name": "Delete a webhook endpoint",
                "description": {
                  "content": "Permanently removes a webhook endpoint and all its associated subscriptions from the tenant's project.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/webhooks/delete-endpoint",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    "delete-endpoint"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"endpointId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Subscriptions",
          "description": {
            "content": "Bind endpoints to event types. Keep one subscription per endpoint — a second one double-delivers.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a webhook subscription",
              "request": {
                "name": "Create a webhook subscription",
                "description": {
                  "content": "Creates a new event subscription on an existing webhook endpoint. The subscription filters events by the specified event types and delivers matching events to the endpoint URL.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/webhooks/create-subscription",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    "create-subscription"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"endpointId\": \"<string>\",\n  \"eventTypes\": [\n    \"<string>\"\n  ],\n  \"externalId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List webhook subscriptions",
              "request": {
                "name": "List webhook subscriptions",
                "description": {
                  "content": "Returns a paginated list of webhook subscriptions. Optionally filter by endpoint ID.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/webhooks/list-subscriptions",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    "list-subscriptions"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"endpointId\": \"<string>\",\n  \"page\": \"<integer>\",\n  \"perPage\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete a webhook subscription",
              "request": {
                "name": "Delete a webhook subscription",
                "description": {
                  "content": "Permanently removes a webhook subscription. The associated endpoint is not affected.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/webhooks/delete-subscription",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    "delete-subscription"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"subscriptionId\": \"<string>\",\n  \"externalId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Deliveries",
          "description": {
            "content": "Inspect delivery attempts and re-queue failed ones.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "List webhook event deliveries",
              "request": {
                "name": "List webhook event deliveries",
                "description": {
                  "content": "Returns a paginated list of event delivery attempts. Supports filtering by endpoint, subscription, event, delivery status, and creation time range.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/webhooks/list-deliveries",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    "list-deliveries"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"endpointId\": \"<string>\",\n  \"subscriptionId\": \"<string>\",\n  \"eventId\": \"<string>\",\n  \"status\": \"<string>\",\n  \"createdAfter\": \"<dateTime>\",\n  \"createdBefore\": \"<dateTime>\",\n  \"page\": \"<integer>\",\n  \"perPage\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Retry a failed webhook delivery",
              "request": {
                "name": "Retry a failed webhook delivery",
                "description": {
                  "content": "Re-queues a previously failed or discarded event delivery for another delivery attempt.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/webhooks/retry-delivery",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    "retry-delivery"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"deliveryId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        }
      ]
    },
    {
      "name": "Agent Profile APIs",
      "description": "Programmatic management of agent profiles — saved, versioned bundles of agent\nconfiguration (system prompt, model, tools, prompt variables) that a conversation\npoints at instead of assembling the same generation config on every call — and the\nshared prompt fragments those profiles compose.\n\nThis is the write side. Selecting a profile for a conversation lives on the\n[LLM APIs](/api/llm-gateway/llm-apis) (`activeProfileId` on `create-thread`,\n`setActiveProfileId` on `send-message`).\n\n### Authentication\n\nAgent profiles are **tenant-scoped configuration**, not per-user data, so these\nendpoints authenticate with a secret key **alone** — no `X-On-Behalf-Of`, no end-user\nJWT. A profile belongs to your tenant, not to one of your users.\n\nSame model as the [Webhook APIs](/api/webhook-gateway/webhook-apis). It differs\nfrom the LLM, storage and end-user APIs, where a secret key without `X-On-Behalf-Of`\nreturns `401 authenticated user_id is required`.\n\n### Scoping\n\nTenant is derived server-side from the verified key — there is no tenant field in any\nrequest body, and a `ctx` object sent in a body is overwritten and ignored.\n\nEvery profile and fragment also lives in a **project**, addressed with the optional\n`X-Project-Id` header. Until the Projects feature ships, `default` is the only valid\nproject and is what you get when the header is omitted.\n\n### Field naming\n\nRequest bodies accept **either** `snake_case` or `camelCase` — both parse. Response\nbodies are always **`camelCase`** (`profileId`, `whenToUse`, `generationConfig`),\nbecause responses are encoded with protojson. Fields that are unset, empty, zero, or\n`false` are **omitted from the response entirely** rather than sent as `null` — read\nthem with a default, not a presence check.\n\nAll endpoints use `POST` with a JSON request body.\n",
      "item": [
        {
          "name": "Profiles",
          "description": {
            "content": "Create, read, update, and delete agent profiles.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create an agent profile",
              "request": {
                "name": "Create an agent profile",
                "description": {
                  "content": "Creates a profile in the caller's project library. `profileId` must be unique\nwithin the project — a duplicate fails with `ALREADY_EXISTS` rather than\noverwriting. To replace an existing profile, use\n[`update`](/api/agent-profile-gateway/update-agent-profile).\n\n`version` on the supplied profile is ignored: the store assigns version `1` and\nbumps it on every later mutation.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/agent-profiles/create",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "agent-profiles",
                    "create"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"profile\": {\n    \"profileId\": \"<string>\",\n    \"name\": \"<string>\",\n    \"description\": \"<string>\",\n    \"whenToUse\": \"<string>\",\n    \"keywords\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"enabled\": \"<boolean>\",\n    \"generationConfig\": {\n      \"model\": \"<string>\",\n      \"models\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"systemPrompt\": \"<string>\",\n      \"temperature\": \"<double>\",\n      \"topP\": \"<double>\",\n      \"maxOutputTokens\": \"<integer>\",\n      \"frequencyPenalty\": \"<double>\",\n      \"presencePenalty\": \"<double>\",\n      \"stopSequences\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"seed\": \"<long>\"\n    },\n    \"mcpServers\": [\n      {\n        \"serverId\": \"<string>\",\n        \"enabled\": \"<boolean>\",\n        \"priority\": \"<integer>\",\n        \"allowlistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"blocklistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"serverOverrides\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"serverId\": \"<string>\",\n        \"enabled\": \"<boolean>\",\n        \"priority\": \"<integer>\",\n        \"allowlistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"blocklistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"serverOverrides\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"variableSpecs\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"required\": \"<boolean>\",\n        \"defaultValue\": \"<string>\",\n        \"type\": \"VAR_TYPE_UNSPECIFIED\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"required\": \"<boolean>\",\n        \"defaultValue\": \"<string>\",\n        \"type\": \"VAR_TYPE_UNSPECIFIED\"\n      }\n    ],\n    \"version\": \"<integer>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get an agent profile",
              "request": {
                "name": "Get an agent profile",
                "description": {
                  "content": "Returns one full profile record.\n\nPass `version` to fetch a specific immutable version; omit it (or send `0`) for the\nlatest. A version that never existed returns `NOT_FOUND`.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/agent-profiles/get",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "agent-profiles",
                    "get"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"profileId\": \"<string>\",\n  \"version\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List agent profiles",
              "request": {
                "name": "List agent profiles",
                "description": {
                  "content": "Returns full profile records, paginated. Disabled profiles are excluded unless\n`includeDisabled` is true.\n\nFor the lightweight selection surface — id, name, description, when-to-use,\nkeywords — use [`library`](/api/agent-profile-gateway/get-agent-profile-library)\ninstead; it is what the router reads and is much cheaper than a full list.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/agent-profiles/list",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "agent-profiles",
                    "list"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\",\n  \"includeDisabled\": false\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update an agent profile",
              "request": {
                "name": "Update an agent profile",
                "description": {
                  "content": "Partial update. Only the fields named in `updateMask` are written; everything else\non the stored record is left alone. Each successful update appends a new immutable\nversion.\n\nOmitting `updateMask` replaces the whole record — send it unless you mean that.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/agent-profiles/update",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "agent-profiles",
                    "update"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"profileId\": \"<string>\",\n  \"profile\": {\n    \"profileId\": \"<string>\",\n    \"name\": \"<string>\",\n    \"description\": \"<string>\",\n    \"whenToUse\": \"<string>\",\n    \"keywords\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"enabled\": \"<boolean>\",\n    \"generationConfig\": {\n      \"model\": \"<string>\",\n      \"models\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"systemPrompt\": \"<string>\",\n      \"temperature\": \"<double>\",\n      \"topP\": \"<double>\",\n      \"maxOutputTokens\": \"<integer>\",\n      \"frequencyPenalty\": \"<double>\",\n      \"presencePenalty\": \"<double>\",\n      \"stopSequences\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"seed\": \"<long>\"\n    },\n    \"mcpServers\": [\n      {\n        \"serverId\": \"<string>\",\n        \"enabled\": \"<boolean>\",\n        \"priority\": \"<integer>\",\n        \"allowlistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"blocklistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"serverOverrides\": {\n          \"key_0\": \"<string>\"\n        }\n      },\n      {\n        \"serverId\": \"<string>\",\n        \"enabled\": \"<boolean>\",\n        \"priority\": \"<integer>\",\n        \"allowlistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"blocklistToolPatterns\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"serverOverrides\": {\n          \"key_0\": \"<string>\"\n        }\n      }\n    ],\n    \"variableSpecs\": [\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"required\": \"<boolean>\",\n        \"defaultValue\": \"<string>\",\n        \"type\": \"VAR_TYPE_UNSPECIFIED\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"description\": \"<string>\",\n        \"required\": \"<boolean>\",\n        \"defaultValue\": \"<string>\",\n        \"type\": \"VAR_TYPE_UNSPECIFIED\"\n      }\n    ],\n    \"version\": \"<integer>\"\n  },\n  \"updateMask\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete an agent profile",
              "request": {
                "name": "Delete an agent profile",
                "description": {
                  "content": "Deletes the profile. If it was the project's `defaultProfileId`, that pointer is\ncleared as well.\n\nConversations that still name this profile in `activeProfileId` fall back to the\nconversation's own generation config for subsequent turns.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/agent-profiles/delete",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "agent-profiles",
                    "delete"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"profileId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get the profile library",
              "request": {
                "name": "Get the profile library",
                "description": {
                  "content": "Returns the project's **selection surface**: id, name, description, `whenToUse`,\nkeywords and enabled flag for each profile, plus the project's\n`defaultProfileId`.\n\nSelection metadata only — no system prompts, no generation config, no tools. This\nis exactly what the router model sees when choosing a profile per turn, and the\ncheap way to enumerate what exists.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/agent-profiles/library",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "agent-profiles",
                    "library"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Versions",
          "description": {
            "content": "Read a profile's immutable version history and the fragment set behind a version.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "List a profile's versions",
              "request": {
                "name": "List a profile's versions",
                "description": {
                  "content": "Returns the profile's immutable version history, newest first. Every successful\nmutation appends one entry.\n\nPair a version number with\n[`get`](/api/agent-profile-gateway/get-agent-profile) to read exactly what\na past turn ran against. Returns an empty list for a profile that has never\nexisted.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/agent-profiles/versions",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "agent-profiles",
                    "versions"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"profileId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get a fragment set by version",
              "request": {
                "name": "Get a fragment set by version",
                "description": {
                  "content": "Returns every fragment as it existed at a given fragment-set version, ordered by\n`fragmentId`.\n\nFragments are versioned as a **set**, not individually: any fragment write bumps\none project-wide `setVersion`, which\n[`prompt-fragments/list`](/api/agent-profile-gateway/list-prompt-fragments)\nreports. Recording that number alongside a turn lets you reconstruct the exact\nprompt text later.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/prompt-fragments/get-set",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "prompt-fragments",
                    "get-set"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"setVersion\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Prompt Fragments",
          "description": {
            "content": "Reusable template blocks shared across profiles.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a prompt fragment",
              "request": {
                "name": "Create a prompt fragment",
                "description": {
                  "content": "Creates a reusable template block that profiles include with\n`{{template \"fragment_id\" .}}`. Use it for text repeated across profiles — safety\nrules, tone, a shared preamble — so editing it once updates every profile that\nincludes it.\n\n`fragmentId` must be unique within the project.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/prompt-fragments/create",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "prompt-fragments",
                    "create"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fragment\": {\n    \"fragmentId\": \"<string>\",\n    \"name\": \"<string>\",\n    \"content\": \"<string>\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Get a prompt fragment",
              "request": {
                "name": "Get a prompt fragment",
                "description": {
                  "content": "Returns one fragment by id.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/prompt-fragments/get",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "prompt-fragments",
                    "get"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fragmentId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List prompt fragments",
              "request": {
                "name": "List prompt fragments",
                "description": {
                  "content": "Returns the project's fragments, paginated, along with the current project-wide\n`setVersion` (`0` if no fragment has ever been written).\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/prompt-fragments/list",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "prompt-fragments",
                    "list"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update a prompt fragment",
              "request": {
                "name": "Update a prompt fragment",
                "description": {
                  "content": "Partial update via `updateMask`, same semantics as profile update. The change is\nvisible to every profile that includes this fragment on their next turn, and bumps\nthe project-wide fragment-set version.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/prompt-fragments/update",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "prompt-fragments",
                    "update"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fragmentId\": \"<string>\",\n  \"fragment\": {\n    \"fragmentId\": \"<string>\",\n    \"name\": \"<string>\",\n    \"content\": \"<string>\"\n  },\n  \"updateMask\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete a prompt fragment",
              "request": {
                "name": "Delete a prompt fragment",
                "description": {
                  "content": "Deletes the fragment.\n\nProfiles that still include it are **not** rewritten, and rendering fails soft\nrather than erroring the turn: the system prompt is sent **unrendered**, so the\nliteral `{{template \"id\" .}}` text reaches the model. Check what references a\nfragment before removing it.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/prompt-fragments/delete",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "prompt-fragments",
                    "delete"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fragmentId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Import",
          "description": {
            "content": "Bulk-convert an existing prompt library into profiles and fragments.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Import a prompt library",
              "request": {
                "name": "Import a prompt library",
                "description": {
                  "content": "Bulk-converts an existing prompt library — personas plus the shared blocks they\n`@include` — into profiles and fragments in one call. Conversion happens at import\ntime; the platform never interprets the source DSL when serving a turn.\n\nTwo composition modes:\n\n- **Flatten** (default, `emitFragments: false`) — each `@include` is resolved\n  inline into that profile's system prompt. Profiles end up self-contained and no\n  fragment rows are written.\n- **Fragments** (`emitFragments: true`) — shared blocks become `PromptFragment`\n  rows referenced with `{{template \"id\" .}}`. No drift between profiles, but every\n  shared block referenced by an `@include` must be supplied in the same call.\n\nExisting rows cause `ALREADY_EXISTS` unless `overwrite` is true.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/agent-profiles/import",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "agent-profiles",
                    "import"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"templates\": [\n    {\n      \"profileId\": \"<string>\",\n      \"name\": \"<string>\",\n      \"whenToUse\": \"<string>\",\n      \"keywords\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"sourceDsl\": \"<string>\",\n      \"generationConfig\": {\n        \"model\": \"<string>\",\n        \"models\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"systemPrompt\": \"<string>\",\n        \"temperature\": \"<double>\",\n        \"topP\": \"<double>\",\n        \"maxOutputTokens\": \"<integer>\",\n        \"frequencyPenalty\": \"<double>\",\n        \"presencePenalty\": \"<double>\",\n        \"stopSequences\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"seed\": \"<long>\"\n      }\n    },\n    {\n      \"profileId\": \"<string>\",\n      \"name\": \"<string>\",\n      \"whenToUse\": \"<string>\",\n      \"keywords\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"sourceDsl\": \"<string>\",\n      \"generationConfig\": {\n        \"model\": \"<string>\",\n        \"models\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"systemPrompt\": \"<string>\",\n        \"temperature\": \"<double>\",\n        \"topP\": \"<double>\",\n        \"maxOutputTokens\": \"<integer>\",\n        \"frequencyPenalty\": \"<double>\",\n        \"presencePenalty\": \"<double>\",\n        \"stopSequences\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"seed\": \"<long>\"\n      }\n    }\n  ],\n  \"fragments\": [\n    {\n      \"fragmentId\": \"<string>\",\n      \"name\": \"<string>\",\n      \"sourceDsl\": \"<string>\",\n      \"path\": \"<string>\"\n    },\n    {\n      \"fragmentId\": \"<string>\",\n      \"name\": \"<string>\",\n      \"sourceDsl\": \"<string>\",\n      \"path\": \"<string>\"\n    }\n  ],\n  \"variableTypes\": {\n    \"key_0\": \"VAR_TYPE_UNSPECIFIED\"\n  },\n  \"overwrite\": false,\n  \"emitFragments\": false\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        }
      ]
    },
    {
      "name": "Eval APIs",
      "description": "Read the traces and scores behind your tenant's LLM turns, curate evaluation datasets, and record what an eval harness measured.\n\nThese are observability and evaluation APIs, not agent tools. Every operation is scoped to the authenticated tenant — there is no field on any request that names a tenant, a user, or a rater, because that identity is taken from your credentials and nothing else.\n\nAll operations are `POST /api/v1/evals/<method>` with a JSON request body.\n\n### Authentication\n\nSend a tenant-scoped API key in `X-API-Key`. No user identity is required or accepted: this API is built for machine callers — an eval harness, or your own tooling — which authenticate as a tenant rather than as a person. Where a human reviewer's identity matters, it is taken from the caller's credentials, so a score recorded through a user JWT is attributed and one recorded by a harness is not. Neither can claim to be the other.\n\n### Projects\n\nAn optional `X-Project-Id` request header selects the sub-tenant project to read and write. It defaults to `default`, which is the only project until multi-project support ships. It is not an authentication header — your key still determines which tenant you are.\n\nIf the tenant and project you address has no evaluation backend provisioned, calls fail with HTTP 424 and a message naming the tenant and project. That is a provisioning gap, not a bad request; retrying will not help.\n\n### Reading responses\n\nSeveral read operations return `contentRedacted`. When it is `true` the returned text has been redacted and differs from what the conversation store holds — render it accordingly rather than presenting it as verbatim.\n\nNote that 64-bit integer fields are encoded as JSON strings, per the protobuf JSON mapping.\n\n### Field naming\n\nRequest bodies accept **either** `snake_case` or `camelCase` — both parse. Response bodies are always **`camelCase`** (`datasetId`, `scoreConfigIds`, `contentRedacted`), because responses are encoded with protojson. Fields that are unset, empty, zero, or `false` are **omitted from the response entirely** rather than sent as `null` — read them with a default, not a presence check.\n\n### Pagination\n\nList operations take `page` (1-based) and `pageSize`, and return a `page` object carrying `totalItems` and `totalPages`. There is no cursor.",
      "item": [
        {
          "name": "Traces",
          "description": {
            "content": "Read the trace an LLM turn produced, and the observations inside it.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Get a trace",
              "request": {
                "name": "Get a trace",
                "description": {
                  "content": "Fetch one trace with its observations. Address it either by `traceId`, or by the turn it came from — `conversationId` plus `sourceUserMessageId` — and the service derives the id. A caller holds a turn, not a Langfuse id.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/get-trace",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "get-trace"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationId\": \"<string>\",\n  \"sourceUserMessageId\": \"<string>\",\n  \"traceId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List observations",
              "request": {
                "name": "List observations",
                "description": {
                  "content": "Lists the individual spans, generations and events inside traces. Filter by `traceId` to scope to one trace.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-observations",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-observations"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"environment\": \"<string>\",\n  \"filters\": [\n    {\n      \"column\": \"<string>\",\n      \"operator\": \"<string>\",\n      \"type\": \"<string>\",\n      \"booleanValue\": \"<boolean>\",\n      \"key\": \"<string>\",\n      \"numberValue\": \"<number>\",\n      \"stringValue\": \"<string>\",\n      \"stringValues\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeValue\": \"<dateTime>\"\n    },\n    {\n      \"column\": \"<string>\",\n      \"operator\": \"<string>\",\n      \"type\": \"<string>\",\n      \"booleanValue\": \"<boolean>\",\n      \"key\": \"<string>\",\n      \"numberValue\": \"<number>\",\n      \"stringValue\": \"<string>\",\n      \"stringValues\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeValue\": \"<dateTime>\"\n    }\n  ],\n  \"fromTime\": \"<dateTime>\",\n  \"level\": \"<string>\",\n  \"name\": \"<string>\",\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\",\n  \"parentObservationId\": \"<string>\",\n  \"toTime\": \"<dateTime>\",\n  \"traceId\": \"<string>\",\n  \"type\": \"<string>\",\n  \"userId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List traces",
              "request": {
                "name": "List traces",
                "description": {
                  "content": "Lists traces for the authenticated tenant, newest first by default. `contentRedacted` on the response indicates the returned text differs from what the conversation store holds.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-traces",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-traces"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationId\": \"<string>\",\n  \"environment\": \"<string>\",\n  \"filters\": [\n    {\n      \"column\": \"<string>\",\n      \"operator\": \"<string>\",\n      \"type\": \"<string>\",\n      \"booleanValue\": \"<boolean>\",\n      \"key\": \"<string>\",\n      \"numberValue\": \"<number>\",\n      \"stringValue\": \"<string>\",\n      \"stringValues\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeValue\": \"<dateTime>\"\n    },\n    {\n      \"column\": \"<string>\",\n      \"operator\": \"<string>\",\n      \"type\": \"<string>\",\n      \"booleanValue\": \"<boolean>\",\n      \"key\": \"<string>\",\n      \"numberValue\": \"<number>\",\n      \"stringValue\": \"<string>\",\n      \"stringValues\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeValue\": \"<dateTime>\"\n    }\n  ],\n  \"fromTime\": \"<dateTime>\",\n  \"level\": \"<string>\",\n  \"name\": \"<string>\",\n  \"orderBy\": \"<string>\",\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\",\n  \"profileId\": \"<string>\",\n  \"release\": \"<string>\",\n  \"searchQuery\": \"<string>\",\n  \"searchType\": \"<string>\",\n  \"sessionId\": \"<string>\",\n  \"tags\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"toTime\": \"<dateTime>\",\n  \"userId\": \"<string>\",\n  \"version\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Sessions",
          "description": {
            "content": "Group traces by session.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Get a session",
              "request": {
                "name": "Get a session",
                "description": {
                  "content": "Fetch one session and the traces belonging to it.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/get-session",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "get-session"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"sessionId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List sessions",
              "request": {
                "name": "List sessions",
                "description": {
                  "content": "Lists sessions for the authenticated tenant.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-sessions",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-sessions"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"environment\": \"<string>\",\n  \"filters\": [\n    {\n      \"column\": \"<string>\",\n      \"operator\": \"<string>\",\n      \"type\": \"<string>\",\n      \"booleanValue\": \"<boolean>\",\n      \"key\": \"<string>\",\n      \"numberValue\": \"<number>\",\n      \"stringValue\": \"<string>\",\n      \"stringValues\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeValue\": \"<dateTime>\"\n    },\n    {\n      \"column\": \"<string>\",\n      \"operator\": \"<string>\",\n      \"type\": \"<string>\",\n      \"booleanValue\": \"<boolean>\",\n      \"key\": \"<string>\",\n      \"numberValue\": \"<number>\",\n      \"stringValue\": \"<string>\",\n      \"stringValues\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeValue\": \"<dateTime>\"\n    }\n  ],\n  \"fromTime\": \"<dateTime>\",\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\",\n  \"toTime\": \"<dateTime>\",\n  \"userId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Scores",
          "description": {
            "content": "Record and read reviewer ratings against a trace, observation or session.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Delete a score",
              "request": {
                "name": "Delete a score",
                "description": {
                  "content": "Deletes one score by id.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/delete-score",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "delete-score"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"scoreId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List scores",
              "request": {
                "name": "List scores",
                "description": {
                  "content": "Lists recorded scores. Filter by target, name, source, value range or time window.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-scores",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-scores"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"conversationId\": \"<string>\",\n  \"dataType\": \"<string>\",\n  \"filters\": [\n    {\n      \"column\": \"<string>\",\n      \"operator\": \"<string>\",\n      \"type\": \"<string>\",\n      \"booleanValue\": \"<boolean>\",\n      \"key\": \"<string>\",\n      \"numberValue\": \"<number>\",\n      \"stringValue\": \"<string>\",\n      \"stringValues\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeValue\": \"<dateTime>\"\n    },\n    {\n      \"column\": \"<string>\",\n      \"operator\": \"<string>\",\n      \"type\": \"<string>\",\n      \"booleanValue\": \"<boolean>\",\n      \"key\": \"<string>\",\n      \"numberValue\": \"<number>\",\n      \"stringValue\": \"<string>\",\n      \"stringValues\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"timeValue\": \"<dateTime>\"\n    }\n  ],\n  \"fromTime\": \"<dateTime>\",\n  \"maxValue\": \"<number>\",\n  \"minValue\": \"<number>\",\n  \"name\": \"<string>\",\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\",\n  \"profileId\": \"<string>\",\n  \"sessionId\": \"<string>\",\n  \"source\": \"<string>\",\n  \"targetId\": \"<string>\",\n  \"targetType\": \"<string>\",\n  \"toTime\": \"<dateTime>\",\n  \"traceId\": \"<string>\",\n  \"userId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Record a score",
              "request": {
                "name": "Record a score",
                "description": {
                  "content": "Records a reviewer rating against a trace, observation or session.\n\nThe score `source` is always recorded as `SCORE_SOURCE_HUMAN` and cannot be set from the request — a caller of this API is a tenant-side reviewer or tool by definition, and letting the request choose would let it write scores that read as end-user sentiment. The rater identity likewise comes from the authenticated caller, not the body.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/record-score",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "record-score"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"dataType\": \"<string>\",\n  \"name\": \"<string>\",\n  \"targetId\": \"<string>\",\n  \"targetType\": \"<string>\",\n  \"booleanValue\": \"<boolean>\",\n  \"comment\": \"<string>\",\n  \"configId\": \"<string>\",\n  \"numericValue\": \"<number>\",\n  \"profileId\": \"<string>\",\n  \"stringValue\": \"<string>\",\n  \"textValue\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Score configs",
          "description": {
            "content": "Define the rating scales reviewers pick from.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a score config",
              "request": {
                "name": "Create a score config",
                "description": {
                  "content": "Defines a new rating scale — numeric with a range, categorical with labelled values, or boolean.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/create-score-config",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "create-score-config"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"dataType\": \"<string>\",\n  \"name\": \"<string>\",\n  \"categoricalValues\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"maxValue\": \"<number>\",\n  \"minValue\": \"<number>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List score configs",
              "request": {
                "name": "List score configs",
                "description": {
                  "content": "Lists the rating scales defined for this tenant. Pass `includeArchived` to include retired ones.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-score-configs",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-score-configs"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"includeArchived\": \"<boolean>\",\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update a score config",
              "request": {
                "name": "Update a score config",
                "description": {
                  "content": "Edits a score config, and archives one via `isArchived`. Optional fields are omitted rather than zeroed, so leaving a field out means \"leave it alone\" rather than \"set it to zero\".",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/update-score-config",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "update-score-config"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"configId\": \"<string>\",\n  \"name\": \"<string>\",\n  \"description\": \"<string>\",\n  \"isArchived\": \"<boolean>\",\n  \"maxValue\": \"<number>\",\n  \"minValue\": \"<number>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Comments",
          "description": {
            "content": "Free-text notes attached to a trace, observation or session.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Create a comment",
              "request": {
                "name": "Create a comment",
                "description": {
                  "content": "Attaches a free-text note to a trace, observation or session. The author comes from the authenticated caller.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/create-comment",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "create-comment"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"content\": \"<string>\",\n  \"objectId\": \"<string>\",\n  \"objectType\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete a comment",
              "request": {
                "name": "Delete a comment",
                "description": {
                  "content": "Deletes one comment by id.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/delete-comment",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "delete-comment"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"commentId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List comments",
              "request": {
                "name": "List comments",
                "description": {
                  "content": "Lists the comments on one object.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-comments",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-comments"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"objectId\": \"<string>\",\n  \"objectType\": \"<string>\",\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Datasets",
          "description": {
            "content": "Curate evaluation datasets and the items in them.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Add a dataset item",
              "request": {
                "name": "Add a dataset item",
                "description": {
                  "content": "Adds one item to a dataset, typically harvested from a real turn.\n\nThe item id is derived server-side from the dataset and the source turn, so harvesting the same turn twice yields one item rather than a duplicate. There is deliberately no way to supply your own.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/add-dataset-item",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "add-dataset-item"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"datasetId\": \"<string>\",\n  \"conversationId\": \"<string>\",\n  \"expectedOutputJson\": \"<string>\",\n  \"inputJson\": \"<string>\",\n  \"metadataJson\": \"<string>\",\n  \"sourceTraceId\": \"<string>\",\n  \"sourceUserMessageId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Create a dataset",
              "request": {
                "name": "Create a dataset",
                "description": {
                  "content": "Creates an evaluation dataset.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/create-dataset",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "create-dataset"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"<string>\",\n  \"description\": \"<string>\",\n  \"metadataJson\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List dataset items",
              "request": {
                "name": "List dataset items",
                "description": {
                  "content": "Lists items in a dataset. `onlyMissingExpectedOutput` narrows to the items still needing a gold answer.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-dataset-items",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-dataset-items"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"datasetId\": \"<string>\",\n  \"datasetName\": \"<string>\",\n  \"onlyMissingExpectedOutput\": \"<boolean>\",\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\",\n  \"sourceTraceId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List datasets",
              "request": {
                "name": "List datasets",
                "description": {
                  "content": "Lists the evaluation datasets defined for this tenant.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-datasets",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-datasets"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Update a dataset item",
              "request": {
                "name": "Update a dataset item",
                "description": {
                  "content": "Edits an item — typically to fill in `expectedOutputJson` after review.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/update-dataset-item",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "update-dataset-item"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"datasetId\": \"<string>\",\n  \"itemId\": \"<string>\",\n  \"expectedOutputJson\": \"<string>\",\n  \"inputJson\": \"<string>\",\n  \"metadataJson\": \"<string>\",\n  \"status\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Dataset runs",
          "description": {
            "content": "Record what a harness scored on a dataset, and read past runs back.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Get a dataset run",
              "request": {
                "name": "Get a dataset run",
                "description": {
                  "content": "Fetch one run by dataset name and run name, with its per-item results.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/get-dataset-run",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "get-dataset-run"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"datasetName\": \"<string>\",\n  \"runName\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List dataset runs",
              "request": {
                "name": "List dataset runs",
                "description": {
                  "content": "Lists past runs against a dataset.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-dataset-runs",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-dataset-runs"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"datasetName\": \"<string>\",\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Record a dataset run",
              "request": {
                "name": "Record a dataset run",
                "description": {
                  "content": "Records the result of executing a dataset — the motivating case for this API. A harness runs a dataset, scores each item, and posts the whole run here in one call.\n\n`profileRevisionHash` ties the run to the exact agent-profile revision under test, so two runs can be compared meaningfully.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/record-dataset-run",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "record-dataset-run"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"datasetId\": \"<string>\",\n  \"items\": [\n    {\n      \"datasetItemId\": \"<string>\",\n      \"traceId\": \"<string>\",\n      \"observationId\": \"<string>\"\n    },\n    {\n      \"datasetItemId\": \"<string>\",\n      \"traceId\": \"<string>\",\n      \"observationId\": \"<string>\"\n    }\n  ],\n  \"runName\": \"<string>\",\n  \"description\": \"<string>\",\n  \"metadataJson\": \"<string>\",\n  \"profileRevisionHash\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Annotation queues",
          "description": {
            "content": "Queue items for human review and mark them done.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Complete an annotation queue item",
              "request": {
                "name": "Complete an annotation queue item",
                "description": {
                  "content": "Marks a queued item reviewed, so it stops being handed out.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/complete-annotation-queue-item",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "complete-annotation-queue-item"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"itemId\": \"<string>\",\n  \"queueId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Create an annotation queue",
              "request": {
                "name": "Create an annotation queue",
                "description": {
                  "content": "Creates a review queue bound to a set of score configs — the scales reviewers will use on it.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/create-annotation-queue",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "create-annotation-queue"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"<string>\",\n  \"scoreConfigIds\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"description\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Enqueue an item for annotation",
              "request": {
                "name": "Enqueue an item for annotation",
                "description": {
                  "content": "Adds a trace, observation or session to a review queue.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/enqueue-for-annotation",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "enqueue-for-annotation"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"queueId\": \"<string>\",\n  \"targetId\": \"<string>\",\n  \"targetType\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List annotation queue items",
              "request": {
                "name": "List annotation queue items",
                "description": {
                  "content": "Lists what is waiting in a queue. Filter by `status` to get only the pending items.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-annotation-queue-items",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-annotation-queue-items"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"queueId\": \"<string>\",\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\",\n  \"status\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List annotation queues",
              "request": {
                "name": "List annotation queues",
                "description": {
                  "content": "Lists the review queues defined for this tenant.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/list-annotation-queues",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "list-annotation-queues"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"page\": \"<integer>\",\n  \"pageSize\": \"<integer>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        },
        {
          "name": "Overview",
          "description": {
            "content": "Aggregate counts and score averages for a time window.",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "Get the eval overview",
              "request": {
                "name": "Get the eval overview",
                "description": {
                  "content": "Aggregate trace counts, score averages and totals for a time window — the numbers behind a dashboard.",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/evals/get-overview",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "evals",
                    "get-overview"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"environment\": \"<string>\",\n  \"fromTime\": \"<dateTime>\",\n  \"profileId\": \"<string>\",\n  \"toTime\": \"<dateTime>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        }
      ]
    },
    {
      "name": "Third-Party Integrations APIs",
      "description": "Let your users connect their own third-party accounts — GitHub, Slack, Google Calendar,\nStrava, and roughly two thousand others — and have the model use them as tools inside a\nconversation.\n\nAccount connection is handled by [Pipedream Connect](https://pipedream.com/docs/connect/).\nYou never see, store, or refresh the user's third-party credentials: they are held by\nPipedream and the platform addresses them by an identifier it derives for each of your\nusers.\n\n## Everything is scoped to the calling user\n\nThere is deliberately **no user identifier in any request body**. The user is derived\nserver-side from the gateway-verified `x-user-id` / `x-tenant-id` headers, so a caller\ncan only list, connect, and disconnect their own accounts — there is no way to address\nsomeone else's. `delete-account` rejects an account id that is not the caller's own, and\nreports it as not found rather than confirming that it exists.\n\n## Field naming\n\nRequest bodies accept **either** `snake_case` or `camelCase` — both parse. Response\nbodies are always **`camelCase`** (`nameSlug`, `connectLinkUrl`, `pageInfo`), because\nresponses are encoded with protojson. Fields that are unset, empty, zero, or `false` are\n**omitted from the response entirely** rather than sent as `null` — read them with a\ndefault, not a presence check.\n\n## Pagination\n\nList endpoints are cursor-paged. Pass `pageInfo.endCursor` from one response as `after`\non the next request, and stop when a page comes back with no `data`. `limit` caps the\npage size.\n\nAll endpoints use `POST /api/v1/integrations/pipedream/<method>` with a JSON request body.\n",
      "item": [
        {
          "name": "Pipedream",
          "description": {
            "content": "Connect a user's own third-party accounts through\n[Pipedream Connect](https://pipedream.com/docs/connect/), and manage what they have\nconnected. The arc is: browse the catalog (public data, readable before anyone has\nconnected anything), mint a short-lived hosted link the user opens to authorize one\napp, then read and remove the accounts that came out of it — including whole-user\noffboarding.\n",
            "type": "text/plain"
          },
          "item": [
            {
              "name": "List connectable apps",
              "request": {
                "name": "List connectable apps",
                "description": {
                  "content": "Lists the apps a user can connect, newest catalog first unless you sort. Use this to\nbuild an app picker.\n\nNarrow the list with `q` (free-text search over app names) and `categoryIds`, and\norder it with `sortKey` / `sortDirection`. `featuredWeight` is Pipedream's own\nprominence score — sorting by it descending is a reasonable default for a picker.\n\nThis is public catalog data. It does not tell you what the caller has already\nconnected; use [`list-accounts`](/api/integrations-gateway/pipedream-list-accounts-for-current-user)\nfor that.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/integrations/pipedream/list-apps",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "integrations",
                    "pipedream",
                    "list-apps"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"q\": \"<string>\",\n  \"categoryIds\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"sortKey\": \"<string>\",\n  \"sortDirection\": \"<string>\",\n  \"limit\": \"<integer>\",\n  \"after\": \"<string>\",\n  \"before\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Retrieve one app by slug",
              "request": {
                "name": "Retrieve one app by slug",
                "description": {
                  "content": "Returns a single app by its `nameSlug` — the stable identifier used everywhere else\nin this API (`github`, `slack`, `google_calendar`). Use it to render an app detail\npage without paging the whole catalog.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/integrations/pipedream/retrieve-app",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "integrations",
                    "pipedream",
                    "retrieve-app"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"nameSlug\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List app categories",
              "request": {
                "name": "List app categories",
                "description": {
                  "content": "Lists the categories apps are grouped under (\"Developer Tools\", \"Communication\").\nFeed the returned `id` values into `categoryIds` on\n[`list-apps`](/api/integrations-gateway/pipedream-list-apps) to filter a picker by category.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/integrations/pipedream/list-app-categories",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "integrations",
                    "pipedream",
                    "list-app-categories"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"limit\": \"<integer>\",\n  \"after\": \"<string>\",\n  \"before\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Start connecting an app",
              "request": {
                "name": "Start connecting an app",
                "description": {
                  "content": "Mints a short-lived Connect token and returns `connectLinkUrl` — a hosted page,\nalready targeted at `appSlug`, where the user authorizes the connection. Open it in\na browser, a web view, or an iframe; when the user finishes, the account exists and\nshows up in [`list-accounts`](/api/integrations-gateway/pipedream-list-accounts-for-current-user).\n\n**Send `appSlug`.** Without it the hosted page has nothing to connect and answers\n\"Please include the app in the Connect URL\". The returned link is complete — open it\nas given rather than rebuilding the query string.\n\nThe link is single-use and expires — currently about four hours out, but read\n`expiresAt` rather than assuming a window. Mint one per connection attempt at the\nmoment the user asks to connect; do not cache them.\n\n**Embedding in an iframe** requires `allowedOrigins` — list the exact origins that\nwill frame the page (`https://app.example.com`), or the browser blocks it. Omit it\nfor a full-page redirect.\n\n`state` is round-tripped back to your redirect untouched, so use it to correlate the\nreturn leg with whatever the user was doing. It is opaque to the platform — treat it\nas untrusted on the way back and never put a secret in it.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/integrations/pipedream/create-connect-token",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "integrations",
                    "pipedream",
                    "create-connect-token"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"appSlug\": \"<string>\",\n  \"allowedOrigins\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"state\": \"<string>\",\n  \"successRedirectUrl\": \"<string>\",\n  \"errorRedirectUrl\": \"<string>\",\n  \"redirectUri\": \"<string>\",\n  \"webhookUrl\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "List the caller's connected accounts",
              "request": {
                "name": "List the caller's connected accounts",
                "description": {
                  "content": "Returns the accounts **this user** has connected — one per app they authorized. This\nis what tells you whether a connection succeeded, and what to show on a \"connected\napps\" screen.\n\nFilter to one app with `app` (an app `nameSlug`). Check `healthy` before offering an\napp's tools: a connection whose credentials were revoked upstream comes back with\n`healthy` absent and a populated `error`, and the fix is to connect it again.\n\nThird-party credentials are never included. There is no parameter that returns them.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/integrations/pipedream/list-accounts",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "integrations",
                    "pipedream",
                    "list-accounts"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"app\": \"<string>\",\n  \"oauthAppId\": \"<string>\",\n  \"limit\": \"<integer>\",\n  \"after\": \"<string>\",\n  \"before\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Disconnect one account",
              "request": {
                "name": "Disconnect one account",
                "description": {
                  "content": "Disconnects a single connected account, revoking the platform's access to that app\nfor this user. The app's tools stop working for them immediately; everything else\nthey connected is untouched.\n\n`accountId` is the `id` from\n[`list-accounts`](/api/integrations-gateway/pipedream-list-accounts-for-current-user). An id that is not\nthe caller's own is rejected as **not found** — the response deliberately does not\ndistinguish \"someone else's account\" from \"no such account\".\n\nTo disconnect everything at once, use\n[`delete-external-user`](/api/integrations-gateway/pipedream-delete-external-user-for-current-user).\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/integrations/pipedream/delete-account",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "integrations",
                    "pipedream",
                    "delete-account"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accountId\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            },
            {
              "name": "Delete the caller's integration data entirely",
              "request": {
                "name": "Delete the caller's integration data entirely",
                "description": {
                  "content": "Removes the caller from Pipedream completely, along with **every** account they\nconnected. This is the offboarding / right-to-erasure path — call it when a user\ndeletes their account with you.\n\nIt takes no parameters: the user is the caller, and there is no form of this request\nthat can name anyone else.\n\n`accountsDeleted` counts the connections that went with them, read immediately before\nthe delete. A connection created in that instant is still deleted, just not counted —\nso treat the number as a report, not a receipt to reconcile against.\n\nThis is not reversible. The user can connect again afterwards, but it is a new\nconnection and prior authorizations are gone.\n",
                  "type": "text/plain"
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/integrations/pipedream/delete-external-user",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "integrations",
                    "pipedream",
                    "delete-external-user"
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "auth": null,
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "event": [],
              "protocolProfileBehavior": {
                "disableBodyPruning": true
              }
            }
          ],
          "event": []
        }
      ]
    }
  ]
}
