15
Views
2
Comments
Exposed API URL Query Parameters with special characters
Application Type
Reactive
Service Studio Version
11.55.64 (Build 64713)

Hello community. We are exposing an API, method GET with some URL query parameters. Some of these parameters have special characters in their name (Name in request). For example, Employee[Code]. When we open the documentation, everything looks good and the URL parameters with the special char have the encoded format (Employee%5BCode%5D). The problem is that these inputs are always empty. I added the GetRawURL to the logic and the values are indeed being sent (Employee%5BCode%5D=ABC), however the input remains empty. I don't know if this is a problem OutSystems has while decoding the parameter or if it is something else. Has anyone had this issue?

 

Note: I was able to get the values by doing a workaround using the getRawURL, indexes etc. But we would like to do this without this workaround.

Also, we cannot change the parameter's name or send it in the header. This is a WS that will replace an older one (in another technology) and our client's request is that this has to be done exactly the same way, so their clients don't have to integrate again.

Thank you!

2024-12-02 12-15-17
Aravind EONE

Hi Filipa,
How you did the work around ? in the onBeforeRequest?

2026-03-20 01-28-51
Saugat Biswas

Hi @Filipa Matos ,

This is a known and expected limitation in OutSystems when exposing REST APIs. OutSystems does not bind REST input parameters whose names contain special characters like [ and ], even though they are correctly URL‑encoded and visible in GetRawURL.

Root cause:

OutSystems REST input binding only supports parameter names that are valid OutSystems identifiers, which means:

  • Allowed parameter naming:
    • EmployeeCode
    • employee_code
    • employee.code
  • Not supported naming: 
    • Employee[Code]
    • Employee(Code)
    • Employee-Code
    • Any name requiring URL‑encoding

Even when encoded (%5B, %5D), OutSystems does not match them to inputs. Since OutSystems does not allow special characters in variable naming.

GetRawUrl still works because it

  • Reads the raw HTTP request
  • Bypasses OutSystems’ parameter binding
  • Shows the data exactly as received

But,

  • Binding happens before the logic runs
  • By the time inputs are populated, the parameter is already discarded


Solution:

Option 1:  Change the parameter name (best practice)

  • Instead of Employee[Code], Use EmployeeCode or: Employee_Code

Option 2: Pass complex parameters in the body if you need structured data:
    {  
        "Employee": 
         {    
             "Code": "ABC"
          }
    }

Option 3: Manually parse the query string 

As a workaround only: 

  • Use GetRawURL() 
  • Extract query string 
  • Parse Employee%5BCode%5D yourself


Hope this helps,

Cheers,

Saugat

Community GuidelinesBe kind and respectful, give credit to the original source of content, and search for duplicates before posting.