Dati di test
Prerequisiti
- Portale onboarded con
portalIdattivo.- 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).channelpuò essereMONEY_TRANSFERo carta; l’esempio usa bonifico.- La risposta contiene
orderIdche 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
cashoutIdper 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,feeAmountechannelsiano coerenti tra ordine e pagamento; evita di generare “unidentified transfers”. - Verifiche post‑pagamento: consulta
moneyouts,refunde i dettagli di cashout per validare l’intero flusso.