Stable Pro

Stable Pro API · v1

Endpoint e oggetti

Ogni endpoint col suo permesso, i parametri e la risposta, e ogni oggetto coi suoi campi. Generato dal contratto OpenAPI.

I nomi dei campi, i codici e i valori sono il contratto: restano uguali in ogni lingua. Le descrizioni sono tradotte.

Endpoint

GET/api/v1/connection

Il collegamento della chiave che chiama: nome, permessi e la chiave stessa (mai il segreto)

Permesso
qualunque chiave valida
Parametri
lang
Risposta
Connection
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/codes

Il dizionario di ogni codice che l'API restituisce, coi nomi nella lingua richiesta (?lang=, Accept-Language)

Permesso
qualunque chiave valida
Parametri
lang
Risposta
Codes
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/organization

La scuderia della chiave che chiama: nome, paese, valuta, fuso orario, lingua, se Stable Pro calcola le imposte

Permesso
qualunque chiave valida
Parametri
lang
Risposta
Organization
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/customers

Chiunque abbia almeno un addebito, pagato o no, socio o staff; con customers.fiscal:read anche i dati per la fattura

Permesso
customers:read
Parametri
langlimitstarting_after
Risposta
CustomerList
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/customers/{id}

Un cliente; con customers.fiscal:read anche i dati per la fattura. Di un'altra scuderia: 404

Permesso
customers:read
Parametri
id (nel percorso)lang
Risposta
Customer
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/customers/{id}/balance

Cosa deve oggi il cliente, cosa arriva dopo, e il credito che può spendere

Permesso
charges:read
Parametri
id (nel percorso)lang
Risposta
Balance
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/charges

Tutti gli addebiti ai clienti, pagati o no (mai i compensi dello staff)

Permesso
charges:read
Parametri
langlimitstarting_after
Filtri
  • customer — Solo questo cliente (il suo id)
  • accounting_month — Solo questo mese contabile (YYYY-MM): il mese in cui il fatto conta, vedi Convenzioni
Risposta
ChargeList
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/charges/{id}

Un addebito, com'è adesso: importo e imposte sono la nascita più le correzioni più i cambi d'imposta

Permesso
charges:read
Parametri
id (nel percorso)lang
Risposta
Charge
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/adjustments

Correzioni degli addebiti

Permesso
charges:read
Parametri
langlimitstarting_after
Filtri
  • charge — Solo le correzioni di questo addebito (il suo id)
  • accounting_month — Solo questo mese contabile (YYYY-MM): il mese in cui il fatto conta, vedi Convenzioni
Risposta
AdjustmentList
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/adjustments/{id}

Una correzione: action, reason, category, importo con segno, consideration_effect, la differenza d'imposta

Permesso
charges:read
Parametri
id (nel percorso)lang
Risposta
Adjustment
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/payments

Movimenti di denaro dei clienti (incassi, rimborsi, storni, credito usato)

Permesso
payments:read
Parametri
langlimitstarting_after
Filtri
  • customer — Solo questo cliente (il suo id)
Risposta
PaymentList
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/payments/{id}

Un movimento di denaro, con le sue assegnazioni; chi ha pagato per conto del cliente

Permesso
payments:read
Parametri
id (nel percorso)lang
Risposta
Payment
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/allocations/{id}

Quanto di un movimento va a un addebito, con segno

Permesso
payments:read
Parametri
id (nel percorso)lang
Risposta
Allocation
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/credit-entries

Movimenti del credito dei clienti (nato, cresciuto, usato, rimborsato)

Permesso
payments:read
Parametri
langlimitstarting_after
Filtri
  • customer — Solo questo cliente (il suo id)
Risposta
CreditEntryList
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/credit-entries/{id}

Un movimento del credito di un cliente

Permesso
payments:read
Parametri
id (nel percorso)lang
Risposta
CreditEntry
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/receipts

Ricevute di Stable Pro (R: ricevute di pagamento, RB: conferme di rimborso), in ordine di emissione; mai documenti fiscali

Permesso
receipts:read
Parametri
langlimitstarting_after
Filtri
  • customer — Solo questo cliente (il suo id)
  • payment — Solo le ricevute di questo movimento di denaro (il suo id)
Risposta
ReceiptList
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/receipts/{id}

Una ricevuta: tipo, il numero come stampato, stato, il pagamento che conferma, l'importo congelato

