---
title: "Send a signed ping"
method: POST
path: "/api/v1/webhooks/{id}/test"
tags: ["Outcomes"]
---

# Send a signed ping

`POST /api/v1/webhooks/{id}/test`

## Request

- Base URL: `https://www.upgradeagent.ai`
- URL: `https://www.upgradeagent.ai/api/v1/webhooks/{id}/test`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://www.upgradeagent.ai/api/oauth/authorize`, token URL `https://www.upgradeagent.ai/api/oauth/token`, scopes: `mcp`)
  - HTTP bearer

Delivers a `ping` event signed with the webhook's secret so the receiver can verify its implementation end-to-end. Reports the receiver's status; 502 when it did not answer 2xx.

## Path parameters

- `id` string, required

## Response `200`

Receiver answered 2xx.

- WebhookTestResult
  - `id` string, required
  - `event` 'ping', required
  - `delivered` boolean, required: True when the receiver answered 2xx.
  - `statusCode` integer, nullable, required: Receiver's HTTP status; null on timeout / connection error.
  - `error` string, nullable, required

## Other responses

- `401`: Missing, invalid, expired, or revoked bearer token. The WWW-Authenticate challenge points at the OAuth protected-resource metadata.
- `404`: Unknown webhook, or owned by another caller.
- `429`: Per-caller rate limit exceeded.
- `502`: Receiver did not answer 2xx (details in the body).

---

[API](https://skmtc.dev/upgradeagent/apis/upgrade-agent-rest-api.md) · [All operations](https://skmtc.dev/upgradeagent/apis/upgrade-agent-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/upgradeagent/apis/upgrade-agent-rest-api/revisions/fbed715712c1?raw)
