top of page

Cx Web Services – Getting Repair Work Orders

Cx Web Services – Getting Repair Work Orders (Picking Up Where We Left Off)


A while back, I wrote a post called “Cx Web Services Step by Step – Get me a token!”.If you haven’t read it, it’s probably worth a quick skim first, because everything here builds on that:


A LOT has happened and changed since then. Cx versions have moved on, but one thing has only increased - people need to get data in and out of Cx, and the Cx SOAP web services are still doing a lot of heavy lifting in the real world.


I’ve always meant to come back and write more of these. I also try to give back where I can, which is why I answer questions on Viva Engage when I’ve got the time. This post is very much in that spirit — practical, no fluff, and based on how this stuff actually gets used.

So, let’s move on from tokens and do something useful.


Quick Recap: Authentication Still Comes First


Nothing new here.


Before you can call any Cx web service, you must:

  1. authenticate via the token service

  2. get a valid token

  3. pass that token into every subsequent call

If your token expires, you’ll get an “Access denied – Invalid token” fault and you’ll need to go back and get a new one. Exactly as before.


I’m not going to repeat all of that here — it’s covered in detail in the earlier post — but just remember: if your tokens not down...you're not coming in!


The Service We’re Using


To get repair work orders, we use the WSRepairContractorService, which lives at:

This service is mainly aimed at contractors and external systems, but it’s useful for anyone who needs to read repair data out of Cx in a supported way.


The method we care about in this post is:


GetRepairWorkOrders


The Basic GetRepairWorkOrders Call


Here’s a simple, working example of the SOAP request.It includes:


  • the token you already retrieved

  • paging information

  • and (optionally) filters.

<soapenv:Envelope 
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:civ="http://Civica.Housing.Cx.WebServices.RepairContractor"
  xmlns:civ1="http://schemas.datacontract.org/2004/07/Civica.Housing.Cx.WebServices.Contracts.DataContracts.Modules.Security"
  xmlns:civ2="http://schemas.datacontract.org/2004/07/Civica.Housing.Cx.WebServices.Contracts.DataContracts.BaseClasses"
  xmlns:civ3="http://schemas.datacontract.org/2004/07/Civica.Housing.Cx.WebServices.Contracts.DataContracts.Modules.Repair">

  <soapenv:Header/>
  <soapenv:Body>
    <civ:GetRepairWorkOrders>
      <civ:request>

        <civ1:Token>your-valid-token-here</civ1:Token>

        <civ2:PageInfo>
          <civ2:PageNumber>1</civ2:PageNumber>
          <civ2:PageSzie>10</civ2:PageSzie>
        </civ2:PageInfo>

        <!-- Optional filter -->
        <!--
        <civ3:OrderReference>REP123456</civ3:OrderReference>
        -->

      </civ:request>
    </civ:GetRepairWorkOrders>
  </soapenv:Body>
</soapenv:Envelope>

Yes, PageSzie Is Misspelled


Before anyone emails me — that spelling is correct.

PageSzie is misspelled in the Civica code itself and has been that way forever. If you “fix” it to PageSize, the request won’t work. This has caught out more people than I can count. Be careful of that with AI generated code.


Also note that whilst the thousand page Civica Web Services Definition document might include may tags, you don't need to pass in everything. What's equally unhelpful is what's stated as optional might not be, and what is mandatory equally may not be. If you like a puzzle...getting a web services method to work can be sooooo much fun!!


Filtering the Results

In this call if you don’t pass any filters, Cx will return all repair work orders that the authenticated user is allowed to see, subject to paging. Be aware that may be tens of thousands so be sensible.


I've shown here how you can filter the results though — for example by OrderReference.


This is useful if:

  • you’re looking up a specific job

  • you’re re-syncing failed messages

  • you want to sanity-check data you already hold


What You Get Back

Below is an example response.


<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <GetRepairWorkOrdersResponse xmlns="http://Civica.Housing.Cx.WebServices.RepairContractor">
      <GetRepairWorkOrdersResult 
        xmlns:a="http://schemas.datacontract.org/2004/07/Civica.Housing.Cx.WebServices.Contracts.DataContracts.Modules.Repair"
        xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:RepairWorkOrderSummary>
          <a:Address>
            <a:Address>XX Sample Street, Sampletown, AB1 2CD</a:Address>
            <a:AddressId>12345</a:AddressId>
            <a:Description>Sample Property</a:Description>
          </a:Address>
          <a:Contract>Sample Contractor Ltd</a:Contract>
          <a:ContractId>99</a:ContractId>
          <a:CreatedDate>2024-01-10T09:15:00</a:CreatedDate>
          <a:OrderDate>2024-01-10T09:16:00</a:OrderDate>
          <a:OrderId>98765</a:OrderId>
          <a:OrderReference>REP000123</a:OrderReference>
          <a:OrderUid>00000000-0000-0000-0000-000000000000</a:OrderUid>
          <a:Description>Repair description text goes here</a:Description>
          <a:PriorityDescription>Routine</a:PriorityDescription>
          <a:RepairTypeDescription>Day to Day</a:RepairTypeDescription>
          <a:StatusCodeDescription>Complete</a:StatusCodeDescription>
          <a:OrderStatusDescription>Complete</a:OrderStatusDescription>
          <a:TargetStartDate>2024-01-10T09:16:00</a:TargetStartDate>
          <a:TargetCompletionDate>2024-01-15T17:00:00</a:TargetCompletionDate>
        </a:RepairWorkOrderSummary>
      </GetRepairWorkOrdersResult>
    </GetRepairWorkOrdersResponse>
  </s:Body>
</s:Envelope>

A Few Important Things to Understand

This method gives you summary-level repair data. That’s by design.


You’ll get:

  • references and IDs

  • property details

  • dates, priorities, and statuses


You won’t get:

  • tasks or SORs

  • appointment detail

  • full order history


Those come from other methods, which I’ll cover in future posts.


Common Things That Still Catch People Out


A few classics I still see regularly:

  • tokens expire, so you have to refresh, maybe even between batches if you're doing a paged pull over many hours

  • Cx security roles and functional units should apply

  • assuming this is “real-time” (it isn’t — it’s pull-based)

If something looks odd, check the basics first.


Wrapping Up


Even with all the talk of REST, SOAP-based Cx integrations are still everywhere, quietly doing their job. If you can get a token and successfully call GetRepairWorkOrders, you’ve already cracked a big chunk of most contractor-style integrations.


In the next posts, I’ll look at:

  • pulling full repair detail

  • and how these methods are typically chained together in the real world


As always, if you’ve built something interesting — or hit something weird — feel free to shout. That’s half the reason I write these in the first place. If there's a particular method you need help with please do reach out and i'll do a post on it.

Comments


© 2025 by iStride Ltd.

bottom of page