summaryrefslogtreecommitdiff
path: root/libeufin/api-sandbox.rst
blob: 7ddf5a39e1abb4794bdb3463bf6a6b1ab16ced93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
Sandbox API
###########


Entities
========

Customer
  ...

Bank Account
  ...

EBICS Subscriber
  ...


Assumption for sandbox:  One customer corresponds to exactly one EBICS subscriber.


HTTP API
========


.. http:post:: /ebicsweb

  Submit an EBICS request to the sandbox.


.. http:post:: /admin/customers

  Create a new customer.  A customer identifies a human that
  may own multiple bank accounts.

  When creating a customer, one EBICS subscriber is automatically
  created for the customer.

  In the future, we might add an API to create multiple additional subscribers for
  a customer.

  When creating a new customer, an ID will be assigned automatically.

  .. code-block:: tsref

    interface CustomerCreationRequest {
      // human-readable name for the customer
      name: string;
    }

.. http:get:: /admin/customers/:id

  Get information about a customer.

  .. ts:def:: CustomerInfo

    interface CustomerInfo {
      ebicsInfo?: CustomerEbicsInfo;
      finTsInfo?: CustomerFinTsInfo;
    }

  .. ts:def:: CustomerEbicsInfo

    interface CustomerEbicsInfo {
      ebicsHostId: string;
      ebicsParterId: string;
      ebicsUserId: string;

      // Info for the customer's "main subscriber"
      subscriberInitializationState: "NEW" | "PARTIALLY_INITIALIZED_INI" | "PARTIALLY_INITIALIZED_HIA" | "READY" | "INITIALIZED";
    }

  .. ts:def:: CustomerFinTsInfo
    
    // TODO

.. http:post:: /admin/customers/:id/ebics/keyletter

  Accept the information from the customer's ("virtual") INI-Letter and HIA-Letter
  and change the key's state as required.

  .. code-block:: tsref

    interface KeyLetterRequest {

      INI: {
        // The user ID that participates in a EBICS subscriber.
        userId: string;

        // The customer ID specific to the bank (therefore not
        // participating in a EBICS subscriber).
        customerId: string;

        // Human name of the user
        name: string;

        // As per specification, this value is:
        // "Date of processing of the corresponding EBICS order".  DD.MM.YYYY format.
        date: string;

        // As per specification, this value is:
        // "Time of processing of the corresponding EBICS order".  HH:MM:SS format.
        time: string;

        // Recipient.  Bank "ID" (FIXME to be specified).
        recipient: string;

        // Electronic signature version.  A004, for example.
        version: string;

        // RSA key exponent
        exponent_length: number;
        exponent: string;

        // RSA key modulus
        modulus_length: number;
        modulus: string;

        // RSA key hash
        hash: string;
    }

      HIA: {
        // The user ID that participates in a EBICS subscriber.
        userId: string;

        // The customer ID specific to the bank (therefore not
        // participating in a EBICS subscriber).
        customerId: string;

        // Human name of the user
        name: string;

        // As per specification, this value is:
        // "Date of processing of the corresponding EBICS order".  DD.MM.YYYY format.
        date: string;

        // As per specification, this value is:
        // "Time of processing of the corresponding EBICS order".  HH:MM:SS format.
        time: string;

        // Recipient.  Bank "ID" (FIXME to be specified).
        recipient: string;

        ////////////////////////////////////////////////////
        // Identification and authentication key details. //
        ////////////////////////////////////////////////////

        // Identification and authentication signature version, X002
        // for example.
        ia_version: string;

        // length of the exponent, in bits.
        ia_exp_length: number;
        // RSA key exponent
        ia_exponent: string;

        // length of the modulus, in bits.
        ia_mod_length: number;
        // RSA key modulus
        ia_modulus: string;

        // Hash of the identification and authentication key.
        ia_hash: string;

        /////////////////////////////
        // Encryption key details. //
        /////////////////////////////

        // Encryption version, E002 for example.
        enc_version: string;

        // length of the exponent, in bits.
        enc_exp_length: number;
        // RSA key exponent
        enc_exponent: string;

        // length of the modulus, in bits.
        enc_mod_length: number;
        // RSA key modulus
        enc_modulus: string;

        // RSA key hash.
        enc_hash: string;
      }
    }