Permesso
receipts:read
Parametri
id (nel percorso)lang
Risposta
Receipt
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/receipts/{id}/pdf

Il PDF della ricevuta, lo stesso che ha ricevuto il cliente. Quando porta i dati fiscali di chi ha pagato per conto del cliente, serve anche customers.fiscal:read (altrimenti 403)

Permesso
receipts:read
Parametri
id (nel percorso)lang
Risposta
application/pdf
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/events

Cosa è successo, in ordine: leggi dopo il tuo cursore per restare allineato. Ogni novità chiede il permesso dell'oggetto a cui punta. Mentre si carica la storia della scuderia: 503 events-not-ready

Permesso
qualunque chiave valida
Parametri
langlimitafter
Risposta
EventList
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503
GET/api/v1/events/{id}

Una novità. Di un'altra scuderia, o di un tipo che la tua chiave non legge: 404

Permesso
qualunque chiave valida
Parametri
id (nel percorso)lang
Risposta
Event
Errori
400 · 401 · 403 · 404 · 429 · 500 · 503

Oggetti

Problem

CampoTipoDescrizione
typestring (uri)Stabile, in inglese: decidi in base a questo, non al testo
titlestringIn inglese
statusinteger
detailstring · facoltativoUna frase per le persone, nella lingua richiesta (?lang=, Accept-Language)
reasonstring · facoltativo
missing · malformed · wrong_environment · unknown · connection_revoked · revoked · expired · rotated
Solo 401: perché la chiave non è valida
missing_permissionstring · facoltativo
charges:read · payments:read · receipts:read · customers:read · customers.fiscal:read · external-documents:write
Solo 403 forbidden
invalid_paramstring · facoltativoSolo 400: il parametro che non è valido

Connection

CampoTipoDescrizione
object"connection"
idstring (uuid)
namestring
permissionsarray di string
created_atstring (date-time)RFC 3339, UTC
keyobject
key.idstring (uuid)
key.last_fourstring
key.environmentstring
live · test
live = produzione (sp_live_), test = staging (sp_test_)
key.created_atstring (date-time)RFC 3339, UTC
key.expires_atstring (date-time) · può essere nullRFC 3339, UTC
key.retires_atstring (date-time) · può essere nullDopo una rotazione: quando questa chiave smette di funzionare

Organization

CampoTipoDescrizione
object"organization"
idstring (uuid)
namestring
legal_namestring · può essere null
countrystring · può essere nullISO 3166-1 alpha-2
currencystringISO 4217
timezonestringIANA
languagestringLa lingua della scuderia: Stable Pro non conosce quella di ogni cliente
localestringBCP 47, per la formattazione
taxesobject
taxes.calculated_bystring
stable_pro · external
external = Stable Pro non calcola le imposte questo mese: niente di più
taxes.amount_basis"gross"Ogni importo è il totale che paga il cliente
receipts_shown_to_customersbooleanfalse: la scuderia ha scelto di non dare le ricevute di Stable Pro ai suoi clienti finché c'è un programma collegato; esistono comunque e sono numerate (GET /receipts)

Customer

CampoTipoDescrizione
object"customer"
idstring (uuid)Il codice del cliente: non cambia mai
kindstring
member · staff
namestring
given_namestring · può essere null
family_namestring · può essere null
activebooleanfalse: ha lasciato la scuderia, o è stato tolto; i suoi addebiti si possono ancora fatturare
created_atstring (date-time)RFC 3339, UTC
billing_addressobject · può essere null · facoltativoSolo con customers.fiscal:read
billing_address.line1string · può essere null
billing_address.line2string · può essere null
billing_address.postal_codestring · può essere null
billing_address.citystring · può essere null
billing_address.subdivisionstring · può essere nullISO 3166-2 (IT-MI, US-OH)
billing_address.countrystring · può essere nullISO 3166-1 alpha-2
billing_address_textstring · può essere null · facoltativoSolo con customers.fiscal:read: il vecchio indirizzo in testo libero, solo finché billing_address è vuoto
tax_identifiersarray di object · facoltativoSolo con customers.fiscal:read
tax_identifiers[].schemestringVAT, o un ICD ISO 6523 (0210 codice fiscale italiano, 0211 partita IVA italiana)
tax_identifiers[].valuestring
tax_codestring · può essere null · facoltativoSolo con customers.fiscal:read: il vecchio codice fiscale, senza schema

CustomerList

