Vai al contenuto
BillMate

API di BillMate

L’API di BillMate è gratuita e permette a un client o a uno script tuo di leggere e gestire i tuoi gruppi, le spese e i pagamenti. Ogni utente genera le proprie chiavi dal profilo.

Per iniziare

  1. Accedi a BillMate, apri Profilo → Chiavi API e crea una chiave (sola lettura o lettura e scrittura). Copiala subito: non verrà più mostrata.
  2. Invia la chiave nell’header Authorization di ogni richiesta:
    curl 'https://billmate.it/api/me' \
      -H 'Authorization: Bearer bm_YOUR_KEY'
  3. Le risposte sono JSON. Gli importi sono interi in unità minori (centesimi).

Chiavi e permessi

Non disponibile con le chiavi

Per sicurezza le chiavi non possono gestire altre chiavi, sessioni, metodi di pagamento cifrati, inviti, eliminazione dell’account né l’area admin. Gli endpoint non elencati qui rispondono 403 API_KEY_FORBIDDEN.

Convenzioni

Limiti di utilizzo

Fino a 240 richieste al minuto per utente, di cui al massimo 90 scritture. Oltre il limite la risposta è 429 con l’header Retry-After. L’uso è gratuito e senza quote giornaliere.

Errori

Gli errori hanno uno status HTTP e un corpo JSON {"error": {"code": "…", "details": …}}.

HTTPcodeDescrizione
401UNAUTHORIZEDChiave mancante, non valida, scaduta o revocata.
403API_KEY_READ_ONLYLa chiave è di sola lettura e la richiesta scrive.
403API_KEY_FORBIDDENEndpoint non disponibile con le chiavi API.
403FORBIDDENL’utente non ha i permessi per l’azione (es. modificare la spesa di un altro).
403LEGAL_REQUIREDL’utente deve accettare i documenti aggiornati dall’app.
404NOT_FOUNDRisorsa inesistente o non visibile all’utente.
409CONFLICTConflitto di stato (es. expectedVersion non aggiornata).
422VALIDATIONDati non validi: details.fields indica i campi.
429RATE_LIMITEDTroppe richieste: attendi details.retryAfterSec secondi.

Endpoint

Account e dati di riferimento

GET/api/mePermesso: sola lettura

Profilo dell’utente della chiave

Esempio

curl -X GET 'https://billmate.it/api/me' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "id": "47542df6-597a-45b4-ab18-816c4b538265",
  "name": "Anna",
  "email": "anna@example.com",
  "avatarUrl": null,
  "locale": "it",
  "defaultCurrency": "EUR",
  "onboarded": true,
  "createdAt": "2026-10-21T15:11:20.346Z"
}

GET/api/metaPermesso: sola lettura

Valute abilitate, categorie e limiti

Dati di riferimento per creare spese: valute (con decimali), categorie di piattaforma e del gruppo, e il tasso suggerito tra due valute.

Parametri

CampoTipoDescrizione
groupId querystring (uuid)Include anche le categorie personalizzate di questo gruppo.
from querystringValuta di partenza per il tasso suggerito.max 3
to querystringValuta di arrivo per il tasso suggerito.max 3

Esempio

curl -X GET 'https://billmate.it/api/meta' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "currencies": [
    {
      "code": "EUR",
      "name": "Euro",
      "symbol": "€",
      "decimals": 2,
      "enabled": true
    }
  ],
  "categories": [
    {
      "id": "c1…",
      "key": "food",
      "name": null,
      "labels": {
        "it": "Cibo",
        "en": "Food"
      },
      "icon": "utensils",
      "color": "#c2410c"
    }
  ],
  "rate": null
}

GET/api/dashboardPermesso: sola lettura

Riepilogo: totali, gruppi, amici e attività recente

Esempio

curl -X GET 'https://billmate.it/api/dashboard' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "totals": [
    {
      "currency": "EUR",
      "owedToYou": 1500,
      "youOwe": 0,
      "net": 1500
    }
  ],
  "groups": [
    "…"
  ],
  "friends": [
    "…"
  ],
  "friendCount": 1,
  "incomingRequests": 0,
  "activity": [
    "…"
  ],
  "unread": 0
}

GET/api/balancesPermesso: sola lettura

Saldi totali, per amico e per gruppo

Importi in unità minori. Un valore positivo significa che ti devono dei soldi, negativo che ne devi tu.

