openapi: 3.2.0 info: title: FlowPay Transfers API version: 2.0.0-alpha.4 description: $ref: docs/general.md termsOfService: https://developer.flowpay.it/tos license: name: FlowPay SRL url: https://developer.flowpay.it/tos x-logo: url: https://images.flowpay.it/logo altText: FlowPay contact: name: API Support url: https://developer.flowpay.it email: api-support@flowpay.it x-json-schema-faker: locale: it-IT omitNulls: true fillProperties: true reuseProperties: true servers: - url: https://api.flowpay.it/v2 description: Production server (Not implementend) - url: https://mock.flowpay.it/v2 description: Mock server - url: https://sandbox.{customerID}.flowpay.it/v2 description: Customer-assigned sandbox server variables: customerID: default: 00000000-00000000-00000000-00000000 description: Unique customer identifier assigned after contract signature - url: http://localhost:5002 description: Debug tags: - name: Transfers description: Lifecycle-free documents paths: /transfers: get: summary: Get transfers description: Retrieve transfers document list operationId: getTransfers security: - oAuth2: - transfers:read parameters: - name: from in: query description: Start date of the period to retrieve transfers for. If not specified, the default value is the first day of the current month required: false schema: type: string format: iso8601 x-faker: date.past - name: to in: query description: End date of the period to retrieve transfers for. If not specified, the default value is the current date required: false schema: type: string format: iso8601 x-faker: date.future - name: page in: query description: Page number to retrieve. If not specified, the default value is 1 required: false schema: type: integer format: int32 x-faker: random.number - name: size in: query description: Number of transfers to retrieve. If not specified, the default value is 10 required: false schema: type: integer format: int32 responses: '200': description: Transfer documents list content: application/json: schema: allOf: - $ref: '#/components/schemas/PaginatedResult' - type: object properties: items: type: array items: $ref: '#/components/schemas/Transfer' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/InternalServerError' tags: - Transfers post: summary: Create transfer description: Create a new transfer document operationId: createTransfer security: - oAuth2: - transfers:write requestBody: description: Transfer details content: application/json: schema: type: object properties: amount: type: number format: float description: Amount of the transfer example: 100.34 x-faker: finance.amount currency: type: string description: Currency of the transfer example: EUR default: EUR x-faker: finance.currencyCode remittance: type: string description: Remittance information of the SEPA Credit Transfer example: Pizza at Pizzeria da Mario. Thank you! x-faker: lorem.sentence creditor: oneOf: - $ref: '#/components/schemas/ConsumerNationalID' - $ref: '#/components/schemas/CompanyVATNumber' debtor: oneOf: - $ref: '#/components/schemas/ConsumerNationalID' - $ref: '#/components/schemas/CompanyVATNumber' required: - amount - remittance - creditor - debtor required: true responses: '201': description: Transfer created content: application/json: schema: $ref: '#/components/schemas/Transfer' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/InternalServerError' tags: - Transfers /transfers/{transferID}: get: summary: Get transfer details description: Retrieve transfer document details operationId: getTransfer security: - oAuth2: - transfers:read parameters: - name: transferID in: path description: Transfer ID required: true schema: type: string responses: '200': description: Transfer document details content: application/json: schema: $ref: '#/components/schemas/Transfer' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' tags: - Transfers delete: summary: Delete transfer description: Delete a transfer document that has not yet been executed operationId: deleteTransfer security: - oAuth2: - transfers:write parameters: - name: transferID in: path description: Transfer ID required: true schema: type: string responses: '204': description: Transfer document deleted content: application/json: schema: type: object '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' tags: - Transfers components: responses: InternalServerError: description: Server encountered an unexpected condition that prevented it from fulfilling the request content: application/json: schema: type: object properties: statusCode: $ref: '#/components/schemas/StatusCode' requestID: $ref: '#/components/schemas/RequestID' required: - statusCode - requestID Unauthorized: description: Client has not provided valid credentials to access the requested resource content: application/json: schema: type: object properties: statusCode: $ref: '#/components/schemas/StatusCode' requestID: $ref: '#/components/schemas/RequestID' message: type: string description: Error message example: You must provide a valid access token required: - statusCode - requestID - message NotFound: description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: $ref: '#/components/schemas/StatusCode' requestID: $ref: '#/components/schemas/RequestID' message: type: string description: Error message example: Invoice not found required: - statusCode - requestID - message BadRequest: description: Client has provided invalid data content: application/json: schema: type: object properties: statusCode: $ref: '#/components/schemas/StatusCode' requestID: $ref: '#/components/schemas/RequestID' message: type: string description: Error message example: Proforma invoice can not have a due date later than the invoice date additionalInfo: type: object description: Additional information about the error properties: path: type: string description: JSON path of the field that caused the error example: .dueDate key: type: string description: JSON key of the field that caused the error example: dueDate type: type: string description: Expected type of the field that caused the error example: string required: - path required: - statusCode - requestID - message - additionalInfo Forbidden: description: Client is not authorized to access the requested resource content: application/json: schema: type: object properties: statusCode: $ref: '#/components/schemas/StatusCode' requestID: $ref: '#/components/schemas/RequestID' message: type: string description: Error message example: You can't create a new invoice for this tenant required: - statusCode - requestID - message schemas: Contact: type: object properties: fullName: description: Full name of the contact, contains the concatenation of the name and surname of a consumer, or the name of a company. oneOf: - type: string description: Full name of the consumer example: Mario Rossi x-faker: person.fullName - type: string description: Company name example: Illustrious Company S.p.A. x-faker: company.companyName fullVat: type: string description: 'VAT number of the company in full european format or national ID of the consumer ' oneOf: - $ref: '#/components/schemas/ConsumerNationalID' - $ref: '#/components/schemas/CompanyVATNumber' type: type: string enum: - consumer - company description: Type of the contact PaginatedResult: type: object properties: page: type: integer description: Current page number pageSize: type: integer description: Number of items per page total: type: integer description: Total number of items items: type: array description: List of items items: {} RequestID: type: string description: Unique identifier of the request.
It is helpful to identify the request in case of errors, providing it to the support team. Please submit it in the support ticket. format: uuid x-faker: random.uuid ConsumerNationalID: type: string description: National ID of the consumer, currently only italian format is supported pattern: /^([A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z])$ example: RSSMRA80A01H501T CompanyVATNumber: type: string description: VAT number of the company, full european format pattern: /^((AT)(U\d{8})|(BE)(0\d{9})|(BG)(\d{9,10})|(CY)(\d{8}[LX])|(CZ)(\d{8,10})|(DE)(\d{9})|(DK)(\d{8})|(EE)(\d{9})|(EL|GR)(\d{9})|(ES)([\dA-Z]\d{7}[\dA-Z])|(FI)(\d{8})|(FR)([\dA-Z]{2}\d{9})|(HU)(\d{8})|(IE)(\d{7}[A-Z]{2})|(IT)(\d{11})|(LT)(\d{9}|\d{12})|(LU)(\d{8})|(LV)(\d{11})|(MT)(\d{8})|(NL)(\d{9}(B\d{2}|BO2))|(PL)(\d{10})|(PT)(\d{9})|(RO)(\d{2,10})|(SE)(\d{12})|(SI)(\d{8})|(SK)(\d{10}))$ example: IT12345678901 x-faker: finance.vat Transfer: type: object description: 'Kind of document that allow clients to manage payment requests with low constraints.
Clients can use transfers to fast prototyping payment initiation use cases or to avoid specific document''s lifecycle managment.
Note: In order to use transfers in production, a more in-depth due diligence is required.' properties: id: type: string format: uuid description: Unique identifier of the transfer x-faker: random.uuid fingerprint: $ref: '#/components/schemas/Fingerprint' amount: type: number description: Amount of the transfer example: 100.34 x-faker: finance.amount remittance: type: string description: Remittance information of the transfer example: Payment for invoice 123 x-faker: lorem.sentence creditor: description: Creditor of this transfer $ref: '#/components/schemas/Contact' debtor: description: Debtor of this transfer $ref: '#/components/schemas/Contact' createdAt: type: string format: iso8601 description: Date and time of the transfer creation example: '2020-01-01T00:00:00Z' x-faker: date.past StatusCode: type: integer description: HTTP status code example: 404 Fingerprint: type: string description: Fingerprint of the document example: d41d8cd98f00b204e9800998ecf8427e securitySchemes: oAuth2: type: oauth2 description: OAuth2 flow flows: authorizationCode: authorizationUrl: /openid/authenticate tokenUrl: /oauth/token refreshUrl: /oauth/token scopes: accounts:read: Allow to read accounts accounts:write: Allow to mediate accounts creation and open banking consent renewal invoices:read: Allow to read invoices invoices:write: Allow to create invoices and manage lifecycle bills:read: Allow to read bills bills:write: Allow to create bills and manage lifecycle constructions:read: Allow to read information about construction sites constructions:write: Allow to create construction sites and manage the lifecycle openid: Allow to read user profile pagopa:read: Allow to retrieve users' PagoPA payment notices pagopa:write: Allow to create PagoPA payment notices transfers:read: Allow to read transfers transfers:write: Allow to create transfers and manage lifecycle wallet:`document_type`: Allow to manage wallet for the specified use case clientCredentials: tokenUrl: /oauth/token scopes: ade: Allow to interact with Agenzia delle Entrate services accounts:read: Allow to read accounts accounts:write: Allow to mediate accounts creation and open banking consent renewal invoices:read: Allow to read invoices invoices:write: Allow to create invoices and manage lifecycle bills:read: Allow to read bills bills:write: Allow to create bills and manage lifecycle constructions:read: Allow to read information about construction sites constructions:write: Allow to create construction sites and manage the lifecycle openid: Allow to read user profile pagopa:read: Allow to retrieve users' PagoPA payment notices pagopa:write: Allow to create PagoPA payment notices transfers:read: Allow to read transfers transfers:write: Allow to create transfers and manage lifecycle wallet:`document_type`: Allow to manage wallet for the specified use case