Integrations
Connect WonderFunnel to your recruitment stack. Use the REST API and webhooks to automate your workflows.
Integration Templates
REST API Quick Reference
GET
/api/v1/icps
List ICP profiles
GET
/api/v1/icps/:id
Get ICP detail
GET
/api/v1/placements
List placements
POST
/api/v1/placements
Import candidate
GET
/api/v1/webhooks
List webhooks
POST
/api/v1/webhooks
Register webhook
DELETE
/api/v1/webhooks/:id
Remove webhook
All requests require Authorization: Bearer wf_live_...
Get your API key in Settings → Integrations.
Workday
Export candidates from Workday Recruiting into WonderFunnel for ICP analysis.
import requests
WONDERFUNNEL_API_KEY = "wf_live_your_key_here"
BASE_URL = "https://wonderfunnel.io/api/v1"
def import_candidate(candidate: dict, function_group: str):
"""Push a Workday candidate profile to WonderFunnel."""
profile_text = f"""
Name: {candidate.get('name', '')}
Current Title: {candidate.get('current_title', '')}
Years Experience: {candidate.get('years_experience', '')}
Education: {candidate.get('education', '')}
Skills: {', '.join(candidate.get('skills', []))}
Previous Employers: {', '.join(candidate.get('employers', []))}
Summary: {candidate.get('summary', '')}
""".strip()
response = requests.post(
f"{BASE_URL}/placements",
headers={"Authorization": f"Bearer {WONDERFUNNEL_API_KEY}"},
json={
"function_group": function_group,
"candidate_name": candidate.get("name"),
"candidate_text": profile_text,
"source": "workday",
},
)
response.raise_for_status()
return response.json()["data"]["id"]
# Example: import all candidates for a role
workday_candidates = [
{
"name": "Jane Smith",
"current_title": "Senior Data Engineer",
"years_experience": 8,
"education": "MSc Computer Science, TU Delft",
"skills": ["Python", "Spark", "dbt", "Snowflake"],
"employers": ["ASML", "Booking.com"],
"summary": "Platform engineer focused on data reliability at scale.",
}
]
for candidate in workday_candidates:
placement_id = import_candidate(candidate, "Data Engineering")
print(f"Imported: {placement_id}")
Webhook Events
icp.createdFired when a new ICP profile is generated and ready.
icp.updatedFired when an ICP profile is updated with new analysis.
campaign.createdFired when ad campaign variants are generated for an ICP.
placement.analyzedFired when a candidate placement has been analyzed.
Signature verification: Every webhook is signed with HMAC-SHA256. Verify using the X-WonderFunnel-Signature header and the signing secret shown when you register the webhook.