# 10. Partial Refund

## Partial Refund

<mark style="color:green;">`POST`</mark> `{{Base Address}}/api/paywall/private/refund/partial`

{% hint style="info" %}
**Important**: To use the Partial Refund service, you need to send the '**apikeyprivate**' and '**apiclientprivate**' parameters in the 'Header' section.\
\
[<mark style="color:green;">**PaymentAPI**</mark> ](https://developer.paywall.one/payment-orchestration-integration-document/environment)[<mark style="color:green;">**Address**</mark>](https://developer.paywall.one/payment-orchestration-integration-document/environment)
{% endhint %}

<table><thead><tr><th width="182">Parameter</th><th width="76.33333333333331">Type</th><th width="137">Compulsory</th><th>Description</th></tr></thead><tbody><tr><td>apikeyprivate</td><td>string</td><td>yes</td><td>The Private Key obtained from the merchant panel.</td></tr><tr><td>apiclientprivate</td><td>string</td><td>Yes</td><td>The Private Client obtained from the merchant panel.</td></tr></tbody></table>

**The parameters that need to be sent to the service are as follows:**

<table><thead><tr><th width="238">Parameter</th><th width="124">Type</th><th width="131">Compulsory</th><th>Description</th></tr></thead><tbody><tr><td>MerchantUniqueCode</td><td>string</td><td>Yes</td><td>The MerchantUniqueCode in the request sent for initiating a payment must have the same value. This code is a unique value provided by your side for each transaction. It is used to uniquely identify and track a payment in all Cancel/Refund/Payment Inquiry operations.</td></tr><tr><td>Date</td><td>Date</td><td>Yes</td><td>Transaction date</td></tr><tr><td>Amount</td><td>Decimal</td><td>Yes</td><td>Expected refund amount</td></tr></tbody></table>

{% tabs %}
{% tab title="JSON" %}
{% code overflow="wrap" lineNumbers="true" %}

```json5
{
    "Date": "2023-01-23",
    "MerchantUniqueCode": "12222a222a",
    "Amount": 70
}
```

{% endcode %}
{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

public class Program
{
    private static readonly HttpClient client = new HttpClient();

    private static async Task Main()
    {
        var data = new 
        {
            Date = "2023-01-23",
            MerchantUniqueCode = "12222a222a",
            Amount = 70
        };
        var content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
        content.Headers.Add("apikeyprivate", "%PRIVATEKEY%");
        content.Headers.Add("apiclientprivate", "%PRIVATECLIENT%");

        var response = await client.PostAsync("{{Private Base Address}}/api/paywall/private/refund/partial", content);

        var responseString = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseString);
    }
}
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "net/http"
    "encoding/json"
)

func main() {
    url := "{{Private Base Address}}/api/paywall/private/refund/partial"
    data := map[string]interface{}{
        "Date": "2023-01-23",
        "MerchantUniqueCode": "12222a222a",
        "Amount": 70,
    }
    reqBody, _ := json.Marshal(data)
    
    req, _ := http.NewRequest("POST", url, bytes.NewBuffer(reqBody))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("apikeyprivate", "%PRIVATEKEY%")
    req.Header.Set("apiclientprivate", "%PRIVATECLIENT%")
    
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}

```

{% endtab %}

{% tab title="Java" %}

```java
import java.net.http.HttpClient;
import java.net.http.HttpHeaders;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.http.HttpResponse.BodyHandlers;
import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();

        Map<String, Object> values = new HashMap<String, Object>() {{
            put("Date", "2023-01-23");
            put("MerchantUniqueCode", "12222a222a");
            put("Amount", 70);
        }};

        String requestBody = new ObjectMapper().writeValueAsString(values);

        HttpRequest request = HttpRequest.newBuilder()
                .uri(new URI("{{Private Base Address}}/api/paywall/private/refund/partial"))
                .setHeader("Content-Type", "application/json")
                .setHeader("apikeyprivate", "%PRIVATEKEY%")
                .setHeader("apiclientprivate", "%PRIVATECLIENT%")
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .build();

        HttpResponse<String> response = client.send(request, BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$url = '{{Private Base Address}}/api/paywall/private/refund/partial';
$data = array(
    'Date' => '2023-01-23',
    'MerchantUniqueCode' => '12222a222a',
    'Amount' => 70,
);

$options = array(
    'http' => array(
        'header'  => "Content-type: application/json\r\n" .
                     "apikeyprivate: %PRIVATEKEY%\r\n" . 
                     "apiclientprivate: %PRIVATECLIENT%\r\n",
        'method'  => 'POST',
        'content' => json_encode($data),
    ),
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }

var_dump($result);
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

url = "{{Private Base Address}}/api/paywall/private/refund/partial"
headers = {
    'Content-Type': 'application/json',
    'apikeyprivate': '%PRIVATEKEY%',
    'apiclientprivate': '%PRIVATECLIENT%',
}
data = {
    "Date": "2023-01-23",
    "MerchantUniqueCode": "12222a222a",
    "Amount": 70,
}

response = requests.post(url, headers=headers, data=json.dumps(data))

print(response.json())
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'
require 'json'

uri = URI.parse("{{Private Base Address}}/api/paywall/private/refund/partial")
http = Net::HTTP.new(uri.host, uri.port)

request = Net::HTTP::Post.new(uri.request_uri, {
    'Content-Type' => 'application/json',
    'apikeyprivate' => '%PRIVATEKEY%',
    'apiclientprivate' => '%PRIVATECLIENT%',
})
request.body = {Date: "2023-01-23", MerchantUniqueCode: "12222a222a", Amount: 70}.to_json

response = http.request(request)

puts response.body
```

{% endtab %}

{% tab title="TypeScript" %}

```typescript
import axios from 'axios';

const data = {
    Date: "2023-01-23",
    MerchantUniqueCode: "12222a222a",
    Amount: 70,
};

axios.post('{{Private Base Address}}/api/paywall/private/refund/partial', data, {
    headers: {
        'Content-Type': 'application/json',
        'apikeyprivate': '%PRIVATEKEY%',
        'apiclientprivate': '%PRIVATECLIENT%',
    }
})
.then((response) => {
    console.log(response.data);
})
.catch((error) => {
    console.log(error);
});
```

{% endtab %}

{% tab title="Curl" %}

```sh
curl -X POST "{{Private Base Address}}/api/paywall/private/refund/partial" \
-H "Content-Type: application/json" \
-H "apikeyprivate: %PRIVATEKEY%" \
-H "apiclientprivate: %PRIVATECLIENT%" \
-d '{
    "Date": "2023-01-23",
    "MerchantUniqueCode": "12222a222a",
    "Amount": 70
}'
```

{% endtab %}
{% endtabs %}

**Response from the service:**

<table><thead><tr><th width="156">Parameter</th><th width="98.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td>ErrorCode</td><td>int</td><td>Error code. It returns '0' if the operation is successful.</td></tr><tr><td>Result</td><td>bool</td><td>Returns a true or false value. It returns 'true' if the operation is successful.</td></tr><tr><td>Message</td><td>string</td><td>If the operation fails, this is the specified error message that provides language support based on the 'locale' parameter.</td></tr></tbody></table>

{% tabs %}
{% tab title="JSON" %}
{% code overflow="wrap" lineNumbers="true" %}

```json5
{
    "ErrorCode": 0,
    "Result": true,
    "Message": "Success",
    "Body": null
}
```

{% endcode %}
{% endtab %}
{% endtabs %}
