> This page is for Enterprise.

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

# Change the Status of a Mandate

PATCH https://tts.sit.apib2b.citi.com/citiconnect/sit5/recievablesservices/v1/mandates/status
Content-Type: application/json

This endpoint allows you to change the status of a mandate. A status change should always be performed as a unilateral operation. The status change can only be performed when the mandate is currently active or suspended. Releasing a suspended mandate can only be performed by the party that suspended the mandate.

Reference: https://citi-demo.ferndocs.com/enterprise/enterprises/api-reference/payment-acceptance/direct-debit/e-mandate-service-api/update-mandate-status

## Authentication

- `Authorization` header (bearer token, required) — All CitiConnect APIs use the oAuth2 authentication scheme, which requires a bearer token to authenticate your API call. The Token URL includes the version of authentication used by this API. See the Citi Authentication API reference for information on requesting a token.

## Servers

- `https://tts.sit.apib2b.citi.com/citiconnect/sit5/recievablesservices` (dev gateway url, default)
- `https://tts.sit.apib2b.citi.com/citiconnect/uat1/recievablesservices` (uat gateway url)
- `https://tts.apib2b.citi.com/citiconnect/prod/recievablesservices` (production gateway url)
- `https://tts.sandbox.apib2b.citi.com/citiconnect/sb/recievablesservices` (sandbox gateway url)

## Request

### Query parameters

- `client_id` (string, required) — Unique reference which was shared during CitiConnect API Onboarding (`client_id` which used during OAuth token generation).
- `mandate_identification` (string, required) — Specify unique identification, as assigned by the clearing scheme, to identify the mandate.

### Body (application/json)

This endpoint expects an UpdateMandateDetails.

- `status_request` (StatusRequest, required)
- `request_reason` (RequestReason, required)
- `mandate_status_update` (MandateStatusUpdate, required)

## Response

### 200

OK

- `mandate_acceptance` (MandateResponseMandateAcceptance, optional)

## Errors

### 400 Bad Request Error

Bad Request

- `ref_id` (string, optional) — Unique ID for the Transaction
- `error_detail` (list of ErrorDetails, optional)
- `error_details` (list of ErrorDetails, optional)

### 401 Unauthorized Error

Unauthorized

- `ref_id` (string, optional) — Unique ID for the Transaction
- `error_detail` (list of ErrorDetails, optional)
- `error_details` (list of ErrorDetails, optional)

### 405 Method Not Allowed Error

Method Not Allowed

- `ref_id` (string, optional) — Unique ID for the Transaction
- `error_detail` (list of ErrorDetails, optional)
- `error_details` (list of ErrorDetails, optional)

### 415 Unsupported Media Type Error

Unsupported Media Type

- `ref_id` (string, optional) — Unique ID for the Transaction
- `error_detail` (list of ErrorDetails, optional)
- `error_details` (list of ErrorDetails, optional)

### 500 Internal Server Error

Internal Server Error

- `ref_id` (string, optional) — Unique ID for the Transaction
- `error_detail` (list of ErrorDetails, optional)
- `error_details` (list of ErrorDetails, optional)

## Types

### StatusRequest

- `change` (enum, required) — Specify the status request type - CANC = Cancelled (Cancel a mandate) - SUSP = Suspended (Suspend an active mandate) - RELS = Release (Release a suspended mandate)
  - Allowed values: `CANC`, `SUSP`, `RELS`

### RequestReason

- `code` (enum, required) — Specification of request reason MD16-Requested By Customer MD17-Requested By Initiating Party MD18-Requested By Initiating Party And Customer MD19-Mandate Cancelled Due To Early Settlement MD20-Mandate Expired MD21-Mandate Cancelled Due To Fraud MD22-Mandate Initiation Cancelled MS02-Not Specified Reason Customer MS03-Not Specified Reason Agent Generated CTAM-Mandate suspended due to amendment of the contract CTCA-Mandate suspended due to cancellation of the contract, requested by the debtor CTEX-Mandate suspended due to the contract that expired MCFC-Mandate suspended as final collection took place MCOC-Mandate suspended as the once off collection took place MSUC-Mandate suspended after 7 consecutive unsuccessful collections NARR- Reason is provided as narrative information
  - Allowed values: `MD16`, `MD17`, `MD18`, `MD19`, `MD20`, `MD21`, `MD22`, `MS02`, `MS03`, `NARR`, `CTAM`, `CTCA`, `CTEX`, `MCFC`, `MCOC`, `MSUC`
- `additional_information` (string, optional) — If code is NARR, this parameter is mandatory

### MandateStatusUpdate

- `country` (string, required) — Specify the country code where the mandate request has been originated.Australia = AUHongkong = HKArgentina = ARSEPA = UK

### MandateResponseMandateAcceptance

