curl --request POST \
--url https://api.gigstack.io/v2/webhooks/{id}/test \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"operation_id": "11111111-1111-4111-8111-111111111111",
"expected_livemode": false,
"confirmed": true,
"event": "payment.created",
"resource_id": "payment_example"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
operation_id: '11111111-1111-4111-8111-111111111111',
expected_livemode: false,
confirmed: true,
event: 'payment.created',
resource_id: 'payment_example'
})
};
fetch('https://api.gigstack.io/v2/webhooks/{id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.gigstack.io/v2/webhooks/{id}/test"
payload = {
"operation_id": "11111111-1111-4111-8111-111111111111",
"expected_livemode": False,
"confirmed": True,
"event": "payment.created",
"resource_id": "payment_example"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"success": true,
"data": {
"operation_id": "11111111-1111-4111-8111-111111111111",
"action": "test",
"team_id": "team_example",
"livemode": false,
"endpoint_id": "wh_example",
"delivery_id": "manual-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"log_id": "manual-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"submission": "unknown",
"delivery": "pending",
"attempts": 0,
"duplicate_delivery_possible": true,
"payload_semantics": "current_resource",
"v2_state": "current_at_delivery"
},
"timestamp": 1700000000000
}Send a test event
Requires a verified Firebase person or signed personal MCP credential with current team authority; ordinary team API keys are refused. The backend resolves the saved endpoint and resource. Confirm the selected team, current mode and effect before posting. Save operation_id before the request. HTTP 200 describes queue submission and delivery separately; it does not prove receipt. On timeout or unknown submission, read the same operation and do not automatically post again. Can test a saved inactive endpoint. Uses an existing authorized resource and the saved endpoint security configuration. It can make a real outbound request even in test data mode. See the Webhooks guide for recovery and payload semantics.
curl --request POST \
--url https://api.gigstack.io/v2/webhooks/{id}/test \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"operation_id": "11111111-1111-4111-8111-111111111111",
"expected_livemode": false,
"confirmed": true,
"event": "payment.created",
"resource_id": "payment_example"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
operation_id: '11111111-1111-4111-8111-111111111111',
expected_livemode: false,
confirmed: true,
event: 'payment.created',
resource_id: 'payment_example'
})
};
fetch('https://api.gigstack.io/v2/webhooks/{id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.gigstack.io/v2/webhooks/{id}/test"
payload = {
"operation_id": "11111111-1111-4111-8111-111111111111",
"expected_livemode": False,
"confirmed": True,
"event": "payment.created",
"resource_id": "payment_example"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"success": true,
"data": {
"operation_id": "11111111-1111-4111-8111-111111111111",
"action": "test",
"team_id": "team_example",
"livemode": false,
"endpoint_id": "wh_example",
"delivery_id": "manual-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"log_id": "manual-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"submission": "unknown",
"delivery": "pending",
"attempts": 0,
"duplicate_delivery_possible": true,
"payload_semantics": "current_resource",
"v2_state": "current_at_delivery"
},
"timestamp": 1700000000000
}Authorizations
Authentication Method: HTTP Bearer token.
The runtime requires the literal Bearer prefix — a bare token in the
Authorization header is rejected with 401 unauthorized.
Header Format: Authorization: Bearer YOUR_API_KEY
Your API key is a JWT. Live keys operate on live data (livemode: true);
test keys operate on isolated test data (livemode: false).
Get your key at: app.gigstack.pro/settings?tab=api
Errors: credential failures are answered by the authentication layer with a raw
{ "message": … } body, not the standardized envelope — 401 for a missing, malformed or
expired token, 403 for a revoked key or a plan without API access. See the Unauthorized
and AuthForbidden responses.
Path Parameters
^[A-Za-z0-9_-]{1,200}$Query Parameters
^[A-Za-z0-9_-]{1,200}$Body
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$Assertion of the currently authenticated mode; never selects or overrides it. For get, identifies the frozen operation mode.
true payment.created, payment.updated, payment.succeeded, payment.canceled, payment.deleted, payment.upcoming_due_date, invoice.created, invoice.canceled, invoice.failed, receipt.created, receipt.updated, receipt.completed, receipt.deleted, customer.created, customer.updated, customer.deleted, service.created, service.updated, service.deleted, teams.created, teams.sat.completed, teams.stripe.completed, teams.openpay.completed, teams.sat.manifest.signed ^[A-Za-z0-9_-]{1,200}$^[A-Za-z0-9_-]{1,200}$