---
# System prepended metadata

title: V1API (<mark>u. Vergleich</mark>)

---

# 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)