CampoTipoDescrizione
object"list"
dataarray di Customer
has_morebooleanC'è una pagina successiva: chiedi di nuovo con starting_after = l'id dell'ultimo elemento

Balance

CampoTipoDescrizione
object"balance"
customer_idstring (uuid)
currencystring
amount_dueintegerCosa è dovuto oggi: addebiti già visibili
amount_scheduledintegerAddebiti che diventano visibili più avanti
creditintegerCredito che si può spendere su un addebito
as_ofstring (date)Oggi, nel fuso orario della scuderia

Charge

CampoTipoDescrizione
object"charge"
idstring (uuid)
customer_idstring (uuid)
typestringElenco aperto: boarding, service_charge, lesson_drop_in, lesson_plan, health_record, …
descriptionstringCome l'ha scritto la scuderia
period_startstring (date)YYYY-MM-DD
period_endstring (date)YYYY-MM-DD
competence_monthstringYYYY-MM
accounting_monthstringIl più recente fra il mese di competenza e quello di registrazione: lo calcola Stable Pro
due_datestring (date)YYYY-MM-DD
visible_fromstring (date)YYYY-MM-DD
quantity"1"
unitstring
MON · ANN · C62
UNECE Rec. 20
unit_amountintegerUnità minori della valuta (ISO 4217)
currencystring
original_amountintegerAlla nascita
amountintegerAdesso: la nascita più le correzioni
amount_paidintegerUnità minori della valuta (ISO 4217)
amount_remainingintegerUnità minori della valuta (ISO 4217)
amount_basis"gross"
tax_calculated_bystring
stable_pro · external
tax_treatmentstring
standard_rated · zero_rated · not_calculated · undetermined
taxable_amountintegerUnità minori della valuta (ISO 4217)
taxesarray di object
taxes[].type"vat"Elenco aperto: possono arrivare altri tipi
taxes[].jurisdictionstring · può essere nullISO 3166-1 alpha-2 della scuderia
taxes[].categorystring · può essere nullUNCL 5305: S, Z, E, AE, K, G, O; null quando non è dichiarata
taxes[].rate_bpintegerPunti base: 2200 = 22%
taxes[].amountintegerUnità minori della valuta
taxes[].exemption_reasonstring · può essere null · facoltativoBT-120, solo con aliquota zero
taxes[].exemption_reason_codestring · può essere null · facoltativoVATEX (BT-121), solo con aliquota zero
created_atstring (date-time)RFC 3339, UTC

ChargeList

CampoTipoDescrizione
object"list"
dataarray di Charge
has_morebooleanC'è una pagina successiva: chiedi di nuovo con starting_after = l'id dell'ultimo elemento

Adjustment

CampoTipoDescrizione
object"adjustment"
idstring (uuid)
charge_idstring (uuid)
customer_idstring (uuid)
direction"receivable"
actionstring · può essere nullElenco aperto di codici (vedi /codes)
reasonstring · può essere null
categorystring · può essere null
originstring · può essere nullHUMAN, SYSTEM, …
amountintegerCon segno: negativo abbassa l'addebito
consideration_effectstring
changes · none
changes: segue una nota di credito (o di debito); none: una perdita su crediti, senza imposta
taxesarray di objectCon changes: la differenza d'imposta, già calcolata. Con none: vuoto
taxes[].type"vat"Elenco aperto: possono arrivare altri tipi
taxes[].jurisdictionstring · può essere nullISO 3166-1 alpha-2 della scuderia
taxes[].categorystring · può essere nullUNCL 5305: S, Z, E, AE, K, G, O; null quando non è dichiarata
taxes[].rate_bpintegerPunti base: 2200 = 22%
taxes[].amountintegerUnità minori della valuta
taxes[].exemption_reasonstring · può essere null · facoltativoBT-120, solo con aliquota zero
taxes[].exemption_reason_codestring · può essere null · facoltativoVATEX (BT-121), solo con aliquota zero
taxable_amountinteger · può essere nullUnità minori della valuta (ISO 4217)
currencystring
competence_monthstringYYYY-MM
accounting_monthstringYYYY-MM
occurred_atstring (date-time)RFC 3339, UTC
reverses_adjustment_idstring (uuid) · può essere null
taxonomy_versioninteger

AdjustmentList

CampoTipoDescrizione
object"list"
dataarray di Adjustment
has_morebooleanC'è una pagina successiva: chiedi di nuovo con starting_after = l'id dell'ultimo elemento

Allocation

