> ## 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.

# Set MVR status (testing)

> Forces mvrStatus onto an employee **without a real SuperChoice submission** — intended for QA/testing environments, where real funds never reply, so you can still exercise every status/webhook outcome your integration needs to...

Setting a status this way also permanently exempts the employee from the MVR payment gate (the same effect as `PATCH /v2/mvr/employee/:employeeId/override`) — if a real fund response later arrives for this employee, it only updates `mvrStatus`/`mvrStatusReason` for visibility and never blocks payment again. Fires the `employee.mvr_status_changed` webhook for any terminal status (`VERIFIED`, `WARNING`, `REJECTED`, `NOT_SUPPORTED`, `TIMED_OUT`) — never for `PENDING`, matching the real flow.

Requires the employee to already have a fund identity (`usi`/`smsf`) set and a qualifying employer for the client — the same preconditions a real `POST /v2/mvr/submit` has, so the fabricated outcome stays realistic.

> **Note:** this endpoint is not environment-restricted — it works in production too. Use it deliberately; it bypasses the real fund check entirely.

### v1 is unaffected

You do not need to adopt the [Employees v2](https://docs.mygigsters.com/super/api-reference/employees/create-employee.md) endpoints to use this, and `v1` never forces MVR onto anything — keep using `v1` for employees you don't want MVR on at all, and opt specific employees into MVR (via `v2`, or this endpoint) whenever you're ready to.

### Request Parameters

**employeeId** `string` *required*

### Request Body

**status** `string (PENDING, VERIFIED, WARNING, REJECTED, TIMED_OUT, NOT_APPLICABLE, NOT_SUPPORTED, NOT_CHECKED)` *required*

The mvrStatus to force onto this employee. Setting this also permanently exempts the employee from the MVR payment gate — if a real fund response later arrives for this employee, it only updates mvrStatus/mvrStatusReason for visibility and never blocks payment.

**reason** `string`

Human-readable reason to store as mvrStatusReason, as if the fund had supplied it.

**employerId** `string`

Optional explicit employerId override — see POST /v2/mvr/submit's employerId.

### Responses

| Code | Description |
| - | - |
| `200` | Status forced successfully |
| `400` | Bad request — the employee has no fund identity (usi/smsf), or no employer at the client is onboarded and synced at the clearing house |
| `401` | Unauthorized — invalid authentication credentials |
| `404` | Employee not found for this client |

### Response fields

**transactionId** `string`

Synthetic transaction ID for the fabricated mvrRequest row — usable with GET /v2/mvr/:transactionId.

**status** `string`

> [accordion] Error response fields
>
> **success** `boolean`
>
> **statusCode** `integer`
>
> **message** `string`

```bash cURL theme={null}
curl 'https://qa-super.mygigsters.com.au/v2/mvr/employee/6a58c9406820b9ff62b527b3' -X PATCH \
    -u "apiUsername:apiPassword"  \
    -H "Content-Type: application/json" --data '{"status":"REJECTED","reason":"Member not found with supplied information."}'
```

```javascript Node.js theme={null}
const response = await fetch("https://qa-super.mygigsters.com.au/v2/mvr/employee/6a58c9406820b9ff62b527b3", {
  method: "PATCH",
  headers: {
    Authorization: "Basic " + Buffer.from("apiUsername:apiPassword").toString("base64"),
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "status": "REJECTED",
    "reason": "Member not found with supplied information."
  }),
});

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

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

response = requests.patch(
    "https://qa-super.mygigsters.com.au/v2/mvr/employee/6a58c9406820b9ff62b527b3",
    auth=("apiUsername", "apiPassword"),
    json={
        "status": "REJECTED",
        "reason": "Member not found with supplied information.",
    },
)

print(response.json())
```

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

uri = URI("https://qa-super.mygigsters.com.au/v2/mvr/employee/6a58c9406820b9ff62b527b3")
request = Net::HTTP::Patch.new(uri)
request.basic_auth("apiUsername", "apiPassword")
request["Content-Type"] = "application/json"
request.body = <<~JSON
  {
    "status": "REJECTED",
    "reason": "Member not found with supplied information."
  }
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-super.mygigsters.com.au/v2/mvr/employee/6a58c9406820b9ff62b527b3");

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "PATCH",
    CURLOPT_USERPWD => "apiUsername:apiPassword",
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "status": "REJECTED",
  "reason": "Member not found with supplied information."
}
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("apiUsername:apiPassword".getBytes());

        String body = String.join("\n",
            "{",
            "  \"status\": \"REJECTED\",",
            "  \"reason\": \"Member not found with supplied information.\"",
            "}"
        );

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://qa-super.mygigsters.com.au/v2/mvr/employee/6a58c9406820b9ff62b527b3"))
            .header("Authorization", "Basic " + credentials)
            .header("Content-Type", "application/json")
            .method("PATCH", HttpRequest.BodyPublishers.ofString(body))
            .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"
	"strings"
)

func main() {
	body := strings.NewReader(`{
  "status": "REJECTED",
  "reason": "Member not found with supplied information."
}`)

	req, err := http.NewRequest("PATCH", "https://qa-super.mygigsters.com.au/v2/mvr/employee/6a58c9406820b9ff62b527b3", body)
	if err != nil {
		panic(err)
	}
	req.SetBasicAuth("apiUsername", "apiPassword")
	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.Patch, "https://qa-super.mygigsters.com.au/v2/mvr/employee/6a58c9406820b9ff62b527b3");
request.Headers.Authorization = new AuthenticationHeaderValue(
    "Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("apiUsername:apiPassword")));
request.Content = new StringContent(@"{
  ""status"": ""REJECTED"",
  ""reason"": ""Member not found with supplied information.""
}", Encoding.UTF8, "application/json");

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

```text 200 theme={null}
""
```


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