# Overview of Sandbox project
source: https://developer.mastercard.com/india-online-dispute-resolution/documentation/tutorials-and-guides/sandbox-access-tutorial/index.md

## Introduction {#introduction}

The India Online Dispute Resolution (IODR) guide walks through the steps required to create a project and how to gain access to the Sandbox environment.

## Create a project {#create-a-project}

1. Select the [Projects](https://developer.mastercard.com/dashboard) menu.
2. On the **My projects** page, click **Create new project** . ![](https://static.developer.mastercard.com/content/india-online-dispute-resolution/uploads/create_new_project.png)

## Add the project details {#add-the-project-details}

Create a new project with IODR APIs and begin Sandbox testing.

1. In the **About the project** section, enter the project details.   
   a. In the **Project name** box, enter a name of the project.   
   b. If you are creating a project on behalf of a client, select **Yes** ; otherwise, select **No** . ![](https://static.developer.mastercard.com/content/india-online-dispute-resolution/uploads/project_details_on_behalf_of_client.png)
2. In the **Select API service** section, enter the API service details.   
   a. In the **Select your API service** list, select **India Online Dispute Resolution** .   
   b. In the **Commercial countries** list, select **India**.
3. Click **Proceed**.

## Add the service details {#add-the-service-details}

1. In the **Client Type** list, select an issuer, acquirer, or TPAPs as a client.
2. In the **Customer ID** box, enter a value of the company ID. ![](https://static.developer.mastercard.com/content/india-online-dispute-resolution/uploads/add_service_details.png)
3. Click **Proceed**.

## Add the project credentials {#add-the-project-credentials}

Use the Keystore password with the .p12 file and client ID for OAuth authentication. These credentials give you access to the sandbox service in this project.

1. In the **Key alias** box, enter a unique value to identify the key.
2. In the **Keystore password** box, enter a password for keystore. ![](https://static.developer.mastercard.com/content/india-online-dispute-resolution/uploads/add_project_credentials.png)
3. Click **Proceed**.

## Add more credentials {#add-more-credentials}

Payload encryption and decryption require both client and Mastercard encryption keys.

1. In the **Key alias** box, enter a unique value to identify the key.
2. In the **Keystore password** box, enter a password for keystore. ![](https://static.developer.mastercard.com/content/india-online-dispute-resolution/uploads/additional_credentails_details.png)
3. Click **Create Project**.

## Create your sandbox project {#create-your-sandbox-project}

Your sandbox project has been successfully created. The Mastercard Developers portal has generated your project keys, which are ready for download.

1. To save the project key, click the **Download key file** .   

   Save this key in a safe location.

2. To view the project summary, click **Open project**.

Note: Downloading the project keys file enables the **Open project** button.

After confirmation, you will receive an email that includes the provisioning request and keys.

![](https://static.developer.mastercard.com/content/india-online-dispute-resolution/uploads/creating_your_project.png)

### Step 6 - View project summary {#step-6---view-project-summary}

**Summary page**

The Summary page displays that your sandbox project has been successfully created.
![](https://static.developer.mastercard.com/content/india-online-dispute-resolution/uploads/project_summary.png)

**Sandbox page**

The Sandbox page displays the credential details.
![](https://static.developer.mastercard.com/content/india-online-dispute-resolution/uploads/sandbox_credentials.png)

## Mock Data Warehouse (DWH) API {#mock-data-warehouse-dwh-api}

This documentation outlines the behavior and structure of the Mock Data Warehouse (DWH) API in the Sandbox environment for B2B integrations. It is designed to simulate real-world transaction data retrieval and status validation workflows for complaint resolution and testing.

### Request Flow {#request-flow}

API consumers initiate a request to fetch transaction details using complaint identifiers.  

The initial response always returns a status of `PENDING`, indicating that the data retrieval process has started.

### Asynchronous Status Update {#asynchronous-status-update}

A background process updates the transaction status asynchronously.  

Consumers must use the **Transaction Status API** to poll for the latest status.

### Mock Data Behavior {#mock-data-behavior}

The sandbox randomly returns **success** or **failure** scenarios to simulate real-world variability.  

This helps developers test **error handling** and **retry logic** effectively.

## Transaction Details API {#transaction-details-api}

The Transaction Details API retrieves transaction data from the DWH for a given complaint. This API is designed to support complaint resolution workflows by providing structured access to transaction records.

**Endpoint**: /transactions/details

**Behavior**

* Initial status: Always return PENDING upon request.
* Mock data: Simulates both success and failure scenarios randomly.
* Background processing: An asynchronous process fetches actual data from the DWH.
* Status monitoring: Use the Transaction Status API to check for updates.

**Request payload (encrypted)**

```java
{
  "retrievalReferenceNumber": "435465768997",
  "banknetReferenceNumber": "400000000",
  "approvalCode": "00231W",
  "acquirerICA": "00000023910",
  "trackingNumber": "X0NNECBZBU3U"
}
```

**Response payload (encrypted)**

```java
{
  "status": "PENDING",
  "description": "Transaction status validation still in progress",
  "transactionStatus": null,
  "banknetReferenceNumber": null,
  "acquirerName": null
}
```

## Transaction Status API {#transaction-status-api}

The Transaction Status API provides the current status of a transaction data retrieval request initiated through the Transaction Details API.

**Endpoint**: /transactions/status

**Request payload**

```java
tracking_number=X0NNECBZBU3U
```

**Response payload - success**

You must decrypt the response to access the transaction status.

```java
{
  "status": "COMPLETED",
  "description": "Transaction status validation is completed.",
  "transactionStatus": "Only Authorization found.",
  "banknetReferenceNumber": "400000000",
  "acquirerName": "IODR API ACQ"
}

{
  "status": "COMPLETED",
  "description": "Transaction status validation is completed.",
  "transactionStatus": "Authorization with Reversal found.",
  "banknetReferenceNumber": "400000000",
  "acquirerName": "IODR API ACQ"
}

{
  "status": "COMPLETED",
  "description": "Transaction status validation is completed.",
  "transactionStatus": "Authorization and Clearing found.",
  "banknetReferenceNumber": "400000000",
  "acquirerName": "IODR API ACQ"
}
```

**Response payload - failure**

```java
{
  "status": "FAILED",
  "description": "Transaction status call failed due to No matching record identified.",
  "transactionStatus": null,
  "banknetReferenceNumber": null,
  "acquirerName": null
}

{
  "status": "FAILED",
  "description": "Transaction status call failed due to multiple matching record identified.",
  "transactionStatus": null,
  "banknetReferenceNumber": null,
  "acquirerName": null
}
```

## Update User Complaint API {#update-user-complaint-api}

The Update User Complaint API modifies complaint details using the complaint tracking number.

When a dispute is routed by the issuer to the acquirer queue, the dispute status is randomly updated by a scheduler. By the next day (IST 11:55 PM), the dispute is automatically returned to the issuer queue.

**Endpoint**: /complaints

**Request payload**

```java
{
    "trackingNumber":"ARDBVFMEQEQV",
    "complaintStatus":"SENT_TO_ACQUIRER",
    "comments":"ARDBVFMEQEQV-test update API comment SENT_TO_ACQUIRER"
}
```

**Response payload**

```Java
{
    "trackingNumber": "ARDBVFMEQEQV",
    "description": "Complaint updated successfully."
}
```

