{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/bancomat/main/json-schema/bancomat-invoice-schema.json",
"title": "Invoice",
"description": "Document representing an invoice at any stage.",
"x-generated": "2026-10-12",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/bancomat-documents-api-openapi.yml#/components/schemas/Invoice",
"type": "object",
"properties": {
"number": {
"type": "string",
"description": "Invoice number",
"x-faker": "finance.account"
},
"date": {
"type": "string",
"format": "iso8601",
"description": "Invoice date of issue",
"x-faker": "date.past"
},
"amount": {
"type": "number",
"description": "Invoice amount",
"x-faker": "finance.amount"
},
"currency": {
"type": "string",
"description": "Invoice currency",
"default": "EUR",
"x-faker": "finance.currencyCode"
},
"stage": {
"type": "string",
"enum": [
"proforma",
"invoice",
"creditNote"
],
"default": "invoice",
"description": "Invoice stage"
},
"type": {
"type": "string",
"enum": [
"b2b",
"b2c"
],
"description": "Invoice relations with the debtor.
- `b2b`: invoice issued to a business
- `b2c`: invoice issued to a private person.
Note:. Invoice relations with Public Administrations are not directly supported by FlowPay. However, you can use the `b2b` type to represent the invoice issued to a Public Administration."
},
"creditor": {
"type": "string",
"format": "uuid",
"description": "Identifier of the creditor",
"x-faker": "datatype.uuid"
},
"debtor": {
"type": "string",
"format": "uuid",
"description": "Identifier of the debtor",
"x-faker": "datatype.uuid"
},
"attachments": {
"type": "array",
"items": {
"$ref": "#/$defs/DocumentAttachment"
},
"description": "Attachments of the invoice"
},
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/DocumentItem"
},
"description": "Items of the invoice"
},
"terms": {
"type": "array",
"items": {
"$ref": "#/$defs/DocumentTerm"
},
"description": "Terms of the invoice"
},
"invoice": {
"$ref": "#/$defs/Fingerprint",
"description": "Fingerprint of the invoice related to the proforma invoice or credit note, if any"
},
"proforma": {
"$ref": "#/$defs/Fingerprint",
"description": "Fingerprint of the proforma invoice related to the invoice, if any"
},
"creditNotes": {
"type": "array",
"items": {
"$ref": "#/$defs/Fingerprint"
},
"description": "Fingerprints of the credit notes related to the invoice, if any"
}
},
"required": [
"number",
"date",
"amount",
"currency",
"stage",
"type",
"creditor",
"debtor",
"terms"
],
"$defs": {
"DocumentAttachment": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name of the attachment",
"x-faker": "system.fileName"
},
"description": {
"type": "string",
"description": "Description of the attachment",
"x-faker": "lorem.sentence"
},
"id": {
"type": "string",
"format": "uuid",
"description": "Identifier of the attachment",
"x-faker": "datatype.uuid"
}
},
"description": "Attachment of the document.",
"required": [
"name",
"id"
]
},
"DocumentItem": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "Description of the item",
"x-faker": "lorem.sentence"
},
"quantity": {
"type": "number",
"format": "double",
"description": "Quantity of the item",
"x-faker": "random.number"
},
"measureUnit": {
"type": "string",
"description": "Measure unit of the item",
"maxLength": 10,
"x-faker": "commerce.productAdjective"
},
"unitPrice": {
"type": "number",
"format": "double",
"description": "Unit price of the item",
"x-faker": "finance.amount"
},
"tax": {
"type": "number",
"format": "double",
"description": "Tax rate of the item",
"x-faker": "finance.amount"
},
"discount": {
"type": "number",
"format": "double",
"description": "Discount rate of the item",
"x-faker": "finance.amount"
}
},
"description": "Billing item. This is used only for UX and utility purposes and will not be used for the payment process.",
"required": [
"description",
"quantity",
"unitPrice"
]
},
"DocumentTerm": {
"type": "object",
"description": "A payment term of the document, it will be used to generate the payment schedule.",
"properties": {
"dueDate": {
"type": "string",
"format": "iso8601",
"description": "Due date of the payment",
"x-faker": "date.future"
},
"amount": {
"type": "number",
"format": "double",
"description": "Amount to be paid",
"x-faker": "finance.amount"
},
"currency": {
"type": "string",
"description": "Currency of the payment.
Note: All payments must be in the same currency.",
"default": "EUR",
"x-faker": "finance.currencyCode"
},
"description": {
"type": "string",
"description": "Description of the payment. This will be shown to the customer when paying the invoice through the FlowPay checkout page.",
"x-faker": "lorem.sentence"
},
"remittance": {
"type": "string",
"description": "Remittance information. This will be shown to the customer during the payment process and will be included in the bank statement.
Notes: - This field is optional and will be automatically generated if not provided with the format: Invoice # - - Remittance will also contain a FlowPay identifier",
"maxLength": 100,
"x-faker": "lorem.sentence"
}
},
"required": [
"dueDate",
"amount",
"currency"
]
},
"Fingerprint": {
"type": "string",
"description": "Fingerprint of the document"
}
}
}