Skip to content

415 Unsupported Media Type after upgrading from Xero Java SDK v11 → v12.0.0 #423

@siddheshjadhavmodulr

Description

@siddheshjadhavmodulr

SDK you're using (please complete the following information):

  • Version: 12.0.0
  • Previous Working Version: 11.0.0
  • Language: Java 17
  • Framework: Spring Boot

Describe the bug
After upgrading from Xero Java SDK v11.0.0 to v12.0.0, some outgoing API calls to Xero (for example, PayrollUkApi.createPayRunCalendar) fail with the following error:

com.google.api.client.http.HttpResponseException: 415 Unsupported Media Type

The same API calls work correctly when using SDK v11.0.0.
On investigation, we found that SDK v12 automatically adds a Content-Type header to outgoing requests, whereas v11 did not.
When this header is removed manually and the same request is sent via Postman, the API succeeds.

To Reproduce
Steps to reproduce the behavior:

  1. Use Xero Java SDK v12.0.0
  2. Initialize a Xero API client (e.g.,PayrollUkApi)
  3. Call an endpoint such as: PayrollUkApi.createPayRunCalendar
  4. Observe the response: com.google.api.client.http.HttpResponseException: 415 Unsupported Media Type
  5. Repeat the same using SDK v11.0.0 — the request succeeds.

Expected behavior
API calls that worked in v11.0.0 should continue to work in v12.0.0.

Screenshots
If applicable, add screenshots to help explain your problem.

Additional context
We compared the raw outgoing requests between versions.

v12.0.0 (fails):

curl -X POST 'https://api.xero.com/payroll.xro/2.0/PayRunCalendars' \
 -H 'accept: application/json' \
 -H 'accept-encoding: gzip' \
 -H 'content-type: application/json' \
 -H 'user-agent: Default [Xero-Java-12.0.0]' \
 -H 'xero-tenant-id: <tenant-id>' \
 -H 'idempotency-key: null' \
 -H 'Authorization: Bearer <token>' \
 -d '{"name":"Cal ppMqMv","calendarType":"Weekly","periodStartDate":"2025-10-20","periodEndDate":"2025-10-27","paymentDate":"2025-10-27"}'

v11.0.0 (works):

curl -X POST 'https://api.xero.com/payroll.xro/2.0/PayRunCalendars' \
 -H 'accept: application/json' \
 -H 'accept-encoding: gzip' \
 -H 'user-agent: Default [Xero-Java-11.0.0]' \
 -H 'xero-tenant-id: <tenant-id>' \
 -H 'idempotency-key: null' \
 -H 'Authorization: Bearer <token>' \
 -d '{"name":"Cal Eimjzp","calendarType":"Weekly","periodStartDate":"2025-10-20","periodEndDate":"2025-10-27","paymentDate":"2025-10-27"}'

The only difference is the Content-Type header in v12. Removing it makes the request succeed

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions