- Post History
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
58m ago - edited 40m ago
Disclaimer: I’m publishing this Community article as a DRAFT due to high customer demand. We will continue to update this article as questions arise and new features are available.
Introduction
In March 2026, Google formally released the Agent2Agent (A2A) protocol 1.0 version specification. This guide will highlight the configuration required for ServiceNow customers to migrate from running their ServiceNow A2A server from A2A 0.3 to A2A 1.0.
There are 7 “big rocks” covering the specification change between A2A 0.3 to A2A 1.0:
Prerequisites
- Australia Patch 6+
- ServiceNow Otto AI Agents [sn_aia] 9.0.x+ (September 2026 release)
- Recommended: the redesigned AI Agent Studio [/aiux/aia/home]
- For testing: an external AI agent running Google A2A 1.0 specification, acting as A2A client
Instance Configuration
For the A2A 1.0 specification, there are three new configuration points that must be set on the ServiceNow instance.
Premium Chat
If you haven’t already, migrate over to the Premium chat experience for your conversational assistant (Otto Panel + Virtual Agent):
https://www.servicenow.com/docs/r/intelligent-experiences/now-assist-panel-premium.html
Confirm that the system property sn_nowassist_va.show_ai_native_experience is automatically set to true after migrating to Premium chat:
Deployment Channel
Confirm that the Deployment Channel for AI Agent A2A is set to AI native chat. This allows for the ServiceNow A2A server to handle both 0.3 and 1.0 specifications of the A2A protocol.
Switch to ServiceNow Otto AI Agents application scope.
Go to the Now Assist Deployment Channels [sys_now_assist_deployment_channel] table.
Filter for Now Assist Deployment = AI Agent A2A
Sort by Now Assist Deployment:
Select the Deployment Channel record.
In the Experience field dropdown, select AI native chat:
Save the Deployment Channel record.
Deployment Config Attribute
Switch to ServiceNow Otto for Virtual Agent application scope.
Go to the Now Assist Deployment Config Attributes [sys_now_assist_deployment_config_attributes] table.
Filter for: Deployment Configuration = AI Agent A2A.
Sort by Name.
Look for Name = route_chat_via_ao_v2. Select the record:
Set Value to true:
Integration Configuration
For your A2A integration, configure the application first, then set up your endpoints.
Application Settings
Verify your settings in AI Agent Studio. This is largely a carryover from previous implementations running Google A2A 0.3.
Login as an administrator.
Switch to ServiceNow Otto AI Agents application scope.
Go to AI Agent Studio > Settings:
This should take you to the redesigned AI Agent Studio at URL /aiux/aia/settings
Under Discoverability, verify your settings:
- For ServiceNow as primary agent (A2A client): Allow ServiceNow to access external AI agents set to Allow
- For ServiceNow as secondary agent (A2A server): Allow third party access to ServiceNow AI agents set to Allow
- I’ll leave the Communication mode set to Synchronous in this example.
OAuth Configuration
Login as an administrator.
Switch to your desired application scope for configuring the inbound integration. I’m doing mine in Global.
Go to System OAuth > Inbound Integrations:
Under Inbound integrations, select New integration:
In the application connection type modal, I’m going to pick OAuth - Authorization code grant:
Fill out the form. Under Details:
- Name: <the name of your OAuth integration>
- Provider name: <the name of your OAuth provider, I suggest no spaces>
- Redirect URLs: <enter if you know it, otherwise set to some default, like https://your-instance-name.service-now.com/login.do>
- Client ID: <automatically generated>
- Client secret: <automatically generated>
- Active: checked
Under Auth scope:
- Auth scope: a2aauthscope
- Limit authorization to the following APIs: AI Agent A2A API (should be selected by default)
Under Advanced options (optional), I didn’t make any changes:
Save your Inbound integration record.
Go to AI Agent Studio > Agentic solutions. In the AI agents list, look for the AI agent that you want to use. Make sure it’s Active.
Notice also the improved search in the redesigned AI Agent Studio.
Select your AI agent. It opens the node map:
Select the edit (pencil) icon next to the AI agent:
On the AI agent configuration page, scroll down to the Access rules section:
Make sure that Allow third-party AI agents that meet access requirements to access this AI agent is selected (allowed).
Copy your Agent card URL. Notice that the /a2a/v2 API is used by default:
https://my-instance-name.service-now.com/api/sn_aia/a2a/v2/agent_card/id/26315fbaeb7e6e1086d3f20dbad0cdef
Go to your primary agent (A2A client). Enter your Agent card URL in your client, and discover agents:
I can validate from my A2A client that the ServiceNow AI Agent card reads as A2A 1.0:
Here's the full Agent card in A2A 1.0. Notice that under supportedInterfaces, both the 0.3 and 1.0 versions appear.
{
"name": "Incident Helper Agent",
"description": "Enables users to efficiently manage incident records by providing capabilities to fetch incident details, updating Incident comments, and create new incidents. Designed for IT support staff and service desk agents who require quick and reliable incident management operations.",
"version": "1.0.0",
"provider": {
"organization": "ServiceNow",
"url": "https://your-instance-name.service-now.com/"
},
"iconUrl": "",
"documentationUrl": "",
"supportedInterfaces": [
{
"url": "https://your-instance-name.service-now.com/api/sn_aia/a2a/v2/agent/id/26315fbaeb7e6e1086d3f20dbad0cdef",
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0"
},
{
"url": "https://your-instance-name.service-now.com/api/sn_aia/a2a/v2/agent/id/26315fbaeb7e6e1086d3f20dbad0cdef",
"protocolBinding": "JSONRPC",
"protocolVersion": "0.3"
}
],
"capabilities": {
"streaming": false,
"pushNotifications": true,
"extendedAgentCard": false,
"extensions": [
{
"uri": "https://a2ui.org/a2a-extension/a2ui/v0.9",
"description": "Agent-driven UI rendered from A2UI JSON data parts.",
"required": false
}
]
},
"securitySchemes": {
"oauth2_authorization_code": {
"oauth2SecurityScheme": {
"flows": {
"authorizationCode": {
"authorizationUrl": "https://your-instance-name.service-now.com/oauth_auth.do",
"tokenUrl": "https://your-instance-name.service-now.com/oauth_token.do",
"refreshUrl": "https://your-instance-name.service-now.com/oauth_token.do",
"scopes": {
"a2aauthscope": "Authentication scope for scripted rest API end-points exposed in AI Agent A2A API"
}
}
}
}
},
"oauth2_client_credentials": {
"oauth2SecurityScheme": {
"flows": {
"clientCredentials": {
"tokenUrl": "https://your-instance-name.service-now.com/oauth_token.do",
"refreshUrl": "https://your-instance-name.service-now.com/oauth_token.do",
"scopes": {
"a2aauthscope": "Authentication scope for scripted rest API end-points exposed in AI Agent A2A API"
}
}
}
}
},
"mtls": {
"mtlsSecurityScheme": {}
}
},
"securityRequirements": [
{
"schemes": {
"oauth2_authorization_code": {
"list": [
"a2aauthscope"
]
}
}
},
{
"schemes": {
"oauth2_client_credentials": {
"list": [
"a2aauthscope"
]
}
}
},
{
"schemes": {
"mtls": {
"list": []
}
}
}
],
"defaultInputModes": [
"application/json"
],
"defaultOutputModes": [
"application/json"
],
"skills": [
{
"id": "88e8dc22eb8b621086d3f20dbad0cd13",
"name": "Create Incident",
"description": "Create a new Incident. Inputs are the Short description and Description of the Incident to be created. Output is a message stating that the Incident has been created with the Incident number.",
"inputModes": [
"application/json"
],
"outputModes": [
"application/json"
],
"tags": [
"short_description",
"description"
],
"securityRequirements": []
},
],
"signatures": []
}
To finish the OAuth authentication flow, I will enter the following values into my A2A client:
- Client ID: <from ServiceNow OAuth inbound integration>
- Client Secret: <from ServiceNow OAuth inbound integration>
- Authorization URL: https://your-instance-name.service-now.com/oauth_auth.do
- Token URL: https://your-instance-name.service-now.com/oauth_token.do
- Grant Type: Authorization Code
- Scope: a2aauthscope
When you attempt to authorize as part of the OAuth Authorization Code flow, you will be redirected to your ServiceNow instance to grant access.
If you’re authenticating for the first time, and getting an Invalid redirect_uri error, copy the URL from the browser tab/window. Behind the redirect_uri= parameter, you should find your callback URL of your A2A client. It could be something like this:
https://my-primary-agent.us-central1.run.app/oauth/callback
You will want to replace this URL into the OAuth Inbound integration record you created earlier in ServiceNow:
Save the OAuth Inbound integration record after the update.
In the A2A client, re-attempt the completion of the OAuth flow:
Notice that the user you are logged in as matters in this scenario! If you are happy with the connection, select Allow. If all is well, you should now have a valid token:
You can now begin a conversation with your ServiceNow AI agent:
Here's the sample JSON payload for the last exchange - there are many hops in between, but just trimming down to what is relevant and interesting.
The request:
{
"jsonrpc": "2.0",
"method": "SendMessage",
"params": {
"message": {
"messageId": "b8c22251-e938-454c-95eb-10616aa143a8",
"role": "ROLE_USER",
"parts": [
{
"text": "My short description is \"I can't connect to VPN\". The full description is that I have tried restarting and reinstall my VPN software."
}
],
"contextId": "1605c6cc2b0cd3109675f1cfe291bf9b",
"taskId": "9a05c6cc2b0cd3109675f1cfe291bf9b"
},
"configuration": {
"acceptedOutputModes": [
"text/plain",
"application/json"
],
"historyLength": 10,
"returnImmediately": true,
"taskPushNotificationConfig": {
"id": "aRwQtRNuZ1_iY1YKugFrWw",
"url": "https://my-primary-agent.us-central1.run.app/a2a/callback/incident-helper-agent-dbb071c7/v1/aRwQtRNuZ1_iY1YKugFrWw"
}
}
},
"id": "096930d7-c680-49e5-8cb1-e9565fa4fe7a"
}
And the response(s):
{
"task": {
"id": "9a05c6cc2b0cd3109675f1cfe291bf9b",
"contextId": "1605c6cc2b0cd3109675f1cfe291bf9b",
"status": {
"state": "TASK_STATE_WORKING",
"message": null,
"timestamp": "2026-10-15T19:06:48.995048462Z"
},
"artifacts": [
{
"artifactId": "0",
"name": null,
"description": null,
"parts": [
{
"text": "Created Incident Number: INC0010123 \nIncident URL: https://your-instance-name.service-now.com/incident.do?sys_id=7275c6402b4cd3109675f1cfe291bf6a"
}
],
"metadata": null,
"extensions": null
}
],
"history": [],
"metadata": null
}
}{
"task": {
"id": "9a05c6cc2b0cd3109675f1cfe291bf9b",
"contextId": "1605c6cc2b0cd3109675f1cfe291bf9b",
"status": {
"state": "TASK_STATE_INPUT_REQUIRED",
"message": {
"role": "ROLE_AGENT",
"parts": [
{
"text": "Your incident has been created. Do you have any other incident-related inquiries?\nYes, No"
}
],
"messageId": "2d148c73-9c12-4832-be87-88be3571d691",
"contextId": "1605c6cc2b0cd3109675f1cfe291bf9b",
"taskId": "9a05c6cc2b0cd3109675f1cfe291bf9b",
"referenceTaskIds": null,
"metadata": null,
"extensions": null
},
"timestamp": "2026-10-15T19:06:53.007530109Z"
},
"artifacts": [],
"history": [],
"metadata": null
}
}
For my use case, a new Incident record is created in ServiceNow:
API Key Authentication
Coming soon!
Resources
See below for additional resources.
Documentation
Previous Google A2A 0.3 Community Articles:
- Authentication for Google A2A – ServiceNow as Secondary Agent
- Sample Payloads for Google A2A - ServiceNow as Secondary Agent
- Asynchronous External Agents over Google A2A - ServiceNow as Secondary Agent
- External Agents in ServiceNow via Google A2A - ServiceNow as Primary Agent
