> This page is for Direct Executions.

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

# Direct debits

GET https://clients.infonite.tech/api/executions/results/{execution_id}/financial/v1/direct-debits

Standing charges against your customer's accounts.

Each entry carries the creditor, the mandate reference, the account charged, the amounts seen and the periodicity the institution reports. Field by field in [Direct debits](/guides/data-models/banking/direct-debits).

**The fastest read of somebody's fixed costs.** Rent, utilities, insurance, subscriptions — the recurring commitments, without parsing every transaction of every account to find them.

Features are chosen when the execution **starts**, not here. An execution that did not ask for `direct_debits_read` answers `204`, and the only way to get the data is to run another one.

| Status | Meaning                                                                                                                           |
| :----- | :-------------------------------------------------------------------------------------------------------------------------------- |
| `200`  | The mandates.                                                                                                                     |
| `202`  | `feature_not_ready` — `direct_debits_read` is still running. **Only this family waits**: the ones that already closed answer now. |
| `204`  | The execution never asked for `direct_debits_read`. No body.                                                                      |
| `404`  | No execution with that id for your application, or it has been deleted.                                                           |

**Server to server only.** This call is authorised with your application secret: it belongs in your backend, never in a browser, a mobile app or anything your customer can read.

Reference: https://infonite.dev/direct-executions/api-reference/direct-executions-api/fetching-the-results/financial-data/direct-executions-v-1-results-financial-direct-debits

## Authentication

- `X-APP-SECRET` header (required) — Application Secret

## Servers

- `https://clients.infonite.tech/api` (Legacy, default)
- `https://clients.infonite.io/api` (Production)

## Request

### Path parameters

- `execution_id` (string, required) — The execution, as the acceptance response returned it.

## Response

### 200

**200 OK**The SEPA mandates charged against the accounts: who collects, how often, and how much the last charges were. It is the cheapest read of somebody’s recurring commitments. **An empty list is an answer, not a gap**: the feature ran and the source reported none.

- `list of SEPADirectDebitSchema`

### 202

**202 Accepted**`feature_not_ready`: `direct_debits_read` is still running. **You do not have to wait for the whole execution** — every family answers as soon as its own feature closes, so a slow source does not hold up the ones that already finished. The SAME code carries the RECORDS when this family HAS finished and the execution has not: `202` means the run is still going, and the body says which of the two you are holding — `detail` when there is nothing yet, the records when there is.

- `detail` (string, required) — Error message

## Errors

### 404 Not Found Error

**404 Not Found**No execution with that id for your application, or it has been deleted.

- `detail` (string, required) — Error message

### 422 Unprocessable Entity Error

Validation Error

- `detail` (list of ValidationError, optional)

## Types

### SEPADirectDebitSchema

A SEPA direct debit authorization, with its recent charges and supporting documents.

- `id` (string, required) — Product ID for the current execution. It may change between executions.
- `product` ("direct_debit", required)
- `sub_family` ("direct_debit:sepa", required)
- `fetch_date` (string, required) — Date this product was fetched.
- `account` (SepaDirectDebitSchemaAccount, required) — The customer's account the debit is charged to.
- `status` (enum, required) — Status of the direct debit authorization.
  - Allowed values: `unknown`, `active`, `cancelled`, `suspended`, `expired`
- `customer_segment` (enum, required) — Whether the account belongs to a personal or a business relationship.
  - Allowed values: `not_assigned`, `personal`, `business`, `corporate`, `private`, `retail`
- `beneficiary` (BeneficiarySchema, required) — Who collects the debit.
- `payer` (PayerSchema, required) — Who pays the debit.
- `transactions` (list of DirectDebitTransactionSchema, required) — Recent charges of this debit, as reported by the bank.
- `debit_reference` (string, optional) — Mandate/debit reference, as the bank reports it.
- `attachments` (list of FileAttachmentSchema, optional, default: []) — Supporting documents of the debit — e.g. the receipt of the most recent charge. Each entry's `id` downloads the file through the attachments endpoint of the API that returned this debit.

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)
- `input` (any, optional)
- `ctx` (ValidationErrorCtx, optional)

### SepaDirectDebitSchemaAccount

The customer's account the debit is charged to.

