summaryrefslogtreecommitdiff
path: root/gnu-taler-error-codes
diff options
context:
space:
mode:
authorJonathan Buchanan <jonathan.russ.buchanan@gmail.com>2020-06-07 21:00:40 -0400
committerJonathan Buchanan <jonathan.russ.buchanan@gmail.com>2020-06-07 21:00:40 -0400
commit3df34079629bed89b6d2e84ed396778075e61e0f (patch)
tree58d38873d60d4a5a562bdd88e469d7f4c97a6f1f /gnu-taler-error-codes
parente1b5f8e912b3aaca1719c5fd08c2152d9f7d5113 (diff)
created registry for taler error codes
Diffstat (limited to 'gnu-taler-error-codes')
-rw-r--r--gnu-taler-error-codes/Makefile7
-rw-r--r--gnu-taler-error-codes/registry.rec2672
2 files changed, 2669 insertions, 10 deletions
diff --git a/gnu-taler-error-codes/Makefile b/gnu-taler-error-codes/Makefile
index b95669f..4601f61 100644
--- a/gnu-taler-error-codes/Makefile
+++ b/gnu-taler-error-codes/Makefile
@@ -15,8 +15,11 @@ prep:
combined.tmp: registry.rec prep
recsel -t TalerErrorCode -j HttpStatus -p Description,Name,Value,HttpStatus,HttpStatus.Value,HttpStatus.Identifier ../http-status-codes/registry.rec registry.rec > $@
-taler-error-codes.h.tmp: combined.tmp h.template
- ../format.sh h.template < combined.tmp > $@
+combined-indents.tmp: combined.tmp
+ sed 's/\+ /\+ * /g' combined.tmp > combined-indents.tmp
+
+taler-error-codes.h.tmp: combined-indents.tmp h.template
+ ../format.sh h.template < combined-indents.tmp > $@
taler-error-codes.h: h.header taler-error-codes.h.tmp h.footer
cat $^ > $@
diff --git a/gnu-taler-error-codes/registry.rec b/gnu-taler-error-codes/registry.rec
index a3c52db..9f2d195 100644
--- a/gnu-taler-error-codes/registry.rec
+++ b/gnu-taler-error-codes/registry.rec
@@ -8,7 +8,7 @@
%constraint: ( Value < 100 ) || ( Value > 999 )
%type: Value ValueRange_t
%mandatory: Value
-%typedef: Description_t regexp /^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\(\)\. -]*$/
+%typedef: Description_t regexp /^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-].*$/
%type: Description Description_t
%mandatory: Description
%typedef: Name_t regexp /^[ABCDEFGHIJKLMNOPQRSTUVWXYZ_][ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*$/
@@ -23,15 +23,2671 @@
Value: 0
Name: NONE
-Description: No error (success).
+Description: Special code to indicate no error (or no "code" present).
HttpStatus: 0
Value: 1
-Name: TEST
-Description: Testing
-HttpStatus: 200
+Name: INVALID
+Description: Special code to indicate that a non-integer error code was returned in
++ the JSON response.
+HttpStatus: 0
Value: 2
-Name: TEST2
-Description: Invalid
-HttpStatus: 199
+Name: INVALID_RESPONSE
+Description: The response we got from the server was not even in JSON format.
+HttpStatus: 0
+
+Value: 3
+Name: NOT_IMPLEMENTED
+Description: Generic implementation error: this function was not yet implemented.
+HttpStatus: 0
+
+Value: 4
+Name: EXCHANGE_BAD_CONFIGURATION
+Description: Exchange is badly configured and thus cannot operate.
+HttpStatus: 0
+
+Value: 5
+Name: INTERNAL_INVARIANT_FAILURE
+Description: Internal assertion error.
+HttpStatus: 0
+
+Value: 6
+Name: TIMEOUT
+Description: Operation timed out.
+HttpStatus: 0
+
+Value: 7
+Name: JSON_ALLOCATION_FAILURE
+Description: Exchange failed to allocate memory for building JSON reply.
+HttpStatus: 0
+
+Value: 8
+Name: METHOD_INVALID
+Description: HTTP method invalid for this URL.
+HttpStatus: 0
+
+Value: 9
+Name: OPERATION_INVALID
+Description: Operation specified invalid for this URL (resulting in a "NOT FOUND"
++ for the overall response).
+HttpStatus: 0
+
+Value: 10
+Name: ENDPOINT_UNKNOWN
+Description: There is no endpoint defined for the URL provided by the client
++ (returned together with a #MHD_HTTP_NOT_FOUND status code).
+HttpStatus: 404
+
+Value: 11
+Name: URI_TOO_LONG
+Description: The URI is longer than the longest URI the HTTP server is willing to
++ parse. Returned together with an HTTP status code of
++ #MHD_HTTP_URI_TOO_LONG.
+HttpStatus: 414
+
+Value: 12
+Name: WRONG_NUMBER_OF_SEGMENTS
+Description: The number of segments included in the URI does not match the number
++ of segments expected by the endpoint. (returned together with a
++ #MHD_HTTP_NOT_FOUND status code).
+HttpStatus: 404
+
+Value: 13
+Name: HOLE_IN_WIRE_FEE_STRUCTURE
+Description: The start and end-times in the wire fee structure leave a hole. This
++ is not allowed. Generated as an error on the client-side.
+HttpStatus: 0
+
+Value: 14
+Name: VERSION_MALFORMED
+Description: The version string given does not follow the expected
++ CURRENT:REVISION:AGE Format. Generated as an error on the client
++ side.
+HttpStatus: 0
+
+Value: 15
+Name: CLIENT_INTERNAL_FAILURE
+Description: The client-side experienced an internal failure. Generated as an error
++ on the client side.
+HttpStatus: 0
+
+Value: 1001
+Name: DB_SETUP_FAILED
+Description: The exchange failed to even just initialize its connection to the
++ database. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1002
+Name: DB_START_FAILED
+Description: The exchange encountered an error event to just start the database
++ transaction. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1003
+Name: DB_COMMIT_FAILED_HARD
+Description: The exchange encountered an error event to commit the database
++ transaction (hard, unrecoverable error). This response is provided
++ with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1004
+Name: DB_COMMIT_FAILED_ON_RETRY
+Description: The exchange encountered an error event to commit the database
++ transaction, even after repeatedly retrying it there was always a
++ conflicting transaction. (This indicates a repeated serialization
++ error; should only happen if some client maliciously tries to create
++ conflicting concurrent transactions.) This response is provided with
++ HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1005
+Name: PARSER_OUT_OF_MEMORY
+Description: The exchange had insufficient memory to parse the request. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1006
+Name: JSON_INVALID
+Description: The JSON in the client's request to the exchange was malformed.
++ (Generic parse error). This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1007
+Name: JSON_INVALID_WITH_DETAILS
+Description: The JSON in the client's request to the exchange was malformed.
++ Details about the location of the parse error are provided. This
++ response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1008
+Name: PARAMETER_MISSING
+Description: A required parameter in the request to the exchange was missing. This
++ response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1009
+Name: PARAMETER_MALFORMED
+Description: A parameter in the request to the exchange was malformed. This
++ response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1010
+Name: COIN_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS
+Description: The exchange failed to obtain the transaction history of the given
++ coin from the database while generating an insufficient funds errors.
++ This can happen during /deposit or /recoup requests. This response is
++ provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1011
+Name: INTERNAL_LOGIC_ERROR
+Description: Internal logic error. Some server-side function failed that really
++ should not. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1012
+Name: PAYTO_WRONG_METHOD
+Description: The method specified in a payto:// URI is not one we expected.
+HttpStatus: 0
+
+Value: 1013
+Name: PAYTO_MALFORMED
+Description: The payto:// URI is malformed.
+HttpStatus: 0
+
+Value: 1014
+Name: DB_COIN_HISTORY_STORE_ERROR
+Description: We failed to update the database of known coins.
+HttpStatus: 0
+
+Value: 1050
+Name: COINS_INVALID_COIN_PUB
+Description: The public key of given to a /coins/ handler was malformed.
+HttpStatus: 0
+
+Value: 1051
+Name: RESERVES_INVALID_RESERVE_PUB
+Description: The reserve key of given to a /reserves/ handler was malformed.
+HttpStatus: 0
+
+Value: 1052
+Name: TRANSFERS_INVALID_WTID
+Description: The public key of given to a /transfers/ handler was malformed.
+HttpStatus: 0
+
+Value: 1053
+Name: DEPOSITS_INVALID_H_WIRE
+Description: The wire hash of given to a /deposits/ handler was malformed.
+HttpStatus: 0
+
+Value: 1054
+Name: DEPOSITS_INVALID_MERCHANT_PUB
+Description: The merchant key of given to a /deposits/ handler was malformed.
+HttpStatus: 0
+
+Value: 1055
+Name: DEPOSITS_INVALID_H_CONTRACT_TERMS
+Description: The hash of the contract terms given to a /deposits/ handler was
++ malformed.
+HttpStatus: 0
+
+Value: 1056
+Name: DEPOSITS_INVALID_COIN_PUB
+Description: The coin public key of given to a /deposits/ handler was malformed.
+HttpStatus: 0
+
+Value: 1057
+Name: DEPOSITS_INVALID_BODY_BY_EXCHANGE
+Description: The body returned by the exchange for a /deposits/ request was
++ malformed. Error created client-side.
+HttpStatus: 0
+
+Value: 1058
+Name: DEPOSITS_INVALID_SIGNATURE_BY_EXCHANGE
+Description: The signature returned by the exchange in a /deposits/ request was
++ malformed. Error created client-side.
+HttpStatus: 0
+
+Value: 1100
+Name: WITHDRAW_INSUFFICIENT_FUNDS
+Description: The given reserve does not have sufficient funds to admit the
++ requested withdraw operation at this time. The response includes the
++ current "balance" of the reserve as well as the transaction "history"
++ that lead to this balance. This response is provided with HTTP status
++ code #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 1101
+Name: WITHDRAW_RESERVE_UNKNOWN
+Description: The exchange has no information about the "reserve_pub" that was
++ given. This response is provided with HTTP status code
++ #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1102
+Name: WITHDRAW_AMOUNT_FEE_OVERFLOW
+Description: The amount to withdraw together with the fee exceeds the numeric range
++ for Taler amounts. This is not a client failure, as the coin value
++ and fees come from the exchange's configuration. This response is
++ provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1103
+Name: AMOUNT_DEPOSITS_OVERFLOW
+Description: All of the deposited amounts into this reserve total up to a value
++ that is too big for the numeric range for Taler amounts. This is not a
++ client failure, as the transaction history comes from the exchange's
++ configuration. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1104
+Name: WITHDRAW_HISTORIC_DENOMINATION_KEY_NOT_FOUND
+Description: For one of the historic withdrawals from this reserve, the exchange
++ could not find the denomination key. This is not a client failure, as
++ the transaction history comes from the exchange's configuration. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1105
+Name: WITHDRAW_AMOUNT_WITHDRAWALS_OVERFLOW
+Description: All of the withdrawals from reserve total up to a value that is too
++ big for the numeric range for Taler amounts. This is not a client
++ failure, as the transaction history comes from the exchange's
++ configuration. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1106
+Name: WITHDRAW_RESERVE_WITHOUT_WIRE_TRANSFER
+Description: The exchange somehow knows about this reserve, but there seem to have
++ been no wire transfers made. This is not a client failure, as this is
++ a database consistency issue of the exchange. This response is
++ provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1107
+Name: WITHDRAW_SIGNATURE_FAILED
+Description: The exchange failed to create the signature using the denomination
++ key. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1108
+Name: WITHDRAW_DB_STORE_ERROR
+Description: The exchange failed to store the withdraw operation in its database.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1109
+Name: WITHDRAW_DB_FETCH_ERROR
+Description: The exchange failed to check against historic withdraw data from
++ database (as part of ensuring the idempotency of the operation). This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1110
+Name: WITHDRAW_DENOMINATION_KEY_NOT_FOUND
+Description: The exchange is not aware of the denomination key the wallet requested
++ for the withdrawal. This response is provided with HTTP status code
++ #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1111
+Name: WITHDRAW_RESERVE_SIGNATURE_INVALID
+Description: The signature of the reserve is not valid. This response is provided
++ with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1112
+Name: WITHDRAW_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS
+Description: When computing the reserve history, we ended up with a negative
++ overall balance, which should be impossible. This response is provided
++ with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1113
+Name: WITHDRAW_RESERVE_HISTORY_IMPOSSIBLE
+Description: When computing the reserve history, we ended up with a negative
++ overall balance, which should be impossible. This response is provided
++ with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1114
+Name: WITHDRAW_VALIDITY_IN_FUTURE
+Description: Validity period of the coin to be withdrawn is in the future.
++ Returned with an HTTP status of #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 1115
+Name: WITHDRAW_VALIDITY_IN_PAST
+Description: Withdraw period of the coin to be withdrawn is in the past. Returned
++ with an HTTP status of #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 1116
+Name: DENOMINATION_KEY_LOST
+Description: Withdraw period of the coin to be withdrawn is in the past. Returned
++ with an HTTP status of #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 1117
+Name: WITHDRAW_RESERVE_BALANCE_CORRUPT
+Description: The exchange's database entry with the reserve balance summary is
++ inconsistent with its own history of the reserve. Returned with an
++ HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1118
+Name: WITHDRAW_REPLY_MALFORMED
+Description: The exchange responded with a reply that did not satsify the protocol.
++ This error is not used in the protocol but created client-side.
+HttpStatus: 0
+
+Value: 1119
+Name: WITHDRAW_UNBLIND_FAILURE
+Description: The client failed to unblind the blind signature. This error is not
++ used in the protocol but created client-side.
+HttpStatus: 0
+
+Value: 1150
+Name: RESERVE_STATUS_DB_ERROR
+Description: The exchange failed to obtain the transaction history of the given
++ reserve from the database. This response is provided with HTTP status
++ code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1151
+Name: RESERVE_STATUS_UNKNOWN
+Description: The reserve status was requested using a unknown key, to be returned
++ with 404 Not Found.
+HttpStatus: 0
+
+Value: 1152
+Name: RESERVE_STATUS_REPLY_MALFORMED
+Description: The exchange responded with a reply that did not satsify the protocol.
++ This error is not used in the protocol but created client-side.
+HttpStatus: 0
+
+Value: 1200
+Name: DEPOSIT_INSUFFICIENT_FUNDS
+Description: The respective coin did not have sufficient residual value for the
++ /deposit operation (i.e. due to double spending). The "history" in the
++ respose provides the transaction history of the coin proving this
++ fact. This response is provided with HTTP status code
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 1201
+Name: DEPOSIT_HISTORY_DB_ERROR
+Description: The exchange failed to obtain the transaction history of the given
++ coin from the database (this does not happen merely because the coin
++ is seen by the exchange for the first time). This response is provided
++ with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1202
+Name: DEPOSIT_STORE_DB_ERROR
+Description: The exchange failed to store the /depost information in the database.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1203
+Name: DEPOSIT_DB_DENOMINATION_KEY_UNKNOWN
+Description: The exchange database is unaware of the denomination key that signed
++ the coin (however, the exchange process is; this is not supposed to
++ happen; it can happen if someone decides to purge the DB behind the
++ back of the exchange process). Hence the deposit is being refused.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1204
+Name: DEPOSIT_DENOMINATION_KEY_UNKNOWN
+Description: The exchange was trying to lookup the denomination key for the purpose
++ of a DEPOSIT operation. However, the denomination key is unavailable
++ for that purpose. This can be because it is entirely unknown to the
++ exchange or not in the validity period for the deposit operation.
++ Hence the deposit is being refused. This response is provided with
++ HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1205
+Name: DEPOSIT_COIN_SIGNATURE_INVALID
+Description: The signature made by the coin over the deposit permission is not
++ valid. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1206
+Name: DEPOSIT_DENOMINATION_SIGNATURE_INVALID
+Description: The signature of the denomination key over the coin is not valid. This
++ response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1207
+Name: DEPOSIT_NEGATIVE_VALUE_AFTER_FEE
+Description: The stated value of the coin after the deposit fee is subtracted would
++ be negative. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1208
+Name: DEPOSIT_REFUND_DEADLINE_AFTER_WIRE_DEADLINE
+Description: The stated refund deadline is after the wire deadline. This response
++ is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1209
+Name: DEPOSIT_INVALID_WIRE_FORMAT_TYPE
+Description: The exchange does not recognize the validity of or support the given
++ wire format type. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1210
+Name: DEPOSIT_INVALID_WIRE_FORMAT_JSON
+Description: The exchange failed to canonicalize and hash the given wire format.
++ For example, the merchant failed to provide the "salt" or a valid
++ payto:// URI in the wire details. Note that while the exchange will
++ do some basic sanity checking on the wire details, it cannot warrant
++ that the banking system will ultimately be able to route to the
++ specified address, even if this check passed. This response is
++ provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1211
+Name: DEPOSIT_INVALID_WIRE_FORMAT_CONTRACT_HASH_CONFLICT
+Description: The hash of the given wire address does not match the hash specified
++ in the proposal data. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1213
+Name: DEPOSIT_INVALID_WIRE_FORMAT_ACCOUNT_NUMBER
+Description: The exchange detected that the given account number is invalid for the
++ selected wire format type. This response is provided with HTTP status
++ code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1218
+Name: DEPOSIT_INVALID_TIMESTAMP
+Description: Timestamp included in deposit permission is intolerably far off with
++ respect to the clock of the exchange.
+HttpStatus: 0
+
+Value: 1219
+Name: DEPOSIT_DENOMINATION_VALIDITY_IN_FUTURE
+Description: Validity period of the denomination key is in the future. Returned
++ with an HTTP status of #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 1220
+Name: DEPOSIT_DENOMINATION_EXPIRED
+Description: Denomination key of the coin is past the deposit deadline. Returned
++ with an HTTP status of #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 1221
+Name: DEPOSIT_INVALID_SIGNATURE_BY_EXCHANGE
+Description: The signature provided by the exchange is not valid. Error created
++ client-side.
+HttpStatus: 0
+
+Value: 1222
+Name: DEPOSIT_CURRENCY_MISMATCH
+Description: The currency specified for the deposit is different from the currency
++ of the coin. This response is provided with HTTP status code
++ #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 1300
+Name: MELT_INSUFFICIENT_FUNDS
+Description: The respective coin did not have sufficient residual value for the
++ /refresh/melt operation. The "history" in this response provdes the
++ "residual_value" of the coin, which may be less than its
++ "original_value". This response is provided with HTTP status code
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 1301
+Name: MELT_DENOMINATION_KEY_NOT_FOUND
+Description: The respective coin did not have sufficient residual value for the
++ /refresh/melt operation. The "history" in this response provdes the
++ "residual_value" of the coin, which may be less than its
++ "original_value". This response is provided with HTTP status code
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 1302
+Name: MELT_COIN_HISTORY_COMPUTATION_FAILED
+Description: The exchange had an internal error reconstructing the transaction
++ history of the coin that was being melted. This response is provided
++ with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1303
+Name: MELT_DB_FETCH_ERROR
+Description: The exchange failed to check against historic melt data from database
++ (as part of ensuring the idempotency of the operation). This response
++ is provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1304
+Name: MELT_DB_STORE_SESSION_ERROR
+Description: The exchange failed to store session data in the database. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1305
+Name: MELT_FEES_EXCEED_CONTRIBUTION
+Description: The exchange encountered melt fees exceeding the melted coin's
++ contribution. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1306
+Name: MELT_DENOMINATION_SIGNATURE_INVALID
+Description: The denomination key signature on the melted coin is invalid. This
++ response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1307
+Name: MELT_COIN_SIGNATURE_INVALID
+Description: The signature made with the coin to be melted is invalid. This
++ response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1308
+Name: MELT_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS
+Description: The exchange failed to obtain the transaction history of the given
++ coin from the database while generating an insufficient funds errors.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1309
+Name: MELT_COIN_EXPIRED_NO_ZOMBIE
+Description: The denomination of the given coin has past its expiration date and it
++ is also not a valid zombie (that is, was not refreshed with the fresh
++ coin being subjected to recoup).
+HttpStatus: 0
+
+Value: 1310
+Name: MELT_INVALID_SIGNATURE_BY_EXCHANGE
+Description: The signature returned by the exchange in a melt request was
++ malformed. Error created client-side.
+HttpStatus: 0
+
+Value: 1311
+Name: MELT_CURRENCY_MISMATCH
+Description: The currency specified for the melt amount is different from the
++ currency of the coin. This response is provided with HTTP status code
++ #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 1351
+Name: REFRESH_RECOUP_DENOMINATION_KEY_NOT_FOUND
+Description: The exchange is unaware of the denomination key that was used to sign
++ the melted zombie coin. This response is provided with HTTP status
++ code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1352
+Name: REFRESH_RECOUP_DENOMINATION_VALIDITY_IN_FUTURE
+Description: Validity period of the denomination key is in the future. Returned
++ with an HTTP status of #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 1353
+Name: REFRESH_RECOUP_DENOMINATION_EXPIRED
+Description: Denomination key of the coin is past the deposit deadline. Returned
++ with an HTTP status of #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 1354
+Name: REFRESH_ZOMBIE_DENOMINATION_EXPIRED
+Description: Denomination key of the coin is past the deposit deadline. Returned
++ with an HTTP status of #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 1370
+Name: REVEAL_COMMITMENT_VIOLATION
+Description: The provided transfer keys do not match up with the original
++ commitment. Information about the original commitment is included in
++ the response. This response is provided with HTTP status code
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 1371
+Name: REVEAL_SIGNING_ERROR
+Description: Failed to produce the blinded signatures over the coins to be
++ returned. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1372
+Name: REVEAL_SESSION_UNKNOWN
+Description: The exchange is unaware of the refresh session specified in the
++ request. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1373
+Name: REVEAL_DB_FETCH_SESSION_ERROR
+Description: The exchange failed to retrieve valid session data from the database.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1374
+Name: REVEAL_DB_FETCH_REVEAL_ERROR
+Description: The exchange failed to retrieve previously revealed data from the
++ database. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1375
+Name: REVEAL_DB_COMMIT_ERROR
+Description: The exchange failed to retrieve commitment data from the database.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1376
+Name: REVEAL_CNC_TRANSFER_ARRAY_SIZE_INVALID
+Description: The size of the cut-and-choose dimension of the private transfer keys
++ request does not match #TALER_CNC_KAPPA - 1. This response is provided
++ with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1377
+Name: REVEAL_NEW_DENOMS_ARRAY_SIZE_EXCESSIVE
+Description: The number of coins to be created in refresh exceeds the limits of the
++ exchange. private transfer keys request does not match
++ #TALER_CNC_KAPPA - 1. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1378
+Name: REVEAL_NEW_DENOMS_ARRAY_SIZE_MISMATCH
+Description: The number of envelopes given does not match the number of
++ denomination keys given. This response is provided with HTTP status
++ code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1379
+Name: REVEAL_COST_CALCULATION_OVERFLOW
+Description: The exchange encountered a numeric overflow totaling up the cost for
++ the refresh operation. This response is provided with HTTP status
++ code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1380
+Name: REVEAL_AMOUNT_INSUFFICIENT
+Description: The exchange's cost calculation shows that the melt amount is below
++ the costs of the transaction. This response is provided with HTTP
++ status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1381
+Name: REVEAL_FRESH_DENOMINATION_KEY_NOT_FOUND
+Description: The exchange is unaware of the denomination key that was requested for
++ one of the fresh coins. This response is provided with HTTP status
++ code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1382
+Name: REVEAL_LINK_SIGNATURE_INVALID
+Description: The signature made with the coin over the link data is invalid. This
++ response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1383
+Name: REVEAL_KEYS_MISSING
+Description: The exchange failed to generate the signature as it could not find the
++ signing key for the denomination. This response is provided with HTTP
++ status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1384
+Name: REVEAL_INVALID_RCH
+Description: The refresh session hash given to a /refreshes/ handler was malformed.
+HttpStatus: 0
+
+Value: 1385
+Name: REVEAL_REPLY_MALFORMED
+Description: The exchange responded with a reply that did not satsify the protocol.
++ This error is not used in the protocol but created client-side.
+HttpStatus: 0
+
+Value: 1400
+Name: LINK_COIN_UNKNOWN
+Description: The coin specified in the link request is unknown to the exchange.
++ This response is provided with HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1401
+Name: LINK_REPLY_MALFORMED
+Description: The exchange responded with a reply that did not satsify the protocol.
++ This error is not used in the protocol but created client-side.
+HttpStatus: 0
+
+Value: 1500
+Name: REFUND_COIN_NOT_FOUND
+Description: The exchange knows literally nothing about the coin we were asked to
++ refund. But without a transaction history, we cannot issue a refund.
++ This is kind-of OK, the owner should just refresh it directly without
++ executing the refund. This response is provided with HTTP status code
++ #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1501
+Name: REFUND_CONFLICT
+Description: We could not process the refund request as the coin's transaction
++ history does not permit the requested refund at this time. The
++ "history" in the response proves this. This response is provided with
++ HTTP status code #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 1503
+Name: REFUND_DEPOSIT_NOT_FOUND
+Description: The exchange knows about the coin we were asked to refund, but not
++ about the specific /deposit operation. Hence, we cannot issue a
++ refund (as we do not know if this merchant public key is authorized to
++ do a refund). This response is provided with HTTP status code
++ #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1504
+Name: REFUND_CURRENCY_MISMATCH
+Description: The currency specified for the refund is different from the currency
++ of the coin. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1505
+Name: REFUND_DB_INCONSISTENT
+Description: When we tried to check if we already paid out the coin, the exchange's
++ database suddenly disagreed with data it previously provided (internal
++ inconsistency). This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1506
+Name: REFUND_MERCHANT_ALREADY_PAID
+Description: The exchange can no longer refund the customer/coin as the money was
++ already transferred (paid out) to the merchant. (It should be past the
++ refund deadline.) This response is provided with HTTP status code
++ #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 1507
+Name: REFUND_INSUFFICIENT_FUNDS
+Description: The amount the exchange was asked to refund exceeds (with fees) the
++ total amount of the deposit (including fees). This response is
++ provided with HTTP status code #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 1508
+Name: REFUND_DENOMINATION_KEY_NOT_FOUND
+Description: The exchange failed to recover information about the denomination key
++ of the refunded coin (even though it recognizes the key). Hence it
++ could not check the fee strucutre. This response is provided with HTTP
++ status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1509
+Name: REFUND_FEE_TOO_LOW
+Description: The refund fee specified for the request is lower than the refund fee
++ charged by the exchange for the given denomination key of the refunded
++ coin. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1510
+Name: REFUND_STORE_DB_ERROR
+Description: The exchange failed to store the refund information to its database.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1511
+Name: REFUND_FEE_CURRENCY_MISMATCH
+Description: The refund fee is specified in a different currency than the refund
++ amount. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1512
+Name: REFUND_FEE_ABOVE_AMOUNT
+Description: The refunded amount is smaller than the refund fee, which would result
++ in a negative refund. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1513
+Name: REFUND_MERCHANT_SIGNATURE_INVALID
+Description: The signature of the merchant is invalid. This response is provided
++ with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1514
+Name: REFUND_MERCHANT_SIGNING_FAILED
+Description: Merchant backend failed to create the refund confirmation signature.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1515
+Name: REFUND_INVALID_SIGNATURE_BY_EXCHANGE
+Description: The signature returned by the exchange in a refund request was
++ malformed. Error created client-side.
+HttpStatus: 0
+
+Value: 1600
+Name: ADMIN_ADD_INCOMING_WIREFORMAT_UNSUPPORTED
+Description: The wire format specified in the "sender_account_details" is not
++ understood or not supported by this exchange. Returned with an HTTP
++ status code of #MHD_HTTP_NOT_FOUND. (As we did not find an
++ interpretation of the wire format.)
+HttpStatus: 404
+
+Value: 1601
+Name: ADMIN_ADD_INCOMING_CURRENCY_UNSUPPORTED
+Description: The currency specified in the "amount" parameter is not supported by
++ this exhange. Returned with an HTTP status code of
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1602
+Name: ADMIN_ADD_INCOMING_DB_STORE
+Description: The exchange failed to store information about the incoming transfer
++ in its database. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1700
+Name: TRANSFERS_GET_DB_FETCH_FAILED
+Description: The exchange encountered an error (that is not about not finding the
++ wire transfer) trying to lookup a wire transfer identifier in the
++ database. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1701
+Name: TRANSFERS_GET_DB_INCONSISTENT
+Description: The exchange found internally inconsistent data when resolving a wire
++ transfer identifier in the database. This response is provided with
++ HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1702
+Name: TRANSFERS_GET_WTID_NOT_FOUND
+Description: The exchange did not find information about the specified wire
++ transfer identifier in the database. This response is provided with
++ HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1703
+Name: TRANSFERS_GET_WIRE_FEE_NOT_FOUND
+Description: The exchange did not find information about the wire transfer fees it
++ charged. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1704
+Name: TRANSFERS_GET_WIRE_FEE_INCONSISTENT
+Description: The exchange found a wire fee that was above the total transfer value
++ (and thus could not have been charged). This response is provided with
++ HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1705
+Name: TRANSFERS_GET_REPLY_MALFORMED
+Description: The exchange responded with a reply that did not satsify the protocol.
++ This error is not used in the protocol but created client-side.
+HttpStatus: 0
+
+Value: 1800
+Name: DEPOSITS_GET_DB_FEE_INCONSISTENT
+Description: The exchange found internally inconsistent fee data when resolving a
++ transaction in the database. This response is provided with HTTP
++ status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1801
+Name: DEPOSITS_GET_DB_FETCH_FAILED
+Description: The exchange encountered an error (that is not about not finding the
++ transaction) trying to lookup a transaction in the database. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1802
+Name: DEPOSITS_GET_NOT_FOUND
+Description: The exchange did not find information about the specified transaction
++ in the database. This response is provided with HTTP status code
++ #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1803
+Name: DEPOSITS_GET_WTID_RESOLUTION_ERROR
+Description: The exchange failed to identify the wire transfer of the transaction
++ (or information about the plan that it was supposed to still happen in
++ the future). This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1804
+Name: DEPOSITS_GET_MERCHANT_SIGNATURE_INVALID
+Description: The signature of the merchant is invalid. This response is provided
++ with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1850
+Name: RECOUP_DENOMINATION_KEY_UNKNOWN
+Description: The given denomination key is not in the "recoup" set of the exchange
++ right now. This response is provided with an HTTP status code of
++ #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1851
+Name: RECOUP_SIGNATURE_INVALID
+Description: The given coin signature is invalid for the request. This response is
++ provided with an HTTP status code of #MHD_HTTP_FORBIDDEN.
+HttpStatus: 403
+
+Value: 1852
+Name: RECOUP_DENOMINATION_SIGNATURE_INVALID
+Description: The signature of the denomination key over the coin is not valid. This
++ response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1853
+Name: RECOUP_DB_FETCH_FAILED
+Description: The exchange failed to access its own database about reserves. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1854
+Name: RECOUP_WITHDRAW_NOT_FOUND
+Description: The exchange could not find the corresponding withdraw operation. The
++ request is denied. This response is provided with an HTTP status code
++ of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 1855
+Name: RECOUP_HISTORY_DB_ERROR
+Description: The exchange obtained an internally inconsistent transaction history
++ for the given coin. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1856
+Name: RECOUP_DB_PUT_FAILED
+Description: The exchange failed to store information about the recoup to be
++ performed in the database. This response is provided with HTTP status
++ code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1857
+Name: RECOUP_COIN_BALANCE_ZERO
+Description: The coin's remaining balance is zero. The request is denied. This
++ response is provided with an HTTP status code of #MHD_HTTP_FORBIDDEN.
+HttpStatus: 403
+
+Value: 1858
+Name: RECOUP_BLINDING_FAILED
+Description: The exchange failed to reproduce the coin's blinding. This response is
++ provided with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1859
+Name: RECOUP_COIN_BALANCE_NEGATIVE
+Description: The coin's remaining balance is zero. The request is denied. This
++ response is provided with an HTTP status code of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR
+HttpStatus: 500
+
+Value: 1860
+Name: RECOUP_DENOMINATION_VALIDITY_IN_FUTURE
+Description: Validity period of the denomination key is in the future. Returned
++ with an HTTP status of #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 1861
+Name: RECOUP_REPLY_MALFORMED
+Description: The exchange responded with a reply that did not satsify the protocol.
++ This error is not used in the protocol but created client-side.
+HttpStatus: 0
+
+Value: 1900
+Name: KEYS_HAVE_NOT_NUMERIC
+Description: The "have" parameter was not a natural number. This response is
++ provied with an HTTP status code of #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 1901
+Name: KEYS_MISSING
+Description: We currently cannot find any keys. This response is provied with an
++ HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 1902
+Name: KEYS_TIMETRAVEL_FORBIDDEN
+Description: This exchange does not allow clients to request /keys for times other
++ than the current (exchange) time. This response is provied with an
++ HTTP status code of #MHD_HTTP_FORBIDDEN.
+HttpStatus: 403
+
+Value: 1903
+Name: KEYS_INVALID
+Description: The keys response was malformed. This error is generated client-side.
+HttpStatus: 0
+
+Value: 2000
+Name: INSTANCE_UNKNOWN
+Description: The backend could not find the merchant instance specified in the
++ request. This response is provided with HTTP status code
++ #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2002
+Name: PROPOSAL_INSTANCE_CONFIGURATION_LACKS_WIRE
+Description: The backend lacks a wire transfer method configuration option for the
++ given instance.
+HttpStatus: 0
+
+Value: 2100
+Name: PAY_MERCHANT_INVALID_RESPONSE
+Description: The merchant failed to provide a meaningful response to a /pay
++ request. This error is created client-side.
+HttpStatus: 0
+
+Value: 2101
+Name: PAY_EXCHANGE_FAILED
+Description: The exchange failed to provide a meaningful response to a /deposit
++ request. This response is provided with HTTP status code
++ #MHD_HTTP_FAILED_DEPENDENCY, or #MHD_HTTP_CONFLICT in case the
++ exchange reports #TALER_EC_DEPOSIT_INSUFFICIENT_FUNDS (aka double
++ spending).
+HttpStatus: 424
+HttpStatus: 409
+
+Value: 2102
+Name: PAY_DB_STORE_PAY_ERROR
+Description: The merchant failed to commit the exchanges' response to a /deposit
++ request to its database. This response is provided with HTTP status
++ code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2103
+Name: PAY_EXCHANGE_REJECTED
+Description: The specified exchange is not supported/trusted by this merchant.
++ This response is provided with HTTP status code
++ #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 2104
+Name: PAY_DENOMINATION_KEY_NOT_FOUND
+Description: The denomination key used for payment is not listed among the
++ denomination keys of the exchange. This response is provided with
++ HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2105
+Name: PAY_DENOMINATION_KEY_AUDITOR_FAILURE
+Description: The denomination key used for payment is not audited by an auditor
++ approved by the merchant. This response is provided with HTTP status
++ code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2106
+Name: PAY_AMOUNT_OVERFLOW
+Description: There was an integer overflow totaling up the amounts or deposit fees
++ in the payment. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2107
+Name: PAY_FEES_EXCEED_PAYMENT
+Description: The deposit fees exceed the total value of the payment. This response
++ is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2108
+Name: PAY_PAYMENT_INSUFFICIENT_DUE_TO_FEES
+Description: After considering deposit and wire fees, the payment is insufficient
++ to satisfy the required amount for the contract. The client should
++ revisit the logic used to calculate fees it must cover. This response
++ is provided with HTTP status code #MHD_HTTP_ACCEPTED.
+HttpStatus: 202
+
+Value: 2109
+Name: PAY_PAYMENT_INSUFFICIENT
+Description: Even if we do not consider deposit and wire fees, the payment is
++ insufficient to satisfy the required amount for the contract. This
++ response is provided with HTTP status code #MHD_HTTP_ACCEPTED.
+HttpStatus: 202
+
+Value: 2110
+Name: PAY_COIN_SIGNATURE_INVALID
+Description: The signature over the contract of one of the coins was invalid. This
++ response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2111
+Name: PAY_EXCHANGE_TIMEOUT
+Description: We failed to contact the exchange for the /pay request. This response
++ is provided with HTTP status code #MHD_HTTP_REQUEST_TIMEOUT.
+HttpStatus: 408
+
+Value: 2112
+Name: PAY_EXCHANGE_LOOKUP_FAILED
+Description: When we tried to find information about the exchange to issue the
++ deposit, we failed. This usually only happens if the merchant backend
++ is somehow unable to get its own HTTP client logic to work. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2114
+Name: PAY_REFUND_DEADLINE_PAST_WIRE_TRANSFER_DEADLINE
+Description: The refund deadline in the contract is after the transfer deadline.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR as this should have been caught when
++ the offer was first setup.
+HttpStatus: 500
+
+Value: 2115
+Name: PAY_COINS_ARRAY_EMPTY
+Description: The request fails to provide coins for the payment. This response is
++ provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2116
+Name: PAY_DB_FETCH_PAY_ERROR
+Description: The merchant failed to fetch the contract terms from the merchant's
++ database. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2117
+Name: PAY_DB_FETCH_TRANSACTION_ERROR
+Description: The merchant failed to fetch the merchant's previous state with
++ respect to transactions from its database. This response is provided
++ with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2119
+Name: PAY_DB_STORE_TRANSACTION_ERROR
+Description: The merchant failed to store the merchant's state with respect to the
++ transaction in its database. This response is provided with HTTP
++ status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2120
+Name: PAY_EXCHANGE_KEYS_FAILURE
+Description: The exchange failed to provide a valid response to the merchant's
++ /keys request. This response is provided with HTTP status code
++ #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2121
+Name: PAY_OFFER_EXPIRED
+Description: The payment is too late, the offer has expired. This response is
++ provided with HTTP status code #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 2122
+Name: PAY_MERCHANT_FIELD_MISSING
+Description: The "merchant" field is missing in the proposal data. This response is
++ provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2123
+Name: PAY_FAILED_COMPUTE_PROPOSAL_HASH
+Description: Failed computing a hash code (likely server out-of-memory). This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2124
+Name: PAY_WIRE_HASH_UNKNOWN
+Description: Failed to locate merchant's account information matching the wire hash
++ given in the proposal. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2125
+Name: PAY_WIRE_FEE_CURRENCY_MISMATCH
+Description: We got different currencies for the wire fee and the maximum wire fee.
++ This response is provided with HTTP status code of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2127
+Name: PAY_WRONG_INSTANCE
+Description: A unknown merchant public key was included in the payment. That
++ happens typically when the wallet sends the payment to the wrong
++ merchant instance. This response is provided with an HTTP status code
++ of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2128
+Name: PAY_EXCHANGE_HAS_NO_KEYS
+Description: The exchange failed to give us a response when we asked for /keys.
++ This response is provided with HTTP status code
++ #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2129
+Name: PAY_DENOMINATION_DEPOSIT_EXPIRED
+Description: The deposit time for the denomination has expired. This response is
++ provided with HTTP status code #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 2130
+Name: PAY_PROPOSAL_NOT_FOUND
+Description: The proposal is not known to the backend. This response is provided
++ with an HTTP status code of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2131
+Name: PAY_EXCHANGE_WIRE_FEE_ADDITION_FAILED
+Description: The exchange of the deposited coin charges a wire fee that could not
++ be added to the total (total amount too high). This response is
++ provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2132
+Name: PAY_REFUNDED
+Description: The contract was not fully paid because of refunds. Note that clients
++ MAY treat this as paid if, for example, contracts must be executed
++ despite of refunds. This response is provided with HTTP status code
++ #MHD_HTTP_PAYMENT_REQUIRED.
+HttpStatus: 402
+
+Value: 2133
+Name: PAY_REFUNDS_EXCEED_PAYMENTS
+Description: According to our database, we have refunded more than we were paid
++ (which should not be possible). This response is provided with HTTP
++ status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2134
+Name: PAY_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE
+Description: Legacy stuff. Remove me with protocol v1. This response is provided
++ with HTTP status code #MHD_HTTP_PREREQUISITE.
+HttpStatus: 0
+
+Value: 2150
+Name: ABORT_EXCHANGE_KEYS_FAILURE
+Description: The merchant failed to contact the exchange. This response is provided
++ with HTTP status code of #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2151
+Name: ABORT_EXCHANGE_REFUND_FAILED
+Description: The merchant failed to send the exchange the refund request. This
++ response is provided with HTTP status code of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2152
+Name: ABORT_EXCHANGE_LOOKUP_FAILED
+Description: The merchant failed to find the exchange to process the lookup. This
++ response is provided with HTTP status code of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2153
+Name: ABORT_DB_STORE_ABORT_ERROR
+Description: The merchant failed to store the abort request in its database. This
++ response is provided with HTTP status code of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2154
+Name: ABORT_DB_STORE_TRANSACTION_ERROR
+Description: The merchant failed to repeatedly serialize the transaction. This
++ response is provided with HTTP status code of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2155
+Name: ABORT_DB_FETCH_TRANSACTION_ERROR
+Description: The merchant failed in the lookup part of the transaction. This
++ response is provided with HTTP status code of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2156
+Name: ABORT_CONTRACT_NOT_FOUND
+Description: The merchant could not find the contract. This response is provided
++ with HTTP status code of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2157
+Name: ABORT_REFUND_REFUSED_PAYMENT_COMPLETE
+Description: The payment was already completed and thus cannot be aborted anymore.
++ This response is provided with HTTP status code of
++ #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 2158
+Name: ABORT_CONTRACT_HASH_MISSMATCH
+Description: The hash provided by the wallet does not match the order. This
++ response is provided with HTTP status code of #MHD_HTTP_FORBIDDEN.
+HttpStatus: 403
+
+Value: 2159
+Name: ABORT_COINS_ARRAY_EMPTY
+Description: The array of coins cannot be empty. This response is provided with
++ HTTP status code of #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2160
+Name: ABORT_EXCHANGE_TIMEOUT
+Description: The merchant experienced a timeout processing the request. This
++ response is provided with HTTP status code of
++ #MHD_HTTP_REQUEST_TIMEOUT.
+HttpStatus: 408
+
+Value: 2200
+Name: HISTORY_TIMESTAMP_OVERFLOW
+Description: Integer overflow with specified timestamp argument detected. This
++ response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2201
+Name: HISTORY_DB_FETCH_ERROR
+Description: Failed to retrieve history from merchant database. This response is
++ provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2250
+Name: POLL_PAYMENT_CONTRACT_NOT_FOUND
+Description: The backend could not find the contract specified in the request.
++ This response is provided with HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2251
+Name: POLL_PAYMENT_REPLY_MALFORMED
+Description: The response provided by the merchant backend was malformed. This
++ error is created client-side.
+HttpStatus: 0
+
+Value: 2300
+Name: TRACK_TRANSACTION_EXCHANGE_TIMEOUT
+Description: We failed to contact the exchange for the /track/transaction request.
++ This response is provided with HTTP status code
++ #MHD_HTTP_SERVICE_UNAVAILABLE.
+HttpStatus: 503
+
+Value: 2301
+Name: TRACK_TRANSACTION_EXCHANGE_KEYS_FAILURE
+Description: We failed to get a valid /keys response from the exchange for the
++ /track/transaction request. This response is provided with HTTP
++ status code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2302
+Name: TRACK_TRANSACTION_TRANSACTION_UNKNOWN
+Description: The backend could not find the transaction specified in the request.
++ This response is provided with HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2303
+Name: TRACK_TRANSACTION_DB_FETCH_TRANSACTION_ERROR
+Description: The backend had a database access error trying to retrieve transaction
++ data from its database. The response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2304
+Name: TRACK_TRANSACTION_DB_FETCH_PAYMENT_ERROR
+Description: The backend had a database access error trying to retrieve payment
++ data from its database. The response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2305
+Name: TRACK_TRANSACTION_DB_NO_DEPOSITS_ERROR
+Description: The backend found no applicable deposits in the database. This is odd,
++ as we know about the transaction, but not about deposits we made for
++ the transaction. The response is provided with HTTP status code
++ #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2306
+Name: TRACK_TRANSACTION_COIN_TRACE_ERROR
+Description: We failed to obtain a wire transfer identifier for one of the coins in
++ the transaction. The response is provided with HTTP status code
++ #MHD_HTTP_FAILED_DEPENDENCY if the exchange had a hard error, or
++ #MHD_HTTP_ACCEPTED if the exchange signaled that the transfer was in
++ progress.
+HttpStatus: 424
+HttpStatus: 202
+
+Value: 2307
+Name: TRACK_TRANSACTION_WIRE_TRANSFER_TRACE_ERROR
+Description: We failed to obtain the full wire transfer identifier for the transfer
++ one of the coins was aggregated into. The response is provided with
++ HTTP status code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2308
+Name: TRACK_TRANSACTION_CONFLICTING_REPORTS
+Description: We got conflicting reports from the exhange with respect to which
++ transfers are included in which aggregate. The response is provided
++ with HTTP status code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2350
+Name: GET_TRANSFERS_DB_FETCH_ERROR
+Description: We did failed to retrieve information from our database. The response
++ is provided with an HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2400
+Name: POST_TRANSFERS_EXCHANGE_TIMEOUT
+Description: We failed to contact the exchange for the /track/transfer request.
++ This response is provided with HTTP status code
++ #MHD_HTTP_SERVICE_UNAVAILABLE.
+HttpStatus: 503
+
+Value: 2401
+Name: POST_TRANSFERS_EXCHANGE_KEYS_FAILURE
+Description: We failed to obtain an acceptable /keys response from the exchange for
++ the /track/transfer request. This response is provided with HTTP
++ status code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2402
+Name: POST_TRANSFERS_DB_STORE_COIN_ERROR
+Description: We failed to persist coin wire transfer information in our merchant
++ database. The response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2403
+Name: POST_TRANSFERS_REQUEST_ERROR
+Description: We internally failed to execute the /track/transfer request. The
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2404
+Name: POST_TRANSFERS_DB_STORE_TRANSFER_ERROR
+Description: We failed to persist wire transfer information in our merchant
++ database. The response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2405
+Name: POST_TRANSFERS_EXCHANGE_ERROR
+Description: The exchange returned an error from /track/transfer. The response is
++ provided with HTTP status code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2406
+Name: POST_TRANSFERS_DB_FETCH_DEPOSIT_ERROR
+Description: We failed to fetch deposit information from our merchant database. The
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2407
+Name: POST_TRANSFERS_DB_INTERNAL_LOGIC_ERROR
+Description: We encountered an internal logic error. The response is provided with
++ HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2408
+Name: POST_TRANSFERS_CONFLICTING_REPORTS
+Description: The exchange gave conflicting information about a coin which has been
++ wire transferred. The response is provided with HTTP status code
++ #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2409
+Name: POST_TRANSFERS_JSON_RESPONSE_ERROR
+Description: The merchant backend had problems in creating the JSON response.
+HttpStatus: 0
+
+Value: 2410
+Name: POST_TRANSFERS_JSON_BAD_WIRE_FEE
+Description: The exchange charged a different wire fee than what it originally
++ advertised, and it is higher. The response is provided with an HTTP
++ status of #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2411
+Name: POST_TRANSFERS_ACCOUNT_NOT_FOUND
+Description: We did not find the account that the transfer was made to. The
++ response is provided with an HTTP status of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2412
+Name: POST_TRANSFERS_DB_STORE_ERROR
+Description: We did failed to store information in our database. The response is
++ provided with an HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2413
+Name: POST_TRANSFERS_DB_LOOKUP_ERROR
+Description: We did failed to retrieve information from our database. The response
++ is provided with an HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2450
+Name: POST_INSTANCES_ALREADY_EXISTS
+Description: The merchant backend cannot create an instance under the given
++ identifier as one already exists. Use PATCH to modify the existing
++ entry. The response is provied with an HTTP status of
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2451
+Name: POST_INSTANCES_BAD_PAYTO_URIS
+Description: The merchant backend cannot create an instance because the specified
++ bank accounts are somehow invalid. The response is provied with an
++ HTTP status of #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2452
+Name: POST_INSTANCES_DB_START_ERROR
+Description: The merchant backend cannot create an instance because it failed to
++ start the database transaction. The response is provied with an HTTP
++ status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2453
+Name: POST_INSTANCES_DB_COMMIT_ERROR
+Description: The merchant backend cannot create an instance because it failed to
++ commit the database transaction. The response is provied with an HTTP
++ status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2454
+Name: DELETE_INSTANCES_ID_DB_HARD_FAILURE
+Description: The merchant backend cannot delete an instance because it failed to
++ commit the database transaction. The response is provied with an HTTP
++ status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2455
+Name: DELETE_INSTANCES_ID_NO_SUCH_INSTANCE
+Description: The merchant backend cannot delete the data because it already does
++ not exist. The response is provied with an HTTP status of
++ #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2456
+Name: PATCH_INSTANCES_BAD_PAYTO_URIS
+Description: The merchant backend cannot update an instance because the specified
++ bank accounts are somehow invalid. The response is provied with an
++ HTTP status of #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2457
+Name: PATCH_INSTANCES_DB_START_ERROR
+Description: The merchant backend cannot patch an instance because it failed to
++ start the database transaction. The response is provied with an HTTP
++ status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2458
+Name: PATCH_INSTANCES_DB_COMMIT_ERROR
+Description: The merchant backend cannot patch an instance because it failed to
++ commit the database transaction. The response is provied with an HTTP
++ status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2500
+Name: MAP_IN_UNMATCHED_HASH
+Description: The hash provided in the request of /map/in does not match the
++ contract sent alongside in the same request.
+HttpStatus: 0
+
+Value: 2501
+Name: PROPOSAL_STORE_DB_ERROR
+Description: The backend encountered an error while trying to store the
++ h_contract_terms into the database. The response is provided with HTTP
++ status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2502
+Name: PROPOSAL_LOOKUP_DB_ERROR
+Description: The backend encountered an error while trying to retrieve the proposal
++ data from database. Likely to be an internal error. The response is
++ provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2503
+Name: PROPOSAL_LOOKUP_NOT_FOUND
+Description: The proposal being looked up is not found on this merchant. Returned
++ with an HTTP status code of #MHD_HTTP_NOT_FOUND
+HttpStatus: 404
+
+Value: 2504
+Name: PROPOSAL_NO_LOCALTIME
+Description: The proposal had no timestamp and the backend failed to obtain the
++ local time. Likely to be an internal error. The response is provided
++ with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2505
+Name: PROPOSAL_ORDER_PARSE_ERROR
+Description: The order provided to the backend could not be parsed, some required
++ fields were missing or ill-formed. Returned with an HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2506
+Name: PROPOSAL_STORE_DB_ERROR_HARD
+Description: The backend encountered an error while trying to find the existing
++ proposal in the database. The response is provided with HTTP status
++ code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2507
+Name: PROPOSAL_STORE_DB_ERROR_SOFT
+Description: The backend encountered an error while trying to find the existing
++ proposal in the database. The response is provided with HTTP status
++ code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2508
+Name: PROPOSAL_STORE_DB_ERROR_ALREADY_EXISTS
+Description: The backend encountered an error: the proposal already exists. The
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2509
+Name: PROPOSAL_ORDER_BAD_CURRENCY
+Description: The order provided to the backend uses an amount in a currency that
++ does not match the backend's configuration. Returned with HTTP status
++ code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2510
+Name: PROPOSAL_REPLY_MALFORMED
+Description: The response provided by the merchant backend was malformed. This
++ error is created client-side.
+HttpStatus: 0
+
+Value: 2511
+Name: ORDERS_DELETE_NO_SUCH_ORDER
+Description: The order provided to the backend could not be deleted, it is not
++ known. Returned with an HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2512
+Name: ORDERS_DELETE_AWAITING_PAYMENT
+Description: The order provided to the backend could not be deleted, our offer is
++ still valid and awaiting payment. Returned with an HTTP status code
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2513
+Name: ORDERS_DELETE_DB_HARD_FAILURE
+Description: The order provided to the backend could not be deleted, due to a
++ database error. Returned with an HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2514
+Name: ORDERS_LOOKUP_PRODUCT_DB_HARD_FAILURE
+Description: The order provided to the backend could not be completed, due to a
++ database error trying to fetch product inventory data. Returned with
++ an HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2515
+Name: ORDERS_LOOKUP_PRODUCT_DB_SOFT_FAILURE
+Description: The order provided to the backend could not be completed, due to a
++ database serialization error (which should be impossible) trying to
++ fetch product inventory data. Returned with an HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2516
+Name: ORDERS_LOOKUP_PRODUCT_NOT_FOUND
+Description: The order provided to the backend could not be completed, because a
++ product to be completed via inventory data is not actually in our
++ inventory. Returned with an HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2517
+Name: ORDERS_GET_DB_LOOKUP_ERROR
+Description: We could not obtain a list of all orders because of a database
++ failure. Returned with an HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2518
+Name: ORDERS_CLAIM_HARD_DB_ERROR
+Description: We could not claim the order because of a database failure. Returned
++ with an HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2519
+Name: ORDERS_CLAIM_SOFT_DB_ERROR
+Description: We could not claim the order because of a database serialization
++ failure. Returned with an HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2520
+Name: ORDERS_CLAIM_NOT_FOUND
+Description: We could not claim the order because the backend is unaware of it.
++ Returned with an HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2521
+Name: ORDERS_ALREADY_CLAIMED
+Description: We could not claim the order because someone else claimed it first.
++ Returned with an HTTP status code #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2550
+Name: GET_PRODUCTS_DB_LOOKUP_ERROR
+Description: The merchant backend failed to lookup the products. The response is
++ provied with an HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2551
+Name: PRODUCTS_POST_DB_START_ERROR
+Description: The merchant backend failed to start the transaction. The response is
++ provied with an HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2552
+Name: PRODUCTS_POST_CONFLICT_PRODUCT_EXISTS
+Description: The product ID exists. The response is provied with an HTTP status of
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2553
+Name: PRODUCTS_POST_DB_COMMIT_SOFT_ERROR
+Description: The merchant backend failed to serialize the transaction. The response
++ is provied with an HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2554
+Name: PRODUCTS_POST_DB_COMMIT_HARD_ERROR
+Description: The merchant backend failed to commit the transaction. The response is
++ provied with an HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2555
+Name: PRODUCTS_PATCH_DB_COMMIT_HARD_ERROR
+Description: The merchant backend failed to commit the transaction. The response is
++ provied with an HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2556
+Name: PRODUCTS_PATCH_UNKNOWN_PRODUCT
+Description: The merchant backend did not find the product to be updated. The
++ response is provied with an HTTP status of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2557
+Name: PRODUCTS_PATCH_TOTAL_LOST_REDUCED
+Description: The update would have reduced the total amount of product lost, which
++ is not allowed. The response is provied with an HTTP status of
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2558
+Name: PRODUCTS_PATCH_TOTAL_LOST_EXCEEDS_STOCKS
+Description: The update would have mean that more stocks were lost than what
++ remains from total inventory after sales, which is not allowed. The
++ response is provied with an HTTP status of #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2559
+Name: PRODUCTS_PATCH_TOTAL_STOCKED_REDUCED
+Description: The update would have reduced the total amount of product in stock,
++ which is not allowed. The response is provied with an HTTP status of
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2560
+Name: PRODUCTS_LOCK_INSUFFICIENT_STOCKS
+Description: The lock request is for more products than we have left (unlocked) in
++ stock. The response is provied with an HTTP status of
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2561
+Name: PRODUCTS_LOCK_UNKNOWN_PRODUCT
+Description: The lock request is for an unknown product. The response is provied
++ with an HTTP status of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2562
+Name: PRODUCTS_DELETE_DB_HARD_FAILURE
+Description: The deletion request resulted in a hard database error. The response
++ is provied with an HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2563
+Name: PRODUCTS_DELETE_NO_SUCH_PRODUCT
+Description: The deletion request was for a product unknown to the backend. The
++ response is provied with an HTTP status of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2564
+Name: PRODUCTS_DELETE_CONFLICTING_LOCK
+Description: The deletion request is for a product that is locked. The response is
++ provied with an HTTP status of #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2600
+Name: REFUND_LOOKUP_INVALID_RESPONSE
+Description: The merchant returned a malformed response. Error created client-side.
+HttpStatus: 0
+
+Value: 2601
+Name: REFUND_ORDER_ID_UNKNOWN
+Description: The frontend gave an unknown order id to issue the refund to.
+HttpStatus: 0
+
+Value: 2602
+Name: REFUND_INCONSISTENT_AMOUNT
+Description: The amount to be refunded is inconsistent: either is lower than the
++ previous amount being awarded, or it is too big to be paid back. In
++ this second case, the fault stays on the business dept. side. Returned
++ with an HTTP status of #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2603
+Name: REFUND_LOOKUP_DB_ERROR
+Description: The backend encountered an error while trying to retrieve the payment
++ data from database. Likely to be an internal error.
+HttpStatus: 0
+
+Value: 2604
+Name: REFUND_MERCHANT_DB_COMMIT_ERROR
+Description: The backend encountered an error while trying to retrieve the payment
++ data from database. Likely to be an internal error.
+HttpStatus: 0
+
+Value: 2605
+Name: PAY_DB_STORE_PAYMENTS_ERROR
+Description: Payments are stored in a single db transaction; this error indicates
++ that one db operation within that transaction failed. This might
++ involve storing of coins or other related db operations, like
++ starting/committing the db transaction or marking a contract as paid.
+HttpStatus: 0
+
+Value: 2606
+Name: PAY_REFUND_SIGNATURE_FAILED
+Description: The backend failed to sign the refund request.
+HttpStatus: 0
+
+Value: 2607
+Name: REFUND_LOOKUP_NO_REFUND
+Description: The merchant backend is not available of any applicable refund(s) for
++ this order. Returned with an HTTP status of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2650
+Name: RESERVES_POST_UNSUPPORTED_WIRE_METHOD
+Description: The requested wire method is not supported by the exchange. Returned
++ with an HTTP status of #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2651
+Name: RESERVES_POST_DB_COMMIT_HARD_ERROR
+Description: The backend failed to commit the result to the database. Returned with
++ an HTTP status of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2652
+Name: GET_RESERVES_DB_LOOKUP_ERROR
+Description: The backend failed to fetch the requested information from the
++ database. Returned with an HTTP status of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2701
+Name: TIP_AUTHORIZE_INSTANCE_DOES_NOT_TIP
+Description: The backend knows the instance that was supposed to support the tip,
++ but it was not configured for tipping (i.e. has no exchange associated
++ with it). Likely to be a configuration error. Returned with an HTTP
++ status code of #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 2702
+Name: TIP_AUTHORIZE_RESERVE_EXPIRED
+Description: The reserve that was used to fund the tips has expired. Returned with
++ an HTTP status code of #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 2703
+Name: TIP_AUTHORIZE_RESERVE_UNKNOWN
+Description: The reserve that was used to fund the tips was not found in the DB.
++ Returned with an HTTP status code of #MHD_HTTP_SERVICE_UNAVAILABLE.
+HttpStatus: 503
+
+Value: 2704
+Name: TIP_AUTHORIZE_INSUFFICIENT_FUNDS
+Description: The backend knows the instance that was supposed to support the tip,
++ and it was configured for tipping. However, the funds remaining are
++ insufficient to cover the tip, and the merchant should top up the
++ reserve. Returned with an HTTP status code of #MHD_HTTP_PRECONDITION
++ FAILED.
+HttpStatus: 0
+
+Value: 2705
+Name: TIP_AUTHORIZE_DB_HARD_ERROR
+Description: The backend had trouble accessing the database to persist information
++ about the tip authorization. Returned with an HTTP status code of
++ internal error.
+HttpStatus: 0
+
+Value: 2706
+Name: TIP_AUTHORIZE_DB_SOFT_ERROR
+Description: The backend had trouble accessing the database to persist information
++ about the tip authorization. The problem might be fixable by repeating
++ the transaction.
+HttpStatus: 0
+
+Value: 2707
+Name: TIP_QUERY_RESERVE_STATUS_FAILED_EXCHANGE_DOWN
+Description: The backend failed to obtain a reserve status from the exchange. This
++ response is provided with HTTP status code
++ #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2708
+Name: TIP_QUERY_RESERVE_HISTORY_FAILED_EMPTY
+Description: The backend got an empty (!) reserve history from the exchange. This
++ response is provided with HTTP status code
++ #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2709
+Name: TIP_QUERY_RESERVE_HISTORY_INVALID_NO_DEPOSIT
+Description: The backend got an invalid reserve history (fails to start with a
++ deposit) from the exchange. This response is provided with HTTP status
++ code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2710
+Name: TIP_QUERY_RESERVE_UNKNOWN_TO_EXCHANGE
+Description: The backend got an 404 response from the exchange when it inquired
++ about the reserve history. The response is provided with HTTP status
++ code #MHD_HTTP_SERVICE_UNAVAILABLE.
+HttpStatus: 503
+
+Value: 2711
+Name: TIP_QUERY_RESERVE_CURRENCY_MISMATCH
+Description: The backend got a reserve with a currency that does not match the
++ backend's currency. The response is provided with HTTP status code
++ #MHD_HTTP_SERVICE_UNAVAILABLE.
+HttpStatus: 503
+
+Value: 2712
+Name: TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_DEPOSIT
+Description: The backend got a reserve history with amounts it cannot process
++ (addition failure in deposits). The response is provided with HTTP
++ status code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2713
+Name: TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_WITHDRAW
+Description: The backend got a reserve history with amounts it cannot process
++ (addition failure in withdraw amounts). The response is provided with
++ HTTP status code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2714
+Name: TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_CLOSED
+Description: The backend got a reserve history with amounts it cannot process
++ (addition failure in closing amounts). The response is provided with
++ HTTP status code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2715
+Name: TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_INCONSISTENT
+Description: The backend got a reserve history with inconsistent amounts.
+HttpStatus: 0
+
+Value: 2716
+Name: TIP_QUERY_DB_ERROR
+Description: The backend encountered a database error querying tipping reserves.
+HttpStatus: 0
+
+Value: 2717
+Name: TIP_QUERY_RESERVE_HISTORY_FAILED
+Description: The backend got an unexpected resever history reply from the exchange.
++ This response is provided with HTTP status code
++ #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2718
+Name: TIP_QUERY_RESERVE_HISTORY_ARITHMETIC_ISSUE_RECOUP
+Description: The backend got a reserve history with amounts it cannot process
++ (addition failure in withdraw amounts). The response is provided with
++ HTTP status code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2719
+Name: TIP_QUERY_INSTANCE_DOES_NOT_TIP
+Description: The backend knows the instance that was supposed to support the tip,
++ but it was not configured for tipping (i.e. has no exchange associated
++ with it). Likely to be a configuration error. Returned with an HTTP
++ status code of #MHD_HTTP_PRECONDITION_FAILED.
+HttpStatus: 412
+
+Value: 2720
+Name: TIP_QUERY_TIP_ID_UNKNOWN
+Description: The tip id is unknown. This could happen if the tip id is wrong or
++ the tip authorization expired.
+HttpStatus: 0
+
+Value: 2721
+Name: RESERVES_DELETE_DB_HARD_FAILURE
+Description: The reserve could not be deleted due to a database failure. Returned
++ with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2722
+Name: RESERVES_DELETE_NO_SUCH_RESERVE
+Description: The reserve could not be deleted because it is unknown. Returned with
++ HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2723
+Name: TIP_LOOKUP_RESERVE_DB_FAILURE
+Description: The backend got an unexpected error trying to lookup reserve details
++ from the backend. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2724
+Name: TIP_AUTHORIZE_DB_SERIALIZATION_FAILURE
+Description: The backend repeatedly failed to serialize the transaction to
++ authorize the tip. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2725
+Name: TIP_AUTHORIZE_DB_START_FAILURE
+Description: The backend failed to start the transaction to authorize the tip. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2726
+Name: TIP_AUTHORIZE_DB_LOOKUP_RESERVE_FAILURE
+Description: The backend failed looking up the reserve needed to authorize the tip.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2727
+Name: TIP_AUTHORIZE_DB_RESERVE_NOT_FOUND
+Description: The backend failed to find a reserve needed to authorize the tip. This
++ response is provided with HTTP status code
++ #MHD_HTTP_SERVICE_UNAVAILABLE.
+HttpStatus: 503
+
+Value: 2728
+Name: TIP_AUTHORIZE_DB_RESERVE_INVARIANT_FAILURE
+Description: The backend encountered an internal invariant violation. This response
++ is provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2729
+Name: TIP_AUTHORIZE_DB_RESERVE_EXPIRED
+Description: The selected exchange expired. This response is provided with HTTP
++ status code #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 2730
+Name: TIP_AUTHORIZE_DB_UPDATE_RESERVE_FAILURE
+Description: The backend failed updating the reserve needed to authorize the tip.
++ This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2750
+Name: TIP_ENABLE_DB_TRANSACTION_ERROR
+Description: The backend had trouble accessing the database to persist information
++ about enabling tips. Returned with an HTTP status code of internal
++ error.
+HttpStatus: 0
+
+Value: 2800
+Name: TIP_PICKUP_TIP_ID_UNKNOWN
+Description: The tip ID is unknown. This could happen if the tip has expired.
++ Returned with an HTTP status code of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2801
+Name: TIP_PICKUP_NO_FUNDS
+Description: The amount requested exceeds the remaining tipping balance for this
++ tip ID. Returned with an HTTP status code of "Conflict" (as it
++ conflicts with a previous pickup operation).
+HttpStatus: 0
+
+Value: 2802
+Name: TIP_PICKUP_DB_ERROR_SOFT
+Description: We encountered a DB error, repeating the request may work.
+HttpStatus: 0
+
+Value: 2803
+Name: TIP_PICKUP_DB_ERROR_HARD
+Description: We encountered a DB error, repeating the request will not help. This
++ is an internal server error.
+HttpStatus: 0
+
+Value: 2804
+Name: TIP_PICKUP_AMOUNT_CHANGED
+Description: The same pickup ID was already used for picking up a different amount.
++ This points to a very strange internal error as the pickup ID is
++ derived from the denomination key which is tied to a particular
++ amount. Hence this should also be an internal server error.
+HttpStatus: 0
+
+Value: 2805
+Name: TIP_PICKUP_EXCHANGE_DOWN
+Description: We failed to contact the exchange to obtain the denomination keys.
++ Returned with a response code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2806
+Name: TIP_PICKUP_EXCHANGE_LACKED_KEYS
+Description: We contacted the exchange to obtain any denomination keys, but got no
++ valid keys. Returned with a response code #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2807
+Name: TIP_PICKUP_EXCHANGE_LACKED_KEY
+Description: We contacted the exchange to obtain at least one of the denomination
++ keys specified in the request. Returned with a response code "not
++ found" (404).
+HttpStatus: 0
+
+Value: 2808
+Name: TIP_PICKUP_EXCHANGE_AMOUNT_OVERFLOW
+Description: We encountered an arithmetic issue totaling up the amount to withdraw.
++ Returned with a response code of #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2809
+Name: TIP_PICKUP_EXCHANGE_TOO_MANY_PLANCHETS
+Description: The number of planchets specified exceeded the limit. Returned with a
++ response code of #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2810
+Name: TIP_PICKUP_WITHDRAW_FAILED
+Description: The merchant failed to initialize the withdraw operaiton. Returned
++ with a response code of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2811
+Name: TIP_PICKUP_WITHDRAW_FAILED_AT_EXCHANGE
+Description: The merchant failed to initialize the withdraw operaiton. Returned
++ with a response code of #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2812
+Name: TIP_PICKUP_UNBLIND_FAILURE
+Description: The client failed to unblind the signature returned by the merchant.
++ Generated client-side.
+HttpStatus: 0
+
+Value: 2813
+Name: GET_TIPS_DB_LOOKUP_ERROR
+Description: Merchant failed to access its database to lookup the tip. Returned
++ with a response code of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2814
+Name: GET_TIPS_ID_UNKNOWN
+Description: Merchant failed find the tip in its database. Returned with a response
++ code of #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2815
+Name: TIP_PICKUP_CONTACT_EXCHANGE_ERROR
+Description: The merchant failed to contact the exchange. Returned with a response
++ code of #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2816
+Name: TIP_PICKUP_EXCHANGE_KEYS_ERROR
+Description: The merchant failed to obtain keys from the exchange. Returned with a
++ response code of #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2817
+Name: TIP_PICKUP_DB_STORE_HARD_ERROR
+Description: The merchant failed to store data in its own database. Returned with a
++ response code of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2818
+Name: TIP_PICKUP_EXCHANGE_TIMEOUT
+Description: The merchant failed to get a timely response from the exchange.
++ Returned with a response code of #MHD_HTTP_REQUEST_TIMEOUT.
+HttpStatus: 408
+
+Value: 2819
+Name: TIP_PICKUP_EXCHANGE_ERROR
+Description: The exchange returned a failure code for the withdraw operation.
++ Returned with a response code of #MHD_HTTP_FAILED_DEPENDENCY.
+HttpStatus: 424
+
+Value: 2820
+Name: TIP_PICKUP_SUMMATION_FAILED
+Description: The merchant failed to add up the amounts to compute the pick up
++ value. Returned with a response code of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2821
+Name: TIP_PICKUP_HAS_EXPIRED
+Description: The tip expired. Returned with a response code of #MHD_HTTP_GONE.
+HttpStatus: 410
+
+Value: 2822
+Name: TIP_PICKUP_AMOUNT_EXCEEDS_TIP_REMAINING
+Description: The requested withdraw amount exceeds the amount remaining to be
++ picked up. Returned with a response code of #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2823
+Name: TIP_PICKUP_DB_STORE_SOFT_ERROR
+Description: The merchant failed to store data in its own database. Returned with a
++ response code of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2824
+Name: TIP_PICKUP_DENOMINATION_UNKNOWN
+Description: The merchant did not find the specified denomination key in the
++ exchange's key set. Returned with a response code of
++ #MHD_HTTP_CONFLICT.
+HttpStatus: 409
+
+Value: 2900
+Name: GET_ORDERS_DB_LOOKUP_ERROR
+Description: We failed to fetch contract terms from our merchant database. The
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2901
+Name: GET_ORDERS_ID_UNKNOWN
+Description: We failed to find the contract terms from our merchant database. The
++ response is provided with HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 2902
+Name: GET_ORDERS_WRONG_CONTRACT
+Description: The contract hash provided by the wallet does not match the order. The
++ response is provided with HTTP status code #MHD_HTTP_FORBIDDEN.
+HttpStatus: 403
+
+Value: 2911
+Name: CHECK_PAYMENT_DB_FETCH_CONTRACT_TERMS_ERROR
+Description: We failed to contract terms from our merchant database. The response
++ is provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2912
+Name: CHECK_PAYMENT_DB_FETCH_ORDER_ERROR
+Description: We failed to contract terms from our merchant database. The response
++ is provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2913
+Name: CHECK_PAYMENT_ORDER_ID_UNKNOWN
+Description: The order id we're checking is unknown, likely the frontend did not
++ create the order first.
+HttpStatus: 0
+
+Value: 2914
+Name: CHECK_PAYMENT_FAILED_COMPUTE_PROPOSAL_HASH
+Description: Failed computing a hash code (likely server out-of-memory). This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 2915
+Name: CHECK_PAYMENT_SESSION_SIGNATURE_INVALID
+Description: Signature "session_sig" failed to verify. This response is provided
++ with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 2916
+Name: CHECK_PAYMENT_RESPONSE_MALFORMED
+Description: The response we received from the merchant is malformed. This error is
++ generated client-side.
+HttpStatus: 0
+
+Value: 3000
+Name: DEPOSIT_CONFIRMATION_SIGNATURE_INVALID
+Description: The signature from the exchange on the deposit confirmation is
++ invalid. Returned with a "400 Bad Request" status code.
+HttpStatus: 0
+
+Value: 3001
+Name: DEPOSIT_CONFIRMATION_STORE_DB_ERROR
+Description: The auditor had trouble storing the deposit confirmation in its
++ database. Returned with an HTTP status code of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 3002
+Name: LIST_EXCHANGES_DB_ERROR
+Description: The auditor had trouble retrieving the exchange list from its
++ database. Returned with an HTTP status code of
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 3003
+Name: AUDITOR_EXCHANGE_STORE_DB_ERROR
+Description: The auditor had trouble storing an exchange in its database. Returned
++ with an HTTP status code of #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 3004
+Name: AUDITOR_EXCHANGES_REPLY_MALFORMED
+Description: The auditor (!) responded with a reply that did not satsify the
++ protocol. This error is not used in the protocol but created client-
++ side.
+HttpStatus: 0
+
+Value: 4000
+Name: TEST_ECDH_ERROR
+Description: The exchange failed to compute ECDH. This response is provided with
++ HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 4001
+Name: TEST_EDDSA_INVALID
+Description: The EdDSA test signature is invalid. This response is provided with
++ HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 4002
+Name: TEST_EDDSA_ERROR
+Description: The exchange failed to compute the EdDSA test signature. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 4003
+Name: TEST_RSA_GEN_ERROR
+Description: The exchange failed to generate an RSA key. This response is provided
++ with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 4004
+Name: TEST_RSA_PUB_ERROR
+Description: The exchange failed to compute the public RSA key. This response is
++ provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 4005
+Name: TEST_RSA_SIGN_ERROR
+Description: The exchange failed to compute the RSA signature. This response is
++ provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 5000
+Name: SERVER_JSON_INVALID
+Description: The JSON in the server's response was malformed. This response is
++ provided with HTTP status code of 0.
+HttpStatus: 0
+
+Value: 5001
+Name: SERVER_SIGNATURE_INVALID
+Description: A signature in the server's response was malformed. This response is
++ provided with HTTP status code of 0.
+HttpStatus: 0
+
+Value: 5102
+Name: BANK_SAME_ACCOUNT
+Description: Wire transfer attempted with credit and debit party being the same
++ bank account.
+HttpStatus: 0
+
+Value: 5103
+Name: BANK_UNALLOWED_DEBIT
+Description: Wire transfer impossible, due to financial limitation of the party
++ that attempted the payment.
+HttpStatus: 0
+
+Value: 5104
+Name: BANK_CURRENCY_MISMATCH
+Description: Arithmetic operation between two amounts of different currency was
++ attempted.
+HttpStatus: 0
+
+Value: 5105
+Name: BANK_PARAMETER_MISSING_OR_INVALID
+Description: At least one GET parameter was either missing or invalid for the
++ requested operation.
+HttpStatus: 0
+
+Value: 5106
+Name: BANK_JSON_INVALID
+Description: JSON body sent was invalid for the requested operation.
+HttpStatus: 0
+
+Value: 5107
+Name: BANK_NEGATIVE_NUMBER_AMOUNT
+Description: Negative number was used (as value and/or fraction) to initiate a
++ Amount object.
+HttpStatus: 0
+
+Value: 5108
+Name: BANK_NUMBER_TOO_BIG
+Description: A number too big was used (as value and/or fraction) to initiate a
++ amount object.
+HttpStatus: 0
+
+Value: 5109
+Name: BANK_LOGIN_FAILED
+Description: Could not login for the requested operation.
+HttpStatus: 0
+
+Value: 5110
+Name: BANK_UNKNOWN_ACCOUNT
+Description: The bank account referenced in the requested operation was not found.
++ Returned along "400 Not found".
+HttpStatus: 0
+
+Value: 5111
+Name: BANK_TRANSACTION_NOT_FOUND
+Description: The transaction referenced in the requested operation (typically a
++ reject operation), was not found.
+HttpStatus: 0
+
+Value: 5112
+Name: BANK_BAD_FORMAT_AMOUNT
+Description: Bank received a malformed amount string.
+HttpStatus: 0
+
+Value: 5200
+Name: BANK_REJECT_NO_RIGHTS
+Description: The client does not own the account credited by the transaction which
++ is to be rejected, so it has no rights do reject it. To be returned
++ along HTTP 403 Forbidden.
+HttpStatus: 0
+
+Value: 5300
+Name: BANK_UNMANAGED_EXCEPTION
+Description: This error code is returned when no known exception types captured the
++ exception, and comes along with a 500 Internal Server Error.
+HttpStatus: 0
+
+Value: 5400
+Name: BANK_SOFT_EXCEPTION
+Description: This error code is used for all those exceptions that do not really
++ need a specific error code to return to the client, but need to signal
++ the middleware that the bank is not responding with 500 Internal
++ Server Error. Used for example when a client is trying to register
++ with a unavailable username.
+HttpStatus: 0
+
+Value: 5500
+Name: BANK_TRANSFER_REQUEST_UID_REUSED
+Description: The request UID for a request to transfer funds has already been used,
++ but with different details for the transfer.
+HttpStatus: 0
+
+Value: 6000
+Name: SYNC_DB_FETCH_ERROR
+Description: The sync service failed to access its database. This response is
++ provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 6001
+Name: SYNC_BACKUP_UNKNOWN
+Description: The sync service failed find the record in its database. This response
++ is provided with HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 6002
+Name: SYNC_ACCOUNT_UNKNOWN
+Description: The sync service failed find the account in its database. This
++ response is provided with HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 6003
+Name: SYNC_BAD_IF_NONE_MATCH
+Description: The SHA-512 hash provided in the If-None-Match header is malformed.
++ This response is provided with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 6004
+Name: SYNC_BAD_IF_MATCH
+Description: The SHA-512 hash provided in the If-Match header is malformed or
++ missing. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 6005
+Name: SYNC_BAD_SYNC_SIGNATURE
+Description: The signature provided in the "Sync-Signature" header is malformed or
++ missing. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 6007
+Name: SYNC_INVALID_SIGNATURE
+Description: The signature provided in the "Sync-Signature" header does not match
++ the account, old or new Etags. This response is provided with HTTP
++ status code #MHD_HTTP_FORBIDDEN.
+HttpStatus: 403
+
+Value: 6008
+Name: SYNC_BAD_CONTENT_LENGTH
+Description: The "Content-length" field for the upload is either not a number, or
++ too big, or missing. This response is provided with HTTP status code
++ #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 6009
+Name: SYNC_EXCESSIVE_CONTENT_LENGTH
+Description: The "Content-length" field for the upload is too big based on the
++ server's terms of service. This response is provided with HTTP status
++ code #MHD_HTTP_PAYLOAD_TOO_LARGE.
+HttpStatus: 413
+
+Value: 6010
+Name: SYNC_OUT_OF_MEMORY_ON_CONTENT_LENGTH
+Description: The server is out of memory to handle the upload. Trying again later
++ may succeed. This response is provided with HTTP status code
++ #MHD_HTTP_PAYLOAD_TOO_LARGE.
+HttpStatus: 413
+
+Value: 6011
+Name: SYNC_INVALID_UPLOAD
+Description: The uploaded data does not match the Etag. This response is provided
++ with HTTP status code #MHD_HTTP_BAD_REQUEST.
+HttpStatus: 400
+
+Value: 6012
+Name: SYNC_DATABASE_FETCH_ERROR
+Description: We failed to check for existing upload data in the database. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 6013
+Name: SYNC_SHUTDOWN
+Description: HTTP server was being shutdown while this operation was pending. This
++ response is provided with HTTP status code
++ #MHD_HTTP_SERVICE_UNAVAILABLE.
+HttpStatus: 503
+
+Value: 6014
+Name: SYNC_PAYMENT_TIMEOUT
+Description: HTTP server experienced a timeout while awaiting promised payment.
++ This response is provided with HTTP status code
++ #MHD_HTTP_REQUEST_TIMEOUT.
+HttpStatus: 408
+
+Value: 6015
+Name: SYNC_PAYMENT_CREATE_DB_ERROR
+Description: Sync could not store order data in its own database. This response is
++ provided with HTTP status code #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 6016
+Name: SYNC_PAYMENT_CONFIRM_DB_ERROR
+Description: Sync could not store payment confirmation in its own database. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 6017
+Name: SYNC_PAYMENT_CHECK_ORDER_DB_ERROR
+Description: Sync could not fetch information about possible existing orders from
++ its own database. This response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 6018
+Name: SYNC_PAYMENT_CREATE_BACKEND_ERROR
+Description: Sync could not setup the payment request with its own backend. This
++ response is provided with HTTP status code
++ #MHD_HTTP_INTERNAL_SERVER_ERROR.
+HttpStatus: 500
+
+Value: 6019
+Name: SYNC_PREVIOUS_BACKUP_UNKNOWN
+Description: The sync service failed find the backup to be updated in its database.
++ This response is provided with HTTP status code #MHD_HTTP_NOT_FOUND.
+HttpStatus: 404
+
+Value: 9999
+Name: END
+Description: End of error code range.
+HttpStatus: 0