CampoTipoDescrizione
object"allocation"
idstring (uuid)
payment_idstring (uuid)
charge_idstring (uuid)
amountintegerCon segno
currencystring · facoltativo
consideration_effect"none"

Payment

CampoTipoDescrizione
object"payment"
idstring (uuid)
customer_idstring (uuid) · può essere null
typestring
payment · credit_applied · offset · refund · moved_to_credit · reversal
Cosa è successo al denaro (elenco aperto)
amountintegerIl denaro che si è mosso davvero, con segno: un rimborso o uno storno è negativo, moved_to_credit è zero
currencystring
datestring (date)YYYY-MM-DD
accounting_monthstringYYYY-MM
methodstringcash, bank_transfer, pos, credit, compensazione, other (elenco aperto)
referencestring · può essere null
paid_byobject · può essere nullChi ha pagato per conto del cliente (un genitore): non è un cliente a sé
paid_by.kindstring · può essere null
paid_by.namestring · può essere null
paid_by.tax_codestring · può essere null · facoltativoSolo con customers.fiscal:read
paid_by.address_textstring · può essere null · facoltativoSolo con customers.fiscal:read
reverses_payment_idstring (uuid) · può essere null
actionstring · può essere nullSolo per gli storni
reasonstring · può essere null
categorystring · può essere null
consideration_effect"none"
allocationsarray di Allocation
taxonomy_versioninteger · può essere null
created_atstring (date-time)RFC 3339, UTC

PaymentList

CampoTipoDescrizione
object"list"
dataarray di Payment
has_morebooleanC'è una pagina successiva: chiedi di nuovo con starting_after = l'id dell'ultimo elemento

CreditEntry

CampoTipoDescrizione
object"credit_entry"
idstring (uuid)
customer_idstring (uuid)
directionstring
credit · debit
credit: il credito nasce o cresce; debit: viene usato o rimborsato
amountintegerSempre positivo: il verso lo dice direction
currencystring
sourcestringElenco aperto di codici
payment_idstring (uuid) · può essere nullIl movimento che l'ha causato
charge_idstring (uuid) · può essere null
actionstring · può essere null
reasonstring · può essere null
categorystring · può essere null
reverses_entry_idstring (uuid) · può essere null
consideration_effect"none"
created_atstring (date-time)RFC 3339, UTC

CreditEntryList

CampoTipoDescrizione
object"list"
dataarray di CreditEntry
has_morebooleanC'è una pagina successiva: chiedi di nuovo con starting_after = l'id dell'ultimo elemento

Receipt

CampoTipoDescrizione
object"receipt"
idstring (uuid)
kindstring
payment_receipt · refund_confirmation
payment_receipt: serie R, denaro ricevuto; refund_confirmation: serie RB, denaro rimborsato (elenco aperto)
seriesstringR, RB (elenco aperto): ogni serie ha la sua numerazione
yearinteger
sequenceintegerNumero progressivo dentro la serie e l'anno, senza buchi
numberstringIl numero come è stampato sul documento
statusstring
issued · voided
Una ricevuta annullata resta, col suo numero
issued_atstring (date-time)RFC 3339, UTC
voided_atstring (date-time) · può essere nullRFC 3339, UTC
operation_typestring · può essere nullSolo per le conferme di rimborso: voluntary_refund, payment_reversal, chargeback (elenco aperto)
payment_idstring (uuid) · può essere nullL'incasso, o il rimborso, che la ricevuta conferma
charge_idstring (uuid) · può essere nullSolo le ricevute del vecchio modello, emesse su un addebito invece che su un incasso
customer_idstring (uuid) · può essere null
amountinteger · può essere nullCome è congelato sul documento, con segno: una conferma di rimborso è negativa
currencystring
pdf_availablebooleanfalse solo per le ricevute più vecchie, emesse prima dei documenti congelati: nessun foglio da ristampare
fiscal_document"false"Una conferma di pagamento: il documento fiscale lo emette il tuo programma

ReceiptList

CampoTipoDescrizione
object"list"
dataarray di Receipt
has_morebooleanC'è una pagina successiva: chiedi di nuovo con starting_after = l'id dell'ultimo elemento

Event