Esempio

curl -X GET 'https://billmate.it/api/balances' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "totals": [
    {
      "currency": "EUR",
      "owedToYou": 1500,
      "youOwe": 0,
      "net": 1500
    }
  ],
  "friends": {
    "b93e456c-f17f-4d42-a36f-96f75dad14f3": [
      {
        "currency": "EUR",
        "amountMinor": 1500
      }
    ]
  },
  "groups": {
    "d19d0200-ea0e-4d0a-a899-2b96bf06ac03": {
      "currency": "EUR",
      "net": 1500
    }
  }
}

GET/api/activityPermesso: sola lettura

Registro delle attività

Parametri

CampoTipoDescrizione
before querystringData ISO 8601: restituisce solo attività precedenti (paginazione, 50 per volta).

Esempio

curl -X GET 'https://billmate.it/api/activity' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "items": [
    {
      "id": "a1…",
      "type": "expense_added",
      "entityType": "expense",
      "entityId": "1a7fed19-c0b0-4607-aef2-8422b592dc14",
      "groupId": "d19d0200-ea0e-4d0a-a899-2b96bf06ac03",
      "data": {
        "description": "Cena in Trastevere",
        "amountMinor": 4000,
        "currency": "EUR"
      },
      "createdAt": "2026-10-21T15:11:20.735Z",
      "actor": {
        "id": "47542df6-597a-45b4-ab18-816c4b538265",
        "name": "Anna",
        "avatarUrl": null
      }
    }
  ]
}

Gruppi

GET/api/groupsPermesso: sola lettura

Elenco dei tuoi gruppi

Parametri

CampoTipoDescrizione
archived querystring`true` per i gruppi archiviati (predefinito: `false`).true | false

Esempio

curl -X GET 'https://billmate.it/api/groups' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "items": [
    {
      "id": "d19d0200-ea0e-4d0a-a899-2b96bf06ac03",
      "name": "Weekend a Roma",
      "type": "trip",
      "currency": "EUR",
      "archivedAt": null,
      "role": "owner",
      "memberCount": 2,
      "members": [
        {
          "id": "47542df6-597a-45b4-ab18-816c4b538265",
          "name": "Anna",
          "avatarUrl": null
        },
        {
          "id": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
          "name": "Luca",
          "avatarUrl": null
        }
      ],
      "myBalanceMinor": 1500
    }
  ]
}

POST/api/groupsPermesso: scrittura

Crea un gruppo

Corpo della richiesta

CampoTipoObbligatorioDescrizione
namestringsìNome del gruppo (max 60 caratteri).max 60
typestringnoTipo di gruppo.trip | home | couple | event | family | other · default "other"
currencystringnoValuta del gruppo (ISO 4217, predefinita EUR).default "EUR"
notesobjectnoNote facoltative.
simplifyDebtsbooleannoSemplifica i debiti in meno pagamenti (predefinito: true).default true
memberIdsstring (uuid)[]noAmici da aggiungere subito (devono essere già tuoi amici).max 50

Esempio

curl -X POST 'https://billmate.it/api/groups' \
  -H 'Authorization: Bearer bm_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Weekend a Roma","type":"trip","currency":"EUR","simplifyDebts":true}'

Risposta 201

{
  "id": "d19d0200-ea0e-4d0a-a899-2b96bf06ac03"
}

GET/api/groups/{id}Permesso: sola lettura

Dettaglio di un gruppo, con membri e saldi

Parametri

CampoTipoDescrizione
id pathstring (uuid)Id della risorsa.

Esempio

curl -X GET 'https://billmate.it/api/groups/{id}' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "group": {
    "id": "d19d0200-ea0e-4d0a-a899-2b96bf06ac03",
    "name": "Weekend a Roma",
    "type": "trip",
    "currency": "EUR",
    "simplifyDebts": true,
    "archivedAt": null
  },
  "myRole": "owner",
  "members": [
    {
      "userId": "47542df6-597a-45b4-ab18-816c4b538265",
      "name": "Anna",
      "role": "owner"
    }
  ],
  "balances": {
    "currency": "EUR",
    "simplified": true,
    "net": [
      {
        "userId": "47542df6-597a-45b4-ab18-816c4b538265",
        "amountMinor": 1500
      },
      {
        "userId": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
        "amountMinor": -1500
      }
    ],
    "transfers": [
      {
        "from": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
        "to": "47542df6-597a-45b4-ab18-816c4b538265",
        "amountMinor": 1500
      }
    ],
    "totalSpentMinor": 4000,
    "settledUp": false
  }
}

