Campaigns

Launch authorized phishing simulations. Template, landing, SMTP, and group fields accept names or UUIDs from GET /catalog.

Endpoints

Validate setup

POST/api/v1/setup/validate

Dry-runs a campaign payload without creating or sending. Use before POST /campaigns/quick.

Headers

NameTypeDescription
X-API-KeyrequiredstringOrg API key

Request body

NameTypeDescription
templatestringTemplate name or ID
landingstringLanding name or ID (optional for library pairs)
smtpstringSMTP name or ID
groupsarrayGroup names or IDs

Responses

{ "valid": true, "resolved": { "template_id": "…" } }

Example

terminal
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

NameTypeDescription
X-API-KeyrequiredstringOrg API key

Request body

NameTypeDescription
namerequiredstringCampaign name
templaterequiredstringTemplate name or ID
smtprequiredstringSMTP name or ID
groupsrequiredarrayTarget groups
launch_datestringOptional ISO schedule time

Responses

{ "id": "…", "status": "queued", "name": "Q3 drill" }

Example

terminal
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

NameTypeDescription
X-API-KeyrequiredstringOrg API key

Path parameters

NameTypeDescription
idrequiredstringCampaign ID

Responses

[{ "email": "ada@example.com", "status": "clicked" }]

Example

terminal
curl -s -X GET \
  -H "X-API-Key: YOUR_KEY" \
  https://app-fish.pandaone.dev/api/v1/campaigns/CAMPAIGN_ID/results