CampoTipoDescrizione
object"event"
idstring (uuid)Stabile, unico fra tutte le scuderie: usalo per riconoscere una novità già elaborata
typestringElenco aperto: customer.updated, charge.created, charge.due_date_changed, charge.tax_changed, adjustment.created, payment.created, allocation.created, credit_entry.created, receipt.issued, receipt.voided
dataobject
data.objectstringElenco aperto: customer, charge, adjustment, payment, allocation, credit_entry, receipt
data.idstring (uuid)
data.urlstringDove leggerlo, a partire dall'host: /api/v1/charges/{id}
occurred_atstring (date-time)Quando è successo il fatto: l'ora di creazione, di emissione o di annullamento; per un cambio d'imposta, la sua creazione
recorded_atstring (date-time)Quando la novità è stata scritta: per le novità storiche, il giorno in cui è stata caricata la storia
historicalbooleantrue: un fatto di prima che esistessero le novità, caricato una volta, in ordine di data

EventList

CampoTipoDescrizione
object"list"
dataarray di Event
has_morebooleanChiedi di nuovo con after = next_cursor. Una pagina può contenere meno novità di limit, anche nessuna, mentre has_more è true
next_cursorstring (uuid) · può essere nullSalvalo dopo aver elaborato la pagina, e ripassalo come after. Può essere l'id di una novità che non ti viene mostrata. null solo quando la scuderia non ha ancora novità per te

Codes

CampoTipoDescrizione
object"codes"
languagestringLa lingua dei nomi: ?lang=, poi Accept-Language, poi en
taxonomy_versionintegerLa tassonomia da cui vengono action, reason e category
listsobject
lists.charge_typeobject
lists.charge_type.fieldsarray di stringDove compaiono questi codici: resource.field
lists.charge_type.codesarray di object
lists.charge_type.codes[].codestring
lists.charge_type.codes[].namestring
lists.actionobject
lists.action.fieldsarray di stringDove compaiono questi codici: resource.field
lists.action.codesarray di object
lists.action.codes[].codestring
lists.action.codes[].namestring
lists.reasonobject
lists.reason.fieldsarray di stringDove compaiono questi codici: resource.field
lists.reason.codesarray di object
lists.reason.codes[].codestring
lists.reason.codes[].namestring
lists.reason.codes[].actionstringIl nome di un reason dipende dalla sua action: cercalo con tutti e due
lists.reason.codes[].categorystring
lists.categoryobject
lists.category.fieldsarray di stringDove compaiono questi codici: resource.field
lists.category.codesarray di object
lists.category.codes[].codestring
lists.category.codes[].namestring
lists.originobject
lists.origin.fieldsarray di stringDove compaiono questi codici: resource.field
lists.origin.codesarray di object
lists.origin.codes[].codestring
lists.origin.codes[].namestring
lists.payment_typeobject
lists.payment_type.fieldsarray di stringDove compaiono questi codici: resource.field
lists.payment_type.codesarray di object
lists.payment_type.codes[].codestring
lists.payment_type.codes[].namestring
lists.payment_methodobject
lists.payment_method.fieldsarray di stringDove compaiono questi codici: resource.field
lists.payment_method.codesarray di object
lists.payment_method.codes[].codestring
lists.payment_method.codes[].namestring
lists.credit_sourceobject
lists.credit_source.fieldsarray di stringDove compaiono questi codici: resource.field
lists.credit_source.codesarray di object
lists.credit_source.codes[].codestring
lists.credit_source.codes[].namestring
lists.receipt_kindobject
lists.receipt_kind.fieldsarray di stringDove compaiono questi codici: resource.field
lists.receipt_kind.codesarray di object
lists.receipt_kind.codes[].codestring
lists.receipt_kind.codes[].namestring
lists.refund_operationobject
lists.refund_operation.fieldsarray di stringDove compaiono questi codici: resource.field
lists.refund_operation.codesarray di object
lists.refund_operation.codes[].codestring
lists.refund_operation.codes[].namestring
lists.tax_categoryobjectUNCL 5305
lists.tax_category.fieldsarray di stringDove compaiono questi codici: resource.field
lists.tax_category.codesarray di object
lists.tax_category.codes[].codestring
lists.tax_category.codes[].namestring
lists.unitobjectUNECE Rec. 20
lists.unit.fieldsarray di stringDove compaiono questi codici: resource.field
lists.unit.codesarray di object
lists.unit.codes[].codestring
lists.unit.codes[].namestring
lists.event_typeobject
lists.event_type.fieldsarray di stringDove compaiono questi codici: resource.field
lists.event_type.codesarray di object
lists.event_type.codes[].codestring
lists.event_type.codes[].namestring