PATCH/api/groups/{id}Permesso: scrittura

Modifica un gruppo

Tutti i campi sono facoltativi; servono i permessi di modifica del gruppo. Restituisce il dettaglio aggiornato.

Parametri

CampoTipoDescrizione
id pathstring (uuid)Id della risorsa.

Corpo della richiesta

CampoTipoObbligatorioDescrizione
namestringnomax 60
typestringnotrip | home | couple | event | family | other
currencystringno
notesobjectno
simplifyDebtsbooleanno
policyobjectno

Esempio

curl -X PATCH 'https://billmate.it/api/groups/{id}' \
  -H 'Authorization: Bearer bm_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Weekend a Napoli"}'

DELETE/api/groups/{id}Permesso: scrittura

Elimina un gruppo

Solo il proprietario, e solo scrivendo il nome esatto del gruppo in `confirmName`.

Parametri

CampoTipoDescrizione
id pathstring (uuid)Id della risorsa.

Corpo della richiesta

CampoTipoObbligatorioDescrizione
confirmNamestringsì

Esempio

curl -X DELETE 'https://billmate.it/api/groups/{id}' \
  -H 'Authorization: Bearer bm_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"confirmName":"Weekend a Roma"}'

Risposta 200

{
  "ok": true
}

Spese

GET/api/expensesPermesso: sola lettura

Elenco delle spese visibili

Paginato (`page`, `limit` fino a 100). La risposta include `users` con i nomi delle persone citate.

Parametri

CampoTipoDescrizione
groupId querystring (uuid)Solo spese di questo gruppo.
friendId querystring (uuid)Solo spese tra te e questo amico.
personId querystring (uuid)Solo spese a cui partecipa questa persona.
categoryId querystring (uuid)Solo questa categoria.
q querystringRicerca testuale nella descrizione e nelle note.max 100
from querystringData minima (AAAA-MM-GG).
to querystringData massima (AAAA-MM-GG).
status querystring`active` (predefinito), `deleted` o `all`.active | deleted | all · default "active"
kind querystring`expense` o `refund`.expense | refund
page queryintegerPagina, da 1.1–1000 · default 1
limit queryintegerElementi per pagina (1–100, predefinito 30).1–100 · default 30

Esempio

curl -X GET 'https://billmate.it/api/expenses' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "items": [
    {
      "id": "1a7fed19-c0b0-4607-aef2-8422b592dc14",
      "groupId": "d19d0200-ea0e-4d0a-a899-2b96bf06ac03",
      "groupName": "Weekend a Roma",
      "kind": "expense",
      "description": "Cena in Trastevere",
      "notes": null,
      "amountMinor": 4000,
      "currency": "EUR",
      "baseCurrency": "EUR",
      "fxRate": "1.00000000",
      "amountBaseMinor": 4000,
      "category": null,
      "expenseDate": "2026-10-21",
      "splitMethod": "equal",
      "createdBy": "47542df6-597a-45b4-ab18-816c4b538265",
      "createdAt": "2026-10-21T15:11:20.630Z",
      "updatedAt": "2026-10-21T15:11:20.630Z",
      "deletedAt": null,
      "version": 1,
      "payments": [
        {
          "userId": "47542df6-597a-45b4-ab18-816c4b538265",
          "paidMinor": 4000
        }
      ],
      "splits": [
        {
          "userId": "47542df6-597a-45b4-ab18-816c4b538265",
          "owedMinor": 2000,
          "inputValue": null
        },
        {
          "userId": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
          "owedMinor": 2000,
          "inputValue": null
        }
      ],
      "myNetMinor": 2000,
      "canEdit": true,
      "canDelete": true
    }
  ],
  "hasMore": false,
  "page": 1,
  "users": {
    "47542df6-597a-45b4-ab18-816c4b538265": {
      "id": "47542df6-597a-45b4-ab18-816c4b538265",
      "name": "Anna",
      "avatarUrl": null
    },
    "b93e456c-f17f-4d42-a36f-96f75dad14f3": {
      "id": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
      "name": "Luca",
      "avatarUrl": null
    }
  }
}

