Overview
These endpoints allow you to configure push notifications (webhooks) for asynchronous task updates and retrieve detailed agent information for better integration planning.
Push Notifications : Webhooks enable real-time notifications about task status changes, perfect for long-running operations where polling isn’t efficient.
tasks/pushNotificationConfig/set
Configure webhook endpoints to receive push notifications about task status changes.
Request Parameters
JSON-RPC version, must be "2.0"
Unique identifier for this request
Must be "tasks/pushNotificationConfig/set"
Webhook configuration parameters Webhook configuration object Webhook endpoint URL that will receive notifications
Optional HTTP headers to include in webhook requests
Array of events to subscribe to (default: all events) Options: ["task.submitted", "task.working", "task.completed", "task.failed", "task.canceled"]
params.config.retryPolicy
Retry configuration for failed webhook deliveries Show retryPolicy properties
params.config.retryPolicy.maxRetries
Maximum number of retry attempts (default: 3)
params.config.retryPolicy.backoffMultiplier
Exponential backoff multiplier (default: 2.0)
params.config.retryPolicy.initialDelay
Initial delay in seconds (default: 1)
Secret for webhook signature verification (HMAC-SHA256)
Optional: Configure webhooks for specific task only
Response
JSON-RPC version, always "2.0"
Configuration result Whether webhook was successfully configured
Unique identifier for this webhook configuration
List of subscribed events
Example
curl -X POST "http://localhost:8000/api/v1/a2a/my-agent" \
-H "Content-Type: application/json" \
-H "x-api-key: your-api-key" \
-d '{
"jsonrpc": "2.0",
"id": "req-webhook-config",
"method": "tasks/pushNotificationConfig/set",
"params": {
"config": {
"url": "https://your-server.com/webhook/a2a",
"headers": {
"Authorization": "Bearer webhook-token",
"X-Webhook-Source": "evo-ai"
},
"events": ["task.completed", "task.failed"],
"retryPolicy": {
"maxRetries": 5,
"backoffMultiplier": 2.0,
"initialDelay": 2
},
"secret": "your-webhook-secret"
}
}
}'
{
"jsonrpc" : "2.0" ,
"result" : {
"configured" : true ,
"configId" : "webhook-config-123" ,
"url" : "https://your-server.com/webhook/a2a" ,
"events" : [ "task.completed" , "task.failed" ]
},
"id" : "req-webhook-config"
}
tasks/pushNotificationConfig/get
Retrieve current webhook configuration for the agent.
Request Parameters
JSON-RPC version, must be "2.0"
Unique identifier for this request
Must be "tasks/pushNotificationConfig/get"
Optional parameters Get configuration for specific task (if task-specific config exists)
Response
JSON-RPC version, always "2.0"
Current webhook configuration Webhook configuration (null if not configured) result.config.retryPolicy
Retry configuration
Configuration creation timestamp
Last webhook delivery timestamp
Whether webhook is currently active
Example
curl -X POST "http://localhost:8000/api/v1/a2a/my-agent" \
-H "Content-Type: application/json" \
-H "x-api-key: your-api-key" \
-d '{
"jsonrpc": "2.0",
"id": "req-get-webhook",
"method": "tasks/pushNotificationConfig/get",
"params": {}
}'
{
"jsonrpc" : "2.0" ,
"result" : {
"config" : {
"url" : "https://your-server.com/webhook/a2a" ,
"events" : [ "task.completed" , "task.failed" ],
"retryPolicy" : {
"maxRetries" : 5 ,
"backoffMultiplier" : 2.0 ,
"initialDelay" : 2
},
"createdAt" : "2024-01-15T10:30:00Z" ,
"lastUsed" : "2024-01-15T11:45:30Z"
},
"configId" : "webhook-config-123" ,
"active" : true
},
"id" : "req-get-webhook"
}
agent/authenticatedExtendedCard
Get detailed information about the agent, including capabilities, supported features, and metadata.
Request Parameters
JSON-RPC version, must be "2.0"
Unique identifier for this request
Must be "agent/authenticatedExtendedCard"
Optional parameters params.includeCapabilities
Include detailed capability information (default: true)
Include usage metrics and statistics (default: false)
Response
JSON-RPC version, always "2.0"
Agent information Agent details Agent type (e.g., “llm”, “workflow”, “sequential”)
Current agent status (“active”, “inactive”, “maintenance”)
Agent capabilities Show capabilities properties
result.capabilities.supportedMethods
List of supported A2A methods
result.capabilities.fileUpload
File upload capabilities Show fileUpload properties
result.capabilities.fileUpload.supported
Whether file upload is supported
result.capabilities.fileUpload.maxFileSize
Maximum file size in bytes
result.capabilities.fileUpload.supportedTypes
Supported MIME types
result.capabilities.streaming
Whether streaming is supported
result.capabilities.multiTurn
Whether multi-turn conversations are supported
result.capabilities.webhooks
Whether webhook notifications are supported
Usage limits and quotas result.limits.requestsPerMinute
Rate limit for requests per minute
result.limits.concurrentTasks
Maximum concurrent tasks
result.limits.maxMessageLength
Maximum message length in characters
Usage metrics (if requested) result.metrics.totalRequests
Total requests processed
result.metrics.averageResponseTime
Average response time in milliseconds
result.metrics.successRate
Success rate percentage
Example
curl -X POST "http://localhost:8000/api/v1/a2a/my-agent" \
-H "Content-Type: application/json" \
-H "x-api-key: your-api-key" \
-d '{
"jsonrpc": "2.0",
"id": "req-agent-info",
"method": "agent/authenticatedExtendedCard",
"params": {
"includeCapabilities": true,
"includeMetrics": true
}
}'
{
"jsonrpc" : "2.0" ,
"result" : {
"agent" : {
"id" : "my-agent" ,
"name" : "Customer Support Assistant" ,
"description" : "AI agent specialized in customer support and FAQ responses" ,
"version" : "1.2.0" ,
"type" : "llm" ,
"status" : "active"
},
"capabilities" : {
"supportedMethods" : [
"message/send" ,
"message/stream" ,
"tasks/get" ,
"tasks/cancel" ,
"tasks/pushNotificationConfig/set" ,
"tasks/pushNotificationConfig/get" ,
"agent/authenticatedExtendedCard"
],
"fileUpload" : {
"supported" : true ,
"maxFileSize" : 5242880 ,
"supportedTypes" : [
"text/plain" ,
"application/pdf" ,
"image/jpeg" ,
"image/png"
]
},
"streaming" : true ,
"multiTurn" : true ,
"webhooks" : true
},
"limits" : {
"requestsPerMinute" : 100 ,
"concurrentTasks" : 10 ,
"maxMessageLength" : 10000
},
"metrics" : {
"totalRequests" : 15420 ,
"averageResponseTime" : 850 ,
"successRate" : 98.5
}
},
"id" : "req-agent-info"
}
When webhooks are configured, your endpoint will receive POST requests with the following payload structure:
Content-Type : application/json
X-Webhook-Event : task.completed
X-Webhook-Signature : sha256=<hmac-signature>
X-Webhook-Delivery : <delivery-id>
User-Agent : EvoAI-Webhook/1.0
Webhook Payload
{
"event" : "task.completed" ,
"timestamp" : "2024-01-15T10:32:15Z" ,
"agentId" : "my-agent" ,
"taskId" : "task-123" ,
"data" : {
"status" : {
"state" : "completed" ,
"message" : {
"role" : "agent" ,
"parts" : [
{
"type" : "text" ,
"text" : "Task completed successfully"
}
]
}
},
"contextId" : "ctx-abc123" ,
"duration" : 125000 ,
"completedAt" : "2024-01-15T10:32:15Z"
},
"delivery" : {
"attempt" : 1 ,
"maxAttempts" : 5
}
}
Webhook Events
Sent when a task is submitted and queued for processing. Data includes: taskId
, submittedAt
, estimatedDuration
Sent when a task starts processing (optional, based on agent implementation). Data includes: taskId
, startedAt
, progress
Sent when a task completes successfully. Data includes: taskId
, status.message
, contextId
, duration
, completedAt
Sent when a task fails during processing. Data includes: taskId
, status.error
, duration
, failedAt
Sent when a task is canceled. Data includes: taskId
, reason
, canceledAt
Webhook Security
Signature Verification
If you provide a secret
in your webhook configuration, each webhook request will include an HMAC-SHA256 signature:
const crypto = require ( 'crypto' );
function verifyWebhookSignature ( payload , signature , secret ) {
const expectedSignature = crypto
. createHmac ( 'sha256' , secret )
. update ( payload , 'utf8' )
. digest ( 'hex' );
return `sha256= ${ expectedSignature } ` === signature ;
}
// Usage
const isValid = verifyWebhookSignature (
JSON . stringify ( webhookPayload ),
request . headers [ 'x-webhook-signature' ],
'your-webhook-secret'
);
Best Practices
Always verify signatures when using webhook secrets
Use HTTPS endpoints for webhook URLs
Validate payload structure before processing
Implement idempotency using delivery IDs
Handle duplicate deliveries gracefully
Implement proper error handling for webhook processing
Monitor webhook delivery success rates