> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.rebateright.com.au/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.rebateright.com.au/_mcp/server.

# Errors and retries

## What you see, and what to do

| You see                                                                                                | What to do                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`401` "Unauthorized access."](#error-401)                                                             | Send the API Key for the host you sent the request to, in the `x-api-key` header.                                                                                                                       |
| [`400` "Missing required header: x-minor-id"](#error-400-missing-minor-id)                             | Send the clinic's Minor ID in the `x-minor-id` header.                                                                                                                                                  |
| [`400` "The Minor ID is not valid."](#error-400-invalid-minor-id)                                      | Send the clinic's Minor ID exactly as RebateRight issued it: 3 capital letters, then 5 digits.                                                                                                          |
| [No response to a claim, such as a client timeout or a `503`](/claiming#when-a-claim-gets-no-response) | Resend the claim unchanged with its original `correlationId`. For a patient claim, ask the user to confirm first, because the resend pends a pendable claim.                                            |
| [A client timeout or a `503` on any other request](#error-503)                                         | Send the request again.                                                                                                                                                                                 |
| [`9777`](#error-9777)                                                                                  | Medicare already holds a claim with this `correlationId`. After a resend of a claim that got no response, `9777` means the claim is lodged. Otherwise, send the claim again with a new `correlationId`. |
| [`3004`](#error-3004)                                                                                  | Medicare did not process the claim. Send it again with a new `correlationId`. When the message is "Maximum number of … claims reached.", send it the next day.                                          |

## Error details

Errors come from RebateRight or from Services Australia. RebateRight's own errors are plain text, including every `401` and `503` and the `400` messages it raises itself. Errors from Services Australia are JSON, with Medicare's code and message for each problem. A `400` can be either, so read the body as text before you parse it as JSON.

#### 401: "Unauthorized access."

RebateRight did not accept the API Key. The `x-api-key` header is missing, or the key is not valid on the host you sent the request to.

**Resolution**

Send the API Key that matches the host in the `x-api-key` header of every request. See [Keys, Minor ID and environments](/keys-and-environments).

#### 400: "Missing required header: x-minor-id"

The endpoint needs the `x-minor-id` header, and the request did not include it. RebateRight stopped the request before it reached Services Australia.

**Resolution**

Send the clinic's Minor ID in the `x-minor-id` header. See [Keys, Minor ID and environments](/keys-and-environments).

#### 400: "The Minor ID is not valid."

The `x-minor-id` header is not in the Minor ID format: 3 capital letters, then 5 digits. RebateRight stopped the request before it reached Services Australia.

**Resolution**

Send the clinic's Minor ID exactly as RebateRight issued it.

#### 400: "Request body is empty."

The request had no body. RebateRight stopped the request before it reached Services Australia.

**Resolution**

Send the JSON request body that the endpoint's reference page describes.

#### 503: "This service is not available at the moment."

RebateRight could not complete the request, for example because the connection to Services Australia failed or timed out. The plain-text body ends with a Request Id.

**Resolution**

* **A claim.** The response does not say whether Medicare received the claim. Follow [When a claim gets no response](/claiming#when-a-claim-gets-no-response).
* **An eligibility check, a verification or a lookup.** Send the request again.
* **An error that continues.** Email [hello@rebateright.com.au](mailto:hello@rebateright.com.au) with the Request Id.

#### Your request timed out.

Your client stopped waiting before a response arrived.

**Resolution**

* **A claim.** Follow [When a claim gets no response](/claiming#when-a-claim-gets-no-response). That section also gives the client timeout to set.
* **An eligibility check, a verification or a lookup.** Send the request again.

#### 9777: "Transaction Id submitted for this claim has already been received." or "Claim cannot be pended."

Medicare already holds a claim with this `correlationId`, so it did not process this one.

**Resolution**

* **A resend of a claim that got no response.** Medicare received the first attempt, so the claim is lodged. For a bulk bill or DVA claim, the processing report has the outcome. A patient claim has no report. Sending a patient claim again with a new `correlationId` would lodge a second claim. See [When a claim gets no response](/claiming#when-a-claim-gets-no-response).
* **A new or corrected claim that reused a `correlationId`.** Send the claim again with a new `correlationId`. See [Correlation ID](/claiming#correlation-id).
* **"Claim cannot be pended."** More than 1 hour has passed since the original patient claim, so Medicare will not pend it. Send the claim again with a new `correlationId`. See [Pendable Claims](/patient-claim-interactive#pendable-claims).

#### 3004: "Maximum number of … claims reached." or "An unexpected error has occurred."

Medicare returns `3004` for 2 different causes. The message text tells them apart. In both cases, Medicare did not process the claim.

**Resolution**

* **"Maximum number of … claims reached."** The payee provider and Minor ID have reached Medicare's daily limit for bulk bill or DVA claims. Send the claim the next day with a new `correlationId`.
* **"An unexpected error has occurred."** Medicare had a system error. Send the claim again with a new `correlationId`. If the error continues, call the Medicare eBusiness Service Centre on **1800 700 199**. If you see this error in the test environment outside Sydney business hours, retry during business hours, as [Integration test data](/test-data) explains.

#### The '...' field is not provided

A field the Medicare eligibility check needs is missing from your request. The `Reason` field in the response names the missing field, in single quotes.

**Example:** `"Reason": "The 'PrincipalProviderNumber' field is not provided."`

**Resolution**

Add the missing field to your request and send it again.

#### "Referral details and referral override code both provided."

The request included both referral details, such as the referring provider number, and a referral override code, such as `N` for not required. Medicare accepts only one of the two.

**Resolution**

Include **either** referral details **or** a referral override code, not both.

#### Invalid Referral Type or Service Type combination

Medicare does not accept this combination of `ReferralTypeCode` and `ServiceTypeCode`.

**Resolution**

| ReferralTypeCode | Required ServiceTypeCode |
| ---------------- | ------------------------ |
| `S` or `D`       | `S` (Specialist)         |
| `P`              | `P` (Pathology)          |

Send one of the combinations in the table.

#### "Invalid or inconsistent Referral Issue Date."

The referral issue date is in the future, after the service date or before the patient's date of birth.

**Resolution**

Ensure the referral issue date:

* Is **not in the future**
* Is **on or before** the service date
* Is **after** the patient's date of birth

#### "Invalid Provider Number format."

The provider number does not follow the required Medicare format.

**Resolution**

Provider numbers must be **8 characters** in the format: `6-digit stem + 1 location character + 1 check digit`

Example: `2447791K`

#### "Referrer and servicing provider cannot be the same."

The referring provider number has the same 6-digit stem as the servicing provider number. Medicare requires a different stem for each.

**Resolution**

Use a referring provider number with a **different 6-digit stem** from the servicing provider's number.

#### "Hospital indicator or Facility ID missing."

The request sent the hospital referral override code `H` without the hospital fields that code requires.

**Resolution**

If `ReferralOverrideCode` is `H`:

* Set `HospitalIndicator` to `Y`
* Provide a valid `FacilityID`

#### "Invalid or inconsistent service date."

The service date is in the future, or more than 2 years before the transmission date.

**Resolution**

Ensure the service date:

* Is **not in the future**
* Is **within 2 years** of the transmission date

#### "Invalid Medicare card number or IRN."

The Medicare card number or the Individual Reference Number (IRN) is not valid.

**Resolution**

* The Medicare card number must be **10 digits** with a valid check digit
* The **10th digit must not be 0**
* The **IRN** must be a single digit from **1 to 9**

#### "Incomplete collection or accession date/time (pathology)."

The request has a collection date and time or an accession date and time, but not both.

**Resolution**

If either `CollectionDateTime` or `AccessionDateTime` is provided, both must be included.

* Both must use valid Australian time zones
* Order must be: **Collection ≤ Accession ≤ ServiceDate**

#### 2025: "A maximum of 16 Medical Events are allowed per Patient Claim."

An interactive patient claim contains more than 16 Medical Events. A bulk bill claim gets the same code when it contains more than 80.

**Resolution**

* Limit each patient claim to **16 Medical Events**
* Split additional events into separate claims

#### 2032: "A maximum of 14 Services are allowed per Medical Event."

A Medical Event in a bulk bill or interactive patient claim contains more than 14 services.

**Resolution**

* Limit each Medical Event to **14 services**
* Split additional services into separate Medical Events

#### 2033: "A maximum of 16 Services are allowed per Patient Claim."

An interactive patient claim contains more than 16 services overall.

**Resolution**

* Limit the claim to **16 services total**
* Split additional services into separate claims

#### 2030: "Invalid value of \[…] supplied for Medical Event Id." or "Medical Event Id/s supplied are out of sequence."

One or more Medical Event IDs in the claim are duplicated or out of sequence.

**Resolution**

* Ensure Medical Event IDs are **unique**
* IDs must **start at 01** and **increment by one** sequentially

#### 2030: "Invalid value of \[…] supplied for Service Id."

A Service ID is repeated within the same claim.

**Resolution**

Ensure all Service IDs are **unique within the claim**.

#### 9202: "Invalid value of \[…] supplied for Account Paid Indicator."

The `accountPaidInd` value in an interactive patient claim is not `Y` or `N`.

**Resolution**

Send `Y` if the account was paid in full, or `N` if it was not paid in full.

#### 2030: "Temporary bank details have been supplied for an unpaid claim." or "Patient Contribution Amount must not be set…"

The `accountPaidInd` value in an interactive patient claim conflicts with another field.

**Resolution**

* If the claim carries `eftDetails` and the account was paid in full, set `accountPaidInd` to `Y`. If it was not paid in full, remove `eftDetails`.
* If any service carries `patientContribAmount` and the account was not paid in full, set `accountPaidInd` to `N`. If it was paid in full, remove `patientContribAmount`.

#### 9202: "Invalid value of \[…] supplied for Account Reference Id."

The `accountReferenceId` value in an interactive patient claim contains a character Medicare does not accept, or is the wrong length.

**Resolution**

* Must be **1–9 characters**
* Allowed characters: `0-9, A-Z, a-z, @ # $ % + = : ; , . -`, and single spaces between other characters
* No leading or trailing spaces

#### "Invalid Referral Period or Type."

The referral `PeriodCode`, `Period` or `TypeCode` is missing or inconsistent.

**Resolution**

| Field                        | Valid values                                        |
| ---------------------------- | --------------------------------------------------- |
| TypeCode                     | `S` (Specialist), `P` (Pathology), `D` (Diagnostic) |
| Period/PeriodCode            | Only set if TypeCode = `S`                          |
| Non-standard referrals (`N`) | Must supply Period 1–98 (not 0, 00 or 99)           |

---

> **Note**
>
> For an error this page does not cover, email us at [hello@rebateright.com.au](mailto:hello@rebateright.com.au). For a `503`, include the Request Id from the response.