Validate setup
POST/api/v1/setup/validate
Dry-runs a campaign payload without creating or sending. Use before POST /campaigns/quick.
Headers
| Name | Type | Description |
|---|
X-API-Keyrequired | string | Org API key |
Request body
| Name | Type | Description |
|---|
template | string | Template name or ID |
landing | string | Landing name or ID (optional for library pairs) |
smtp | string | SMTP name or ID |
groups | array | Group names or IDs |
Responses
{ "valid": true, "resolved": { "template_id": "…" } }
Example
curl -s -X POST \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
https://app-fish.pandaone.dev/api/v1/setup/validate
-d ''{"template":"Microsoft 365","smtp":"Corporate","groups":["All staff"]}''
Launch campaign
POST/api/v1/campaigns/quick
Creates and launches an authorized phishing simulation. Names or UUIDs accepted for template, landing, smtp, and groups.
Headers
| Name | Type | Description |
|---|
X-API-Keyrequired | string | Org API key |
Request body
| Name | Type | Description |
|---|
namerequired | string | Campaign name |
templaterequired | string | Template name or ID |
smtprequired | string | SMTP name or ID |
groupsrequired | array | Target groups |
launch_date | string | Optional ISO schedule time |
Responses
{ "id": "…", "status": "queued", "name": "Q3 drill" }
Example
curl -s -X POST \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
https://app-fish.pandaone.dev/api/v1/campaigns/quick
-d ''{"name":"Q3 drill","template":"Microsoft 365","smtp":"Corporate","groups":["All staff"]}''
Get results
GET/api/v1/campaigns/{id}/results
Returns per-recipient funnel status for a campaign.
Headers
| Name | Type | Description |
|---|
X-API-Keyrequired | string | Org API key |
Path parameters
| Name | Type | Description |
|---|
idrequired | string | Campaign ID |
Responses
[{ "email": "ada@example.com", "status": "clicked" }]
Example
curl -s -X GET \
-H "X-API-Key: YOUR_KEY" \
https://app-fish.pandaone.dev/api/v1/campaigns/CAMPAIGN_ID/results