POST/api/expensesPermesso: scrittura

Crea una spesa

Restituisce il dettaglio della spesa creata. Importi sempre in unità minori. Per un invio sicuro da riprovare usa `clientId`.

Corpo della richiesta

CampoTipoObbligatorioDescrizione
groupIdobjectnoGruppo della spesa; assente o null per una spesa tra amici fuori gruppo.
descriptionstringsìDescrizione breve (max 140 caratteri).max 140
notesobjectnoNote facoltative (max 1000 caratteri).
amountMinorintegersìImporto totale in unità minori (centesimi): 4000 = 40,00. Deve essere maggiore di zero.0–9999999999999
currencystringsìCodice ISO 4217 della valuta in cui è stata pagata la spesa (es. EUR).
fxRateobjectnoTasso verso la valuta del gruppo, solo se le valute differiscono e non c’è un tasso noto.
categoryIdobjectnoCategoria (id da GET /api/meta).
expenseDatestringsìData della spesa (AAAA-MM-GG).
splitMethodstringsìMetodo di divisione: equal, exact, percent, shares, adjust o items.equal | exact | percent | shares | adjust | items
paymentsobject[]sìChi ha pagato e quanto (la somma deve coincidere con amountMinor).max 50
participantsobject[]sìChi partecipa alla divisione; `value` serve per exact (importo), percent (percentuale ×100), shares (quote) e adjust.max 50
itemsobject[]noVoci dello scontrino, solo con splitMethod=items.max 60
clientIdobjectnoUUID generato dal client: rende la creazione idempotente (un secondo invio con lo stesso id non duplica la spesa).

Esempio

curl -X POST 'https://billmate.it/api/expenses' \
  -H 'Authorization: Bearer bm_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"groupId":"d19d0200-ea0e-4d0a-a899-2b96bf06ac03","description":"Cena in Trastevere","amountMinor":4000,"currency":"EUR","expenseDate":"2026-10-21","splitMethod":"equal","payments":[{"userId":"47542df6-597a-45b4-ab18-816c4b538265","paidMinor":4000}],"participants":[{"userId":"47542df6-597a-45b4-ab18-816c4b538265"},{"userId":"b93e456c-f17f-4d42-a36f-96f75dad14f3"}]}'

Risposta 201

{
  "expense": {
    "id": "1a7fed19-c0b0-4607-aef2-8422b592dc14",
    "groupId": "d19d0200-ea0e-4d0a-a899-2b96bf06ac03",
    "groupName": "Weekend a Roma",
    "kind": "expense",
    "description": "Cena in Trastevere",
    "notes": null,
    "amountMinor": 4000,
    "currency": "EUR",
    "baseCurrency": "EUR",
    "fxRate": "1.00000000",
    "amountBaseMinor": 4000,
    "category": null,
    "expenseDate": "2026-10-21",
    "splitMethod": "equal",
    "createdBy": "47542df6-597a-45b4-ab18-816c4b538265",
    "createdAt": "2026-10-21T15:11:20.630Z",
    "updatedAt": "2026-10-21T15:11:20.630Z",
    "deletedAt": null,
    "version": 1,
    "payments": [
      {
        "userId": "47542df6-597a-45b4-ab18-816c4b538265",
        "paidMinor": 4000
      }
    ],
    "splits": [
      {
        "userId": "47542df6-597a-45b4-ab18-816c4b538265",
        "owedMinor": 2000,
        "inputValue": null
      },
      {
        "userId": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
        "owedMinor": 2000,
        "inputValue": null
      }
    ],
    "myNetMinor": 2000,
    "canEdit": true,
    "canDelete": true
  },
  "attachments": [],
  "users": {
    "47542df6-597a-45b4-ab18-816c4b538265": {
      "id": "47542df6-597a-45b4-ab18-816c4b538265",
      "name": "Anna",
      "avatarUrl": null
    },
    "b93e456c-f17f-4d42-a36f-96f75dad14f3": {
      "id": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
      "name": "Luca",
      "avatarUrl": null
    }
  }
}

GET/api/expenses/{id}Permesso: sola lettura

Dettaglio di una spesa

Include voci, rimborsi, allegati (metadati) e cronologia delle revisioni.

Parametri

CampoTipoDescrizione
id pathstring (uuid)Id della risorsa.

Esempio

