# GET /api/billing-runs/price-plan-history

Billing Runs: Gets the plan-scoped historic billing report.

Returns every billing-run result where a merchant was billed against the given price plan,
across the requested period range (default trailing 12 months). Row fields are run-time
snapshots.

**Operation ID:** `GET_api_billing-runs_price-plan-history`

## Authorization

Requires: MerchantBilling.BillingRuns, MerchantBilling.Reports, merchant scope.

Required permissions:
- `MerchantBilling.BillingRuns`
- `MerchantBilling.Reports`

## Parameters

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| PricePlanId | query | no | string(uuid) | The price plan whose billing history is requested. |
| FromPeriodKey | query | no | string | Inclusive start of the period range in yyyyMM format (e.g., "202506").  When omitted, defaults to the trailing 12 months ending at the current period. |
| ToPeriodKey | query | no | string | Inclusive end of the period range in yyyyMM format (e.g., "202606").  When omitted, defaults to the current period. |
| suppressNulls | query | no | boolean | If true, omit properties with null values. |

## Responses

### 200

The plan-scoped history report.

**Content type:** `text/plain`

Schema: `PhoeniXGateMerchantBillingBillingRunsPricePlanHistoryDto`

**Content type:** `application/json`

Schema: `PhoeniXGateMerchantBillingBillingRunsPricePlanHistoryDto`

**Content type:** `text/json`

Schema: `PhoeniXGateMerchantBillingBillingRunsPricePlanHistoryDto`

### 404

No price plan exists with the specified id.

### 403

Forbidden

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 401

Unauthorized

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 400

Bad Request

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 501

Not Implemented

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 500

Internal Server Error

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### default

The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. See the error-code reference in this document's description for the values `error.code` can take.

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

## See also

- [All documentation](https://docs.winkpg.io/llms.txt): the machine-readable index of every public page on this site.
