{"openapi":"3.0.0","info":{"title":"OVHcloud API specification","description":"Specification for OVHcloud API","version":"1.0","contact":{"name":"OVH","email":"api@ml.ovh.net"}},"servers":[{"url":"https://api.eu.ovhcloud.com/v2"}],"components":{"schemas":{"any":{"description":"Can be anything (text, int, bool, json, html, etc.)","example":"This is a content of any type !"},"common.ResourceStatusEnum":{"type":"string","description":"Current status of a resource","enum":["CREATING","CREATION_PLANNED","DELETING","ERROR","OUT_OF_SYNC","READY","SUSPENDED","UNKNOWN","UPDATING"]},"duration":{"type":"string","description":"Duration (e.g., P1Y2M3DT4H6M9S)","example":"P1Y2M3DT4H6M9S"},"email":{"type":"string","description":"Email address (e.g., api@ml.ovh.net)","format":"email","example":"api@ml.ovh.net"},"internationalPhoneNumber":{"type":"string","description":"International phone number","format":"phone-number"},"ip":{"type":"string","description":"IP address (e.g., 192.0.2.0)","format":"ipv4","example":"192.0.2.0"},"ipBlock":{"type":"string","description":"IP (v4 or v6) CIDR notation (e.g., 192.0.2.0/24)","format":"ip-block","example":"192.0.2.0/24"},"ipInterface":{"type":"string","description":"IP address (e.g., 192.0.2.0)","format":"ipv4","example":"192.0.2.0"},"ipv4":{"type":"string","description":"IPv4 address (e.g., 192.0.2.0)","format":"ipv4","example":"192.0.2.0"},"ipv4Block":{"type":"string","description":"IPv4 CIDR notation (e.g., 192.0.2.0/24)","format":"ipv4-block","example":"192.0.2.0/24"},"ipv6":{"type":"string","description":"IPv6 address (e.g., 2001:41d0:1:1994::1)","format":"ipv6","example":"2001:41d0:1:1994::1"},"ipv6Block":{"type":"string","description":"IPv6 CIDR notation (e.g., 2001:41d0::/128)","format":"ipv6-block","example":"2001:41d0::/128"},"macAddress":{"type":"string","description":"MAC address (e.g., 00:00:5e:00:53:01)","format":"mac-address","example":"00:00:5e:00:53:01"},"phoneNumber":{"type":"string","description":"Phone number","format":"phone-number"},"publicCloud.ai.agents.AIEndpointsPreset":{"type":"object","description":"What OVHcloud offers of the AI Endpoints provider preset: whether the preset can be selected at all, whether its authentication can be provisioned for the agent, the base URL to list available models from, and the model used when the caller states none","properties":{"apiBase":{"type":"string","description":"OpenAI-compatible base URL, published so a client can list models from its /models sub-path","readOnly":true},"defaultModel":{"type":"string","description":"Model seeded when the caller states none. Empty when this deployment states no default.","nullable":true,"readOnly":true},"enabled":{"type":"boolean","description":"Whether the OVHcloud AI Endpoints provider preset is available on this deployment","readOnly":true},"integratedAuth":{"type":"boolean","description":"Whether OVHcloud provisions the AI Endpoints credential for the agent, so the caller does not have to supply one","readOnly":true}}},"publicCloud.ai.agents.Agent":{"type":"object","description":"A managed AI agent","properties":{"createdAt":{"type":"string","description":"Date of the AI agent creation","format":"date-time","readOnly":true},"currentState":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentCurrentState"}],"description":"Current state of the AI agent","nullable":true,"readOnly":true},"id":{"type":"string","description":"Unique identifier of the AI agent","readOnly":true},"resourceStatus":{"allOf":[{"$ref":"#/components/schemas/common.ResourceStatusEnum"}],"description":"Reflects the readiness of the AI agent: READY, SUSPENDED when it is paused, or DELETING on the response to its deletion","readOnly":true},"targetSpec":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentTargetSpec"}],"description":"Last target specification of the AI agent","readOnly":true},"updatedAt":{"type":"string","description":"Date of the last AI agent update","format":"date-time","readOnly":true}}},"publicCloud.ai.agents.AgentConfig":{"type":"object","description":"The agent's identity settings, such as its display name.","properties":{"name":{"type":"string","description":"Display name for the agent, shown in the interface. Empty falls back to a generic label.","nullable":true}}},"publicCloud.ai.agents.AgentCreation":{"type":"object","description":"Input parameters for creating an AI agent","properties":{"targetSpec":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentCreationTargetSpec"}],"description":"Desired specification of the AI agent to create"}},"required":["targetSpec"]},"publicCloud.ai.agents.AgentCreationTargetSpec":{"type":"object","description":"Desired specification of the AI agent to create.","properties":{"config":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.Config"}],"description":"Optional AI agent configuration seeded at creation, combinable with or used instead of template. Set only here, at creation time; read and changed afterward through the AI agent itself, not through this resource.","nullable":true},"enabled":{"type":"boolean","description":"Desired running state of the AI agent. When false the agent is created paused. Defaults to true","nullable":true},"name":{"type":"string","description":"Name of the AI agent, at most 192 bytes of UTF-8, free of control characters. Unique among this project's agents, with one exception: an agent created before this API enforced uniqueness may share its name with a newer one. Can be changed afterwards through the update endpoint"},"template":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentTemplateRef"}],"description":"Reference to a template used to seed the AI agent configuration once, at creation time","nullable":true}},"required":["name"]},"publicCloud.ai.agents.AgentCurrentState":{"type":"object","description":"Current state of the AI agent","properties":{"aiEndpoints":{"type":"boolean","description":"Whether this AI agent carries the OVHcloud AI Endpoints provider preset","nullable":true,"readOnly":true},"aiEndpointsIntegratedAuth":{"type":"boolean","description":"Whether OVHcloud provisioned the AI Endpoints credential for this agent, so the caller did not have to supply one","nullable":true,"readOnly":true},"enabled":{"type":"boolean","description":"Actual running state of the AI agent. False when the agent is paused.","readOnly":true},"endpointUrl":{"type":"string","description":"URL to invoke the AI agent","nullable":true,"readOnly":true},"name":{"type":"string","description":"Name of the AI agent","readOnly":true}}},"publicCloud.ai.agents.AgentSeed":{"type":"object","description":"A single delegated sub-persona: either based on a built-in template or defined entirely inline.","properties":{"description":{"type":"string","description":"Short summary of what this sub-persona is for.","nullable":true},"from":{"type":"string","description":"Optional reference to a built-in template this sub-persona is based on, for example 'builtin:planner'. Any fields set below override the template's defaults.","nullable":true},"maxTurns":{"type":"integer","description":"Maximum number of conversational turns this sub-persona may take before returning control. Unset means no cap.","nullable":true},"model":{"type":"string","description":"Model identifier this sub-persona uses when delegated to. Unset reuses the parent agent's model.","nullable":true},"soul":{"type":"string","description":"Persona text and system prompt this sub-persona follows when delegated to.","nullable":true},"tools":{"type":"array","description":"Names of the tools this sub-persona is allowed to use.","nullable":true,"items":{"type":"string"}}}},"publicCloud.ai.agents.AgentTargetSpec":{"type":"object","description":"Last target specification of the AI agent","properties":{"enabled":{"type":"boolean","description":"Desired running state of the AI agent. False when the agent is paused.","readOnly":true},"name":{"type":"string","description":"Name of the AI agent","readOnly":true}}},"publicCloud.ai.agents.AgentTemplateRef":{"type":"object","description":"Reference to a template used to seed the AI agent configuration once, at creation time","properties":{"id":{"type":"string","description":"Identifier of the template to seed the AI agent configuration from. Honored only at creation time."}},"required":["id"]},"publicCloud.ai.agents.AgentToken":{"type":"object","description":"An issued AI agent access token","properties":{"expiresAt":{"type":"string","description":"Expiration date of the token. Null when the token does not expire.","nullable":true,"format":"date-time","readOnly":true},"role":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentTokenRoleEnum"}],"description":"Role granted to the token","readOnly":true},"token":{"type":"string","description":"Bearer token used to authenticate against the AI agent. Returned only once, at mint time.","readOnly":true}}},"publicCloud.ai.agents.AgentTokenCreation":{"type":"object","description":"Input parameters for issuing an AI agent access token","properties":{"lifetimeSeconds":{"type":"integer","description":"Token lifetime in seconds. Defaults to the agent's default.","nullable":true},"role":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentTokenRoleEnum"}],"description":"Role granted to the minted token. Defaults to VIEWER.","nullable":true}}},"publicCloud.ai.agents.AgentTokenRoleEnum":{"type":"string","description":"Role granted to a minted AI agent access token","enum":["ADMIN","OPERATOR","USER","VIEWER"]},"publicCloud.ai.agents.AgentUpdate":{"type":"object","description":"Input for AI agent update","properties":{"targetSpec":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentUpdateTargetSpec"}],"description":"Desired specification to reconcile the AI agent toward"}},"required":["targetSpec"]},"publicCloud.ai.agents.AgentUpdateTargetSpec":{"type":"object","description":"Desired specification to reconcile the AI agent toward.","properties":{"enabled":{"type":"boolean","description":"Desired running state of the AI agent. Set to false to pause it, true to resume it"},"name":{"type":"string","description":"New name for the AI agent, at most 192 bytes of UTF-8, free of control characters. Omitted or null leaves the current name untouched, and so does restating the name the agent already has. Rejected if another agent in this project already has it, with the same exception as at creation. Renaming redeploys the agent on its current runtime component","nullable":true}},"required":["enabled"]},"publicCloud.ai.agents.AgentsConfig":{"type":"object","description":"Specialized sub-personas this agent can delegate tasks to","properties":{"enabled":{"type":"boolean","description":"Master switch for the delegated-agents feature. When false, this agent cannot delegate to a named sub-persona.","nullable":true},"items":{"type":"object","description":"Sub-personas defined directly in this configuration, keyed by name","nullable":true,"additionalProperties":{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentSeed"}}}},"publicCloud.ai.agents.AuthConfig":{"type":"object","description":"Authentication settings for the agent's HTTP API. Unset falls back to requiring a token issued by the agent itself.","properties":{"kagentJwt":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.KagentJwtConfig"}],"description":"Settings for tokens the agent issues and validates itself. Unset or disabled means the agent does not accept self-issued tokens.","nullable":true},"mode":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AuthModeEnum"}],"description":"Which authentication mode is enforced on the agent's HTTP API.","nullable":true},"oauth2":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.OAuth2Config"}],"description":"External identity provider settings, used when the authentication mode accepts an external OAuth2 token.","nullable":true}}},"publicCloud.ai.agents.AuthModeEnum":{"type":"string","description":"Which authentication mode is enforced on the agent's HTTP API.","enum":["KAGENT_JWT","NONE","OAUTH2"]},"publicCloud.ai.agents.BuiltinsConfig":{"type":"object","description":"Toggles for the agent's built-in capabilities, such as network access and web search.","properties":{"network":{"type":"boolean","description":"Whether the agent can make outbound network requests. Defaults to true.","nullable":true},"search":{"type":"boolean","description":"Whether the agent can perform web searches. Defaults to true.","nullable":true},"searchApiKey":{"type":"string","description":"API key for the configured search provider, when the provider requires one.","nullable":true},"searchProvider":{"type":"string","description":"Which search engine the agent uses for web searches. Defaults to 'duckduckgo'.","nullable":true},"toolsDeny":{"type":"array","description":"Tools this agent must not be offered, as glob patterns matched against the tool name ('*' = any run of characters). The 'builtins' flags above are all-or-nothing per subsystem — 'relay' exposes twenty 'relay_*' tools or none. A product built on kadk routinely wants *most* of a subsystem plus a composite of its own, and then finds the model reaching past the composite for the primitives it wraps: offered both 'revision_room' and 'relay_create_room', a model will happily assemble the room by hand and skip everything the composite also did. Naming the primitives here is how the product says 'that path is mine to own'.","nullable":true,"items":{"type":"string"}},"wizard":{"type":"boolean","description":"Whether the agent can reconfigure its own settings, such as its model or memory, from within a conversation. Off by default; only available to an administrator caller when enabled.","nullable":true}}},"publicCloud.ai.agents.ChannelsConfig":{"type":"object","description":"Messaging-platform integrations, such as Telegram and Webex, the agent can send and receive messages through","properties":{"telegram":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.TelegramChannelConfig"}],"description":"Telegram integration settings. When omitted, Telegram is not connected.","nullable":true},"webex":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.WebexChannelConfig"}],"description":"Webex integration settings. When omitted, Webex is not connected.","nullable":true}}},"publicCloud.ai.agents.Config":{"type":"object","description":"Templated AI agent configuration","properties":{"agent":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentConfig"}],"description":"The agent's identity settings, such as its display name.","nullable":true},"auth":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AuthConfig"}],"description":"Authentication settings for the agent's HTTP API. Unset falls back to requiring a token issued by the agent itself.","nullable":true},"builtins":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.BuiltinsConfig"}],"description":"Toggles for the agent's built-in capabilities, such as network access and web search.","nullable":true},"channels":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.ChannelsConfig"}],"description":"Messaging-platform integrations, such as Telegram and Webex, the agent can send and receive messages through.","nullable":true},"exec":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.ExecConfig"}],"description":"Remote command-execution settings. Unset or disabled means the agent cannot run shell commands.","nullable":true},"llm":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.LlmConfig"}],"description":"The language model this agent uses to respond, including sampling settings and failover targets.","nullable":true},"mcpIndexer":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.McpIndexerConfig"}],"description":"Settings for searchable tool indexing, required when any connected tool server uses indexed mode instead of listing all its tools directly.","nullable":true},"mcpServers":{"type":"object","description":"Connected MCP tool servers, keyed by a caller-chosen server name.","nullable":true,"additionalProperties":{"$ref":"#/components/schemas/publicCloud.ai.agents.McpServer"}},"memory":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.MemoryConfig"}],"description":"Long-term memory settings that let the agent retain and later recall facts across conversations.","nullable":true},"profiles":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentsConfig"}],"description":"Specialized sub-personas this agent can delegate tasks to.","nullable":true},"providers":{"type":"object","description":"Shared pool of language-model provider connections, keyed by a caller-chosen provider id and referenced by name elsewhere in this configuration.","nullable":true,"additionalProperties":{"$ref":"#/components/schemas/publicCloud.ai.agents.ProviderConfig"}},"relay":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.RelayConfig"}],"description":"Settings for hosting a local messaging relay that other participants can join.","nullable":true},"skills":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.SkillsConfig"}],"description":"Reusable skills the agent can invoke: named bundles of instructions it can follow on demand.","nullable":true},"soul":{"type":"string","description":"The agent's persona and system prompt: free-form text describing who it is, how it should behave, and any standing instructions it should always follow.","nullable":true},"toolPermissions":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.ToolPermissionsConfig"}],"description":"Rules applied to every tool call, matched on its name, arguments and what triggered the turn: before the call runs and — for a rule that says so — on what it returned. A matching rule allows the call, refuses it, asks a human, or defers to an LLM reviewer.","nullable":true},"version":{"type":"string","description":"Configuration format version. Defaults to '1.0' for agents created before this field existed.","nullable":true},"workspace":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.Workspace"}],"description":"The agent's file storage: an ordered list of mount points and the backend serving each one.","nullable":true}}},"publicCloud.ai.agents.ExecConfig":{"type":"object","description":"Remote command-execution settings. Unset or disabled means the agent cannot run shell commands.","properties":{"apiKey":{"type":"string","description":"API key used to authenticate to the remote command-execution service. Kept secret and never returned in plain text once set.","nullable":true},"autoSuspendIdleSeconds":{"type":"integer","description":"Number of seconds of inactivity before a sandboxed compute session is automatically suspended. Defaults to 60 seconds.","nullable":true},"baseUrl":{"type":"string","description":"Base URL of the remote command-execution service. No trailing slash.","nullable":true},"defaultImage":{"type":"string","description":"Default machine image used when the agent provisions a new sandboxed compute session","nullable":true},"enabled":{"type":"boolean","description":"Master switch for remote command execution. When false, the agent cannot run shell commands.","nullable":true}}},"publicCloud.ai.agents.FailoverPolicy":{"type":"object","description":"Which kinds of call failures trigger switching to a backup model instead of surfacing the error","properties":{"on":{"type":"array","description":"Failure reasons that trigger switching to the next backup model. A failure reason not listed here is reported as an error instead of triggering failover.","nullable":true,"items":{"$ref":"#/components/schemas/publicCloud.ai.agents.FailoverPolicyOnEnum"}}}},"publicCloud.ai.agents.FailoverPolicyOnEnum":{"type":"string","description":"Failure reasons that trigger switching to the next backup model. A failure reason not listed here is reported as an error instead of triggering failover.","enum":["AUTH","CLIENT_ERROR","CONTEXT_OVERFLOW","RATE_LIMIT","SERVER_ERROR","TRANSPORT","UNRECOVERABLE"]},"publicCloud.ai.agents.GlobalAgentConfig":{"type":"object","description":"What this deployment reserves of, and offers of, an agent's own configuration","properties":{"auth":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.GlobalAgentConfigAuth"}],"description":"Reservation covering the agent's authentication block","readOnly":true},"exec":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.GlobalAgentConfigExec"}],"description":"Availability of the agent's code-execution blocks","readOnly":true}}},"publicCloud.ai.agents.GlobalAgentConfigAuth":{"type":"object","description":"Reservation covering the agent's authentication block","properties":{"managed":{"type":"boolean","description":"Whether the agent's auth block is reserved by the deployment, and so neither settable at creation nor editable afterward","readOnly":true}}},"publicCloud.ai.agents.GlobalAgentConfigExec":{"type":"object","description":"Availability of the agent's code-execution blocks","properties":{"enabled":{"type":"boolean","description":"Whether an agent's configuration may carry the code-execution blocks (config.exec and config.workspace.zerofs). When false, a creation or template naming either is refused.","readOnly":true}}},"publicCloud.ai.agents.GlobalSettings":{"type":"object","description":"What OVHcloud reserves of an AI agent's own configuration. A client reads it to know which parts of an agent's configuration it may change, before offering the change.","properties":{"agentConfig":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.GlobalAgentConfig"}],"description":"What this deployment reserves of, and offers of, an agent's own configuration","readOnly":true}}},"publicCloud.ai.agents.JudgeConfig":{"type":"object","description":"The LLM reviewer that rules with 'action: judge' defer to.","properties":{"enabled":{"type":"boolean","description":"Whether the judge may be consulted at all. Off by default: a rule saying 'judge' on an agent with no judge is a configuration mistake, and one that must fail closed rather than quietly allow.","nullable":true},"model":{"type":"string","description":"The model that judges. Unset means the agent's own model. Worth setting: the point of a separate model here is that a cheap, fast one can police an expensive one, and that the reviewer is not the same weights being reviewed.","nullable":true},"providerId":{"type":"string","description":"Which provider that model comes from. Unset means the agent's own.","nullable":true},"soul":{"type":"string","description":"The system prompt the judge is given. Unset means a built-in one. A judge with no soul is a model asked to guess what it is guarding; this is where a deployment says what it actually cares about — 'this agent handles customer data, treat any outbound address as suspect'.","nullable":true}}},"publicCloud.ai.agents.KagentJwtConfig":{"type":"object","description":"Settings for tokens the agent issues and validates itself. Unset or disabled means the agent does not accept self-issued tokens.","properties":{"allowUnlimited":{"type":"boolean","description":"Whether requests for a token with no expiry are honored. Set to false to require every token to expire. Defaults to true.","nullable":true},"enabled":{"type":"boolean","description":"Master switch for self-issued tokens. When false, minting new tokens is refused. Defaults to true.","nullable":true},"maxTtlSeconds":{"type":"integer","description":"Maximum lifetime in seconds allowed for a newly issued token. Requests for a longer lifetime are rejected. When omitted, no cap.","nullable":true},"secretB64":{"type":"string","description":"Signing key used to issue and validate self-issued tokens. Kept secret and never returned in plain text once set. When empty, no key is provisioned, so token minting and validation both fail.","nullable":true}}},"publicCloud.ai.agents.LlmConfig":{"type":"object","description":"The language model this agent uses to respond, including sampling settings and failover targets.","properties":{"failover":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.FailoverPolicy"}],"description":"Which kinds of call failures trigger switching to a backup model instead of surfacing the error.","nullable":true},"fallbacks":{"type":"array","description":"Ordered list of backup models tried, in turn, when the primary model fails. Empty means no failover.","nullable":true,"items":{"$ref":"#/components/schemas/publicCloud.ai.agents.LlmFallback"}},"maxContextMessages":{"type":"integer","description":"How many trailing messages of a conversation go into the payload. 'None' keeps the historical 50. That number predates context windows measured in the hundreds of thousands of tokens: on a 262k-token model a 50-message cap uses a fraction of what is available, and everything older is dropped without a summary — the conversation quietly forgets rather than compacting. Raising it hands the ceiling back to the compaction path, which now has a declared budget to compare against.","nullable":true},"maxTokens":{"type":"integer","description":"Maximum number of tokens the model may generate in a single response. Unset uses the provider's default.","nullable":true},"model":{"type":"string","description":"Identifier of the model to call, for example 'gpt-5'.","nullable":true},"providerId":{"type":"string","description":"Id of the connected provider to call for this model. Must reference an entry in the shared provider pool.","nullable":true},"temperature":{"type":"number","description":"Sampling temperature controlling response randomness: lower values are more deterministic, higher values are more varied. Unset uses the provider's default.","nullable":true},"vision":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.LlmFallback"}],"description":"Optional secondary model used to describe images when the primary model cannot see them. Unset means images are not described for a text-only model.","nullable":true}}},"publicCloud.ai.agents.LlmFallback":{"type":"object","description":"Optional secondary model used to describe images when the primary model cannot see them. Unset means images are not described for a text-only model.","properties":{"maxTokens":{"type":"integer","description":"Maximum response tokens for this backup target. Unset falls back to the primary model's setting.","nullable":true},"model":{"type":"string","description":"Model identifier to use for this backup target. Empty reuses the primary model's identifier against this provider.","nullable":true},"providerId":{"type":"string","description":"Id of the connected provider to call for this backup target","nullable":true},"temperature":{"type":"number","description":"Sampling temperature for this backup target. Unset falls back to the primary model's temperature.","nullable":true}}},"publicCloud.ai.agents.McpIndexerConfig":{"type":"object","description":"Settings for searchable tool indexing, required when any connected tool server uses indexed mode instead of listing all its tools directly.","properties":{"embedderBatchSize":{"type":"integer","description":"Number of tool descriptions embedded per request when building the search index. Defaults to 16 when unset.","nullable":true},"embedderModel":{"type":"string","description":"Identifier of the embedding model used to index tool descriptions for search, for example 'text-embedding-3-small'."},"providerId":{"type":"string","description":"Id of the connected provider used to generate embeddings for tool search. Required as soon as any tool server uses indexed mode.","nullable":true}}},"publicCloud.ai.agents.McpServer":{"type":"object","description":"A connected MCP tool server the agent can call tools from.","properties":{"authKind":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.McpServerAuthKindEnum"}],"description":"How the agent authenticates to this server.","nullable":true},"enabled":{"type":"boolean","description":"Whether this server's tools are made available to the agent. Defaults to true; set to false to temporarily park a server without removing its settings.","nullable":true},"headers":{"type":"object","description":"Extra HTTP headers sent on every request to this server, for example custom authentication headers.","nullable":true,"additionalProperties":{"type":"string"}},"mode":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.McpServerModeEnum"}],"description":"How this server's tools are surfaced to the model.","nullable":true},"url":{"type":"string","description":"Base URL of the MCP server."}}},"publicCloud.ai.agents.McpServerAuthKindEnum":{"type":"string","description":"How the agent authenticates to this server.","enum":["BEARER","NONE","OAUTH"]},"publicCloud.ai.agents.McpServerModeEnum":{"type":"string","description":"How this server's tools are surfaced to the model.","enum":["FLAT","INDEXED"]},"publicCloud.ai.agents.MemoryConfig":{"type":"object","description":"Long-term memory settings that let the agent retain and later recall facts across conversations.","properties":{"consolidateOnTurnEnd":{"type":"boolean","description":"Whether the agent reviews each conversation turn to capture any durable facts it did not already record. Defaults to true.","nullable":true},"consolidationCron":{"type":"string","description":"Schedule, as a five-field cron expression, for the periodic pass that merges duplicate facts and promotes frequently reinforced ones. Defaults to daily at 3 AM.","nullable":true},"consolidationMaxRounds":{"type":"integer","description":"Maximum number of internal steps the end-of-turn memory review may take. Defaults to 3.","nullable":true},"corePredicates":{"type":"array","description":"Fact categories eligible for automatic promotion to permanent status when reinforced. Empty disables automatic promotion; facts can still be promoted manually.","nullable":true,"items":{"type":"string"}},"embedderBatchSize":{"type":"integer","description":"Number of facts embedded per request when building the memory index. Defaults to 16.","nullable":true},"embedderModel":{"type":"string","description":"Identifier of the embedding model used to index remembered facts for recall. Required when memory is enabled.","nullable":true},"enabled":{"type":"boolean","description":"Master switch for the memory feature. When false, the agent retains no long-term facts.","nullable":true},"gcCron":{"type":"string","description":"Schedule, as a five-field cron expression, for the periodic cleanup pass that evicts low-value facts once storage exceeds its soft limit. Defaults to hourly.","nullable":true},"gcMaxSize":{"type":"integer","description":"Hard upper bound on the number of stored facts, used as a safety cap against runaway growth. Defaults to 20000.","nullable":true},"gcMinRetention":{"type":"number","description":"Minimum retention score, from 0 to 1 with no unit, a non-permanent fact must keep to survive cleanup; facts scoring below this are marked for eviction. Defaults to 0.15.","nullable":true},"gcSoftLimit":{"type":"integer","description":"Number of stored facts above which cleanup starts evicting low-value ones, stopping once storage is back down to 90% of this value. Defaults to 10000.","nullable":true},"halfLifeDays":{"type":"integer","description":"Number of days after which a fact's retention score decays by half. Higher values make facts fade more slowly. Defaults to 45.","nullable":true},"identityPromotionThreshold":{"type":"integer","description":"Number of times a fact in a core category must be reinforced before it is promoted to permanent status and never evicted. Defaults to 5.","nullable":true},"inferenceLlmFallback":{"type":"boolean","description":"Whether the model is consulted to classify facts the automatic pass could not resolve on its own. Defaults to true; set to false to keep consolidation fully automatic.","nullable":true},"mergeSimilarityThreshold":{"type":"number","description":"Similarity threshold, from 0 to 1, above which two facts about the same subject are merged during cleanup. Defaults to 0.92.","nullable":true},"providerId":{"type":"string","description":"Id of the connected provider used to generate embeddings for stored facts. Required when memory is enabled.","nullable":true},"ruleIdleGcDays":{"type":"integer","description":"Number of days a derived rule may go unused before cleanup removes it. Defaults to 60.","nullable":true},"rulesMax":{"type":"integer","description":"Maximum number of derived rules retained. Older or unused rules are cleaned up during consolidation. Defaults to 256.","nullable":true}}},"publicCloud.ai.agents.ModelCapabilityOverride":{"type":"object","description":"Manual overrides for what a specific model can do, used when the built-in defaults for that model are wrong or unknown for this deployment","properties":{"contextWindow":{"type":"integer","description":"Maximum context window, in tokens, that this model accepts. Unset uses the built-in default for the model.","nullable":true},"tools":{"type":"boolean","description":"Whether this model can call tools. Unset uses the built-in default for the model.","nullable":true},"vision":{"type":"boolean","description":"Whether this model can understand images. Unset uses the built-in default for the model.","nullable":true}}},"publicCloud.ai.agents.MountBackendEnum":{"type":"string","description":"Which storage backend serves this mount. Determines which of the other fields apply.","enum":["BLOB","FS","S3","SQL"]},"publicCloud.ai.agents.MountConfig":{"type":"object","description":"One workspace mount: a logical path plus the storage backend that serves it (ephemeral filesystem, persistent blob store, SQLite-backed store, or an operator-supplied S3™ compatible bucket).","properties":{"accessKey":{"type":"string","description":"Access key used to authenticate to the bucket.","nullable":true},"backend":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.MountBackendEnum"}],"description":"Which storage backend serves this mount; determines which of the other fields apply."},"bucket":{"type":"string","description":"Name of the bucket this mount reads and writes to.","nullable":true},"endpoint":{"type":"string","description":"Endpoint URL of the S3™-compatible storage service.","nullable":true},"maxFileBytes":{"type":"integer","description":"Maximum size, in bytes, allowed for a single file in this mount. Defaults to 8 MiB when unset.","nullable":true},"maxFiles":{"type":"integer","description":"Maximum number of files allowed in this mount. Unset means no cap.","nullable":true},"maxTotalBytes":{"type":"integer","description":"Maximum total size, in bytes, allowed across all files in this mount. Defaults to 256 MiB when unset.","nullable":true},"path":{"type":"string","description":"Absolute path where this mount appears in the agent's filesystem, for example '/' or '/tmp'."},"prefix":{"type":"string","description":"Key prefix within the bucket under which this mount's files are stored. Empty means the bucket root.","nullable":true},"region":{"type":"string","description":"Region of the bucket. Defaults to 'us-east-1'.","nullable":true},"ro":{"type":"boolean","description":"When true, writes and deletes under this mount are rejected.","nullable":true},"secretKey":{"type":"string","description":"Secret key used to authenticate to the bucket. Kept secret and never returned in plain text once set.","nullable":true}}},"publicCloud.ai.agents.OAuth2Config":{"type":"object","description":"External identity provider settings, used when the authentication mode accepts an external OAuth2 token","properties":{"audience":{"type":"string","description":"Expected audience value that a presented token must carry to be accepted"},"issuer":{"type":"string","description":"Base URL of the external identity provider that issues tokens for this agent"},"jwksUri":{"type":"string","description":"Explicit JWKS endpoint used to verify token signatures. Unset falls back to the identity provider's well-known JWKS location.","nullable":true},"ownerSub":{"type":"string","description":"Stable identifier of the agent's owner at the identity provider. A presented token's subject must match this value to be accepted.","nullable":true},"requiredScopes":{"type":"array","description":"Scopes a presented token must carry to be accepted. When empty, no scope is required.","nullable":true,"items":{"type":"string"}}}},"publicCloud.ai.agents.PermissionRule":{"type":"object","description":"One tool-permission rule: which tool calls it matches, and what to do with them.","properties":{"action":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.PermissionRuleActionEnum"}],"description":"What to do with a matching call."},"args":{"type":"object","description":"Argument constraints, as 'path-glob -> value-glob', ALL of which must hold for the rule to match. The call's arguments are flattened to 'path -> value' pairs before matching ('{'a':{'b':[1,2]}}' becomes 'a.b.0 -> 1', 'a.b.1 -> 2'), so one entry means 'some argument whose path matches the key has a value matching the pattern'. A '!' prefix on the value inverts it into '… and none of them matches', which is how an allowlist is written: '{'url': '!https://*.ovh.net/*'}' is every URL but ours. '!' flips the value test and not the quantifier: both forms ask whether SOME selected value satisfies the test. So a deny rule reading '{'url': '!https://*.ovh.net/*'}' still fires on a call carrying two URLs of which only one is foreign — which is the point of it. A rule about an argument that is absent entirely never matches, in either form: absence is not a value to have an opinion about, and a rule that fired on it would fire on every unrelated call.","nullable":true,"additionalProperties":{"type":"string"}},"phase":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.PermissionRulePhaseEnum"}],"description":"Whether this rule is evaluated before the call runs or after it returned. Defaults to 'before'.","nullable":true},"reason":{"type":"string","description":"Why this rule exists. Shown to the model in the refusal and written to the log. Worth filling in: it is the only part of this rule the model can act on.","nullable":true},"result":{"type":"string","description":"Value-glob over the text the tool returned. 'phase: after' only. Matched against the raw result, not flattened into paths the way 'args' is: a result is prose far more often than it is a shape, and an author writing a rule about one should not have to know whether this particular tool happened to wrap it in JSON. '*' spans everything, so ''*-----BEGIN * PRIVATE KEY*'' is a substring test, and a leading '!' inverts it exactly as it does in 'args'. A rule with no 'result' matches every result, which is how 'refer everything this tool brings back to the judge' is written.","nullable":true},"tool":{"type":"string","description":"Glob over the tool name. '*' matches any run of characters, including an empty one, so a rule left at its default matches every tool.","nullable":true},"triggers":{"type":"array","description":"Trigger kinds this rule applies to ('http', 'invoke', 'messaging', 'cron', 'scheduled', 'subagent'). Empty means every trigger.","nullable":true,"items":{"$ref":"#/components/schemas/publicCloud.ai.agents.PermissionRuleTriggerEnum"}},"unattended":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.PermissionRuleActionEnum"}],"description":"What an 'ask' becomes on a turn with no human to ask. Defaults to 'deny'; ignored unless 'action' is 'ask'.","nullable":true}}},"publicCloud.ai.agents.PermissionRuleActionEnum":{"type":"string","description":"What to do with a matching call","enum":["ALLOW","ASK","DENY","JUDGE"]},"publicCloud.ai.agents.PermissionRulePhaseEnum":{"type":"string","description":"Whether this rule is evaluated before the call runs or after it returned. Defaults to 'before'.","enum":["AFTER","BEFORE"]},"publicCloud.ai.agents.PermissionRuleTriggerEnum":{"type":"string","description":"What started the turn a tool-permission rule applies to","enum":["CRON","HTTP","INVOKE","MESSAGING","SCHEDULED","SUBAGENT"]},"publicCloud.ai.agents.ProviderConfig":{"type":"object","description":"A language-model provider connection, referenced by id from other configuration blocks that need to call a model","properties":{"aiEndpoints":{"type":"boolean","description":"Materialize this provider from the OVHcloud AI Endpoints preset. Only accepted on the reserved provider id, which no other provider may use, and on a single provider. Mutually exclusive with apiBase and displayName, which the preset supplies. Refused when the deployment has the preset disabled. Defaults to false.","nullable":true},"aiEndpointsIntegratedAuth":{"type":"boolean","description":"Have OVHcloud mint this provider's bearer token itself. Requires aiEndpoints, and is mutually exclusive with apiKey. Refused when the deployment has the preset's integrated authentication disabled. Defaults to false.","nullable":true},"apiBase":{"type":"string","description":"Base URL of the provider's API endpoint, for example `https://api.openai.com/v1`. No trailing slash.","nullable":true},"apiKey":{"type":"string","description":"API key used to authenticate to this provider. Kept secret and never returned in plain text once set.","nullable":true},"displayName":{"type":"string","description":"Human-readable label for this provider, shown in the interface. Defaults to the provider's id when empty.","nullable":true},"models":{"type":"object","description":"Per-model capability overrides for models hosted by this provider, keyed by model id","nullable":true,"additionalProperties":{"$ref":"#/components/schemas/publicCloud.ai.agents.ModelCapabilityOverride"}}}},"publicCloud.ai.agents.RelayConfig":{"type":"object","description":"Settings for hosting a local messaging relay that other participants can join.","properties":{"enabled":{"type":"boolean","description":"Master switch for hosting a relay. When false, the relay and its rooms are not available.","nullable":true},"maxMessagesPerRoom":{"type":"integer","description":"Maximum number of messages retained per room. Unset means unlimited.","nullable":true},"maxRooms":{"type":"integer","description":"Maximum number of rooms this relay may host. Unset means unlimited.","nullable":true},"roomCreation":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.RelayRoomCreationEnum"}],"description":"Controls who may create a new room on this relay: by default only the host can create rooms, but this can be relaxed so that any authenticated member creates one simply by joining a room that does not yet exist.","nullable":true}}},"publicCloud.ai.agents.RelayRoomCreationEnum":{"type":"string","description":"Who may create a new room on a relay","enum":["OPEN","OWNER"]},"publicCloud.ai.agents.ScratchpadConfig":{"type":"object","description":"Temporary per-conversation working files the agent can generate, download into, and re-read across turns, cleaned up automatically after a retention period. Unset means on with defaults.","properties":{"cleanupCron":{"type":"string","description":"Schedule, as a five-field cron expression, for the pass that deletes expired scratchpads. Defaults to daily at 4:30 AM.","nullable":true},"enabled":{"type":"boolean","description":"Whether scratchpads are available. When omitted, automatically on whenever the agent has durable file storage. Set to false to disable them explicitly.","nullable":true},"maxDownloadBytes":{"type":"integer","description":"Largest single download in bytes that may be saved to a scratchpad. Defaults to 25 MiB.","nullable":true},"path":{"type":"string","description":"Absolute path of the directory holding one subdirectory per conversation. Defaults to `/scratchpad`.","nullable":true},"retentionDays":{"type":"integer","description":"Number of days a conversation's scratchpad may go untouched before it is deleted. Defaults to 7.","nullable":true},"spillBytes":{"type":"integer","description":"Size in bytes above which a fetched page is saved to the scratchpad and summarized instead of being returned in full. Defaults to 128 KiB.","nullable":true}}},"publicCloud.ai.agents.SkillSeed":{"type":"object","description":"A single skill definition: what it does and how the agent should perform it.","properties":{"description":{"type":"string","description":"Short summary of what this skill does, shown to the user when listing available skills.","nullable":true},"instructions":{"type":"string","description":"Detailed instructions the agent follows when invoking this skill.","nullable":true}}},"publicCloud.ai.agents.SkillsConfig":{"type":"object","description":"Reusable skills the agent can invoke: named bundles of instructions it can follow on demand.","properties":{"builtins":{"type":"array","description":"Ids of built-in skills to enable, or '-id' to disable one that is on by default.","nullable":true,"items":{"type":"string"}},"enabled":{"type":"boolean","description":"Whether the agent's skills are offered to the model. Absent means yes. When false the prompt catalogue and the 'skill_*' tools go away, so the model is not told about them and cannot invoke them — but their files stay mounted in the workspace ('workspace.skills_path', default '/skills'), where a model with filesystem tools can still read them.","nullable":true},"items":{"type":"object","description":"Skills defined directly in this configuration, keyed by skill name. Skills created through other means are left untouched.","nullable":true,"additionalProperties":{"$ref":"#/components/schemas/publicCloud.ai.agents.SkillSeed"}}}},"publicCloud.ai.agents.TelegramChannelConfig":{"type":"object","description":"Telegram integration settings. Unset means Telegram is not connected.","properties":{"botToken":{"type":"string","description":"Bot token issued by Telegram's BotFather. Kept secret and never returned in plain text once set.","nullable":true},"enabled":{"type":"boolean","description":"Master switch for the Telegram integration. When false, this channel is unavailable to the agent.","nullable":true},"webhookSecret":{"type":"string","description":"Shared secret used to verify that incoming Telegram messages genuinely come from Telegram. Leaving it empty disables this verification, which is not recommended.","nullable":true}}},"publicCloud.ai.agents.Template":{"type":"object","description":"An AI agent configuration template","properties":{"createdAt":{"type":"string","description":"Date of the template creation","format":"date-time","readOnly":true},"id":{"type":"string","description":"Unique identifier of the template","readOnly":true},"resourceStatus":{"allOf":[{"$ref":"#/components/schemas/common.ResourceStatusEnum"}],"description":"Reflects the readiness of the template: READY, or DELETING on the response to its deletion","readOnly":true},"source":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.TemplateSourceEnum"}],"description":"Distinguishes built-in (code-defined) from user-authored templates","readOnly":true},"targetSpec":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.TemplateTargetSpec"}],"description":"Desired specification to replace the template with","readOnly":true},"updatedAt":{"type":"string","description":"Date of the last template update","format":"date-time","readOnly":true}}},"publicCloud.ai.agents.TemplateCreation":{"type":"object","description":"Input parameters for creating an AI agent template","properties":{"targetSpec":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.TemplateCreationTargetSpec"}],"description":"Desired specification of the template to create"}},"required":["targetSpec"]},"publicCloud.ai.agents.TemplateCreationTargetSpec":{"type":"object","description":"Desired specification of the template to create","properties":{"config":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.Config"}],"description":"Templated AI agent configuration"},"description":{"type":"string","description":"Optional human-readable description","nullable":true},"name":{"type":"string","description":"Name of the template, unique within the namespace"}},"required":["config","name"]},"publicCloud.ai.agents.TemplatePreset":{"type":"object","description":"One ready-made AI agent configuration OVHcloud publishes, offered alongside the templates a caller writes for themselves. Its identifier is what a creation names to build an agent from it, and carries a reserved prefix that distinguishes it from a caller's own template.","properties":{"aiEndpoints":{"type":"boolean","description":"Whether an agent created from this preset uses the OVHcloud AI Endpoints provider preset","nullable":true,"readOnly":true},"aiEndpointsIntegratedAuth":{"type":"boolean","description":"Whether the AI Endpoints credential is minted by this service rather than supplied by the caller","nullable":true,"readOnly":true},"description":{"type":"string","description":"What this preset is for. Empty when the deployment states none.","nullable":true,"readOnly":true},"id":{"type":"string","description":"Identifier to pass as targetSpec.template.id when creating an agent from this preset","readOnly":true},"name":{"type":"string","description":"Human-readable name of the preset","readOnly":true}}},"publicCloud.ai.agents.TemplateSourceEnum":{"type":"string","description":"Origin of an AI agent template","enum":["BUILTIN","USER"]},"publicCloud.ai.agents.TemplateTargetSpec":{"type":"object","description":"Desired specification to replace the template with","properties":{"config":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.Config"}],"description":"Templated AI agent configuration","nullable":true},"description":{"type":"string","description":"Optional human-readable description","nullable":true},"name":{"type":"string","description":"Name of the template"}},"required":["name"]},"publicCloud.ai.agents.TemplateUpdate":{"type":"object","description":"Input for AI agent template update","properties":{"targetSpec":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.TemplateTargetSpec"}],"description":"Desired specification to replace the template with"}},"required":["targetSpec"]},"publicCloud.ai.agents.ToolPermissionsConfig":{"type":"object","description":"Rules applied to every tool call, matched on its name, arguments and what triggered the turn: before the call runs and — for a rule that says so — on what it returned. A matching rule allows the call, refuses it, asks a human, or defers to an LLM reviewer.","properties":{"judge":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.JudgeConfig"}],"description":"The LLM reviewer that rules with 'action: judge' defer to.","nullable":true},"rules":{"type":"array","description":"Permission rules, evaluated in order within a phase; the LAST one that matches decides.","nullable":true,"items":{"$ref":"#/components/schemas/publicCloud.ai.agents.PermissionRule"}}}},"publicCloud.ai.agents.WebexChannelConfig":{"type":"object","description":"Webex integration settings. Unset means Webex is not connected.","properties":{"accessToken":{"type":"string","description":"Bot access token issued by Webex. Kept secret and never returned in plain text once set.","nullable":true},"enabled":{"type":"boolean","description":"Master switch for the Webex integration. When false, this channel is unavailable to the agent.","nullable":true},"webhookSecret":{"type":"string","description":"Shared secret used to verify that incoming Webex messages genuinely come from Webex. Leaving it empty skips this verification.","nullable":true}}},"publicCloud.ai.agents.Workspace":{"type":"object","description":"The agent's file storage: an ordered list of mount points and the backend serving each one","properties":{"agentsPath":{"type":"string","description":"Path where the read-only view of delegated sub-personas is mounted. Defaults to `/agents`.","nullable":true},"mount":{"type":"array","description":"Ordered list of storage mount points available to the agent","nullable":true,"items":{"$ref":"#/components/schemas/publicCloud.ai.agents.MountConfig"}},"scratchpad":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.ScratchpadConfig"}],"description":"Temporary per-conversation working files the agent can generate, download into, and re-read across turns, cleaned up automatically after a retention period. When omitted, on with defaults.","nullable":true},"skillsPath":{"type":"string","description":"Path where the read-only view of the agent's skills is mounted. Defaults to `/skills`.","nullable":true},"zerofs":{"allOf":[{"$ref":"#/components/schemas/publicCloud.ai.agents.ZerofsConfig"}],"description":"Optional shared scratch storage mount, also reachable from any remote command-execution session tied to this agent","nullable":true}}},"publicCloud.ai.agents.ZerofsConfig":{"type":"object","description":"Optional shared scratch storage mount, also reachable from any remote command-execution session tied to this agent","properties":{"enabled":{"type":"boolean","description":"Whether this mount is active. When omitted, automatically on whenever remote command execution is configured. Set to false to disable it explicitly.","nullable":true},"mountPath":{"type":"string","description":"Absolute path where this mount appears in the agent's filesystem. Defaults to `/wrk`.","nullable":true}}},"time":{"type":"string","description":"Time (e.g., 15:04:05)","format":"time","example":"15:04:05"}},"securitySchemes":{"oAuth2AuthCode":{"type":"oauth2","description":"Oauth2","x-client-id":"1bb9c7df371741c0","x-client-secret":"a5b4de870aca620d10fbf63cd18d205b","flows":{"authorizationCode":{"authorizationUrl":"https://auth.eu.ovhcloud.com/oauth2/authorize","tokenUrl":"https://auth.eu.ovhcloud.com/oauth2/token","scopes":{"account/all":"Manage your account","all":"Manage your whole account and all your services","services/all":"Manage your services lifecycle and billing"}}}}}},"paths":{"/publicCloud/project/{projectId}/ai/agents/agent":{"get":{"summary":"List AI agents","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"header","name":"X-Pagination-Cursor","description":"Pagination cursor","schema":{"type":"string"}},{"in":"header","name":"X-Pagination-Size","description":"Pagination size","schema":{"type":"integer"}},{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/publicCloud.ai.agents.Agent"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/publicCloud/project/{projectId}/ai/agents/agent\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/publicCloud/project/{projectId}/ai/agents/agent\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/agent/get","required":true}],"x-response-identifier":"id","x-expanded-response":"PublicCloudAiAgentsAgent"},"post":{"summary":"Create an AI agent","description":"Creates an AI agent: a hosted assistant that answers on its own URL, given by `currentState.endpointUrl`, and reached with a token from the `token` action. An agent runs a model with a persona, plus whatever tools, memory and channels its configuration gives it. That configuration can come from a ready-made one published by OVHcloud, from a template of your own, or from settings supplied here — or from none of them, leaving an agent that cannot answer until it is given a model. Parts of it that OVHcloud manages are rejected here; the `globalSettings` preset says which. This is the only point at which this API sets an agent's configuration: from here on the agent holds its own and is configured through its endpoint. Create it paused to finish preparing it before it answers anyone.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentCreation"},"examples":{"Example":{"value":{"targetSpec":{"enabled":true,"name":"scout","template":{"id":"demo-assistant"}}},"summary":"Create an AI agent"}}}}},"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.Agent"},"examples":{"Example":{"value":{"createdAt":"2026-07-20T09:00:00Z","currentState":null,"id":"0659cc01b8ef6326d33a2ba0ae7a0317e529d925","resourceStatus":"CREATING","targetSpec":{"enabled":true,"name":"scout"},"updatedAt":"2026-07-20T09:05:00Z"},"summary":"The created AI agent"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\n# Request body type: publicCloud.ai.agents.AgentCreation\nresult = client.post(\"/v2/publicCloud/project/{projectId}/ai/agents/agent\",\n\ttargetSpec = None, # Desired specification of the AI agent to create (type: publicCloud.ai.agents.AgentCreationTargetSpec)\n)\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n// Request body type: publicCloud.ai.agents.AgentCreation\n$result = $ovh->post(\"/v2/publicCloud/project/{projectId}/ai/agents/agent\", array(\n\ttargetSpec => null, // Desired specification of the AI agent to create (type: publicCloud.ai.agents.AgentCreationTargetSpec)\n));\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/agent/create","required":true}]}},"/publicCloud/project/{projectId}/ai/agents/agent/{agentId}":{"delete":{"summary":"Delete an AI agent","description":"Deletion is asynchronous: the response describes the agent with `resourceStatus: DELETING`.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"agentId","description":"Agent ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.Agent"}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.delete(\"/v2/publicCloud/project/{projectId}/ai/agents/agent/{agentId}\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->delete(\"/v2/publicCloud/project/{projectId}/ai/agents/agent/{agentId}\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/agent/delete","required":true}]},"get":{"summary":"Get an AI agent","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"agentId","description":"Agent ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.Agent"},"examples":{"Example":{"value":{"createdAt":"2026-07-20T09:00:00Z","currentState":{"enabled":true,"endpointUrl":"https://agents.example.ovhcloud.example/v1/kapp/0659cc01b8ef6326d33a2ba0ae7a0317e529d925","name":"scout"},"id":"0659cc01b8ef6326d33a2ba0ae7a0317e529d925","resourceStatus":"READY","targetSpec":{"enabled":true,"name":"scout"},"updatedAt":"2026-07-20T09:05:00Z"},"summary":"A ready AI agent"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/publicCloud/project/{projectId}/ai/agents/agent/{agentId}\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/publicCloud/project/{projectId}/ai/agents/agent/{agentId}\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/agent/get","required":true}],"x-response-identifier":"id"},"put":{"summary":"Update an AI agent","description":"`targetSpec.enabled` is mandatory, including on an update whose only intent is a rename. Restating the agent's current running state changes nothing; stating the other one pauses or resumes it. `targetSpec.name` is optional: omitting it, or restating the current name, leaves it untouched. Any other name renames the agent and redeploys it, keeping its identifier, its access tokens, its configuration and its data, and re-applying its paused state. A name another agent in the project already holds is rejected. The configuration is not settable here; it is read and changed through the agent itself.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"agentId","description":"Agent ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentUpdate"},"examples":{"Example":{"value":{"targetSpec":{"enabled":true}},"summary":"Update the AI agent"}}}}},"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.Agent"}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\n# Request body type: publicCloud.ai.agents.AgentUpdate\nresult = client.put(\"/v2/publicCloud/project/{projectId}/ai/agents/agent/{agentId}\",\n\ttargetSpec = None, # Desired specification to reconcile the AI agent toward (type: publicCloud.ai.agents.AgentUpdateTargetSpec)\n)\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n// Request body type: publicCloud.ai.agents.AgentUpdate\n$result = $ovh->put(\"/v2/publicCloud/project/{projectId}/ai/agents/agent/{agentId}\", array(\n\ttargetSpec => null, // Desired specification to reconcile the AI agent toward (type: publicCloud.ai.agents.AgentUpdateTargetSpec)\n));\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/agent/edit","required":true}]}},"/publicCloud/project/{projectId}/ai/agents/agent/{agentId}/redeploy":{"post":{"summary":"Redeploy an AI agent, refreshing its runtime while keeping its data","description":"Refreshes the agent's runtime without touching its configuration or the data it holds.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"agentId","description":"Agent ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.Agent"},"examples":{"Example":{"value":{"createdAt":"2026-07-20T09:00:00Z","currentState":{"enabled":true,"endpointUrl":"https://agents.example.ovhcloud.example/v1/kapp/0659cc01b8ef6326d33a2ba0ae7a0317e529d925","name":"scout"},"id":"0659cc01b8ef6326d33a2ba0ae7a0317e529d925","resourceStatus":"UPDATING","targetSpec":{"enabled":true,"name":"scout"},"updatedAt":"2026-07-20T09:05:00Z"},"summary":"The AI agent being updated"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.post(\"/v2/publicCloud/project/{projectId}/ai/agents/agent/{agentId}/redeploy\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->post(\"/v2/publicCloud/project/{projectId}/ai/agents/agent/{agentId}/redeploy\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/agent/redeploy","required":true}]}},"/publicCloud/project/{projectId}/ai/agents/agent/{agentId}/token":{"post":{"summary":"Issue a scoped access token for an AI agent","description":"Returns a bearer token to present to the agent at `currentState.endpointUrl`. The token is returned once, here, and is never readable afterwards. Both body fields are optional: send `{}` for the defaults, which are the VIEWER role and the agent's own default lifetime. A lifetime longer than the agent's own maximum is rejected.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"agentId","description":"Agent ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentTokenCreation"},"examples":{"Example":{"value":{"lifetimeSeconds":3600,"role":"VIEWER"},"summary":"Issue a read-only token valid for one hour"}}}}},"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.AgentToken"},"examples":{"Example":{"value":{"expiresAt":"2026-07-20T10:00:00Z","role":"VIEWER","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.token"},"summary":"Issue a read-only token valid for one hour"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\n# Request body type: publicCloud.ai.agents.AgentTokenCreation\nresult = client.post(\"/v2/publicCloud/project/{projectId}/ai/agents/agent/{agentId}/token\",\n\tlifetimeSeconds = None, # Token lifetime in seconds. Defaults to the agent's default. (type: integer, nullable)\n\trole = None, # Role granted to the minted token. Defaults to VIEWER. (type: publicCloud.ai.agents.AgentTokenRoleEnum, nullable)\n)\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n// Request body type: publicCloud.ai.agents.AgentTokenCreation\n$result = $ovh->post(\"/v2/publicCloud/project/{projectId}/ai/agents/agent/{agentId}/token\", array(\n\tlifetimeSeconds => null, // Token lifetime in seconds. Defaults to the agent's default. (type: integer, nullable)\n\trole => null, // Role granted to the minted token. Defaults to VIEWER. (type: publicCloud.ai.agents.AgentTokenRoleEnum, nullable)\n));\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/agent/token/create","required":true}]}},"/publicCloud/project/{projectId}/ai/agents/preset/globalSettings":{"get":{"summary":"Get the AI agent configuration settings fixed by OVHcloud","description":"Part of an AI agent's configuration is managed by OVHcloud rather than by you: how callers authenticate to the agent, and whether the agent can run code. This route says which parts those are, so a configuration can be prepared knowing what will be accepted — anything OVHcloud manages is rejected if you set it yourself, whether on an agent or on a template. What it reports does not change from one agent to the next.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.GlobalSettings"},"examples":{"Example":{"value":{"agentConfig":{"auth":{"managed":true},"exec":{"enabled":false}}},"summary":"A ready AI agent configuration policy"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/publicCloud/project/{projectId}/ai/agents/preset/globalSettings\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/publicCloud/project/{projectId}/ai/agents/preset/globalSettings\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/preset/globalSettings/get","required":true}]}},"/publicCloud/project/{projectId}/ai/agents/preset/model/aiEndpointsProvider":{"get":{"operationId":"getAiAgentAiEndpointsProviderPreset","summary":"Get the OVHcloud AI Endpoints provider preset","description":"States whether the OVHcloud AI Endpoints provider preset can be selected, whether OVHcloud provisions its credential so the caller need not supply one, the base URL whose `/models` sub-path lists the models available, and the model used when the caller names none.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.AIEndpointsPreset"},"examples":{"Example":{"value":{"apiBase":"https://oai.endpoints.kepler.ai.cloud.ovh.net/v1","defaultModel":"Qwen3.6-27B","enabled":true,"integratedAuth":true},"summary":"A ready OVHcloud AI Endpoints provider preset"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/publicCloud/project/{projectId}/ai/agents/preset/model/aiEndpointsProvider\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/publicCloud/project/{projectId}/ai/agents/preset/model/aiEndpointsProvider\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/preset/model/aiEndpointsProvider/get","required":true}]}},"/publicCloud/project/{projectId}/ai/agents/preset/template":{"get":{"operationId":"getAllAiAgentTemplatePresets","summary":"List built-in AI agent template presets","description":"Presets are ready-made configurations OVHcloud publishes, offered alongside the templates a caller writes for themselves. Pass a preset's `id` as `targetSpec.template.id` on an agent creation to build an agent from it. Identifiers carry a reserved prefix, so a client can tell a preset from a template of its own.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"header","name":"X-Pagination-Cursor","description":"Pagination cursor","schema":{"type":"string"}},{"in":"header","name":"X-Pagination-Size","description":"Pagination size","schema":{"type":"integer"}},{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/publicCloud.ai.agents.TemplatePreset"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/publicCloud/project/{projectId}/ai/agents/preset/template\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/publicCloud/project/{projectId}/ai/agents/preset/template\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/preset/template/get","required":true}],"x-response-identifier":"id","x-expanded-response":"PublicCloudAiAgentsTemplatePreset"}},"/publicCloud/project/{projectId}/ai/agents/preset/template/{templatePresetId}":{"get":{"operationId":"getAiAgentTemplatePreset","summary":"Get an AI agent template preset","description":"A preset is a ready-made configuration OVHcloud publishes, offered alongside the templates a caller writes for themselves. Pass its `id` as `targetSpec.template.id` on an agent creation to build an agent from it. The identifier carries a reserved prefix, so a client can tell a preset from a template of its own.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"templatePresetId","description":"Template preset ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.TemplatePreset"},"examples":{"Example":{"value":{"aiEndpoints":true,"aiEndpointsIntegratedAuth":true,"description":"A blank agent on the managed AI Endpoints provider, credential included","id":"ovhcloud-managed-starter","name":"starter"},"summary":"A ready AI agent template preset"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/publicCloud/project/{projectId}/ai/agents/preset/template/{templatePresetId}\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/publicCloud/project/{projectId}/ai/agents/preset/template/{templatePresetId}\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/preset/template/get","required":true}],"x-response-identifier":"id"}},"/publicCloud/project/{projectId}/ai/agents/template":{"get":{"operationId":"getAllAiAgentTemplates","summary":"List AI agent templates","description":"The ready-made configurations OVHcloud publishes are absent from this list. They are served by the `preset/template` node.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"header","name":"X-Pagination-Cursor","description":"Pagination cursor","schema":{"type":"string"}},{"in":"header","name":"X-Pagination-Size","description":"Pagination size","schema":{"type":"integer"}},{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/publicCloud.ai.agents.Template"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/publicCloud/project/{projectId}/ai/agents/template\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/publicCloud/project/{projectId}/ai/agents/template\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/template/get","required":true}],"x-response-identifier":"id","x-expanded-response":"PublicCloudAiAgentsTemplate"},"post":{"operationId":"createAiAgentTemplate","summary":"Create an AI agent template","description":"Registers a reusable configuration that a later agent creation can name through `targetSpec.template.id`. A template stores a configuration. It runs nothing by itself. `targetSpec.name` must be unique within the project's namespace.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.TemplateCreation"},"examples":{"Example":{"value":{"targetSpec":{"config":{"llm":{"model":"Qwen3.6-27B","providerId":"ovhcloud","temperature":0.7},"version":"1.0"},"description":"A ready-to-use assistant configuration","name":"Starter assistant"}},"summary":"Create an AI agent template"}}}}},"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.Template"},"examples":{"Example":{"value":{"createdAt":"2026-07-20T09:00:00Z","id":"tpl-0a1b2c3d4e5f6071","resourceStatus":"READY","source":"USER","targetSpec":{"config":{"llm":{"model":"Qwen3.6-27B","providerId":"ovhcloud","temperature":0.7},"version":"1.0"},"description":"A ready-to-use assistant configuration","name":"Starter assistant"},"updatedAt":"2026-07-20T09:05:00Z"},"summary":"The created AI agent template"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\n# Request body type: publicCloud.ai.agents.TemplateCreation\nresult = client.post(\"/v2/publicCloud/project/{projectId}/ai/agents/template\",\n\ttargetSpec = None, # Desired specification of the template to create (type: publicCloud.ai.agents.TemplateCreationTargetSpec)\n)\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n// Request body type: publicCloud.ai.agents.TemplateCreation\n$result = $ovh->post(\"/v2/publicCloud/project/{projectId}/ai/agents/template\", array(\n\ttargetSpec => null, // Desired specification of the template to create (type: publicCloud.ai.agents.TemplateCreationTargetSpec)\n));\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/template/create","required":true}]}},"/publicCloud/project/{projectId}/ai/agents/template/{templateId}":{"delete":{"operationId":"deleteAiAgentTemplate","summary":"Delete an AI agent template","description":"Deletion is asynchronous: the response describes the template with `resourceStatus: DELETING`. Agents already created from it are unaffected, since a template is read once, at agent creation time.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"templateId","description":"Template ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.Template"}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.delete(\"/v2/publicCloud/project/{projectId}/ai/agents/template/{templateId}\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->delete(\"/v2/publicCloud/project/{projectId}/ai/agents/template/{templateId}\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/template/delete","required":true}]},"get":{"operationId":"getAiAgentTemplate","summary":"Get an AI agent template","description":"The ready-made configurations OVHcloud publishes are not returned here. They are served by the `preset/template` node.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"templateId","description":"Template ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.Template"},"examples":{"Example":{"value":{"createdAt":"2026-07-20T09:00:00Z","id":"tpl-0a1b2c3d4e5f6071","resourceStatus":"READY","source":"USER","targetSpec":{"config":{"llm":{"model":"Qwen3.6-27B","providerId":"ovhcloud","temperature":0.7},"version":"1.0"},"description":"A ready-to-use assistant configuration","name":"Starter assistant"},"updatedAt":"2026-07-20T09:05:00Z"},"summary":"A ready AI agent template"}}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\nresult = client.get(\"/v2/publicCloud/project/{projectId}/ai/agents/template/{templateId}\")\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n$result = $ovh->get(\"/v2/publicCloud/project/{projectId}/ai/agents/template/{templateId}\");\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/template/get","required":true}],"x-response-identifier":"id"},"put":{"operationId":"editAiAgentTemplate","summary":"Update an AI agent template","description":"Replaces the template's target spec as a whole: a field left out of the body is not preserved, and `targetSpec.config` is mandatory. Secrets inside that configuration read back as `[REDACTED]`. Send the sentinel back unchanged to keep the stored value. Configuration blocks OVHcloud reserves or does not offer are left out of a read, and a body that does not restate them drops them from the stored template. Agents already created from this template are unaffected, since a template is read once, at agent creation time.","security":[{"oAuth2AuthCode":[]}],"parameters":[{"in":"path","name":"projectId","description":"Project ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"templateId","description":"Template ID","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.TemplateUpdate"},"examples":{"Example":{"value":{"targetSpec":{"config":{"llm":{"model":"Qwen3.6-27B","providerId":"ovhcloud","temperature":0.7},"version":"1.0"},"description":"An updated assistant configuration","name":"Starter assistant"}},"summary":"Update the AI agent template"}}}}},"responses":{"200":{"description":"successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/publicCloud.ai.agents.Template"}}}}},"tags":["AI Agents"],"x-developer-hub-navigation":[["Public Cloud","AI","AI Agents"]],"x-badges":[{"color":"green","label":"Stable production version"}],"x-code-samples":[{"lang":"python","label":"Python","source":"'''\nFirst, install the latest release of Python wrapper: $ pip install ovh\n'''\nimport json\nimport ovh\n\n# Instantiate an OVH Client.\n# You can generate new credentials with full access to your account on\n# the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\nclient = ovh.Client(\n\tendpoint='ovh-eu',               # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n\tapplication_key='xxxxxxxxxx',    # Application Key\n\tapplication_secret='xxxxxxxxxx', # Application Secret\n\tconsumer_key='xxxxxxxxxx',       # Consumer Key\n)\n\n# Request body type: publicCloud.ai.agents.TemplateUpdate\nresult = client.put(\"/v2/publicCloud/project/{projectId}/ai/agents/template/{templateId}\",\n\ttargetSpec = None, # Desired specification to replace the template with (type: publicCloud.ai.agents.TemplateTargetSpec)\n)\n\n# Pretty print\nprint(json.dumps(result, indent=4))"},{"lang":"php","label":"PHP","source":"<?php\n/**\n * First, download the latest release of PHP wrapper on github\n * And include this script into the folder with extracted files\n */\nrequire __DIR__ . '/vendor/autoload.php';\nuse \\Ovh\\Api;\n\n/**\n * Instantiate an OVH Client.\n * You can generate new credentials with full access to your account on\n * the token creation page (https://api.ovh.com/createToken/index.cgi?GET=/*&PUT=/*&POST=/*&DELETE=/*)\n */\n$ovh = new Api('xxxxxxxxxx',  // Application Key\n               'xxxxxxxxxx',  // Application Secret\n               'ovh-eu',      // Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)\n               'xxxxxxxxxx'); // Consumer Key\n\n// Request body type: publicCloud.ai.agents.TemplateUpdate\n$result = $ovh->put(\"/v2/publicCloud/project/{projectId}/ai/agents/template/{templateId}\", array(\n\ttargetSpec => null, // Desired specification to replace the template with (type: publicCloud.ai.agents.TemplateTargetSpec)\n));\n\nprint_r($result);\n?>"}],"x-iam-actions":[{"name":"publicCloudProject:apiovh:ai/agents/template/edit","required":true}]}}},"tags":[{"name":"AI Agents","x-tag-expanded":false,"description":"Missing description"}]}
