# V1API (<mark>u. Vergleich</mark>) * <mark>In FinApi every request and response have a x-Request-Id so they can be matched one to the other</mark> <hr/> ## CREATE PAYMENT ### POST /v1/payments | Field | Type | Description | | -------- | -------- | -------- | | paymentInfoId* | String | [A-Za-z0-9]\|[+\|?\|/\|-\|:\|(\|)\|.\|,\|'\|]){1,35} | | [x] batchBooking | Boolean | batchBooking; | | [x] code* | ExternalPurposeCode | SEPA purpose code, according to ISO 20022 | | [x] requestedExecutionDate* | LocalDate | @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) | | debitor* | Account | [x] String name* (min = 1, max = 70) <br/> <br/> [x] String iban* \[A-Z]{2,2}\[0-9]{2,2}\[a-zA-Z0-9]{1,30} <br/> <br/> [x] String bic* \[A-Z]{6,6}\[A-Z2-9]\[A-NP-Z0-9\](\[A-Z0-9]{3,3}){0,1} | | payments* | List\<PaymentData> (min = 1) | [x] String endToEndIdentification* ([A-Za-z0-9]\|[+\|?\|/\|-\|:\|(\|)\|.\|,\|'\| ]){1,35} <br/> <br/> BigDecimal [x] instructedAmount* (minimum: 0.01 ; maximum: 999999999.99) <br/> <br/> Account creditor* (sehe oben) <br/> String purpose* (min = 1, max = 140) | * <mark>paymentInfoId in FinaApi ist nicht geben sondern bekommen </mark> * <mark>SepaPurposeCode ist Pflicht. In FinApi es ist nicht Pflicht. </mark> * <mark> **Wir haben ein SepaPurposeCode für jede Gruppe von Payments. In FinApi es ist ein SepaPurposeCode für jede Payment.** </mark> * <mark>Debitor data ist Pflicht. In FinApi entweder AccountId oder Iban ob standalone transfer oder nicht. </mark> * <mark>Creditor data ist Pflicht. In FinApi nur sein Iban ist Pflicht. </mark> * <mark>Date ist Pflicht. In FinApi werde set sein wenn null ist. </mark> * <mark>Keine InstantPayment option. </mark> * <mark>batchBooking. In FinApi ist SingleBooking und default=false (meinen batchBooking) </mark> * <mark>In FinApi EndToEndId ist nicht Pflicht. And nur benutzt in SEPA EUR Uberweisungen. </mark> * <mark>? StructureRemittanceInformation </mark> ### RESPONSES #### 201 Created * <mark>? Kein response data? status u. anderen info. Informationen, die die bereitgestellten Daten, den Status und andere Informationen bestätigen </mark> #### 400 Bad request (Error.class) #### 401 Unauthorized (Error.class) #### 415 Unsupported mediatype (Error.class) | Field | Type | Description | | -------- | -------- | -------- | | message* | String | error message | * <mark>FinApi hast mehr Fehler. (404 Given account not found; 422 (Illegal Field value; illegal Entity state; Unsupported order); 500 Unexpected error) </mark> <hr/> ## GET PAYMENT INFO ### GET /v1/payments/{id} | Field | Type | Description | | -------- | -------- | -------- | | id* | String | Payment ID | * <mark>FinApi accepts a list of payments with filters like statuses and min and max amounts (and pagination) </mark> ### RESPONSES #### 200 OK (Info.class) | Field | Type | Description | | -------- | -------- | -------- | | status* | enum PaymentStatus | DATA_SAVED("DATA_SAVED")<br/> MODIFIED("MODIFIED")<br/>TRANSFORMED("TRANSFORMED")<br/> SIGNED("SIGNED")<br/>TRANSFERRED("TRANSFERRED")<br/>SUCCEEDED("SUCCEEDED")<br/>FAILED("FAILED")<br/>MARKED_AS_DELETED("MARKED_AS_DELETED")<br/>DELETED("DELETED") | | events* | List\<PaymentEvent> | PaymentStatus status* (sehe oben) <br/> <br/> OffsetDateTime created* @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) | * <mark> FinApi zurückgibt info um der Payments (amount, accountId, iban, u.s.w.)</mark> #### 400 Bad request (Error.class) (sehe oben) * <mark>FinApi hast mehr Fehler. (403 Incorrect authorization role ; 401 Authorization required; 500 unexpected error) </mark> <hr/> ## GET SIGNED PAYMENT DATA * <mark>Nicht verfügbar in FinAPI?</mark> ### GET /v1/payments/{id}/data | Field | Type | Description | | -------- | -------- | -------- | | id* | String | Payment ID | ### RESPONSES #### 200 (SignedPayment.class) | Field | Type | Description | | -------- | -------- | -------- | | payment* | byte\[] payment | | | signatures* | List\<PaymentSignature> | byte\[] data | #### 401 Unauthorized (Error.class) (sehe oben) #### 404 Not Found (Error.class) (sehe oben) <hr/> ## Send a payment to processing service ### POST /v1/payments/{id}/send | Field | Type | Description | | -------- | -------- | -------- | | [x] id* | String | Payment ID | * <mark> Apart from the ability to choose the interface and the inclusion of credentials ist gleich. </mark> ### RESPONSES #### 200 OK * <mark>FinApi zurückgibt viele information</mark> #### 400 BAD_REQUEST (sehe oben) #### 401 Unauthorized (Error.class) (sehe oben) * <mark>FinApi hast mehr Fehler. (403 Incorrect authorization role ; 404 Given payment not found; 401 Not authenticated or invalid access_token; 500 Unsupported Error)</mark> <hr/> ## Create payment signature ### POST /v1/payments/{id}/signature | Field | Type | Description | | -------- | -------- | -------- | | id* | String | Payment ID | * <mark> I think FinApi uses uploading of TPP certificates and QsealC certificate is used to sign the requests to the bank.</mark> ### RESPONSES #### 201 Created #### 400 BAD_REQUEST (sehe oben) #### 401 Unauthorized (Error.class) (sehe oben)