curl -X GET 'https://billmate.it/api/expenses/{id}' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "expense": {
    "id": "1a7fed19-c0b0-4607-aef2-8422b592dc14",
    "groupId": "d19d0200-ea0e-4d0a-a899-2b96bf06ac03",
    "groupName": "Weekend a Roma",
    "kind": "expense",
    "description": "Cena in Trastevere",
    "notes": null,
    "amountMinor": 4000,
    "currency": "EUR",
    "baseCurrency": "EUR",
    "fxRate": "1.00000000",
    "amountBaseMinor": 4000,
    "category": null,
    "expenseDate": "2026-10-21",
    "splitMethod": "equal",
    "createdBy": "47542df6-597a-45b4-ab18-816c4b538265",
    "createdAt": "2026-10-21T15:11:20.630Z",
    "updatedAt": "2026-10-21T15:11:20.630Z",
    "deletedAt": null,
    "version": 1,
    "payments": [
      {
        "userId": "47542df6-597a-45b4-ab18-816c4b538265",
        "paidMinor": 4000
      }
    ],
    "splits": [
      {
        "userId": "47542df6-597a-45b4-ab18-816c4b538265",
        "owedMinor": 2000,
        "inputValue": null
      },
      {
        "userId": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
        "owedMinor": 2000,
        "inputValue": null
      }
    ],
    "myNetMinor": 2000,
    "canEdit": true,
    "canDelete": true,
    "items": [],
    "refunds": [],
    "refundedMinor": 0,
    "remainingRefundableMinor": 4000
  },
  "attachments": [],
  "revisions": [
    {
      "id": "r1…",
      "version": 1,
      "changeType": "create",
      "changedBy": "47542df6-597a-45b4-ab18-816c4b538265",
      "createdAt": "2026-10-21T15:11:20.630Z"
    }
  ],
  "users": {
    "47542df6-597a-45b4-ab18-816c4b538265": {
      "id": "47542df6-597a-45b4-ab18-816c4b538265",
      "name": "Anna",
      "avatarUrl": null
    },
    "b93e456c-f17f-4d42-a36f-96f75dad14f3": {
      "id": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
      "name": "Luca",
      "avatarUrl": null
    }
  }
}

PUT/api/expenses/{id}Permesso: scrittura

Modifica una spesa

Sostituisce l’intera spesa (stesso corpo della creazione, più `expectedVersion` facoltativo). Restituisce il dettaglio aggiornato.

Parametri

CampoTipoDescrizione
id pathstring (uuid)Id della risorsa.

Corpo della richiesta

CampoTipoObbligatorioDescrizione
groupIdobjectnoGruppo della spesa; assente o null per una spesa tra amici fuori gruppo.
descriptionstringsìDescrizione breve (max 140 caratteri).max 140
notesobjectnoNote facoltative (max 1000 caratteri).
amountMinorintegersìImporto totale in unità minori (centesimi): 4000 = 40,00. Deve essere maggiore di zero.0–9999999999999
currencystringsìCodice ISO 4217 della valuta in cui è stata pagata la spesa (es. EUR).
fxRateobjectnoTasso verso la valuta del gruppo, solo se le valute differiscono e non c’è un tasso noto.
categoryIdobjectnoCategoria (id da GET /api/meta).
expenseDatestringsìData della spesa (AAAA-MM-GG).
splitMethodstringsìMetodo di divisione: equal, exact, percent, shares, adjust o items.equal | exact | percent | shares | adjust | items
paymentsobject[]sìChi ha pagato e quanto (la somma deve coincidere con amountMinor).max 50
participantsobject[]sìChi partecipa alla divisione; `value` serve per exact (importo), percent (percentuale ×100), shares (quote) e adjust.max 50
itemsobject[]noVoci dello scontrino, solo con splitMethod=items.max 60
clientIdobjectnoUUID generato dal client: rende la creazione idempotente (un secondo invio con lo stesso id non duplica la spesa).
expectedVersionintegernoVersione che il client ha letto: se la spesa è cambiata nel frattempo la modifica è rifiutata con 409.

Esempio

