---
title: "Capture"
description: "Cattura in tutto o in parte una transazione autorizzata con payment/capture: catture multiple, settlementID, verifica dell'esito e scenari di errore."
url: "https://docs.fabrick.com/payment-hub-and-orchestra/ecommerce/payments-management/capture/"
language: "it"
---

# Capture

L’autorizzazione riserva un importo sullo strumento di pagamento del buyer, riducendone temporaneamente la disponibilità. L’importo autorizzato può essere catturato, avviando il processo che porterà all’accredito del merchant, oppure liberato tramite cancellazione e reso nuovamente disponibile al buyer secondo le tempistiche dell’Issuer o del provider del metodo di pagamento.

La capture permette di catturare totalmente o parzialmente l’importo di una transazione autorizzata. La capture può essere richiesta separatamente dall’autorizzazione solo se lo ShopLogin è configurato con autorizzazione e movimentazione separate. Se la configurazione prevede la movimentazione contestuale, l’importo viene catturato automaticamente a seguito dell’autorizzazione positiva. La configurazione della separazione è spiegata in questa pagina [getting_started/#moto](https://docs.fabrick.com/payment-hub-and-orchestra/ecommerce/introduction/getting-started/#moto).

Se la richiesta di movimentazione non può essere completata immediatamente per problemi tecnici, la transazione assume lo stato PRE. In questo caso Fabrick, all'inizio del giorno successivo, riprova automaticamente le catture. Se il nuovo tentativo ha esito positivo, sulla transazione viene registrato un evento MOV; in caso contrario la transazione viene sottoposta a ulteriori verifiche da parte dei team Fabrick.

Maggiori dettagli su stato ed eventi di una transazione sulla pagina di [Transaction state ](https://docs.fabrick.com/payment-hub-and-orchestra/ecommerce/payments-management/transaction-state/).

> **Importante**
>
> Una transazione con **`transactionResult = APPROVED`** e **`transactionState = MOV`** implica che una cattura è stata richiesta, ma l'effettivo accredito va verificato con chi procede alla liquidazione.

Alcuni metodi di pagamento, previa abilitazione, permettono di richiedere più di una cattura fino a raggiungere l’importo autorizzato. [Multiple capture ](https://docs.fabrick.com/payment-hub-and-orchestra/ecommerce/payments-management/capture/#multiple-capture).

---

## Multiple Capture

Intendiamo con "Multiple Captures" o "Multicapture" (MOV multiple) la funzionalità che consente, su una singola autorizzazione (AUT), di eseguire una o più catture (MOV) fino a raggiungere l’importo autorizzato.

Una AUT può quindi essere seguita da una o più MOV, ognuna indipendente dalle altre.

## Capture e settlementID

Quando la funzionalità è attiva, su ogni autorizzazione (AUT) è possibile eseguire:

- Una cattura (MOV) totale che copra l'importo autorizzato

- Una o più MOV parziali la cui somma può:

  - coprire l'importo autorizzato
  - oppure lasciare una parte non catturata che verrà liberata alla scadenza dell'autorizzazione

- Una cancellazione totale dell'autorizzazione (solo se non sono ancora state effettuate capture)

Ogni richiesta di cattura deve avere un identificativo univoco `settlementID` per singola autorizzazione.

Il `settlementID`:

- può essere passato in fase di richiesta tramite API (max 20 caratteri)
- può essere valorizzato da Dashboard (`ID cattura`, max 20 caratteri)
- se non fornito, viene assegnato automaticamente dal sistema

Nel caso di assegnazione automatica, l’identificativo è composto da:

- BankTransactionID
- "\_"
- numero progressivo della cattura

Ad esempio, prima e seconda cattura della transazione con `BankTransactionID` = 123 avranno come `settlementID` rispettivamente "123_1" e "123_2".

## Refund e settlementID

Su ogni MOV è possibile eseguire:

- Uno storno (STO) totale che copra l’importo della singola cattura
- Uno o più STO parziali la cui somma può coprire l'importo della stessa cattura

Gli storni sono sempre riferiti alla singola cattura (MOV) e non all’autorizzazione complessiva. Per farlo, in caso di più catture, è necessario indicare quale cattura stornare valorizzando il settlementID.

Per le richieste di cattura:

- il `settlementID` deve essere univoco per autorizzazione
- richieste con lo stesso `settlementID` vengono rigettate

Per gli storni:

- non esiste un vincolo di unicità sul `settlementID`
- è possibile effettuare più richieste di storno sulla stessa cattura
- le richieste vengono accettate se la somma degli importi è minore o uguale all’importo catturato

```text
Qui un esempio:
AUT: 160.00€
MOV1: 80.00€ – settlementID = Capture_01
MOV2: 18.50€ – settlementID = Capture_02
MOV3: 60.00€ - settlementID = Capture_03
STO1: 50.00€ – settlementID = Capture_01
STO2: 18.50€ – settlementID = Capture_02
STO3: 30.00€ – settlementID = Capture_03
STO4: 30.00€ – settlementID = Capture_01
STO5: 30.00€ – settlementID = Capture_03

In questo esempio:
- l’autorizzazione è suddivisa in più capture (MOV)  
- ogni MOV è indipendente  
- gli storni sono effettuati sulle singole capture  
- la somma degli storni su ogni MOV non supera l’importo della relativa cattura
```

Qui la response di una detail contenente questi movimenti. Lo stato è STO poiché tutti gli importi catturati sono stati stornati totalmente.

**Request**

```http
GET /api/v1/payment/detail/{paymentID}
Host (sandbox): sandbox.gestpay.net
Host (produzione): ecomms2s.sella.it
Authorization: apikey ****************
Content-Type: application/json
```

**Response**

```json
{
  "error": {
    "code": "0",
    "description": "request correctly processed"
  },
  "payload": {
    "transactionType": "detail",
    "transactionResult": "APPROVED",
    "transactionState": "STO",
    "transactionErrorCode": "0",
    "transactionErrorDescription": "Transazione correttamente effettuata",
    "bankTransactionID": "123",
    "shopTransactionID": "OrderID001",
    "shopTransactionID_2": "",
    "authorizationCode": "123456",
    "paymentID": "1234567891234",
    "currency": "EUR",
    "country": "ITALIA",
    "company": "VISA",
    "tdLevel": "FULL",
    "threeDS": {
      "authenticationResult": {
        "authenticationLevel": "2C",
        "authenticationStatus": "Y",
        "authStatusReason": "",
        "challengeResultTransStatus": "",
        "XID": "8329a454-e1e9-42ad-a5dd-123456",
        "AV": "MTIzNDU2Nzg5MDA5OABCDEFG",
        "ECI": "05",
        "AVAlgorithm": "",
        "threeDsVersion": "2.2.0"
      },
      "transDetails": {
        "authData": "",
        "authMethod": "02",
        "authTimeStamp": "202608201219",
        "acsID": "da8baf41-978f-441d-9a18-ABCDE"
      }
    },
    "events": [
      {
        "event": {
          "eventtype": "AUT",
          "eventamount": "160.00",
          "eventdate": "20/08/26 12:19:40",
          "eventARN": "",
          "eventID": "",
          "eventReferred": ""
        }
      },
      {
        "event": {
          "eventtype": "STO",
          "eventamount": "30.00",
          "eventdate": "20/08/26 12:26:53",
          "eventARN": "",
          "eventID": "",
          "eventReferred": "Capture_03"
        }
      },
      {
        "event": {
          "eventtype": "MOV",
          "eventamount": "80.00",
          "eventdate": "20/08/26 12:21:42",
          "eventARN": "",
          "eventID": "Capture_01",
          "eventReferred": ""
        }
      },
      {
        "event": {
          "eventtype": "STO",
          "eventamount": "30.00",
          "eventdate": "20/08/26 12:28:31",
          "eventARN": "",
          "eventID": "",
          "eventReferred": "Capture_01"
        }
      },
      {
        "event": {
          "eventtype": "STO",
          "eventamount": "30.00",
          "eventdate": "20/08/26 12:28:59",
          "eventARN": "",
          "eventID": "",
          "eventReferred": "Capture_03"
        }
      },
      {
        "event": {
          "eventtype": "STO",
          "eventamount": "50.00",
          "eventdate": "20/08/26 12:25:04",
          "eventARN": "",
          "eventID": "",
          "eventReferred": "Capture_01"
        }
      },
      {
        "event": {
          "eventtype": "STO",
          "eventamount": "18.50",
          "eventdate": "20/08/26 12:25:42",
          "eventARN": "",
          "eventID": "",
          "eventReferred": "Capture_02"
        }
      },
      {
        "event": {
          "eventtype": "MOV",
          "eventamount": "60.00",
          "eventdate": "20/08/26 12:24:13",
          "eventARN": "",
          "eventID": "Capture_03",
          "eventReferred": ""
        }
      },
      {
        "event": {
          "eventtype": "MOV",
          "eventamount": "18.50",
          "eventdate": "20/08/26 12:23:47",
          "eventARN": "",
          "eventID": "Capture_02",
          "eventReferred": ""
        }
      }
    ],
    "buyer": {
      "name": "",
      "email": ""
    },
    "risk": {
      "riskResponseCode": "",
      "riskResponseDescription": ""
    },
    "customInfo": null,
    "alertCode": "",
    "alertDescription": "",
    "cvvPresent": "TRUE",
    "dcc": null,
    "maskedPAN": "",
    "paymentMethod": "VISA",
    "productType": "Credit",
    "token": "40DD1KZB0QJD3101",
    "tokenExpiryMonth": "05",
    "tokenExpiryYear": "27",
    "tokenDetails": {
      "TokenValue": "40DD1KZB0QJD3101",
      "TokenExpiryMonth": "05",
      "TokenExpiryYear": "27",
      "TokenProvider": "AXERVE",
      "CardDetails": {
        "CardSuffix": "3101",
        "CardExpiryMonth": "05",
        "CardExpiryYear": "27",
        "CardHolderName": null
      },
      "CardAssets": {
        "CardArt": {
          "Type": null,
          "MediaContents": null,
          "Height": null,
          "Width": null
        },
        "BrandLogo": {
          "Type": null,
          "MediaContents": null,
          "Height": null,
          "Width": null
        }
      }
    },
    "fraudPrevention": {
      "check": "FALSE",
      "state": "",
      "description": "",
      "order": ""
    },
    "automaticOperation": {
      "type": "MOV",
      "date": "20/08/26 00:00:00",
      "amount": "158.50"
    }
  }
}
```

---

## Verifica dell'esito della cattura

Per verificare se una richiesta di cattura è stata completata correttamente, come appena mostrato, è necessario interrogare l'API `payment/detail` e analizzare gli eventi restituiti in `payload.events`.

In particolare:

- La presenza di un evento `PRE` indica che un tentativo di cattura è stato avviato ma non ancora completato.
- La presenza di un evento `MOV` indica che la cattura è stata eseguita.

Per maggiori informazioni sugli stati della transazione e sul significato dei singoli eventi, fare riferimento alla pagina [Transaction State ](https://docs.fabrick.com/payment-hub-and-orchestra/ecommerce/payments-management/transaction-state/).

---

## Payload

### POST payment/capture

Refund payload > [POST payment/refund](https://docs.fabrick.com/payment-hub-and-orchestra/ecommerce/payments-management/refund/#post-paymentrefund).

**Request**

```http
POST /api/v1/payment/capture
Host (sandbox): sandbox.gestpay.net
Host (produzione): ecomms2s.sella.it
Authorization: apikey ****************
```

```json
{
  "shopLogin":"GESPAY12345",
  "amount":"0.01",
  "currency":"EUR",
  "bankTransactionID":"",
  "shopTransactionID":"",
  "settlementID":"",
  "paymentID":"1234567891234"
}
```

**Response**

```json
{
  "error": {
    "code": "0",
    "description": "request correctly processed"
  },
  "payload": {
    "transactionType": "capture",
    "transactionResult": "OK",
    "shopTransactionID": "OrderID001",
    "bankTransactionID": "123",
    "paymentID": "1234567891234"
  }
}
```

### POST payment/capture with settlementID

Refund payload with settlementID > [POST payment/refund with settlementID](https://docs.fabrick.com/payment-hub-and-orchestra/ecommerce/payments-management/refund/#post-refund-payload-with-settlementid).

**Request**

```http
POST /api/v1/payment/capture
Host (sandbox): sandbox.gestpay.net
Host (produzione): ecomms2s.sella.it
Authorization: apikey ****************
Content-Type: application/json
```

```json
{
  "shopLogin":"GESPAY12345",
  "amount":"18.50",
  "currency":"EUR",
  "paymentID":"1234567891234",
  "settlementID":"Capture_02"
}
```

**Response**

```json
{
  "error": {
    "code": "0",
    "description": "request correctly processed"
  },
  "payload": {
    "transactionType": "capture",
    "transactionResult": "OK",
    "shopTransactionID": "OrderID001",
    "bankTransactionID": "123",
    "paymentID": "1234567891234"
  }
}
```

---

## Scenari di errore

### Error code 8014

Se viene richiesto di catturare più di quanto autorizzato, si ottiene quanto segue:

**Response**

```json
{
  "error": {
    "code": "8014",
    "description": "Imp.mov. > Imp.aut"
  },
  "payload": {}
}
```

### Error code 2019

- Se viene richiesto di catturare con un settlementID con più di 20 caratteri.
- Se viene richiesto di catturare con un settlementID già utilizzato in una cattura precedente per la stessa autorizzazione. (se l'importo richiesto, sommato a quanto già catturato, non supera l'autorizzato)
- Se viene richiesto di catturare una transazione già cancellata. Maggiori dettagli nella pagina dedicata alla [cancel](https://docs.fabrick.com/payment-hub-and-orchestra/ecommerce/payments-management/cancel/).

si ottiene quanto segue:

**Response**

```json
{
  "error": {
    "code": "2019",
    "description": "Transazione non movimentabile"
  },
  "payload": {}
}
```

### Error code 2011

- Se viene richiesto di catturare una transazione non esistente, si ottiene quanto segue:

**Response**

```json
{
  "error": {
    "code": "2011",
    "description": "Transaction not found"
  },
  "payload": {}
}
```

### Error code 1144

- Se viene richiesto di catturare una transazione senza indicare l'identificativo della transazione (paymentID), si ottiene quanto segue:

**Response**

```json
{
  "error": {
    "code": "1144",
    "description": "Campo obbligatorio non valorizzato"
  },
  "payload": {}
}
```

---

## Assistenza

**Fabrick**

- **Status page**: [https://status.fabrick.com/](https://status.fabrick.com/)
- **Support**: [https://landing.fabrick.com/fabrick-dashboard-support](https://landing.fabrick.com/fabrick-dashboard-support)