- `type`: `clabe` (CLABE)
  - `control_digits` (string, required) — Control digit
  - `entity_code` (string, required) — Bank code
  - `entity_country` (string, required) — Bank Country
  - `entity_office` (string, required) — Bank office
  - `masked` (string, required) — Partial Clabe
  - `value` (string, required) — Clave Bancaria Estandarizada
- `type`: `generic` (Generic Identifier)
  - `value` (string, required) — Identifier
  - `control_digits` (string, optional) — Control digits
  - `entity_code` (string, optional) — Entity code
  - `entity_country` (string, optional) — Entity country
  - `entity_office` (string, optional) — Entity office
- `type`: `iban` (IBAN)
  - `control_digits` (string, required) — Control digits
  - `entity_code` (string, required) — Bank code
  - `entity_country` (string, required) — Bank Country
  - `entity_office` (string, required) — Bank office
  - `masked` (string, required) — Partial IBAN
  - `value` (string, required) — International Bank Account Number

### BeneficiarySchema

Who collects the debit.

- `identifier` (string, optional) — Beneficiary identifier, as the bank reports it.
- `name` (string, optional) — Beneficiary name.
- `account` (BeneficiarySchemaAccount, optional) — Account the beneficiary collects into, when the bank discloses it.
- `tax_id` (string, optional) — Beneficiary tax ID, when the bank discloses it.

### PayerSchema

Who pays the debit.

- `name` (string, optional) — Payer name.
- `identifier` (string, optional) — Payer identifier, as the bank reports it.

### DirectDebitTransactionSchema

One charge of the direct debit: when it was issued and paid, and for how much.

- `status` (enum, required) — Status of this charge.
  - Allowed values: `unknown`, `pending`, `booked`, `cancelled`, `failed`, `reversed`
- `issue_date` (string, optional) — Date the charge was issued.
- `payment_date` (string, optional) — Date the charge was paid.
- `concept` (string, optional) — Concept of the charge, as the bank reports it.
- `amount` (infonite__schemas__utils__CurrencyAmountSchema__1, optional) — Amount of the charge.

### FileAttachmentSchema

A document attached to a result — an official report, a receipt, an invoice... The entry describes the file; its bytes are downloaded with `id`, through the attachments endpoint of the API that returned the result.

- `sub_family` (enum, required) — What kind of document this is (e.g. `attachment:es-tgss-life-report`).
  - Allowed values: `attachment:attachment`, `attachment:supplier_invoice`, `attachment:client_invoice`, `attachment:es-tgss-life-report`, `attachment:es-tgss-contribution-base-report`, `attachment:es-aeat-model-100`, `attachment:es-cirbe-report`, `attachment:sepa-direct-debit-bill`, `attachment:person-certified-photo`
- `id` (string, required) — Attachment identifier — what the attachments endpoint of the API that returned the result takes to download the file.
- `content_name` (string, required) — File name of the document.
- `content_type` (string, required) — MIME type of the content.
- `metadata` (map from string to any, required) — Extra facts about the document, as simple key-value pairs (e.g. its official verification code, its issue date).
- `product` ("attachment", optional, default: attachment) — The product type identifier. Always `attachment`.
- `content_hash` (string, optional) — Fingerprint of the content, to verify its integrity.

### ValidationErrorLocItems

- string
- integer

### ValidationErrorCtx

### BeneficiarySchemaAccount

Account the beneficiary collects into, when the bank discloses it.

- `type`: `clabe` (CLABE)
  - `control_digits` (string, required) — Control digit
  - `entity_code` (string, required) — Bank code
  - `entity_country` (string, required) — Bank Country
  - `entity_office` (string, required) — Bank office
  - `masked` (string, required) — Partial Clabe
  - `value` (string, required) — Clave Bancaria Estandarizada
- `type`: `generic` (Generic Identifier)
  - `value` (string, required) — Identifier
  - `control_digits` (string, optional) — Control digits
  - `entity_code` (string, optional) — Entity code
  - `entity_country` (string, optional) — Entity country
  - `entity_office` (string, optional) — Entity office
- `type`: `iban` (IBAN)
  - `control_digits` (string, required) — Control digits
  - `entity_code` (string, required) — Bank code
  - `entity_country` (string, required) — Bank Country
  - `entity_office` (string, required) — Bank office
  - `masked` (string, required) — Partial IBAN
  - `value` (string, required) — International Bank Account Number