- `mandate_request_identification` (string, optional) — Specify Unique identification, as assigned by the clearing scheme, to identify the mandate.
- `status` (enum, optional) — Specifies the status of the mandate registration requested.PDNG=PendingRJCT= RejectedCRTD = CreatedACTV = ActiveSUSD = SuspendedCNCD = Cancelled
  - Allowed values: `PDNG`, `RJCT`, `CRTD`, `ACTV`, `SUSD`, `CNCD`

### ErrorDetails

- `code` (string, optional) — Unique ID for the error code.
- `issue` (string, optional) — more details about the issue.
- `action` (string, optional) — Corrective action to be taken to resolve the issue.

## Examples

**Request**

```json
{
  "status_request": {
    "change": "CANC"
  },
  "request_reason": {
    "code": "MD16"
  },
  "mandate_status_update": {
    "country": "AU"
  }
}
```

**Response**

```json
{
  "mandate_acceptance": {
    "mandate_request_identification": "string",
    "status": "PDNG"
  }
}
```

**SDK Code**

```python
import requests

url = "https://tts.sit.apib2b.citi.com/citiconnect/sit5/recievablesservices/v1/mandates/status"

querystring = {"client_id":"4683fd9f-03fe-4268-b5da-93bf8203fd91","mandate_identification":"CRED14243536457658"}

payload = {
    "status_request": { "change": "CANC" },
    "request_reason": { "code": "MD16" },
    "mandate_status_update": { "country": "AU" }
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.patch(url, json=payload, headers=headers, params=querystring)

print(response.json())
```

```javascript
const url = 'https://tts.sit.apib2b.citi.com/citiconnect/sit5/recievablesservices/v1/mandates/status?client_id=4683fd9f-03fe-4268-b5da-93bf8203fd91&mandate_identification=CRED14243536457658';
const options = {
  method: 'PATCH',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"status_request":{"change":"CANC"},"request_reason":{"code":"MD16"},"mandate_status_update":{"country":"AU"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://tts.sit.apib2b.citi.com/citiconnect/sit5/recievablesservices/v1/mandates/status?client_id=4683fd9f-03fe-4268-b5da-93bf8203fd91&mandate_identification=CRED14243536457658"

	payload := strings.NewReader("{\n  \"status_request\": {\n    \"change\": \"CANC\"\n  },\n  \"request_reason\": {\n    \"code\": \"MD16\"\n  },\n  \"mandate_status_update\": {\n    \"country\": \"AU\"\n  }\n}")

	req, _ := http.NewRequest("PATCH", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

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

url = URI("https://tts.sit.apib2b.citi.com/citiconnect/sit5/recievablesservices/v1/mandates/status?client_id=4683fd9f-03fe-4268-b5da-93bf8203fd91&mandate_identification=CRED14243536457658")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"status_request\": {\n    \"change\": \"CANC\"\n  },\n  \"request_reason\": {\n    \"code\": \"MD16\"\n  },\n  \"mandate_status_update\": {\n    \"country\": \"AU\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.patch("https://tts.sit.apib2b.citi.com/citiconnect/sit5/recievablesservices/v1/mandates/status?client_id=4683fd9f-03fe-4268-b5da-93bf8203fd91&mandate_identification=CRED14243536457658")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"status_request\": {\n    \"change\": \"CANC\"\n  },\n  \"request_reason\": {\n    \"code\": \"MD16\"\n  },\n  \"mandate_status_update\": {\n    \"country\": \"AU\"\n  }\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PATCH', 'https://tts.sit.apib2b.citi.com/citiconnect/sit5/recievablesservices/v1/mandates/status?client_id=4683fd9f-03fe-4268-b5da-93bf8203fd91&mandate_identification=CRED14243536457658', [
  'body' => '{
  "status_request": {
    "change": "CANC"
  },
  "request_reason": {
    "code": "MD16"
  },
  "mandate_status_update": {
    "country": "AU"
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://tts.sit.apib2b.citi.com/citiconnect/sit5/recievablesservices/v1/mandates/status?client_id=4683fd9f-03fe-4268-b5da-93bf8203fd91&mandate_identification=CRED14243536457658");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"status_request\": {\n    \"change\": \"CANC\"\n  },\n  \"request_reason\": {\n    \"code\": \"MD16\"\n  },\n  \"mandate_status_update\": {\n    \"country\": \"AU\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "status_request": ["change": "CANC"],
  "request_reason": ["code": "MD16"],
  "mandate_status_update": ["country": "AU"]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://tts.sit.apib2b.citi.com/citiconnect/sit5/recievablesservices/v1/mandates/status?client_id=4683fd9f-03fe-4268-b5da-93bf8203fd91&mandate_identification=CRED14243536457658")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PATCH"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```