curl -X PUT 'https://billmate.it/api/expenses/{id}' \
  -H 'Authorization: Bearer bm_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"groupId":"d19d0200-ea0e-4d0a-a899-2b96bf06ac03","description":"Cena in Trastevere (con mancia)","amountMinor":4400,"currency":"EUR","expenseDate":"2026-10-21","splitMethod":"equal","payments":[{"userId":"47542df6-597a-45b4-ab18-816c4b538265","paidMinor":4400}],"participants":[{"userId":"47542df6-597a-45b4-ab18-816c4b538265"},{"userId":"b93e456c-f17f-4d42-a36f-96f75dad14f3"}],"expectedVersion":1}'

DELETE/api/expenses/{id}Permesso: scrittura

Elimina una spesa

Eliminazione logica: la spesa resta nella cronologia con `deletedAt`.

Parametri

CampoTipoDescrizione
id pathstring (uuid)Id della risorsa.

Esempio

curl -X DELETE 'https://billmate.it/api/expenses/{id}' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "ok": true
}

Pagamenti

GET/api/settlementsPermesso: sola lettura

Elenco dei pagamenti registrati

Parametri

CampoTipoDescrizione
groupId querystring (uuid)Solo pagamenti di questo gruppo.
friendId querystring (uuid)Solo pagamenti tra te e questo amico.

Esempio

curl -X GET 'https://billmate.it/api/settlements' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "items": [
    {
      "id": "s1…",
      "groupId": "d19d0200-ea0e-4d0a-a899-2b96bf06ac03",
      "fromUserId": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
      "toUserId": "47542df6-597a-45b4-ab18-816c4b538265",
      "amountMinor": 500,
      "currency": "EUR",
      "method": "cash",
      "note": null,
      "settledOn": "2026-10-21",
      "createdBy": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
      "canDelete": true
    }
  ],
  "users": {
    "47542df6-597a-45b4-ab18-816c4b538265": {
      "id": "47542df6-597a-45b4-ab18-816c4b538265",
      "name": "Anna",
      "avatarUrl": null
    },
    "b93e456c-f17f-4d42-a36f-96f75dad14f3": {
      "id": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
      "name": "Luca",
      "avatarUrl": null
    }
  }
}

POST/api/settlementsPermesso: scrittura

Registra un pagamento tra due persone

BillMate è un registro: questa chiamata annota un pagamento già avvenuto, non sposta denaro.

Corpo della richiesta

CampoTipoObbligatorioDescrizione
groupIdobjectnoGruppo del pagamento; null per un pagamento tra amici.
fromUserIdstring (uuid)sìChi ha pagato.
toUserIdstring (uuid)sìChi ha ricevuto.
amountMinorintegersìImporto in unità minori, maggiore di zero.0–9999999999999
currencystringsìValuta ISO 4217.
methodstringnocash, bank_transfer, paypal, revolut, satispay o other (predefinito cash).cash | bank_transfer | paypal | revolut | satispay | other · default "cash"
noteobjectnoNota facoltativa (max 300 caratteri).
settledOnstringsìData del pagamento (AAAA-MM-GG).

Esempio

curl -X POST 'https://billmate.it/api/settlements' \
  -H 'Authorization: Bearer bm_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"groupId":"d19d0200-ea0e-4d0a-a899-2b96bf06ac03","fromUserId":"b93e456c-f17f-4d42-a36f-96f75dad14f3","toUserId":"47542df6-597a-45b4-ab18-816c4b538265","amountMinor":500,"currency":"EUR","method":"cash","settledOn":"2026-10-21"}'

Risposta 201

{
  "id": "s1…"
}

DELETE/api/settlements/{id}Permesso: scrittura

Annulla un pagamento registrato

Parametri

CampoTipoDescrizione
id pathstring (uuid)Id della risorsa.

Esempio

curl -X DELETE 'https://billmate.it/api/settlements/{id}' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "ok": true
}

Amici

GET/api/friendsPermesso: sola lettura

Amici e richieste di amicizia

Esempio

curl -X GET 'https://billmate.it/api/friends' \
  -H 'Authorization: Bearer bm_YOUR_KEY'

Risposta 200

{
  "friends": [
    {
      "id": "b93e456c-f17f-4d42-a36f-96f75dad14f3",
      "name": "Luca",
      "email": "luca@example.com",
      "avatarUrl": null,
      "explicit": true,
      "balances": [
        {
          "currency": "EUR",
          "amountMinor": 1500
        }
      ]
    }
  ],
  "incoming": [],
  "outgoing": []
}

Specifica OpenAPI 3.1

Scarica la specifica per generare un client o importarla in Postman e Insomnia: /developers/openapi.json