{"id":2053,"date":"2026-03-16T13:30:57","date_gmt":"2026-03-16T20:30:57","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/foundry\/?p=2053"},"modified":"2026-03-17T10:37:46","modified_gmt":"2026-03-17T17:37:46","slug":"foundry-agent-service-ga","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/foundry\/foundry-agent-service-ga\/","title":{"rendered":"Foundry Agent Service is GA: private networking, Voice Live, and enterprise-grade evaluations"},"content":{"rendered":"<p><!-- TODO: add featured image before publishing --><\/p>\n<p>The hardest part of shipping production AI agents isn&#8217;t the prototype \u2014 it&#8217;s everything after. Network isolation requirements. Compliance audits. Voice channels your operations team actually wants to use. Evaluations that aren&#8217;t just a pre-ship checkbox.<\/p>\n<p>Today&#8217;s GA release of the next-gen Foundry Agent Service addresses all of these directly. Here&#8217;s what shipped and what it means for your builds.<\/p>\n<h2>What&#8217;s new<\/h2>\n<ul>\n<li><strong>Foundry Agent Service (GA):<\/strong> Responses API-based runtime, wire-compatible with OpenAI agents, open model support across DeepSeek, xAI, Meta, LangChain, LangGraph, and more<\/li>\n<li><strong>End-to-end private networking:<\/strong> BYO VNet with no public egress, extended to cover tool connectivity \u2014 MCP servers, Azure AI Search, and Fabric data agents<\/li>\n<li><strong>MCP authentication expansion:<\/strong> Key-based, Entra Agent Identity, Managed Identity, and OAuth Identity Passthrough in a single service<\/li>\n<li><strong>Voice Live (preview) + Foundry Agents:<\/strong> Real-time speech-to-speech, fully managed, wired natively to your agent&#8217;s prompt, tools, and tracing<\/li>\n<li><strong>Evaluations (GA):<\/strong> Out-of-the-box evaluators, custom evaluators, and continuous production monitoring piped into Azure Monitor<\/li>\n<li><strong>Hosted agents (preview) in six new Azure regions:<\/strong> East US, North Central US, Sweden Central, Southeast Asia, Japan East, and more<\/li>\n<\/ul>\n<hr \/>\n<h2>Foundry Agent Service GA: built on the Responses API<\/h2>\n<p>The next-gen Foundry Agent Service is built on the OpenAI Responses API \u2014 the same agentic wire protocol developers are already building on. If you&#8217;re building with the Responses API today, migrating to Foundry is minimal code changes. What you gain immediately: Foundry&#8217;s enterprise security layer, private networking, Entra RBAC, full tracing, and evaluation \u2014 on top of your existing agent logic.<\/p>\n<p><div style=\"width: 930px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-2053-1\" width=\"930\" height=\"360\" preload=\"auto\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/03\/agents-demo.mp4?_=1\" \/><a href=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/03\/agents-demo.mp4\">https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2026\/03\/agents-demo.mp4<\/a><\/video><\/div><\/p>\n<p>The architecture is intentionally open. You\u2019re not locked to a single model provider or orchestration framework. Use a DeepSeek model for planning, an OpenAI model for generation, LangGraph for orchestration \u2014 the runtime handles the consistency layer. Agents, tools, and the surrounding infrastructure all speak the same protocol.<\/p>\n<pre><code class=\"language-python\">import os\r\nfrom azure.identity import DefaultAzureCredential\r\nfrom azure.ai.projects import AIProjectClient\r\nfrom azure.ai.projects.models import PromptAgentDefinition\r\n\r\nwith (\r\n    DefaultAzureCredential() as credential,\r\n    AIProjectClient(endpoint=os.environ[\"AZURE_AI_PROJECT_ENDPOINT\"], credential=credential) as project_client,\r\n    project_client.get_openai_client() as openai_client,\r\n):\r\n    agent = project_client.agents.create_version(\r\n        agent_name=\"my-enterprise-agent\",\r\n        definition=PromptAgentDefinition(\r\n            model=os.environ[\"AZURE_AI_MODEL_DEPLOYMENT_NAME\"],\r\n            instructions=\"You are a helpful assistant.\",\r\n        ),\r\n    )\r\n\r\n    conversation = openai_client.conversations.create()\r\n\r\n    response = openai_client.responses.create(\r\n        conversation=conversation.id,\r\n        input=\"What are best practices for building AI agents?\",\r\n        extra_body={\"agent_reference\": {\"name\": agent.name, \"type\": \"agent_reference\"}},\r\n    )\r\n    print(response.output_text)<\/code><\/pre>\n<blockquote><p><strong>Note:<\/strong> If you&#8217;re coming from the <code>azure-ai-agents<\/code> package, agents are now first-class operations on <code>AIProjectClient<\/code> in <code>azure-ai-projects<\/code>. Remove your standalone <code>azure-ai-agents<\/code> pin and use <code>get_openai_client()<\/code> to drive responses.<\/p><\/blockquote>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-secondary\" href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/quickstarts\/get-started-code?utm_source=devblog&amp;utm_medium=blog&amp;utm_campaign=foundry-agent-service-ga&amp;utm_content=agents-quickstart\" target=\"_blank\" rel=\"noopener\">Agents\u00a0Quickstart<\/a><\/div>\n<hr \/>\n<h2>End-to-end private networking<\/h2>\n<p>Unmanaged network paths are a showstopper for enterprises operating under data classification policies that prohibit external routing of query content or retrieved documents. Every retrieval call, every tool invocation, every model round-trip is a potential exposure vector if it crosses the public internet.<\/p>\n<p>Foundry Agent Service now supports <strong>Standard Setup with private networking<\/strong>, where you bring your own virtual network (BYO VNet):<\/p>\n<ul>\n<li>No public egress \u2014 agent traffic never traverses the public internet<\/li>\n<li>Container\/subnet injection into your network for local communication to Azure resources<\/li>\n<li>Access to private resources via the platform network with appropriate authorization<\/li>\n<\/ul>\n<p>More importantly, private networking is extended to <strong>tool connectivity<\/strong>. MCP servers, Azure AI Search indexes, and Fabric data agents can all operate over private network paths \u2014 so retrieval and action surfaces sit inside your network boundary, not just inference calls.<\/p>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-secondary\" href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/ai-foundry\/agents\/how-to\/virtual-networks?utm_source=devblog&amp;utm_medium=blog&amp;utm_campaign=foundry-agent-service-ga&amp;utm_content=private-networking\" target=\"_blank\" rel=\"noopener\">Private\u00a0Networking\u00a0Docs<\/a><\/div>\n<hr \/>\n<h2>MCP authentication: the full spectrum<\/h2>\n<p>MCP as a connection primitive is only as secure as its auth model. Enterprise MCP deployments span org-wide shared services, user-delegated access, and service-to-service connections \u2014 and they need different auth patterns for each.<\/p>\n<p>Foundry now supports the full spectrum for MCP server connections:<\/p>\n<table>\n<thead>\n<tr>\n<th>Auth method<\/th>\n<th>When to use<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Key-based<\/strong><\/td>\n<td>Simple shared access for org-wide internal tools<\/td>\n<\/tr>\n<tr>\n<td><strong>Entra Agent Identity<\/strong><\/td>\n<td>Service-to-service; the agent authenticates as itself<\/td>\n<\/tr>\n<tr>\n<td><strong>Entra Foundry Project Managed Identity<\/strong><\/td>\n<td>Per-project permission isolation; no credential management overhead<\/td>\n<\/tr>\n<tr>\n<td><strong>OAuth Identity Passthrough<\/strong><\/td>\n<td>User-delegated access; user authenticates to the MCP server and grants the agent their credentials<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>OAuth Identity Passthrough is the one worth calling out. When users need to grant an agent access to their personal data or permissions \u2014 their OneDrive, their Salesforce org, a SaaS API that scopes by user \u2014 the agent should act on their behalf, not as a shared system identity. Passthrough enables exactly that with standard OAuth flows.<\/p>\n<p>For key-based auth, add a Custom Keys connection in your Foundry project with an <code>Authorization: Bearer &lt;token&gt;<\/code> header, then reference it via <code>project_connection_id<\/code>:<\/p>\n<pre><code class=\"language-python\">from azure.ai.projects.models import MCPTool, PromptAgentDefinition\r\n\r\n# project_connection_id: resource ID of a Custom Keys connection\r\n# storing Authorization: Bearer &lt;your-pat-token&gt;\r\ntool = MCPTool(\r\n    server_label=\"github-api\",\r\n    server_url=\"https:\/\/api.githubcopilot.com\/mcp\",\r\n    require_approval=\"always\",\r\n    project_connection_id=os.environ[\"MCP_PROJECT_CONNECTION_ID\"],\r\n)\r\n\r\nagent = project_client.agents.create_version(\r\n    agent_name=\"my-mcp-agent\",\r\n    definition=PromptAgentDefinition(\r\n        model=os.environ[\"AZURE_AI_MODEL_DEPLOYMENT_NAME\"],\r\n        instructions=\"Use MCP tools as needed.\",\r\n        tools=[tool],\r\n    ),\r\n)<\/code><\/pre>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-secondary\" href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/ai-foundry\/agents\/how-to\/tools\/model-context-protocol?utm_source=devblog&amp;utm_medium=blog&amp;utm_campaign=foundry-agent-service-ga&amp;utm_content=mcp-auth\" target=\"_blank\" rel=\"noopener\">MCP\u00a0Auth\u00a0Docs<\/a><\/div>\n<hr \/>\n<h2>Voice Live (preview): a managed speech channel for your agents<\/h2>\n<p>Adding voice to an agent used to mean stitching together three separate services (STT, LLM, TTS) \u2014 three latency hops, three billing surfaces, three failure modes, all synchronized by hand. <strong>Voice Live<\/strong> is a fully managed, real-time speech-to-speech runtime that collapses that into a single managed API.<\/p>\n<p>What Voice Live handles:<\/p>\n<ul>\n<li><strong>Semantic voice activity detection<\/strong> \u2014 knows when you&#8217;ve stopped speaking based on meaning, not just silence or audio level<\/li>\n<li><strong>Semantic end-of-turn detection<\/strong> \u2014 understands conversational context to determine when the agent should respond<\/li>\n<li><strong>Server-side noise suppression and echo cancellation<\/strong> \u2014 no post-processing pipeline required<\/li>\n<li><strong>Barge-in support<\/strong> \u2014 users can interrupt mid-response<\/li>\n<\/ul>\n<p>With this integration, you connect Voice Live directly to an existing Foundry agent. The agent&#8217;s prompt, tool definitions, and configuration are managed in Foundry; Voice Live handles the audio pipeline. Voice interactions go through the same agent runtime as text \u2014 which means the same evaluators, the same traces, the same cost visibility. Voice doesn&#8217;t get a second-class observability story.<\/p>\n<p>For customer support, field service, accessibility, and any hands-free workflow where spoken dialogue is the primary interface, this replaces what previously required a custom audio pipeline.<\/p>\n<p>Connecting Voice Live to a Foundry agent uses <code>AgentSessionConfig<\/code> at connection time \u2014 point it at an agent name and project, and the session is immediately voice-enabled:<\/p>\n<pre><code class=\"language-python\">import asyncio\r\nfrom azure.ai.voicelive.aio import connect, AgentSessionConfig\r\nfrom azure.identity.aio import DefaultAzureCredential\r\n\r\nasync def run():\r\n    agent_config: AgentSessionConfig = {\r\n        \"agent_name\": \"my-enterprise-agent\",\r\n        \"project_name\": \"my-foundry-project\",\r\n        # \"agent_version\": \"v1\",  # optional \u2014 defaults to latest\r\n    }\r\n\r\n    async with DefaultAzureCredential() as credential:\r\n        async with connect(\r\n            endpoint=os.environ[\"AZURE_VOICELIVE_ENDPOINT\"],\r\n            credential=credential,\r\n            agent_config=agent_config,\r\n        ) as connection:\r\n            # Update session: modalities, voice, VAD, echo cancellation\r\n            await connection.session.update(session=session_config)\r\n            # Process audio events\r\n            async for event in connection:\r\n                ...\r\n\r\nasyncio.run(run())<\/code><\/pre>\n<p>The agent&#8217;s prompt, tool definitions, and safety configuration stay in Foundry. Voice Live owns the audio I\/O. The full working sample \u2014 including audio capture\/playback via PyAudio and interrupt handling \u2014 is in the SDK repo.<\/p>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-secondary\" href=\"https:\/\/github.com\/microsoft-foundry\/voicelive-samples\/blob\/main\/python\/voice-live-quickstarts\/AgentsNewQuickstart\/voice-live-with-agent-v2.py\" target=\"_blank\" rel=\"noopener\">Voice\u00a0Live\u00a0+\u00a0Agents\u00a0Sample<\/a><\/div>\n<hr \/>\n<h2>Evaluations: GA with continuous production monitoring<\/h2>\n<p>Running a test suite before shipping is not a production quality strategy \u2014 it&#8217;s a snapshot. Quality degrades in production as traffic patterns shift, retrieved documents go stale, and new edge cases emerge that never appeared in your eval dataset.<\/p>\n<p>Foundry Evaluations are now generally available with three layers that together enable a proper quality lifecycle:<\/p>\n<p><strong>Out-of-the-box evaluators<\/strong> cover the standard RAG and generation scenarios: coherence, relevance, groundedness, retrieval quality, and safety. No custom configuration required \u2014 connect them to a dataset or live traffic and get quantitative scores back.<\/p>\n<p><strong>Custom evaluators<\/strong> let you encode your own criteria: business logic, internal tone standards, domain-specific compliance rules, or any quality signal that doesn&#8217;t map cleanly to a general evaluator.<\/p>\n<p><strong>Continuous evaluation<\/strong> closes the production loop. Foundry samples live traffic automatically, runs your evaluator suite against it, and surfaces results through integrated dashboards. Configure Azure Monitor alerts to fire when groundedness drops, safety thresholds breach, or performance degrades \u2014 before users notice.<\/p>\n<p>All evaluation results, traces, and red-teaming runs publish to Azure Monitor Application Insights. You get full-stack observability that spans agent quality, infrastructure health, cost, and traditional app telemetry in one place.<\/p>\n<p>Evaluations in <code>azure-ai-projects<\/code> run through the OpenAI-compatible <code>evals<\/code> API on <code>AIProjectClient<\/code>. The pattern: define the schema and evaluators in <code>openai_client.evals.create()<\/code>, then run against an agent target with <code>openai_client.evals.runs.create()<\/code>.<\/p>\n<pre><code class=\"language-python\">import os, time\r\nfrom azure.identity import DefaultAzureCredential\r\nfrom azure.ai.projects import AIProjectClient\r\nfrom azure.ai.projects.models import PromptAgentDefinition\r\nfrom openai.types.eval_create_params import DataSourceConfigCustom\r\n\r\nwith (\r\n    DefaultAzureCredential() as credential,\r\n    AIProjectClient(endpoint=os.environ[\"AZURE_AI_PROJECT_ENDPOINT\"], credential=credential) as project_client,\r\n    project_client.get_openai_client() as openai_client,\r\n):\r\n    agent = project_client.agents.create_version(\r\n        agent_name=os.environ[\"AZURE_AI_AGENT_NAME\"],\r\n        definition=PromptAgentDefinition(\r\n            model=os.environ[\"AZURE_AI_MODEL_DEPLOYMENT_NAME\"],\r\n            instructions=\"You are a helpful assistant.\",\r\n        ),\r\n    )\r\n\r\n    eval_object = openai_client.evals.create(\r\n        name=\"Agent Quality Evaluation\",\r\n        data_source_config=DataSourceConfigCustom(\r\n            type=\"custom\",\r\n            item_schema={\"type\": \"object\", \"properties\": {\"query\": {\"type\": \"string\"}}, \"required\": [\"query\"]},\r\n            include_sample_schema=True,\r\n        ),\r\n        testing_criteria=[\r\n            {\r\n                \"type\": \"azure_ai_evaluator\",\r\n                \"name\": \"fluency\",\r\n                \"evaluator_name\": \"builtin.fluency\",\r\n                \"initialization_parameters\": {\"deployment_name\": os.environ[\"AZURE_AI_MODEL_DEPLOYMENT_NAME\"]},\r\n                \"data_mapping\": {\"query\": \"{{item.query}}\", \"response\": \"{{sample.output_text}}\"},\r\n            },\r\n            {\r\n                \"type\": \"azure_ai_evaluator\",\r\n                \"name\": \"task_adherence\",\r\n                \"evaluator_name\": \"builtin.task_adherence\",\r\n                \"initialization_parameters\": {\"deployment_name\": os.environ[\"AZURE_AI_MODEL_DEPLOYMENT_NAME\"]},\r\n                \"data_mapping\": {\"query\": \"{{item.query}}\", \"response\": \"{{sample.output_items}}\"},\r\n            },\r\n        ],\r\n    )\r\n\r\n    run = openai_client.evals.runs.create(\r\n        eval_id=eval_object.id,\r\n        name=f\"Run for {agent.name}\",\r\n        data_source={\r\n            \"type\": \"azure_ai_target_completions\",\r\n            \"source\": {\r\n                \"type\": \"file_content\",\r\n                \"content\": [{\"item\": {\"query\": \"What is the capital of France?\"}},\r\n                             {\"item\": {\"query\": \"How do I reverse a string in Python?\"}}],\r\n            },\r\n            \"input_messages\": {\r\n                \"type\": \"template\",\r\n                \"template\": [{\"type\": \"message\", \"role\": \"user\",\r\n                               \"content\": {\"type\": \"input_text\", \"text\": \"{{item.query}}\"}}],\r\n            },\r\n            \"target\": {\"type\": \"azure_ai_agent\", \"name\": agent.name, \"version\": agent.version},\r\n        },\r\n    )\r\n\r\n    while run.status not in [\"completed\", \"failed\"]:\r\n        run = openai_client.evals.runs.retrieve(run_id=run.id, eval_id=eval_object.id)\r\n        time.sleep(5)\r\n\r\n    print(f\"Status: {run.status}, Results: {run.result_counts}\")<\/code><\/pre>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-secondary\" href=\"https:\/\/github.com\/Azure\/azure-sdk-for-python\/tree\/main\/sdk\/ai\/azure-ai-projects\/samples\/evaluations\" target=\"_blank\" rel=\"noopener\">Evaluation\u00a0Samples<\/a><\/div>\n<hr \/>\n<h2>Hosted agents (preview) in six new regions<\/h2>\n<p>Hosted agents \u2014 containerized agent code running as managed services on Foundry Agent Service \u2014 are now available in six additional Azure regions: <strong>East US<\/strong>, <strong>North Central US<\/strong>, <strong>Sweden Central<\/strong>, <strong>Southeast Asia<\/strong>, <strong>Japan East<\/strong>, and more.<\/p>\n<p>This is relevant for two concrete scenarios: data residency requirements that mandate processing stays within a geographic boundary, and latency that compresses when your agent runs close to its data sources and users. Foundry handles container orchestration, scaling, networking, and endpoint management \u2014 you own the agent behavior and business logic.<\/p>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-secondary\" href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/agents\/quickstarts\/quickstart-hosted-agent?utm_source=devblog&amp;utm_medium=blog&amp;utm_campaign=foundry-agent-service-ga&amp;utm_content=hosted-agents\" target=\"_blank\" rel=\"noopener\">Hosted\u00a0Agents\u00a0Docs<\/a><\/div>\n<hr \/>\n<h2>Learn more<\/h2>\n<p>For a hands-on walkthrough of the Foundry Agent Service capabilities, watch the session below \u2014 covering building a basic conversational agent, adding custom skills, grounding with documents, code execution, real-time internet access, connecting to external servers via MCP, and combining multiple tools:<\/p>\n<p><iframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/Gw8Il0qJPD0?si=UZz4543C4tvv_ZuS&amp;start=2554\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<hr \/>\n<h2>Get started<\/h2>\n<p>The next-gen Foundry Agent Service is available now. Install the SDK, open the portal, and go:<\/p>\n<pre><code class=\"language-bash\">pip install azure-ai-projects azure-identity<\/code><\/pre>\n<p>The <a href=\"https:\/\/ai.azure.com?utm_source=devblog&amp;utm_medium=blog&amp;utm_campaign=foundry-agent-service-ga&amp;utm_content=portal\">Foundry portal<\/a> has an updated agents experience with visual workflow building, a unified Tools tab for MCP, A2A, and Azure AI Search connections, and the separated v1\/v2 resource view. If you&#8217;re coming from Foundry Classic, the new experience is the default.<\/p>\n<p>For a hands-on introduction, the <a href=\"https:\/\/learn.microsoft.com\/azure\/foundry\/quickstarts\/get-started-code?utm_source=devblog&amp;utm_medium=blog&amp;utm_campaign=foundry-agent-service-ga&amp;utm_content=quickstart-footer\">agents quickstart<\/a> takes you from zero to a running, tool-using agent in a few minutes.<\/p>\n<div class=\"d-flex\"><a class=\"cta_button_link btn-primary\" href=\"https:\/\/ai.azure.com?utm_source=devblog&amp;utm_medium=blog&amp;utm_campaign=foundry-agent-service-ga&amp;utm_content=open-foundry\" target=\"_blank\" rel=\"noopener\">Open\u00a0Microsoft\u00a0Foundry<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>The next-gen Foundry Agent Service is generally available today with end-to-end private networking, Voice Live integration, expanded MCP authentication, GA evaluations with continuous monitoring, and hosted agent deployments in six new Azure regions.<\/p>\n","protected":false},"author":191242,"featured_media":2068,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[112,1],"tags":[25,102,66,9,2,110,111,109],"class_list":["post-2053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-foundry-agent-service","category-microsoft-foundry","tag-agents","tag-azure-ai-foundry","tag-evaluations","tag-mcp","tag-microsoft-foundry","tag-private-networking","tag-vnet","tag-voice-live"],"acf":[],"blog_post_summary":"<p>The next-gen Foundry Agent Service is generally available today with end-to-end private networking, Voice Live integration, expanded MCP authentication, GA evaluations with continuous monitoring, and hosted agent deployments in six new Azure regions.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/2053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/users\/191242"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/comments?post=2053"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/2053\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/media\/2068"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/media?parent=2053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/categories?post=2053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/tags?post=2053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}