### infonite__schemas__utils__CurrencyAmountSchema__1

A monetary amount together with its currency.

- `currency` (InfoniteSchemasUtilsCurrencyAmountSchema1Currency, required) — Three-letter ISO currency code — or `***` when the source did not disclose the currency.
- `amount` (string, required) — Decimal number with 2 digits precision

### InfoniteSchemasUtilsCurrencyAmountSchema1Currency

Three-letter ISO currency code — or `***` when the source did not disclose the currency.

- string
- "***"

## Examples

### A monthly bill charged to an account

**Response**

```json
[
  {
    "id": "6aa3d8c7f1b2a3d4e5f60721",
    "product": "direct_debit",
    "sub_family": "direct_debit:sepa",
    "fetch_date": "2026-09-12T10:17:44+00:00",
    "account": {
      "type": "iban",
      "control_digits": "45",
      "entity_code": "2100",
      "entity_country": "ES",
      "entity_office": "0418",
      "masked": "ES91 **** **** **** **** 1332",
      "value": "ES9121000418450200051332"
    },
    "status": "active",
    "customer_segment": "personal",
    "beneficiary": {
      "identifier": "ES04000A81948077",
      "name": "ENDESA ENERGIA SAU"
    },
    "payer": {
      "name": "ELIGIO LUNA BARRAGÁN"
    },
    "transactions": [
      {
        "status": "booked",
        "concept": "Factura electricidad agosto",
        "amount": {
          "currency": "EUR",
          "amount": "78.42"
        }
      },
      {
        "status": "booked",
        "concept": "Factura electricidad julio",
        "amount": {
          "currency": "EUR",
          "amount": "71.05"
        }
      }
    ],
    "debit_reference": "MND-2021-00041832"
  }
]
```

**SDK Code**

```python A monthly bill charged to an account
import requests

url = "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits"

headers = {"X-APP-SECRET": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript A monthly bill charged to an account
const url = 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits';
const options = {method: 'GET', headers: {'X-APP-SECRET': '<apiKey>'}};

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

```go A monthly bill charged to an account
package main

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

func main() {

	url := "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-APP-SECRET", "<apiKey>")

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

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

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

}
```

```ruby A monthly bill charged to an account
require 'uri'
require 'net/http'

url = URI("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits")

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

request = Net::HTTP::Get.new(url)
request["X-APP-SECRET"] = '<apiKey>'

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

```java A monthly bill charged to an account
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits")
  .header("X-APP-SECRET", "<apiKey>")
  .asString();
```

```php A monthly bill charged to an account
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits', [
  'headers' => [
    'X-APP-SECRET' => '<apiKey>',
  ],
]);

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

```csharp A monthly bill charged to an account
using RestSharp;

var client = new RestClient("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits");
var request = new RestRequest(Method.GET);
request.AddHeader("X-APP-SECRET", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift A monthly bill charged to an account
import Foundation

let headers = ["X-APP-SECRET": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

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()
```

### This family has not finished

**Response**

```json
{
  "detail": "feature_not_ready"
}
```

**SDK Code**

```python This family has not finished
import requests

url = "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits"

headers = {"X-APP-SECRET": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript This family has not finished
const url = 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits';
const options = {method: 'GET', headers: {'X-APP-SECRET': '<apiKey>'}};

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

```go This family has not finished
package main

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

func main() {

	url := "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-APP-SECRET", "<apiKey>")

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

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

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

}
```

```ruby This family has not finished
require 'uri'
require 'net/http'

url = URI("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits")

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

request = Net::HTTP::Get.new(url)
request["X-APP-SECRET"] = '<apiKey>'

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

```java This family has not finished
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits")
  .header("X-APP-SECRET", "<apiKey>")
  .asString();
```

```php This family has not finished
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits', [
  'headers' => [
    'X-APP-SECRET' => '<apiKey>',
  ],
]);

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

```csharp This family has not finished
using RestSharp;

var client = new RestClient("https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits");
var request = new RestRequest(Method.GET);
request.AddHeader("X-APP-SECRET", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift This family has not finished
import Foundation

let headers = ["X-APP-SECRET": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://clients.infonite.tech/api/executions/results/6aa3d8b418d1c5dc9a8e3d36/financial/v1/direct-debits")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

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()
```