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

# Reconciliation reports

> (EOL 30th September 2020) - Optional reports to verify you hold the same entitlement data as Bango

If you store entitlement data on your own systems, you can supply it regularly to Bango to allow Bango to perform a reconciliation process and send you reconciliation reports.

The reconciliation process checks that your data matches the Bango data, and highlights any problems. Bango performs similar reconciliation processes with merchants who make their products and services available through the Bango Resale API.

Unless otherwise agreed, the Bango data is considered the source of truth.

### Supplying reconciliation data to Bango

To supply reconciliation data to Bango, you need an SFTP site that Bango can access. Give the connection details of your SFTP site to [Bango Support](https://developer.bango.com/help/support/), including the credentials Bango should use, and then upload your reconciliation data to the site as necessary. Bango will make reconciliation reports available to you by email or SFTP upload.

Supply the data to Bango in [RFC 4180](https://tools.ietf.org/html/rfc4180) CSV format, using the columns defined for [entitlement reports](https://developer.bango.com/resale/reporting/entitlement/).

### Matches and mismatches

When comparing the data you supply to the data in the Bango Platform, Bango checks pairs of records with the same value for `BangoEntitlementId`.

Currently, reconciliation considers the pair to match only when the `ProductKey`, `MerchantKey`, `ResellerKey`, and `Status` are identical. If any values are different, the result is a mismatch.

If a `BangoEntitlementId` value is present in one set of data and not the other, this is considered a mismatch.

### Reconciliation report format

Bango generates two reports: one for matched entitlements, and one for unmatched entitlements. Each report contains the same columns.

| Column name | Description |
| - | - |
| `BangoEntitlementId` | (UUID string) Unique identifier for an entitlement |
| `BangoUserId` | (number) Unique identifier for the user, defined by Bango |
| `ResellerCustomerId` | (string) Unique identifier for the user, used by the reseller |
| `ProductKey` | (string) Identifier for the merchant service, for example `30_DAYS_MUSIC` |
| `DisplayName` | (string) User-visible string describing the entitlement, for example `30 days Bango music` |
| `MerchantKey` | (string) Identifier for the merchant, for example `BANGO_ENTERTAINMENT` |
| `ResellerKey` | (string) Identifier for the reseller, for example, `MY_RESELLER_KEY` |
| `Status` | (string) Entitlement status, one of `ACTIVE`, `SUSPENDED`, `CANCELLED`, `REVOKED`, `PENDING`, or `FAILED` |
| `ActivationCode` | (string) Merchant-specific code or token used for the entitlement activation |
| `OfferKey` | (string) Entitlement offer, for example `BUNDLE`. The empty string if no offer applies. |
| `DateCreated` | ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp string) When the entitlement record was created |
| `DateActivated` | ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp string or `null`) When the entitlement was activated, or `null` if it has never been activated |
| `DateExpiry` | ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp string or `null`) When the entitlement expires, or `null` if it has no expiry time |
| `DateEnded` | ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp string or `null`) When the entitlement was canceled or revoked, or `null` if it has never been canceled or revoked |
| `DateLastUpdated` | ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp string) When the entitlement record was last updated |
| `IsReconciled` | (`TRUE` or `FALSE`) Whether the entitlement record is reconciled |
| `ReconciliationDescription` | (string) Short description of the reconciliation status: if empty, Bango has not received any record with that `BangoEntitlementId` value |

Here's an example of a matched entitlements report:

```text theme={null}
BangoEntitlementId,BangoUserId,ResellerCustomerId,ProductKey,DisplayName,MerchantKey,ResellerKey,Status,ActivationCode,OfferKey,DateCreated,DateActivated,DateExpiry,DateEnded,DateLastUpdated,IsReconciled,ReconciliationDescription
"da0836e0-9ac2-4bb1-819f-87b39e59c990",123456789,"+4407123456789","30_DAYS_MUSIC","30 days of Bango music","BANGO_ENTERTAINMENT","MY_RESELLER_KEY","ACTIVE","","BUNDLE","2017-01-01T01:02:03Z","2017-01-01T01:02:03Z",NULL,NULL,"2017-01-01T01:02:03Z",TRUE,"Reconciled in file {Filename}"
"387bf1af-7b26-4535-82dd-cb9b9731ae1d",123456789,"+4407123456789","30_DAYS_MUSIC","30 days of Bango music","BANGO_ENTERTAINMENT","MY_RESELLER_KEY","ACTIVE","","BUNDLE","2017-01-16T10:30:05Z","2017-01-16T10:30:05Z",NULL,NULL,"2017-01-16T10:30:05Z",TRUE,"Reconciled in file {Filename}"
"6a841d19-f5eb-4354-bfe1-c7a135b60ab8",123456789,"+4407123456789","30_DAYS_MUSIC","30 days of Bango music","BANGO_ENTERTAINMENT","MY_RESELLER_KEY","CANCELLED","","","2016-12-15 10:30:05","2016-12-15 10:30:05",NULL,"2017-01-16T10:30:05Z","2017-01-16T10:30:05Z",TRUE,"Reconciled in file {Filename}"
"a25100b8-4e0c-4e37-b921-cac9cb1e930f",123456789,"+4407123456789","30_DAYS_MUSIC","30 days of Bango music","BANGO_ENTERTAINMENT","MY_RESELLER_KEY","PENDING","","BUNDLE","2017-01-16T10:30:05Z",NULL,NULL,NULL,"2017-01-16T10:30:05Z",TRUE,"Reconciled in file {Filename}"
```

Here's an example of an unmatched entitlements report:

```text theme={null}
BangoEntitlementId,BangoUserId,ResellerCustomerId,ProductKey,DisplayName,MerchantKey,ResellerKey,Status,ActivationCode,DateCreated,DateActivated,DateExpiry,DateEnded,DateLastUpdated,IsReconciled,ReconciliationDescription
"da0836e0-9ac2-4bb1-819f-87b39e59c990",123456789,"+4407123456789","30_DAYS_MUSIC","30 days of Bango music","BANGO_ENTERTAINMENT","MY_RESELLER_KEY","ACTIVE","","BUNDLE","2017-01-01T01:02:03Z","2017-01-01T01:02:03Z",NULL,NULL,"2017-01-01T01:02:03Z",FALSE,""
"387bf1af-7b26-4535-82dd-cb9b9731ae1d",123456789,"+4407123456789","30_DAYS_MUSIC","30 days of Bango music","BANGO_ENTERTAINMENT","MY_RESELLER_KEY","ACTIVE","","","2017-01-16T10:30:05Z","2017-01-16T10:30:05Z",NULL,NULL,"2017-01-16T10:30:05Z",FALSE,"Entitlement identifier mismatch - received 60_DAYS_MUSIC"
"6a841d19-f5eb-4354-bfe1-c7a135b60ab8",123456789,"+4407123456789","30_DAYS_MUSIC","30 days of Bango music","BANGO_ENTERTAINMENT","MY_RESELLER_KEY","CANCELLED","","BUNDLE","2016-12-15 10:30:05","2016-12-15 10:30:05",NULL,"2017-01-16T10:30:05Z","2017-01-16T10:30:05Z",FALSE,"Status mismatch - received ACTIVE"
"a25100b8-4e0c-4e37-b921-cac9cb1e930f",123456789,"+4407123456789","30_DAYS_MUSIC","30 days of Bango music","BANGO_ENTERTAINMENT","MY_RESELLER_KEY","PENDING","","","2017-01-16T10:30:05Z",NULL,NULL,NULL,"2017-01-16T10:30:05Z",FALSE,""
```
