Skip to main content

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.created

Fired when a new ICP profile is generated and ready.

icp.updated

Fired when an ICP profile is updated with new analysis.

campaign.created

Fired when ad campaign variants are generated for an ICP.

placement.analyzed

Fired 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.