# Elenco dilazioni

Ritorna l'elenco delle dilazioni registrate, con il numero totale dei record restituiti.
Ogni voce contiene i dati principali della pratica: importo, numero di rate, stato, cadenza e riferimenti a cliente ed esercente.
L'identificativo `_id` di ogni voce si usa con l'endpoint [Dettaglio dilazione](/riferimento-api/dilazioni/dettaglio-dilazione).

## Richiesta Http

```bash
GET https://api.jatapay.it/dilazioni
```

## Parametri di query

Nessun parametro è obbligatorio. I risultati si filtrano passando il nome del campo come parametro di query (`campo=valore`); i filtri presenti vengono applicati in combinazione tra loro.

| Parametro | Richiesto | Tipo |  Descrizione |
| -------------- | -------------- | -------------- |-------------- |
| page   | No |  integer  |  Numero della pagina dei risultati, a partire da 0   |
| limit   | No |  integer  |  Numero di risultati restituiti per pagina   |
| sort   | No |  string  |  Nome di uno dei campi filtrabili su cui ordinare i risultati   |
| dir   | No |  string  |  Direzione dell'ordinamento applicata a `sort` (ad esempio `asc` o `desc`)   |

### Campi filtrabili

Ogni campo della dilazione è anche un parametro di filtro e può essere usato in `sort`; il valore va indicato nello stesso formato restituito dalla risposta.

| Campo | Tipo | Descrizione | Esempio |
| -------------- | -------------- | -------------- | -------------- |
| _id | string | Identificativo della dilazione | `_id=6ad9e1811d7bc659f6125db0` |
| importo | integer | Importo totale che verrà pagato, in centesimi di euro | `importo=44400` |
| rate | integer | Numero di pagamenti previsti | `rate=12` |
| data_inizio | string | Data della prima rata (`AAAA-MM-GG` o `AAAA-MM-GGThh:mm`) | `data_inizio=2026-10-22T12:12` |
| data_fine | string | Data dell'ultima rata (`AAAA-MM-GG` o `AAAA-MM-GGThh:mm`) | `data_fine=2027-09-01T03:00` |
| stato | string | `attiva`, `insoluta`, `insolvente`, `inattiva` o `conclusa` | `stato=attiva` |
| note | string | Note della pratica | `note=` |
| tipo | string | Tipo di dilazione (ad esempio `credit`) | `tipo=credit` |
| stripe | object | Dati del gateway Stripe | — |
| ip_address | string | Indirizzo IP da cui è stata creata la dilazione | `ip_address=18.197.173.184` |
| descrizione_prodotto | string | Descrizione del prodotto o servizio finanziato | `descrizione_prodotto=` |
| multisafepay | object | Dati del gateway MultiSafepay | — |
| vendor | string | Gateway di pagamento utilizzato (ad esempio `stripe`) | `vendor=stripe` |
| callback_url | string | URL di ritorno del pagamento | `callback_url=` |
| rate_differenziate | boolean | Indica se le rate hanno importi diversi | `rate_differenziate=false` |
| data_inserimento | string | Data di inserimento della dilazione (`AAAA-MM-GG` o `AAAA-MM-GGThh:mm`) | `data_inserimento=2026-10-22T10:12` |
| date_differenziate | boolean | Indica se le rate hanno scadenze diverse | `date_differenziate=false` |
| numero | integer | Numero progressivo della dilazione | `numero=3146` |
| numero_txt | string | Numero progressivo in formato testuale | `numero_txt=3146` |
| payment_method | string | Metodo di addebito: `sdd` o `card` | `payment_method=sdd` |
| base | integer | Importo base della dilazione, in centesimi di euro | `base=0` |
| cliente | string | Identificativo del cliente (collection `clienti`) | `cliente=6a218ca738c301f9262b9017` |
| esercente | string | Identificativo dell'esercente (collection `esercenti`) | `esercente=6a55ecdfb180394de3e29aa5` |
| no_billing | boolean | Esclude la dilazione dalla fatturazione | `no_billing=true` |
| metadata | string | Metadati aggiuntivi | `metadata=` |
| consenso_debit | boolean | Consenso all'addebito diretto | `consenso_debit=true` |
| link_to_pay | boolean | Indica se la dilazione è un link di pagamento condivisibile | `link_to_pay=false` |
| cadenza | object | Cadenza delle rate: `valore` (integer) e `periodo` (string, ad esempio `month`) | — |
| contratto | object | Contratto della pratica: `pdf` (string, identificativo del documento) | — |
| iban | string | IBAN di addebito (collection `iban`); con `payment_method` = `card` si usa `carta` | `iban=6ad9e188ee0a0643973ffca4` |
| carta | string | Carta di credito (collection `carte_di_credito`), alternativa a `iban` | `carta=6ad1f2b3c4d5e6f708192a3f` |
| pagamenti | array | Rate collegate, con lo schema `Pagamento` | — |

### Esempio di ricerca

