Passa al contenuto principale

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]

Headers comuni

Authorization: Bearer ACCESSTOKENSANDBOX

X-Portal-Id: PORTAL_ID

Content-Type: application/json

1) Creazione Campagna

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)

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

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

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)

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

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:

{

"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

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:

{
"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)

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
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

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:

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.

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:

{
"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.