{
  "info": {
    "name": "Willo Integration API V2",
    "description": "Public REST API for the Willo asynchronous video interviewing platform. Manage departments (companies), interviews (jobs and their questions), participants (candidates) and their video responses / IDV media, message templates, users, webhooks, interview templates, and child organisations. Base URL: https://api.willotalent.com/api/integrations/v2 (staging: https://api.stage.willotalent.com/api/integrations/v2). Authentication is by an integration key (API key) from the Willo Integrations page, sent in the Authorization header over HTTPS. Endpoints and auth are confirmed from Willo's published Postman reference; request bodies are illustrative.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "baseUrl", "value": "https://api.willotalent.com/api/integrations/v2", "type": "string" },
    { "key": "apiKey", "value": "", "type": "string" }
  ],
  "item": [
    {
      "name": "Departments",
      "item": [
        {
          "name": "List Departments",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/departments/", "host": ["{{baseUrl}}"], "path": ["departments", ""] },
            "description": "Lists the departments (Companies) in the account."
          }
        },
        {
          "name": "Create Department",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"name\": \"Acme UK\",\n  \"is_global\": false\n}" },
            "url": { "raw": "{{baseUrl}}/departments/", "host": ["{{baseUrl}}"], "path": ["departments", ""] },
            "description": "Creates a new department (Company)."
          }
        },
        {
          "name": "Department Details",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/departments/:key/", "host": ["{{baseUrl}}"], "path": ["departments", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Retrieves a single department by key."
          }
        },
        {
          "name": "Update Department (PUT)",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"name\": \"Acme UK\",\n  \"is_global\": true\n}" },
            "url": { "raw": "{{baseUrl}}/departments/:key/", "host": ["{{baseUrl}}"], "path": ["departments", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Fully replaces a department."
          }
        },
        {
          "name": "Update Department (PATCH)",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"is_global\": true\n}" },
            "url": { "raw": "{{baseUrl}}/departments/:key/", "host": ["{{baseUrl}}"], "path": ["departments", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Partially updates a department."
          }
        },
        {
          "name": "Delete Department",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/departments/:key/", "host": ["{{baseUrl}}"], "path": ["departments", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Deletes a department."
          }
        }
      ]
    },
    {
      "name": "Interviews",
      "item": [
        {
          "name": "List Interviews",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/interviews/", "host": ["{{baseUrl}}"], "path": ["interviews", ""] },
            "description": "Lists interviews (jobs) accessible to the API key."
          }
        },
        {
          "name": "Create Interview",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"title\": \"Customer Support Agent\",\n  \"questions\": [\n    { \"prompt\": \"Tell us about yourself.\", \"type\": \"video\", \"max_duration\": 120 }\n  ]\n}" },
            "url": { "raw": "{{baseUrl}}/interviews/", "host": ["{{baseUrl}}"], "path": ["interviews", ""] },
            "description": "Creates an interview with a list of pre-defined questions."
          }
        },
        {
          "name": "Interview Details",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/interviews/:key/", "host": ["{{baseUrl}}"], "path": ["interviews", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Retrieves a single interview, including its questions."
          }
        },
        {
          "name": "Update Interview (PUT)",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"title\": \"Customer Support Agent (v2)\"\n}" },
            "url": { "raw": "{{baseUrl}}/interviews/:key/", "host": ["{{baseUrl}}"], "path": ["interviews", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Fully replaces an interview."
          }
        },
        {
          "name": "Update Interview (PATCH)",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"title\": \"Customer Support Agent (updated)\"\n}" },
            "url": { "raw": "{{baseUrl}}/interviews/:key/", "host": ["{{baseUrl}}"], "path": ["interviews", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Partially updates an interview."
          }
        },
        {
          "name": "Delete Interview",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/interviews/:key/", "host": ["{{baseUrl}}"], "path": ["interviews", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Deletes an interview."
          }
        }
      ]
    },
    {
      "name": "Participants",
      "item": [
        {
          "name": "List Participants",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/participants/", "host": ["{{baseUrl}}"], "path": ["participants", ""] },
            "description": "Lists participants (candidates) accessible to the API key."
          }
        },
        {
          "name": "Invite Participant",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"first_name\": \"Jane\",\n  \"last_name\": \"Doe\",\n  \"email\": \"jane@example.com\",\n  \"interview\": \"INTERVIEW_KEY\"\n}" },
            "url": { "raw": "{{baseUrl}}/participants/", "host": ["{{baseUrl}}"], "path": ["participants", ""] },
            "description": "Invites a participant to an interview."
          }
        },
        {
          "name": "Participant Details",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/participants/:key/", "host": ["{{baseUrl}}"], "path": ["participants", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Retrieves a participant, including their video responses when completed."
          }
        },
        {
          "name": "Update Participant (PUT)",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"stage\": \"Shortlisted\"\n}" },
            "url": { "raw": "{{baseUrl}}/participants/:key/", "host": ["{{baseUrl}}"], "path": ["participants", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Fully replaces a participant."
          }
        },
        {
          "name": "Update Participant (PATCH)",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"stage\": \"Interview\"\n}" },
            "url": { "raw": "{{baseUrl}}/participants/:key/", "host": ["{{baseUrl}}"], "path": ["participants", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Partially updates a participant (for example, changes their stage)."
          }
        },
        {
          "name": "Delete Participant",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/participants/:key/", "host": ["{{baseUrl}}"], "path": ["participants", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Deletes a participant."
          }
        },
        {
          "name": "Participant Identity Verification Details",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/participants/:key/idv-info/", "host": ["{{baseUrl}}"], "path": ["participants", ":key", "idv-info", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Retrieves the IDV result and metadata for a participant."
          }
        },
        {
          "name": "Participant Identity Verification Media",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/participants/:key/idv-media/", "host": ["{{baseUrl}}"], "path": ["participants", ":key", "idv-media", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Retrieves the IDV media references for a participant."
          }
        }
      ]
    },
    {
      "name": "Message Templates",
      "item": [
        {
          "name": "List Templates",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/message-templates/", "host": ["{{baseUrl}}"], "path": ["message-templates", ""] },
            "description": "Lists the invite, reminder, and success message templates."
          }
        },
        {
          "name": "Create Template",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"name\": \"Custom Invite\",\n  \"type\": \"invite\",\n  \"subject\": \"You're invited\"\n}" },
            "url": { "raw": "{{baseUrl}}/message-templates/", "host": ["{{baseUrl}}"], "path": ["message-templates", ""] },
            "description": "Creates a new message template."
          }
        },
        {
          "name": "Template Details",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/message-templates/:key/", "host": ["{{baseUrl}}"], "path": ["message-templates", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Retrieves a single message template."
          }
        },
        {
          "name": "Update Message Template (PUT)",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"name\": \"Custom Invite\",\n  \"type\": \"invite\",\n  \"subject\": \"You are invited\"\n}" },
            "url": { "raw": "{{baseUrl}}/message-templates/:key/", "host": ["{{baseUrl}}"], "path": ["message-templates", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Fully replaces a message template."
          }
        },
        {
          "name": "Update Message Template (PATCH)",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"subject\": \"You are invited to interview\"\n}" },
            "url": { "raw": "{{baseUrl}}/message-templates/:key/", "host": ["{{baseUrl}}"], "path": ["message-templates", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Partially updates a message template."
          }
        },
        {
          "name": "Delete Message Template",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/message-templates/:key/", "host": ["{{baseUrl}}"], "path": ["message-templates", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Deletes a message template."
          }
        }
      ]
    },
    {
      "name": "Users",
      "item": [
        {
          "name": "List Users",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/users/", "host": ["{{baseUrl}}"], "path": ["users", ""] },
            "description": "Lists the users in the account."
          }
        },
        {
          "name": "Invite User",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"email\": \"teammate@example.com\",\n  \"role\": \"standard\"\n}" },
            "url": { "raw": "{{baseUrl}}/users/", "host": ["{{baseUrl}}"], "path": ["users", ""] },
            "description": "Invites a new user with a given role."
          }
        },
        {
          "name": "User Details",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/users/:key/", "host": ["{{baseUrl}}"], "path": ["users", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Retrieves a single user."
          }
        },
        {
          "name": "Update User (PATCH)",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"role\": \"admin\"\n}" },
            "url": { "raw": "{{baseUrl}}/users/:key/", "host": ["{{baseUrl}}"], "path": ["users", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Partially updates a user."
          }
        },
        {
          "name": "Delete User",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/users/:key/", "host": ["{{baseUrl}}"], "path": ["users", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Removes a user from the account."
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "item": [
        {
          "name": "List Webhooks",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/webhooks/", "host": ["{{baseUrl}}"], "path": ["webhooks", ""] },
            "description": "Lists the configured webhook subscriptions."
          }
        },
        {
          "name": "Create Webhook",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"target_url\": \"https://example.com/hooks/willo\",\n  \"trigger\": \"new_response\"\n}" },
            "url": { "raw": "{{baseUrl}}/webhooks/", "host": ["{{baseUrl}}"], "path": ["webhooks", ""] },
            "description": "Subscribes an endpoint to a Willo event trigger (new_response, stage_change, new_comment, new_score)."
          }
        },
        {
          "name": "Update Webhook (PUT)",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"target_url\": \"https://example.com/hooks/willo\",\n  \"trigger\": \"new_score\"\n}" },
            "url": { "raw": "{{baseUrl}}/webhooks/:key/", "host": ["{{baseUrl}}"], "path": ["webhooks", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Fully replaces a webhook subscription."
          }
        },
        {
          "name": "Update Webhook (PATCH)",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"is_active\": false\n}" },
            "url": { "raw": "{{baseUrl}}/webhooks/:key/", "host": ["{{baseUrl}}"], "path": ["webhooks", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Partially updates a webhook subscription."
          }
        },
        {
          "name": "Delete Webhook",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/webhooks/:key/", "host": ["{{baseUrl}}"], "path": ["webhooks", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Deletes a webhook subscription."
          }
        }
      ]
    },
    {
      "name": "Interview Templates",
      "item": [
        {
          "name": "List Categories",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/categories/", "host": ["{{baseUrl}}"], "path": ["categories", ""] },
            "description": "Lists the categories used to organise interview templates."
          }
        },
        {
          "name": "List Templates",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/interview-templates/", "host": ["{{baseUrl}}"], "path": ["interview-templates", ""] },
            "description": "Lists the available pre-built interview templates."
          }
        },
        {
          "name": "Get Template Details",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/interview-templates/:key/", "host": ["{{baseUrl}}"], "path": ["interview-templates", ":key", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Retrieves a single interview template, including its questions."
          }
        },
        {
          "name": "Create Interview from Template",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"title\": \"Sales Rep (from template)\"\n}" },
            "url": { "raw": "{{baseUrl}}/interview-templates/:key/interviews/", "host": ["{{baseUrl}}"], "path": ["interview-templates", ":key", "interviews", ""], "variable": [{ "key": "key", "value": "" }] },
            "description": "Creates an interview pre-populated from the given template."
          }
        }
      ]
    },
    {
      "name": "Child Organisations",
      "item": [
        {
          "name": "List Children",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/children/", "host": ["{{baseUrl}}"], "path": ["children", ""] },
            "description": "Lists organisations created under the parent organisation."
          }
        },
        {
          "name": "Create Child Organisation",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authorization", "value": "{{apiKey}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": { "mode": "raw", "raw": "{\n  \"name\": \"Acme Sub-brand\"\n}" },
            "url": { "raw": "{{baseUrl}}/children/", "host": ["{{baseUrl}}"], "path": ["children", ""] },
            "description": "Creates a new organisation under the parent organisation."
          }
        }
      ]
    },
    {
      "name": "Reference",
      "item": [
        {
          "name": "List Languages",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/languages/", "host": ["{{baseUrl}}"], "path": ["languages", ""] },
            "description": "Lists the languages supported for interviews and communications."
          }
        },
        {
          "name": "List IDV Countries",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authorization", "value": "{{apiKey}}", "type": "text" }],
            "url": { "raw": "{{baseUrl}}/idv-counties/", "host": ["{{baseUrl}}"], "path": ["idv-counties", ""] },
            "description": "Lists the countries of employment supported for identity verification."
          }
        }
      ]
    }
  ]
}
