---
title: "Dati di test"
description: "Scenari di test in sandbox per Equity Crowdfunding: creazione della campagna, investimento, chiusura e cashout, con gli header comuni a tutte le chiamate."
url: "https://docs.fabrick.com/payment-institution/banking-as-a-service/equity-crowdfunding/test-data/"
language: "it"
---

# Dati di test

> Prerequisiti
>
> - Portale onboarded con `portalId` attivo.
> - Test company fornita da Fabrick (in SANDBOX) con cash account “shortcuttato” sul conto del portale, per consentire la verifica end‑to‑end (investimento → chiusura campagna → cashout). [\[developers…abrick.com\]](https://developers.fabrick.com/hc/it/sections/360002896793-Banking-as-a-Service)
>
> Headers comuni
>
> Authorization: Bearer *ACCESSTOKENSANDBOX*
>
> X-Portal-Id: *PORTAL_ID*
>
> Content-Type: application/json

## 1) Creazione Campagna

```http
curl -X POST https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/campaigns \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTAL_ID>" \
  -H "Content-Type: application/json" \
  -d '{
        "companyId": "USR03VRXZ1726000668",
        "name": "Test Campaign E2E",
        "description": "Campagna di test integrazione",
        "targetAmountMin": 100000,
        "targetAmountMax": 120000,
        "currency": "EUR",
        "expectedClosingDate": "2026-02-28",
        "portalSuccessFee": {
          "fixedAmount": 1200,
          "variableAmountPercentage": 0.15
        }
      }'
```

Note

- `companyId` è rilasciato da Fabrick a valle dell’onboarding della test company.
- `portalSuccessFee` (v4.0) opzionale: usato per detrarre le fee al momento del cashout.

### 2) Apertura Campagna (stato OPEN)

```text
curl -X PUT https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/campaigns/<CAMPAIGNID>/open \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTALID>"
```

Una campagna aperta consente la creazione di ordini di investimento.

### 3) Creazione Investitore

```text
curl -X POST https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/investors \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTALID>" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "Mario",
        "surname": "Rossi",
        "businessName": null,
        "fiscalCode": "RSSMRA81L04A859O",
        "type": "NATURALPERSON",
        "address": "Via dei Fori Imperiali, 34",
        "postalCode": "00100",
        "city": "Roma",
        "country": "Italia",
        "email": "mario.rossi@example.it",
        "phone": "+393471234567"
      }'
```

- Supportati investitori persone fisiche (`NATURAL_PERSON`) e giuridiche (`LEGAL_PERSON`).

---

### 4) Creazione Ordine

```text
curl -X POST https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/orders \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTALID>" \
  -H "Content-Type: application/json" \
  -d '{
        "investorId": "<INVESTORID>",
        "companyId": "USR03VRXZ1726000668",
        "campaignId": "<CAMPAIGNID>",
        "investorAccount": {
          "iban": "IT08I0129518672180944821099",
          "holderName": "Mario",
          "holderSurname": "Rossi",
          "holderBusinessName": null
        },
        "totalAmount": 1100,
        "orderAmount": 1000,
        "feeAmount": 100,
        "currency": "EUR",
        "channel": "MONEYTRANSFER",
        "description": "Order TEST-E2E",
        "portalOrderCode": "TEST-E2E-001",
        "portalOrderDatetime": "2026-02-03T14:15:12.234Z",
        "portalInvestorCode": "RSSMRA81L04A859O",
        "portalCompanyCode": "CMP-TST",
        "portalCampaignCode": "CMP-TST-2026"
      }'
```

- `totalAmount = orderAmount + feeAmount` (obbligatorio).
- `channel` può essere `MONEY_TRANSFER` o carta; l’esempio usa bonifico.
- La risposta contiene `orderId` che userai nei passaggi successivi.

### 5) Imposta Ordine in WAITING (in attesa pagamento)

```text
curl -X PUT https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/orders/<ORDERID>/waiting \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTALID>"
```

Questo step prepara il sistema a ricevere il money‑in; è tipico per pagamenti via bonifico o carte autorizzate.

### 6) (SANDBOX) Simulazione Money‑In e verifica stato pagamento

> In SANDBOX, il setup di test collega il conto cassa della test company al conto del portale. Dopo aver generato un money‑in coerente (importo e riferimento `orderId`), verifica gli esiti con gli endpoint di pagamento dell’ordine.

Recupero money‑outs dell’ordine

```text
curl -X GET "https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/orders/<ORDERID>/payment/moneyouts" \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTALID>"
```

Esempio di payload:

```json
{

  "moneyoutId": "MO181951400555230W9V5001485",
  "companyId": "USR02KZLN1827000201",
  "status": "AVAILABLE",
  "amount": 810.68,
  "cashoutAvailableAmount": 810.68,
  "currency": "EUR",
  "createdDatetime": "2019-05-30T18:51:40.000Z",
  "executedDatetime": null
}
```

Queste informazioni confermano il routing dell’`orderAmount` verso l’account campagna e (se previsto) della fee verso l’account fee del portale.

Recupero eventuale Refund dell’ordine

```text
curl -X GET "https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/orders/<ORDERID>/payment/refund" \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTALID>"
```

Esempio di payload:

```json
{
  "refundId": "MB0287617555553OEKR12000041",
  "status": "EXECUTED",
  "createdDatetime": "2018-06-28T02:26:28.000Z",
  "executedDatetime": "2018-06-28T06:00:25.000Z",
  "amount": 40,
  "currency": "EUR"
}
```

I refund sono generati automaticamente nei casi previsti (ordine cancellato dopo accounting, finalizzazione campagna FAIL).

### 7) Chiusura Campagna (stato CLOSED)

```text
curl -X PUT https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/campaigns/<CAMPAIGNID>/closed \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTALID>"
```

La chiusura non muove fondi di per sé, ma impedisce nuovi ordini. Gli ordini WAITING possono ancora ricevere money‑in.

### 8) Finalizzazione SUCCESS (cashout + rimborsi)

Quando la campagna ha raggiunto almeno `targetAmountMin`, invoca la finalizzazione SUCCESS specificando:

- `ordersToExecute`: ordini da aggregare nel cashout (obbligatorio, ≥1)
- `ordersToUndo`: ordini da rimborsare (opzionale)
- `orderToSplit`: eventuale ordine da splittare per aderire esattamente alla soglia minima

```text
curl -X PUT https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/campaigns/<CAMPAIGNID>/finalize/success \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTALID>" \
  -H "Content-Type: application/json" \
  -d '{
        "ordersToExecute": [
          "TRX4387623841827947",
          "TRX4387623841827124"
        ],
        "ordersToUndo": [
          "TRX2309823841827364"
        ],
        "orderToSplit": {
          "orderId": "TRX2309823842182736",
          "companyAmountToExecute": 600,
          "companyAmountToUndo": 400,
          "feeAmountToExecute": 60,
          "feeAmountToUndo": 40
        }
      }'
```

- Se definita una portal success fee, sarà detratta dal totale prima del cashout verso l’azienda.
- La chiamata ritorna un `cashoutId` per consultare i dettagli del cashout.

Recupero dettagli Cashout

```text
curl -X GET https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/campaigns/cashouts/<CASHOUTID> \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTALID>"
```

### 9) Finalizzazione FAIL (rimborso integrale)

Se la campagna non ha raggiunto `targetAmountMin`, invoca la finalizzazione FAIL:

```text
curl -X PUT https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/campaigns/<CAMPAIGNID>/finalize/failure \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTALID>"
```

L’effetto è il rimborso di tutti gli ordini sottoscritti; i rimborsi sono eseguiti sullo stesso canale del money‑in (carta → storno carta, bonifico → bonifico di ritorno).

### 10) Casi particolari: trasferimenti non identificati

Recupero lista “unidentified transfers” (ad es. bonifico senza `orderId`, `orderId` errato o `totalAmount` non coerente).\
Questi vengono respinti automaticamente e restituiti al mittente.

```text
curl -X GET https://api.sandbox.fabrick.com/equity-crowdfunding/v4.0/unidentified-transfers \
  -H "Authorization: Bearer <ACCESSTOKENSANDBOX>" \
  -H "X-Portal-Id: <PORTAL_ID>"
```

Esempio di payload:

```json
{
  "unidentifiedTransferId": "UTR170309AHMC07172815000001",
  "amount": 120,
  "currency": "EUR",
  "description": "TRXWRONGID",
  "payerName": "John Doe",
  "status": "RECEIVED",
  "type": "UNIDENTIFIED",
  "receivedDatetime": "2019-06-24T09:39:19Z",
  "refundedDatetime": null
}
```

## Suggerimenti per l’esecuzione dei test

- Pianifica le prove: la disponibilità delle test company è limitata (una per settimana). Coordina il team per rispettare la finestra utile.
- Coerenza dati: assicurati che `totalAmount`, `orderAmount`, `feeAmount` e `channel` siano coerenti tra ordine e pagamento; evita di generare “unidentified transfers”.
- Verifiche post‑pagamento: consulta `moneyouts`, `refund` e i dettagli di cashout per validare l’intero flusso.
