Workelo's API πŸ”’

  • API: Our ready-to-use recipes πŸ‘©β€πŸ³

    Here is a complete guide, structured by main user story, with all the required API calls in order (including prerequisite calls to retrieve IDs).

    πŸ™‹ To get started with the API, please refer to the dedicated documentation first.


    1. Manage your employee directory πŸ‘₯Β 

    Retrieve the required IDs

    β†’ Retrieve the user_role_id corresponding to the desired role (colleague, manager, hr...) :

    GET /user_roles

    β†’ Retrieve the id of the organization to assign the employee to:

    GET /unit_organizations

    β†’ Retrieve the identification_resource_id of available custom fields (badge, employee ID, etc.):

    GET /identification_resources

    Create the employee

    POST /employees
    
    {
      "first_name": "Marie",
      "last_name": "Dubois",
      "email": "marie.dubois@company.com",
      "job_position": "Manager",
      "external_id": "EMP-001",
      "unit_organization_id": 5,
      "user_role_id": 234
    }

    Add custom identification fields

    POST /employees/{employee_id}/identifications
    
    {
      "identification_resource_id": 5,
      "value": "BADGE-001"
    }

    View / Update the employee

    GET  /employees/{id}
    PUT  /employees/{id}
    GET  /employees?role=manager          ← list by role
    GET  /employees?external_id=EMP-001  ← find by external ID
    

    2. Manage your organisational structure 🏒

    Understand the existing hierarchy

    β†’ List the levels (e.g. Division, Department, Site):

    GET /level_organizations

    β†’ List the units of a given level:

    GET /unit_organizations?level_organization_id={level_id}

    Create a new organization

    POST /unit_organizations
    
    {
      "external_id": "IT-001",
      "name": "IT Department",
      "level_organization_id": 2,
      "parent_id": 15,
      "language": "en"
    }

    Manage an employee's scopes (access scope)

    GET    /employees/{employee_id}/unit_organization_managements
    POST   /employees/{employee_id}/unit_organization_managements
           { "unit_organization_id": 42 }
    DELETE /unit_organization_managements/{management_id}

    3. Create a journey πŸ›€οΈ

    Prerequisites β€” retrieve the required IDs

    β†’ unit_organization_id of the employee's organization:

    GET /unit_organizations

    β†’ id of the manager, HR, buddy, etc.:

    GET /employees?role=manager
    GET /employees?role=hr
    

    β†’ id of the templates to apply:

    GET /templates?mobility=onboarding&unit_organization_id={id}
    

    Create the journey (draft status)

    POST /tracks
    
    {
      "mobility": "onboarding",
      "start_date": "2026-06-01",
      "end_date": "2026-09-01",
      "employee": {
        "first_name": "John",
        "last_name": "Martin",
        "email": "john.martin@company.com",
        "job_position": "Developer",
        "unit_organization_id": 5
      },
      "implications": {
        "hr_id": 101,
        "manager_id": 202,
        "buddy_id": 303
      },
      "template_ids": [999056]
    }

    Launch the journey and send invitations

    PUT /tracks/{id}/start
    
    {
      "invite_at": "2026-05-28"   ← optional: employee invitation date
    }

    4. Monitor and track journeys 🧐

    List and filter journeys

    GET /tracks
    GET /tracks?status=in_progress
    GET /tracks?status=draft

    Available statuses: draft, invitation_sent, scheduled, in_progress, closed, cancelled

    View journey details (with live metrics)

    β†’ Returns journey health, progression, action availability rate, number of completed actions:

    GET /tracks/{id}

    Update a journey (dates, stakeholders)

    PUT /tracks/{id}
    
    {
      "start_date": "2026-06-15",
      "apply_on_actions": true,     ← automatically shifts actions
      "implications": {
        "manager_id": 205
      }
    }

    5. Manage administrative tasks πŸ“ƒΒ 

    List the forms of a journey

    GET /tracks/{track_id}/forms
    GET /tracks/{track_id}/forms?status=opened              ← awaiting completion
    GET /tracks/{track_id}/forms?status=missing_validation  ← awaiting HR validation

    View details and entered data

    β†’ Returns all paperworks with their filled-in values:

    GET /forms/{id}

    Update a field value

    PUT /paperworks/{id}
    
    { "value": "New value" }

    Manage files uploaded in a form

    GET  /paperwork_files/{id}       ← retrieve a file
    POST /paperwork_files            ← upload a file
         { "paperwork_id": 456, "file": "..." }

    List available form resources

    GET /paperwork_resources
    GET /paperwork_resources?type=selection   ← dropdown lists
    GET /paperwork_resources?type=date

    List the documents of a journey

    GET /tracks/{track_id}/documents

    Statuses: supplying (being prepared), receipting (available), finalized (completed)

    Download a file (base64)

    GET /attachments/{id}

    List available document resources

    GET /document_resources
    GET /document_resources?type=sign
    GET /document_resources?type=download

    6. Manage dropdown option lists πŸ”½

    List the options of a resource

    GET /collection_values?resource_type=PaperworkResource&resource_id={paperwork_resource_id}
    Use limit / offset pagination for large lists.


    Create a simple option

    POST /collection_values?resource_type=PaperworkResource&resource_id={paperwork_resource_id}
    
    {
      "value": "Permanent contract",
      "external_id": "contract_permanent",
      "position": 1
    }
    Β 

    Create an option with a parent (dependent list)

    POST /collection_values?resource_type=PaperworkResource&resource_id={paperwork_resource_id}
    
    {
      "value": "Paris 1st",
      "external_id": "75056",
      "position": 1,
      "parent_id": 1001
    }
    The parent_id is the id of the parent collection_value (e.g. the postal code 75001).

    Β 

    Update an option (label, position, or parent)

    PUT /collection_values/{id}
    
    {
      "value": "Paris 1st Arrondissement",   // update the label
      "position": 2,                          // change the order
      "parent_id": 1050                       // move to a different branch
    }

    Existing valuesΒ in journeys retain their previous valueΒ (no cascade update).

    Β 

    7. Generate a secure access link (Magic Link) πŸ”—

    GET /user_magic_links/{employee_id}
    GET /user_magic_links_by_email/{email}
    GET /user_magic_links_by_external_id/{external_id}

    ⏱️ Links expire after 2 hours and only work if the employee has an active journey.


    8. Analyse and audit activity πŸ“ˆΒ 

    GET /logs
    GET /logs?event=user_creation&from=2026-01-01&to=2026-05-26
    GET /logs/{uuid}
    

    9. View assigned actions (stakeholders) βœ”οΈΒ 

    β†’ Retrieve the stakeholder's id:

    GET /employees?role=manager
    

    List a stakeholder's actions

    GET /owners/{owner_id}/actions
    GET /owners/{owner_id}/actions?limit=20&offset=0
    

    πŸ“Š Visual summary

    User Story Main calls
    Create an employee GET /user_roles β†’ GET /unit_organizations β†’ POST /employees
    Enrich a profile GET /identification_resources β†’ POST /employees/{id}/identifications
    Manage organizations GET /level_organizations β†’ POST /unit_organizations
    Create a journey GET /unit_organizations + GET /employees + GET /templates β†’ POST /tracks
    Send the invitation PUT /tracks/{id}/start
    Track journeys GET /tracks β†’ GET /tracks/{id}
    Update a journey PUT /tracks/{id}
    Administrative forms GET /tracks/{id}/forms β†’ GET /forms/{id} β†’ PUT /paperworks/{id}
    Documents GET /tracks/{id}/documents β†’ GET /attachments/{id}
    Magic Link GET /user_magic_links/{id}
    Stakeholder actions GET /employees β†’ GET /owners/{id}/actions
    Logs & audit GET /logs

    Β 


    πŸ“‘ Related articles

    See more
  • API: Which HR processes should be automated? ⚑️

    πŸ”„ Automate your HR processes with the Workelo API

    You spend hours every month copy-pasting information between your tools. Creating onboarding journeys one by one. Re-entering administrative forms into your payroll software. Downloading and filing signed documents.

    The reality is simple: your HR teams lose 30 to 40% of their time on low-value tasks. Repetitive, time-consuming, error-prone tasks. What if you could automate all of that?

    The Workelo API is free and connects your HR ecosystem: HRIS, ATS, payroll, DMS. Once set up, it works for you 24/7. Zero manual intervention. Zero data entry errors. Hours freed up for what truly matters: supporting your employees.

    Here are 6 HR processes our clients automate with measurable results.


    1️⃣ Create journeys from your ATS or HRIS

    πŸ”΄ The problem: when a candidate is validated in your ATS or a new employee appears in your HRIS, the HR team in charge of onboarding must manually create the journey in Workelo and fill in information that is already known.

    This double data entry is frustrating: "We already have this information in our HRIS, why enter it again?"

    βœ… The solution with the API: your ATS or HRIS automatically sends the information to Workelo. Within seconds, the employee is created, their journey is launched with the right templates, and the invitation is sent. You don't have to do a thing.

    Automated flow:

    πŸ“Š ATS/HRIS (new employee validated)
        ↓
    πŸ”„ Workelo API (automatic creation)
        ↓
    βœ‰οΈ Journey created in Workelo + invitation sent to the employee

    πŸ’‘ Real-world example:
    A company hires 25 people per month. Instead of manually creating these 25 onboarding journeys, as soon as a recruitment is moved to "Validated" in the ATS, the journey is automatically created within seconds.

    πŸ“Š ROI and time savings:
    10 minutes saved per journey β†’ over 3 hours recovered for 20 hires per month, or nearly 2 days for 100 hires per month.

    Metrics observed with our clients:

    • Journey creation time: -95% (8 min β†’ 10 sec)
    • Invitation sending delay: Day 0 vs. Day +2 on average (responsiveness)
    • Data entry error rate: -100% (name, email, job title...)
    • Strong ROI, quickly recouped

    πŸ› οΈ Technical difficulty: ⭐️ Easy
    Most ATS or HRIS platforms have an API or webhooks available; integration takes 1–2 days.

    Β 


    2️⃣ Pre-fill employee data from your ATS or HRIS

    πŸ”΄ The problem: you have already collected information in your ATS (phone number, address, date of birth...). But when you create the Workelo journey, these fields are empty. You either have to manually re-enter this data or leave it blank and ask the employee to fill everything in again β€” including what they already provided during recruitment.

    The employee has a frustrating experience: "I have to give my address again? I've already done that 3 times..."

    βœ… The solution with the API: the API automatically retrieves the data already present in your ATS/HRIS and pre-fills the Workelo fields. The employee arrives at a form already 60–70% completed. They review it, correct if needed, and submit. No more repetitive data entry.

    Automated flow:

    πŸ“Š ATS/HRIS (data collected during recruitment)
        ↓
    πŸ”„ Workelo API (automatic pre-filling)
        ↓
    βœ… Employee validates (instead of re-entering)
    

    πŸ’‘ Real-world example
    A staffing agency hires 15 employees per month. The ATS already contains: phone number, address, date of birth, qualifications. Previously, the employee received a blank form with 25 fields to fill in. Abandonment rate: 12%. Average time: 18 minutes.
    With the API, the form arrives pre-filled with ATS data. The employee only fills in the 8 missing fields (Social Security number, IBAN, health insurance...). Average time: 6 minutes.

    πŸ“Š ROI and time savings

    Employee time saved: X min Γ— number of pre-filled data points

    Metrics observed with our clients:

    • Form completion rate: +15% (fewer drop-offs)
    • Employee satisfaction (onboarding NPS): +12 points
    • Data quality: +25% (fewer empty or incorrect fields)
    • HR follow-up time: -80% (fewer incomplete forms)

    πŸ› οΈ Technical difficulty: ⭐️ Easy
    Requires mapping fields between your ATS/HRIS and Workelo (e.g. "date_naissance" β†’ "birth_date"). A developer can do this in 2–3 days. Once configured, it runs on its own.


    3️⃣ Send collected data to payroll

    πŸ”΄ The problem: the employee has filled in their administrative form in Workelo (Social Security number, IBAN, address, family situation, health insurance choice...). Now you need to:

    • Open each form in Workelo
    • Copy-paste each field into your payroll software
    • Download the attachments (bank details, Social Security certificate...)
    • Rename and file them

    This is the most time-consuming task in administrative onboarding. Every data entry error (wrong IBAN, transposed Social Security number) results in rework and payment delays.

    βœ… The solution with the API: as soon as a form is completed in Workelo, the API automatically sends the data to your payroll software (Silae, Payfit, Cegid...). Fields are mapped automatically. Attachments are downloaded and filed. Zero re-entry. Zero errors.

    Automated flow:

    βœ… Employee completes their Workelo form
        ↓
    πŸ”„ API retrieves data + files
        ↓
    πŸ’° Automatic sending to payroll software
        ↓
    πŸ“§ HR notification: "Form synchronised"

    πŸ’‘ Real-world example
    A fast food group hires 80 people per month (high turnover). 2 administrators were spending 6 hours per week re-entering forms into payroll, with an 8% error rate (payment delays, dissatisfaction). With the API, completed forms are automatically sent to the HRIS every night. Administrators simply check the imports (30 min/week). Error rate: <0.5%.

    πŸ“Š ROI and time savings

    Time saved: 6h/week β†’ 30 min/week = 5h30 recovered per week

    Metrics observed with our clients:

    • Payroll entry time: -92%
    • Data entry errors: -95% (near zero)
    • Payment delays due to admin errors: -90%
    • ROI: 22 hours/month recovered (for 80 hires/month)

    In HR cost terms: ~1 FTE recovered for high-volume companies (100+ hires/month).

    πŸ› οΈ Technical difficulty: ⭐️ ⭐️ Intermediate
    Depends on your payroll software. If an API is available, integration takes up to 3 days. Otherwise, a formatted CSV file can be generated (2 days). Once in place, almost zero maintenance.


    4️⃣ Archive the complete administrative file to your DMS

    πŸ”΄ The problem: signed documents (employment contract, internal rules, IT charter...) and attachments (bank details, ID document, qualifications...) are stored in Workelo. But for compliance purposes, you need to archive them in your DMS or digital safe. Today, you:

    • Download each document one by one
    • Rename them according to your naming convention ("LASTNAME_Firstname_DocType_Date.pdf")
    • File them in the correct folder structure (HR/Employees/LASTNAME_Firstname/Contracts/)
    • Enter the metadata (signing date, document type...)

    With 20 documents per employee and 30 hires/month, that's 600 documents to process manually every month.

    βœ… The solution with the API: as soon as a document is signed or a file uploaded in Workelo, the API retrieves it and automatically sends it to your DMS. The file is automatically renamed, filed, and tagged with metadata. Your entire employee file builds itself.

    Automated flow:

    ✍️ Document signed in Workelo (or file uploaded)
        ↓
    πŸ”„ API retrieves the PDF + metadata
        ↓
    πŸ“ Automatic filing in DMS:
        HR/Employees/MARTIN_John/Contracts/PermanentContract_2026-05-13_signed.pdf
        ↓
    πŸ“§ Notification: "Document archived"
    

    πŸ’‘ Real-world example
    An industrial group of 2,000 employees hires 40 people per month. Each file contains an average of 18 documents. An HR assistant was spending 4 hours per week downloading, renaming, and filing documents in the DMS. Risk of missing or misfiled documents: ~10%.
    Now, documents are automatically archived in the DMS every night. The assistant simply checks file completeness (20 min/week). Filing error rate: 0%.

    πŸ“Š ROI and time savings

    Time saved: 4h/week β†’ 20 min/week = 3h40 recovered per week

    Metrics observed with our clients:

    • Archiving time: -92%
    • Misfiled or lost documents: -100%
    • GDPR compliance: 100% (full traceability)
    • Document retrieval time: -80% (standardized naming convention)
    • ROI: 15 hours/month recovered (for 40 hires/month)

    πŸ› οΈ Technical difficulty: ⭐️ ⭐️ Intermediate
    If your DMS has an API, integration takes 3–5 days. Otherwise, export to a structured network folder (2 days). Initial naming convention configuration required.


    5️⃣ Synchronise your employee directory

    πŸ”΄ The problem: your HRIS is the reference for the list of active employees. But Workelo has its own database too. As a result, you have to maintain consistency manually:

    • A new employee? β†’ Create them in Workelo
    • A departure? β†’ Deactivate them in Workelo
    • A change of position/department? β†’ Update it in Workelo

    Out-of-sync data creates issues: journeys sent to people who have already left, an outdated org chart, skewed reports.

    βœ… The solution with the API: the API automatically synchronizes your employee directory between the HRIS and Workelo. Every night (or in real time), new hires, departures, and updates are propagated. Your two databases always stay in sync. Zero maintenance.

    Automated flow:

    πŸ“Š HRIS (source of truth)
        ↓
    πŸ”„ API synchronises (every night or in real time)
        ↓
    βœ… Workelo (automatically up to date)
        β€’ New employees created
        β€’ Departures deactivated
        β€’ Position/department changes updated
    

    πŸ’‘ Real-world example
    A services company hires 30 people/month and manages 15 departures/month (natural turnover). An HR manager was spending 2 hours per week checking and correcting out-of-sync data (duplicate employees, former employees still active...). Journeys were sometimes sent to invalid email addresses.
    Now, automatic synchronization runs every night at 2 a.m. The Workelo database always reflects the HRIS exactly. Maintenance time: 0 min/week.

    πŸ“Š ROI and time savings

    Time saved: 2h/week β†’ 0 min = 2 hours/week recovered

    Metrics observed with our clients:

    • Directory maintenance time: -100%
    • Out-of-sync rate: 0%
    • Sending errors (invalid emails, former employees): -95%
    • Report reliability: 100% (always accurate data)
    • ROI: 8 hours/month recovered

    πŸ› οΈ Technical difficulty: ⭐️ Easy to ⭐️ ⭐️ Intermediate
    If your HRIS has an API, integration takes 1–2 days via a synchronization script running as a creon job. Initial field mapping configuration required.


    6️⃣ Synchronise your org chart

    πŸ”΄ The problem: your organizational structure evolves: a new department is created, departments merge, reporting lines change... These updates must be reflected in Workelo so that:

    • Journeys are sent to the right managers/departments
    • Reports are accurate (onboarding by department)
    • Employees see the correct structure

    Manually maintaining 2 structures across 2 tools is a permanent source of errors.

    βœ… The solution with the API: the API automatically synchronizes your org chart from the HRIS to Workelo. Department creation, reporting line changes, deletions... everything is propagated automatically. Your Workelo org chart always mirrors your HRIS exactly. Zero lag.

    Automated flow:

    πŸ“Š HRIS (org chart updated)
        ↓
    πŸ”„ API synchronises (weekly or in real time)
        ↓
    βœ… Workelo (structure up to date)
        β€’ New departments created
        β€’ Reporting lines updated
        β€’ Closed departments archived
    

    πŸ’‘ Real-world example
    A tech scale-up of 500 employees creates 2–3 new departments per quarter and reorganizes regularly (agile squads). The HRBP had to manually recreate each department in Workelo, check reporting lines, and fix errors. Time spent: 1 hour per reorganization. Average update delay: 1 week (lag vs. the HRIS).
    Now, automatic synchronization runs every Sunday night. On Monday, the Workelo org chart exactly reflects the new structure. Maintenance time: 0 min.

    πŸ“Š ROI and time savings

    Time saved: 1h/reorganization Γ— 8 reorgs/year = 8 hours/year recovered

    Metrics observed with our clients:

    • Org chart maintenance time: -100%
    • Update delay: Day +7 β†’ Day 0 (real time)
    • Reporting line errors: -100%
    • HRIS/Workelo consistency: 100%

    Indirect benefit: Reliable reports by department (impossible if the org chart is outdated).

    πŸ› οΈ Technical difficulty: ⭐️ ⭐️ Intermediate
    Requires understanding your HRIS's hierarchical structure (parent/child, organizational levels). Integration takes 3–5 days. Once configured, automatic synchronization with no intervention required.


    πŸš€ And concretely, how does it work?

    It's simple β€” 3 steps:

    1️⃣ Define your need (10 minutes) Which process do you want to automate? What are your current systems (HRIS, payroll, DMS)?

    2️⃣ Configure the integration (2 to 5 days) Your IT team (or a service provider, or us) connects the systems via the API. No need to be an expert: the documentation is clear and code examples are provided.

    3️⃣ It runs on its own (0 minutes of maintenance) Once in place, processes run automatically. You simply receive confirmation notifications.


    ❓ Frequently asked questions

    Is the API included in my subscription?

    The API is free and accessible directly via Account > Integrations > API. Contact your Customer Success Manager if needed.

    Do you need to be a developer to use the API?

    Not necessarily. Two options:

    • Your IT team sets up the integration in a few days
    • A service provider/systems integrator can do it (we have listed partners)

    How long does it take to set up an automation?

    Between 2 and 5 days depending on the complexity and availability of your tools' APIs. Once configured, it's permanent.


    πŸ“‘ Related articles

    See more
  • [ReadMe] Getting started with the Workelo API πŸ’»

    Technical documentation

    https://api.workelo.eu/docs/apis


    Getting started

    πŸ’‘ The Workelo API lets you integrate the platform’s features directly into your systems and applications. This documentation gradually guides you through using the API to automate your HR processes and manage your employee journeys.

    Β 


    πŸ“‹ Overview

    The Workelo API (version 1.6) is a REST API that enables you to automate and integrate your HR processes.

    What can you do?

    • βœ… Manage journeys for collaborators (onboarding, crossboarding, offboarding)
    • βœ… Manage employees and their fields
    • βœ… Collect administrative data
    • βœ… Manage organizations and levels
    • βœ… Automate HR actions

    API architecture

    • Type: REST API
    • Format: JSON
    • Authentication: OAuth 2.0
    • Base URL: https://api.workelo.eu/v1/
    • Rate limit: 1000 requests per hour per token

    πŸ”‘ Key concepts

    Before you start, here are the essential notions defined in Workelo

    Β 

    πŸ‘₯ Employees and collaborators

    Employee: A person who is part of the database in Workelo.

    Collaborator: An employee experiencing a key moment (journey) with Workelo.

    Flexible identification in the API:

    • ID (default identifier)
    • external_id: your system identifier
    • Email: email address

    πŸ›€οΈ Journeys (Tracks)

    Journey: The key moment experienced by the collaborator within the company.

    Types of key moments:

    • Onboarding: Process of integrating a new collaborator into the company
    • Crossboarding: Process of supporting internal mobility or a role change
    • Offboarding: Process of supporting a collaborator leaving the company

    Statuses:

    • Draft draft
    • Invitation sent invitation_sent
    • Scheduled scheduled
    • In progress in_progress
    • Closed closed
    • Cancelled cancelled

    Involved roles: An employee involved in a collaborator’s key moment

    • HR rh
    • Administrative owner second_rh
    • Manager manager
    • Buddy buddy
    • Contributor second_manager

    πŸ“ Resources

    Resource: A specific element configured to enrich the experience offered on Workelo

    Available resource types:

    • Form: Resource aimed at collecting form fields from the employee
    • Document: File or resource to view, download, or sign within a journey
    • Survey : Resource aimed at collecting feedback from the collaborator
    • Quiz: Resource aimed at testing the collaborator’s knowledge
    • Task: Concrete action to be completed by a role or by the collaborator within a journey
    • Kit: Resource aimed at defining an accessory, tool, software, or access that must be prepared or retrieved for the collaborator
    • Content: Resource aimed at pushing information to the collaborator via a file or a link
    • Communication: Message or notification sent to users within a journey

    🏒 Organizational structure

    Environment: The level of the organizational directory chosen to define the different scopes of the account.

    In the API:

    • Level Organizations: hierarchical levels (Division, Department)
    • Unit Organizations: concrete units (HR, IT, Marketing)

    🎯 Templates

    Template: A set of resources scheduled relative to a key date, each with a designated owner


    πŸ› οΈ Best practices

    HTTP response codes

    • 200: Success
    • 201: Resource created
    • 404: Resource not found
    • 422: Unprocessable data
    • 401: Unauthorized

    Error handling

    Example 422 error:

    {
    "errors": ["Invalid email format", "Unit organization not found"],
    "message": "unprocessable_entity",
    "code": 422
    }

    Limits and performance

    • Rate limit: 1000 requests per hour per token
    • Pagination: Use limit and offset for large lists
    • Timeout: Minimum 30 seconds recommended
    • Retry: Exponential backoff for 5xx errors

    Recommended steps

    1. πŸ”‘ Test authentication with your credentials
    2. πŸ‘₯ Create a test employee to get familiar
    3. πŸ›€οΈ Launch a simple journey using the default templates
    4. πŸ“ Explore forms and their data structure
    5. πŸ”„ Implement synchronization with your existing system
    6. βš™οΈ Automate your processes according to your use cases

    🎯 Tip: Start small! A basic onboarding journey using existing templates helps you master the concepts before implementing advanced logic.

    Go further

    πŸš€ First steps

    Step 1: Get your API credentials

    You can create your credentials in your Workelo account under Account > Advanced > API.

    • client_id
    • client_secret

    Step 2: First call β€” List employees

    # 1. Get an access token
    curl -X POST https://api.workelo.eu/v1/tokens
    -F "client_id=your_client_id" \\
    -F "client_secret=your_client_secret"
    
    # 2. Use the token to list employees
    curl -X GET https://api.workelo.eu/v1/employees
    -H "Authorization: Bearer YOUR_TOKEN"

    Step 3: Understand a typical response

    {
      "data": [
        {
          "id": 123,
          "first_name": "Marie",
          "last_name": "Dubois",
          "email": "marie.dubois@entreprise.com",
          "role": "colleague",
          "unit_organization": {
            "id": 5,
            "name": "Service RH"
          }
        }
      ],
      "pagination": {
        "total": 50,
        "limit": 10,
        "offset": 0
      }
    }

    πŸ’‘ First success! If you get this response, your integration works. You can now explore the other endpoints.


    πŸ” Authentication

    The API uses OAuth 2.0 with short‑lived access tokens.

    Get a token

    POST /tokens
    Content-Type: multipart/form-data
    
    client_id=your_client_id
    client_secret=your_client_secret
    

    Response:

    {
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
    "token_type": "Bearer",
    "expires_in": 3600
    }

    Use the token

    Add the token to the header of all your requests:

    Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...

    ⏰ Lifetime: Tokens are valid for 1 hour and can be reused. Plan for automatic renewal.


    πŸ‘₯ Employee management

    List employees

    GET /employees
    
    or 
    
    GET /employees?limit=10&offset=0&role=colleague

    Filtering parameters:

    • role: colleague, manager, hr, owner
    • unit_organization_ids: organization IDs (comma‑separated)

    Create an employee

    POST /employees
    Content-Type: application/json
    
    {
      "first_name": "Marie",
      "last_name": "Dubois",
      "email": "marie.dubois@entreprise.com",
      "job_position": "Manager",
      "external_id": "EMP-001",
      "unit_organization_id": 5,
      "user_role_id": 234
    }

    Add custom identifications

    POST /employees/{employee_id}/identifications
    Content-Type: application/json
    
    {
      "identification_resource_id": 5,
      "value": "BADGE-001"
    }

    Search an employee by external_id

    GET /employees?external_id=EMP-001

    πŸ›€οΈ Collaborator journeys

    Create a journey

    POST /tracks
    Content-Type: application/json
    
    
    {
      "mobility": "onboarding",
      "start_date": "2019-08-24",
      "end_date": "2019-08-24",
      "employee": {
        "external_id": "string",
        "first_name": "string",
        "last_name": "string",
        "email": "string",
        "job_position": "string",
        "unit_organization_id": 0
      },
      "implications": {
        "hr_id": 0,
        "second_hr_id": 0,
        "manager_id": 0,
        "second_manager_id": 0,
        "buddy_id": 0
      },
      "template_ids": [
        0
      ]
    }

    Send the journey invitation

    PUT /tracks/{id}/start
    Content-Type: application/json
    
    {
    "invite_at": "2025-10-01"
    }

    Generate a secure access link

    GET /user_magic_links/{employee_id}

    Response:

    {
    "magic_link": "https://app.workelo.eu/magic/97abc...",
    "expires_in": 7200
    }

    Security: Magic links expire after 2 hours and are only accessible to collaborators with an active journey.


    πŸ“ Forms and fields

    List a journey’s forms

    GET /tracks/{id}/forms

    Statuses:

    • opened: form opened, awaiting input
    • closed: form closed and completed
    • missing_validation: awaiting HR validation

    View details and submitted data

    GET /forms/{id}

    Response structure:

    {
      "id": 123,
      "name": "Informations personnelles", 
      "status": "closed",
      "paperworks": [
        {
          "id": 456,
          "paperwork_resource_name": "Adresse personnelle",
          "value": "123 Rue de la Paix, Paris",
          "paperwork_files": []
        },
        {
          "id": 789, 
          "paperwork_resource_name": "Photo d'identitΓ©",
          "value": null,
          "paperwork_files": [
            {
              "id": 101,
              "file": {"url": "https://..."}
            }
          ]
        }
      ]
    }

    Update a piece of form fields

    PUT /paperworks/{id}
    Content-Type: application/json
    
    {
    "value": "New value"
    }

    Manage uploaded files

    Retrieve a file:

    GET /paperwork_files/{id}

    Upload a new file:

    POST /paperwork_files/
    Content-Type: multipart/form-data
    
    paperwork_id={paperwork_id}
    file={file_data}

    πŸ“„ Documents

    List a journey’s documents

    GET /tracks/{id}/documents

    Document statuses:

    • supplying: being prepared by the organization
    • receipting: available for collaborator action
    • finalized: action completed by the collaborator

    Download the file attached to a document

    GET /attachments/{id}

    Response (base64‑encoded file):

    {
    "id": 123,
    "name": "Employment contract",
    "filename": "contrat_martin_jean.pdf",
    "extension": "pdf",
    "content": "JVBERi0xLjQKMSAwIG9iao8CAovVHlwZSA..."
    }

    🏒 Organizational structure

    Understand the hierarchy

    List organization levels:

    GET /level_organizations

    List units within a level:

    GET /unit_organizations?level_organization_id={level_id}

    Create an organization

    POST /unit_organizations
    Content-Type: application/json
    
    {
    "external_id": "IT-001",
    "name": "IT Department",
    "level_organization_id": 2,
    "parent_id": 15,
    "language": "fr"
    }

    Manage an employee’s scopes

    Grant access to a unit:

    POST /employees/{id}/unit_organization_managements
    Content-Type: application/json
    
    {
    "unit_organization_id": 42
    }

    Revoke access:

    DELETE /unit_organization_managements/{management_id}

    βš™οΈ Advanced features

    Templates and models

    List available templates:

    GET /templates
    
    or
    
    GET /templates?mobility=onboarding&unit_organization_id=42

    Use templates at creation time:

    Templates are specified via template_ids when creating a journey.

    ⚑ Performance: Applying templates can take time. The journey is created immediately, resources are added in the background.

    Β 

    Tracking and logs

    GET /logs?event=track_creation&from=2025-09-01T00:00:00Z&to=2025-09-09T23:59:59Z

    Main events:

    • user_creation: employee creation
    • track_creation: journey creation
    • track_start: journey start
    • form_completion: form completed

    Β 

    Β 

    Β 

    See more

Need help?