Skip to main content

Hello,

I'm trying to load data from an Odoo system that only exposes an XML-RPC API (no REST or SOAP). I want to bring this data into TimeXtender Portal, but I’m working under a few constraints:

  • I do not have TimeXtender Premium, so I can't use custom scripts or PowerShell.

  • I don’t want to introduce any external tools like Python wrappers or middleware.

  • I can successfully call the XML-RPC API in Postman and retrieve data.

I'm looking for a way to either automate or streamline this process without Premium features or external software. I’ve considered the XML data source, but it seems incompatible with XML-RPC since it doesn’t support HTTP POST or dynamic method calls.

Has anyone found a way to work with XML-RPC APIs in TimeXtender under these limitations, or automated a file-based import process from tools like Postman?

Any suggestions or workarounds would be appreciated.

Let me know if you want to see the xml script. 

Hi ​@Leo Rogeman 

How do you use it in Postman? Our REST provider is very similar to this.


I use a POST for the URL. 

Headers: Key = Content-Type, Value = text/xml

Body: 

<?xml version="1.0"?>

<methodCall>

  <methodName>execute_kw</methodName>

  <params>

    <param><value><string>myDBname</string></value></param>               <!-- DB -->

    <param><value><int>myUIDvalue</int></value></param>                           <!-- UID -->

    <param><value><string>mykeyvalue</string></value></param>     <!-- key -->

    <param><value><string>account.move</string></value></param>          <!-- model -->

    <param><value><string>search_read</string></value></param>           <!-- method -->

    <param>

      <value>

        <array>

          <data>

            <value>

              <array>

                <data>

                  <value>

                    <array>

                      <data>

                        <value><string>move_type</string></value>

                        <value><string>=</string></value>

                        <value><string>out_invoice</string></value>

                      </data>

                    </array>

                  </value>

                  <value>

                    <array>

                      <data>

                        <value><string>state</string></value>

                        <value><string>=</string></value>

                        <value><string>posted</string></value>

                      </data>

                    </array>

                  </value>

                </data>

              </array>

            </value>

          </data>

        </array>

      </value>

    </param>

    <param>

      <value>

        <struct>

          <member>

            <name>fields</name>

            <value>

              <array>

                <data>

                  <value><string>name</string></value>

                  <value><string>partner_id</string></value>

                  <value><string>invoice_date</string></value>

                  <value><string>amount_total</string></value>

                </data>

              </array>

            </value>

          </member>

          <member>

            <name>limit</name>

            <value><int>10</int></value>

          </member>

        </struct>

      </value>

    </param>

  </params>

</methodCall>

 


Hi ​@Leo Rogeman 

You can add this query, like if you did a soap call I think.

What sort of result do you get from postman when doing this type of call? Is it returned in XML, JSON or something else?


It’s returned in XML:
 

<?xml version='1.0'?>

<methodResponse>

    <params>

        <param>

            <value>

                <array>

                    <data>

                        <value>

                            <struct>

                                <member>

                                    <name>id</name>

                                    <value>

                                        <int>123</int>

                                    </value>

                                </member>

                                <member>

                                    <name>name</name>

                                    <value>

                                        <string>ABC</string>

                                    </value>

                                </member>

                                <member>

                                    <name>partner_id</name>

                                    <value>

                                        <array>

                                            <data>

                                                <value>

                                                    <int>123</int>

                                                </value>

                                                <value>

                                                    <string>ABC</string>

                                                </value>

                                            </data>

                                        </array>

                                    </value>

                                </member>

                                <member>

                                    <name>invoice_date</name>

                                    <value>

                                        <string>2025-08-04</string>

                                    </value>

                                </member>

                                <member>

                                    <name>amount_total</name>

                                    <value>

                                        <double>123.123</double>

                                    </value>

                                </member>

                            </struct>

                        </value>

 

When trying to setup as you described above i get this error message when testing connection:
“The assembly for the provider TimeXtender REST (7.1.0.0) was not found”. 

This is my setup (I’ve anonymized some stuff):
 

 


Hi,

note that you don't need Premium to run Powershell scripts (Execution > External Executable), you only need Premium to do this from Orchestration. So, worst case, you could trigger a Postman job from Powershell to extract data.

If your Odoo is not SaaS, you may be able to use a linked server in SQL Server to connect to the actual database. If it is SaaS, then you are stuck with XML-RPC.


Hi ​@Leo Rogeman 

What version of TDI are you on?

I can see you use the newest version of the REST provider and this fits specific versions of TDI.


We use 6848.1


Hi ​@Leo Rogeman 

We have this guide.

So you can see that version 7 which is referenced in the error is what fits this release.

Ideally you should upgrade to the newest version to get the benefit of using the newest version of the REST provider.

However, if you want to avoid this at this time you can do the following and see if it still works for that.

Start by finding the existing REST data source and click on the three dots. Then click on export connection profile.

Once you receive a message that it is copied create a new rest data source and change the provider to be 7.1.0.0.

Then click on import connection and then Connection profile (JSON)

Then paste what you copied in the menu and click Import.

Now you have a setup that is of a version that is available for the TDI release you are on.

You will need to add a value in all the fields set to is sensitive, but otherwise it is the same setup.

See if this works. If it still does not work, it is due to missing features of the 7.1.0.0 release and you will have to upgrade to be able to use the data source.


Hi, I’m still getting errors using the 7.1 - not sure what I’m doing wrong. Not sure if that’s the main problem really or if there’s something else. It works in postman. 

I’ve been wondering if it’s possible to configure the endpoint with a proxy so I can catch the traffic using Fiddler (using port 8888) - do you know if this is possible? 


Error message:
Failed to execute endpoint 'OdooInvoice':
One or more errors occurred.
Failed to execute request for endpoint 'OdooInvoice'.
HTTP Status Code 404 Not Found
Response body:
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>


When asking ChatGPT I get this answer but I think it’s off:
 

1. XML-RPC over REST:

TimeXtender’s REST endpoint mechanism is designed to send JSON over HTTP, not XML-RPC, which uses a different content-type (text/xml) and structure.

You’re likely using the wrong tool for the job. You are attempting to post an XML-RPC payload to an endpoint that expects REST+JSON.

2. 404 Not Found

This is coming from Nginx, which typically means:

  • The path /de-xmlrpc/2/object does not exist on the server

  • OR the endpoint is not exposed through the domain/route you're hitting

  • OR your authentication did not succeed and Nginx is redirecting silently or blocking

 

Any ideas?
Leo


Hi ​@Leo Rogeman 

You should get all the communication by using the debug logging option.

It may also be the issue that the provider is not able to use the necessary features that  is currently present in the TX REST provider.

If you do get the data returned in HTML it usually is due to the error, if it were to work it will be xml or json that gets returned.


Hi ​@Leo Rogeman 

Perhaps we could get to look at this setup?

I have made an Zendesk ticket for this where we can share some more private info.


I tested again this morning and got it to work - the problem was an easy fix: I had written the entire Base URL in the PATH for the endpoint. So i removed the base url and it worked fine. Feels like a rookie mistake :) 

 

Thanks for all the help! 


Hi ​@Leo Rogeman 

Can you share what made it work?


Reply