```bash
GET https://api.jatapay.it/dilazioni?page=0&limit=25&sort=data_inserimento&dir=desc&stato=attiva
```

**shell**

```bash
curl -X GET "https://api.jatapay.it/dilazioni" \
  -H "Authorization: Bearer IL_TOKEN_DI_ACCESSO"
```

**PHP**

```php
$token = 'IL_TOKEN_DI_ACCESSO';

$url = curl_init("https://api.jatapay.it/dilazioni");
$authorization = "Authorization: Bearer ".$token;
curl_setopt($url, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($url, CURLOPT_RETURNTRANSFER, true);
curl_setopt($url, CURLOPT_HTTPHEADER, array(
    $authorization
));

$result = curl_exec($url);
curl_close($url);
$api_response = json_decode($result);
```

**Python**

```python
import requests

token = "IL_TOKEN_DI_ACCESSO"

headers = {
    "Authorization": "Bearer " + token
}

response = requests.get("https://api.jatapay.it/dilazioni", headers=headers)

print(response.status_code)
print(response.json())
```

**Node.js**

```javascript
const token = 'IL_TOKEN_DI_ACCESSO';

const response = await fetch('https://api.jatapay.it/dilazioni', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${token}`
  }
});

console.log(response.status, await response.json());
```

**Go**

```go
package main

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

func main() {
	const token = "IL_TOKEN_DI_ACCESSO"

	req, err := http.NewRequest("GET", "https://api.jatapay.it/dilazioni", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+token)

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()

	data, err := io.ReadAll(res.Body)
	if err != nil {
		panic(err)
	}

	fmt.Println(res.StatusCode, string(data))
}
```

**.NET**

```csharp
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        const string token = "IL_TOKEN_DI_ACCESSO";

        using var client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

        var response = await client.GetAsync("https://api.jatapay.it/dilazioni");

        Console.WriteLine((int)response.StatusCode);
        Console.WriteLine(await response.Content.ReadAsStringAsync());
    }
}
```

**Java**

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws Exception {
        String token = "IL_TOKEN_DI_ACCESSO";

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.jatapay.it/dilazioni"))
                .header("Authorization", "Bearer " + token)
                .GET()
                .build();

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

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

## Risposta

La risposta contiene `data`, l'array delle dilazioni della pagina richiesta con lo schema `Dilazione`, e `count` con il numero di record.
Ogni voce contiene tutti i campi del modello dati, gli stessi documentati in *Campi filtrabili*; `pagamenti` elenca i pagamenti figli della dilazione.

```json
{
  "data": [
    {
      "_id": "6ad9e1811d7bc659f6125db0",
      "importo": 44400,
      "rate": 12,
      "data_inizio": "2026-10-22T12:12",
      "data_fine": "2027-09-01T03:00",
      "stato": "attiva",
      "note": "",
      "tipo": "credit",
      "stripe": {},
      "ip_address": "18.197.173.184",
      "descrizione_prodotto": "",
      "multisafepay": {},
      "vendor": "stripe",
      "callback_url": "",
      "rate_differenziate": false,
      "data_inserimento": "2026-10-22T10:12",
      "date_differenziate": false,
      "numero": 3146,
      "numero_txt": "3146",
      "payment_method": "sdd",
      "base": 0,
      "cliente": "6a218ca738c301f9262b9017",
      "esercente": "6a55ecdfb180394de3e29aa5",
      "no_billing": true,
      "metadata": "",
      "consenso_debit": true,
      "link_to_pay": false,
      "cadenza": {
        "valore": 1,
        "periodo": "month"
      },
      "contratto": {
        "pdf": "6ad9e1821d7bc659f6125dbd"
      },
      "iban": "6ad9e188ee0a0643973ffca4",
      "pagamenti": [
        {
          "_id": "6ae07f601d7bc659f6125dcc",
          "tipo": "rata_dilazione",
          "importo": 3700,
          "dilazione": "6ad9e1811d7bc659f6125db0",
          "numero": 1,
          "numero_txt": "1",
          "totale_rate": 12,
          "data_pagamento": "",
          "stato": "unpaid",
          "payment_method": "sdd",
          "cliente": "6a218ca738c301f9262b9017",
          "esercente": "6a55ecdfb180394de3e29aa5"
        }
      ]
    }
  ],
  "count": 1
}
```

## Errori

| Codice | Descrizione |
| -------------- | -------------- |
| 400 | Richiesta non valida, parametri mancanti o non coerenti |
| 401 | Token mancante, scaduto o non valido |
| 403 | Ruolo non abilitato all'operazione |
| 500 | Errore interno del server |

Il corpo della risposta di errore contiene sempre `error_code` (il codice simbolico dell'errore, ad esempio `bad_request`, oppure il codice HTTP corrispondente) e `error_message` con il messaggio descrittivo:

```json
{
  "error_code": "bad_request",
  "error_message": "Messaggio di errore"
}
```

:::warning
La richiesta deve avere l'header `Authorization: Bearer <token>` e, quando è presente un corpo, l'header `Content-Type: application/json`.
:::
