> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mygigsters.com/llms.txt
> Use this file to discover all available pages before exploring further.

# API versioning

> Pin your integration to an API version with the X-API-Version header and upgrade on your own schedule.

MyGigsters versions the API with a mandatory `X-API-Version` header. You pin your integration to a release and upgrade when you're ready. Breaking changes are never deployed to an existing version.

## Send the version header

Every request must include `X-API-Version: 1.2` (recommended) or `X-API-Version: 1.1`.

```bash cURL theme={null}
curl -X GET "https://qa-payments.mygigsters.com.au/api/v1/customer" \
  -u "YOUR_UUID:YOUR_SECRET" \
  -H "X-API-Version: 1.2" \
  -H "Content-Type: application/json"
```

```javascript Node.js theme={null}
const response = await fetch("https://qa-payments.mygigsters.com.au/api/v1/customer", {
  method: "GET",
  headers: {
    Authorization: "Basic " + Buffer.from("YOUR_UUID:YOUR_SECRET").toString("base64"),
    "X-API-Version": "1.2",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
```

```python Python theme={null}
import requests

response = requests.get(
    "https://qa-payments.mygigsters.com.au/api/v1/customer",
    auth=("YOUR_UUID", "YOUR_SECRET"),
    headers={
        "X-API-Version": "1.2",
        "Content-Type": "application/json",
    },
)

print(response.json())
```

```ruby Ruby theme={null}
require "net/http"
require "json"
require "uri"

uri = URI("https://qa-payments.mygigsters.com.au/api/v1/customer")
request = Net::HTTP::Get.new(uri)
request.basic_auth("YOUR_UUID", "YOUR_SECRET")
request["X-API-Version"] = "1.2"
request["Content-Type"] = "application/json"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end

puts JSON.parse(response.body)
```

```php PHP theme={null}
<?php

$ch = curl_init("https://qa-payments.mygigsters.com.au/api/v1/customer");

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_USERPWD => "YOUR_UUID:YOUR_SECRET",
    CURLOPT_HTTPHEADER => [
        "X-API-Version: 1.2",
        "Content-Type: application/json",
    ],
]);

$response = curl_exec($ch);
curl_close($ch);

print_r(json_decode($response, true));
```

```java Java theme={null}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Base64;

public class Example {
    public static void main(String[] args) throws Exception {
        String credentials = Base64.getEncoder()
            .encodeToString("YOUR_UUID:YOUR_SECRET".getBytes());

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://qa-payments.mygigsters.com.au/api/v1/customer"))
            .header("Authorization", "Basic " + credentials)
            .header("X-API-Version", "1.2")
            .header("Content-Type", "application/json")
            .method("GET", HttpRequest.BodyPublishers.noBody())
            .build();

        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
```

```go Go theme={null}
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, err := http.NewRequest("GET", "https://qa-payments.mygigsters.com.au/api/v1/customer", nil)
	if err != nil {
		panic(err)
	}
	req.SetBasicAuth("YOUR_UUID", "YOUR_SECRET")
	req.Header.Set("X-API-Version", "1.2")
	req.Header.Set("Content-Type", "application/json")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()

	data, _ := io.ReadAll(res.Body)
	fmt.Println(string(data))
}
```

```csharp .NET theme={null}
using System.Net.Http.Headers;
using System.Text;

using var client = new HttpClient();

var request = new HttpRequestMessage(HttpMethod.Get, "https://qa-payments.mygigsters.com.au/api/v1/customer");
request.Headers.Authorization = new AuthenticationHeaderValue(
    "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("YOUR_UUID:YOUR_SECRET")));
request.Headers.Add("X-API-Version", "1.2");

var response = await client.SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());
```

> [!WARNING]
>
> Requests without a supported version header are rejected. See [Authentication](https://docs.mygigsters.com/get-started/authentication.md) for the error responses.

## Available versions

| Version | Status | Released | Notes |
| - | - | - | - |
| `1.2` | Current | January 2026 | snake\_case field names, Card and Beneficiary SDKs, document verification, partner accounts, credit notes, wallet balances, one error format, signed webhooks. |
| `1.1` | Maintenance | June 2025 | Baseline release. Reaches end of life on 31 December 2026. |

See the [changelog](https://docs.mygigsters.com/changelog.md) for what changed in each version.

## Deprecation policy

> [card] 12 months' notice
>
> A deprecated version keeps working in production for at least 12 months after the announcement.

> [card] Sunset alerts
>
> Responses from a deprecated version include a `Warning: 299` header with the sunset date. You also get email and dashboard alerts.

> [card] No surprise breaks
>
> New optional fields, endpoints, and webhook events ship without a version bump.

### What counts as a breaking change

| Change | Breaking? | New version? | Effect on your integration |
| - | - | - | - |
| Add an endpoint or webhook event | No | No | None. |
| Add an optional request parameter | No | No | Defaults are applied server-side. |
| Add fields to a JSON response | No | No | Your parser should ignore unknown keys. |
| Rename or delete a field | Yes | Yes | Only introduced in a new version. |
| Change field types or validation rules | Yes | Yes | The old version keeps its original rules. |
| Change HTTP status codes | Yes | Yes | Status codes stay consistent for a pinned version. |

## Upgrade from 1.1 to 1.2

**1. Rename camelCase fields to snake\_case**

Version 1.2 uses snake\_case for every request and response field, for example `customer_id`, `due_date`, `gst_registered`, and `save_card`. Update any field names your integration sends or reads.

**2. Update the version header**

Change the default header in your HTTP client, middleware, or API gateway. If you don't use any renamed fields, this is the only required change.

```javascript 1.1 (before) theme={null}
const headers = {
  "Authorization": "Basic " + btoa(uuid + ":" + secret),
  "X-API-Version": "1.1",
  "Content-Type": "application/json"
};
```

```javascript 1.2 (after) theme={null}
const headers = {
  "Authorization": "Basic " + btoa(uuid + ":" + secret),
  "X-API-Version": "1.2",
  "Content-Type": "application/json",
  // Optional: idempotency key for POST and PUT
  "idempotency-Key": crypto.randomUUID()
};
```

**3. Update error and webhook handling**

Version 1.2 returns one error format for all 4xx and 5xx responses and signs webhooks with HMAC-SHA256. See [Errors and conventions](https://docs.mygigsters.com/api-reference/errors-and-conventions.md) and [Receive webhooks](https://docs.mygigsters.com/security/webhooks.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.