Workday: Report as a Service (RaaS) via Apideck Proxy API

Edited

This guide walks you through creating a Report as a Service (RaaS) in Workday and accessing it via the Apideck Proxy API.

Prerequisites

You'll need:

  • A Workday account with permissions to create custom reports

  • An Integration System User (ISU) configured in Workday

  • A Workday connection in Apideck with:

    • username – ISU username

    • password – ISU password

    • tenant_id – e.g. acme in https://impl.workday.com/acme/d/home.html

    • wsdl_url – e.g. https://services1.myworkday.com/ccx/service

Step 1: Create a Custom Report in Workday

  1. Sign in to Workday with an account that can create reports.

  2. In the global search, open the Create Custom Report task.

  1. Configure the report details:

  • Report Name: a unique, descriptive name

  • Report Type: select Advanced — required to expose the report as a web service

  • Enable as Web Service: ✅ check this box — without it the report won't be accessible via the SOAP API

  • Data Source: select the relevant data source, e.g. Workers for HCM Reporting for employee/worker data

  1. Go to the Columns tab and add the fields you want to expose (e.g. Worker ID, First Name, Last Name, Email, Department, Job Title).

  1. Optionally, go to the Prompts tab to add filters like Effective Date, Department, or Worker Status.

  2. Click OK and note the exact report name — it will be used in the URL.

Step 2: Share the Report with the Integration System User (ISU)

  1. Search for Edit Custom Report and select your report.

  2. Go to the Share tab and add your Integration System User (e.g. testuser) to the authorized users. This is required — without it you'll see 401 or 403 errors.

  1. Click OK and verify the ISU is listed.

Step 3: Get the Report URL

  1. Search for the report by name, open its Actions menu, and go to Web Service → View URLs.

  2. Copy the Workday XML WSDL URL from the dialog.

Step 4: Access the Report via Apideck Proxy API

Downstream URL

Use the Workday XML Report URL from the previous step. Example structure:

https://impl-services1.wd12.myworkday.com/ccx/service/customreport2/acme/reportownername/Employee_List_Report

Apideck supports placeholders for connection-level fields only: {username}, {password}, {tenant_id}, {wsdl_url}. Report owner and report name must be hardcoded as they vary per report, not per connection.

Example with placeholders:

{wsdl_url}/customreport2/{tenant_id}/reportownername/Employee_List_Report

cURL example

If you have multiple Workday connections configured, include x-apideck-unified-api to specify which one to use (hris, ats, or accounting). If you only have one Workday connection, this header is optional.

bash

curl --location 'https://unify.apideck.com/proxy' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'x-apideck-consumer-id: YOUR_CONSUMER_ID' \
  --header 'x-apideck-app-id: YOUR_APP_ID' \
  --header 'x-apideck-service-id: workday' \
  --header 'x-apideck-unified-api: hris' \
  --header 'Content-Type: application/soap+xml' \
  --header 'Accept: application/xml' \
  --header 'x-apideck-downstream-method: POST' \
  --header 'x-apideck-downstream-url: {wsdl_url}/customreport2/{tenant_id}/reportownername/Employee_List_Report'

Request body

Apideck automatically replaces {username}, {tenant_id}, and {password} with your Vault connection settings.

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wd="urn:com.workday.report/Employee_List_Report">
  <soapenv:Header>
    <wsse:Security soapenv:mustUnderstand="1"
      xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
      xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
      <wsse:UsernameToken wsu:Id="UsernameToken-">
        <wsse:Username>{username}@{tenant_id}</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">{password}</wsse:Password>
      </wsse:UsernameToken>
    </wsse:Security>
  </soapenv:Header>
  <soapenv:Body>
    <wd:Execute_Report>
      <wd:Report_Parameters>
      </wd:Report_Parameters>
    </wd:Execute_Report>
  </soapenv:Body>
</soapenv:Envelope>

Expected response

Workday returns raw XML. The structure depends on the columns you configured. Example:

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Body>
    <wd:Report_Data xmlns:wd="urn:com.workday.report/Employee_List_Report">
      <wd:Report_Entry>
        <wd:Worker_ID>12345</wd:Worker_ID>
        <wd:First_Name>John</wd:First_Name>
        <wd:Last_Name>Doe</wd:Last_Name>
        <wd:Email>john.doe@example.com</wd:Email>
      </wd:Report_Entry>
    </wd:Report_Data>
  </env:Body>
</env:Envelope>

Related links

Was this article helpful?

Sorry about that! Care to tell us more?

Thanks for the feedback!

There was an issue submitting your feedback
Please check your connection and try again.