taler-docs

Documentation for GNU Taler components, APIs and protocols
Log | Files | Refs | README | LICENSE

commit 233d5da4edf8d94f793b48a657fd8af746285194
parent 73987cdb87d57b5fad1dff0b1353a3d96c52d2ec
Author: Christian Grothoff <christian@grothoff.org>
Date:   Fri,  3 Apr 2026 01:16:07 +0200

more ECs

Diffstat:
Mcore/merchant/get-orders-ORDER_ID.rst | 14++++++++++++--
Mcore/merchant/get-private-orders-ORDER_ID.rst | 14+++++++++++---
Mcore/merchant/get-private-orders.rst | 11++++++++++-
Mcore/merchant/get-private-statistics-report-NAME.rst | 3+++
Mcore/merchant/patch-management-instances-INSTANCE.rst | 6++++--
Mcore/merchant/patch-private-accounts-H_WIRE.rst | 7+++++--
Mcore/merchant/patch-private-otp-devices-DEVICE_ID.rst | 4+++-
Mcore/merchant/patch-private-products-PRODUCT_ID.rst | 6+++++-
Mcore/merchant/patch-private-templates-TEMPLATE_ID.rst | 6+++++-
Mcore/merchant/patch-private-units-UNIT.rst | 7+++++--
Mcore/merchant/patch-private-webhooks-WEBHOOK_ID.rst | 5++++-
Mcore/merchant/post-challenge-CHALLENGE_ID-confirm.rst | 3++-
Mcore/merchant/post-challenge-CHALLENGE_ID.rst | 6+++++-
Mcore/merchant/post-management-instances-INSTANCE-auth.rst | 5++++-
Mcore/merchant/post-management-instances.rst | 6+++++-
Mcore/merchant/post-orders-ORDER_ID-abort.rst | 10+++++++++-
Mcore/merchant/post-orders-ORDER_ID-claim.rst | 6+++++-
Mcore/merchant/post-orders-ORDER_ID-paid.rst | 4+++-
Mcore/merchant/post-orders-ORDER_ID-pay.rst | 24+++++++++++++++++++++++-
Mcore/merchant/post-orders-ORDER_ID-refund.rst | 3++-
Mcore/merchant/post-private-accounts.rst | 12+++++++++++-
Mcore/merchant/post-private-categories.rst | 5++++-
Mcore/merchant/post-private-donau.rst | 7++++++-
Mcore/merchant/post-private-orders-ORDER_ID-refund.rst | 21++++++++++++++++-----
Mcore/merchant/post-private-orders.rst | 37++++++++++++++++++++++++++++++-------
Mcore/merchant/post-private-otp-devices.rst | 6+++++-
Mcore/merchant/post-private-products-PRODUCT_ID-lock.rst | 8+++++++-
Mcore/merchant/post-private-products.rst | 6+++++-
Mcore/merchant/post-private-templates.rst | 10++++++++--
Mcore/merchant/post-private-token.rst | 6++++++
Mcore/merchant/post-private-tokenfamilies.rst | 11++++++++++-
Mcore/merchant/post-private-transfers.rst | 3+++
Mcore/merchant/post-private-units.rst | 9++++++++-
Mcore/merchant/post-private-webhooks.rst | 8+++++++-
Mcore/merchant/post-templates-TEMPLATE_ID.rst | 17+++++++++++++++--
35 files changed, 266 insertions(+), 50 deletions(-)

diff --git a/core/merchant/get-orders-ORDER_ID.rst b/core/merchant/get-orders-ORDER_ID.rst @@ -62,21 +62,31 @@ the backend will instead return a ``403 Forbidden`` response. :http:statuscode:`400 Bad Request`: The request parameters are malformed. - Returned with an applicable Taler error code, such as - ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED`` or + ``TALER_EC_GENERIC_HTTP_HEADERS_MALFORMED``. :http:statuscode:`402 Payment required`: The response is a `StatusUnpaidResponse`. :http:statuscode:`403 Forbidden`: The ``h_contract`` (or the ``token`` for unclaimed orders) does not match the order and we have no fulfillment URL in the contract. + Returned with ``TALER_EC_MERCHANT_GET_ORDERS_ID_INVALID_TOKEN``, + ``TALER_EC_MERCHANT_GET_ORDERS_ID_INVALID_CONTRACT_HASH`` or + ``TALER_EC_MERCHANT_GENERIC_CONTRACT_HASH_DOES_NOT_MATCH_ORDER``. :http:statuscode:`404 Not found`: The merchant backend is unaware of the order. + Returned with ``TALER_EC_MERCHANT_GENERIC_ORDER_UNKNOWN``. :http:statuscode:`406 Not acceptable`: The merchant backend could not load the template required to generate a reply in the desired format. (Likely HTML templates were not properly installed.) :http:statuscode:`409 Conflict`: The request is inconsistent. + Returned with ``TALER_EC_MERCHANT_GENERIC_CURRENCY_MISMATCH``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. + Returned with ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_FAILED_COMPUTE_JSON_HASH``, + ``TALER_EC_GENERIC_ALLOCATION_FAILURE``, + ``TALER_EC_MERCHANT_GENERIC_DB_CONTRACT_CONTENT_INVALID`` or + ``TALER_EC_MERCHANT_GET_ORDERS_ID_INVALID_CONTRACT_VERSION``. **Details:** diff --git a/core/merchant/get-private-orders-ORDER_ID.rst b/core/merchant/get-private-orders-ORDER_ID.rst @@ -34,13 +34,21 @@ The ``ETag`` in the response did not change compared to the one given in the ``If-none-match`` HTTP header specified by the client. @since protocol **v25**. + :http:statuscode:`400 Bad Request`: + A query parameter or HTTP header is malformed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED`` or + ``TALER_EC_GENERIC_HTTP_HEADERS_MALFORMED``. :http:statuscode:`404 Not found`: The order or instance is unknown to the backend. Error code - is set to either ``MERCHANT_GENERIC_ORDER_UNKNOWN`` or - ``MERCHANT_GENERIC_INSTANCE_UNKNOWN``. + is set to either ``TALER_EC_MERCHANT_GENERIC_ORDER_UNKNOWN`` or + ``TALER_EC_MERCHANT_GENERIC_INSTANCE_UNKNOWN``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_FETCH_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_INVARIANT_FAILURE``, + ``TALER_EC_GENERIC_FAILED_COMPUTE_JSON_HASH``, + ``TALER_EC_MERCHANT_GENERIC_DB_CONTRACT_CONTENT_INVALID`` or + ``TALER_EC_MERCHANT_GET_ORDERS_ID_INVALID_CONTRACT_VERSION``. **Details:** diff --git a/core/merchant/get-private-orders.rst b/core/merchant/get-private-orders.rst @@ -38,7 +38,16 @@ The instance is unknown. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_FETCH_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_INVARIANT_FAILURE``, + ``TALER_EC_GENERIC_FAILED_COMPUTE_AMOUNT``, + ``TALER_EC_MERCHANT_GENERIC_DB_CONTRACT_CONTENT_INVALID`` or + ``TALER_EC_MERCHANT_GET_ORDERS_ID_INVALID_CONTRACT_VERSION``. + :http:statuscode:`501 Not implemented`: + The requested functionality is not implemented. + Usually returned if the PDF generator is not available + at this backend and the requested format was application/pdf. + Returned with ``TALER_EC_EXCHANGE_GENERIC_NO_TYPST_OR_PDFTK``. **Details:** diff --git a/core/merchant/get-private-statistics-report-NAME.rst b/core/merchant/get-private-statistics-report-NAME.rst @@ -40,6 +40,9 @@ The request is unauthorized. :http:statuscode:`404 Not found`: The instance is unknown to the backend. + :http:statuscode:`500 Internal Server Error`: + The server experienced an internal failure. + Returned with ``TALER_EC_GENERIC_DB_FETCH_FAILED``. :http:statuscode:`406 Not acceptable`: The requested data format is not supported by the backend. Not returned with any error code. diff --git a/core/merchant/patch-management-instances-INSTANCE.rst b/core/merchant/patch-management-instances-INSTANCE.rst @@ -24,12 +24,14 @@ ``TALER_EC_GENERIC_PARAMETER_MISSING``. :http:statuscode:`404 Not found`: This instance is unknown and thus cannot be reconfigured. + Returned with ``TALER_EC_MERCHANT_GENERIC_INSTANCE_UNKNOWN``. :http:statuscode:`409 Conflict`: The instance configuration requires a purge before it can be changed. - Returned with ``TALER_EC_MERCHANT_PRIVATE_PATCH_INSTANCE_PURGE_REQUIRED``. + Returned with ``TALER_EC_MERCHANT_PRIVATE_PATCH_INSTANCES_PURGE_REQUIRED``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED`` or + ``TALER_EC_GENERIC_DB_START_FAILED``. **Details:** diff --git a/core/merchant/patch-private-accounts-H_WIRE.rst b/core/merchant/patch-private-accounts-H_WIRE.rst @@ -14,12 +14,15 @@ The account has successfully modified. :http:statuscode:`400 Bad Request`: The ``$H_WIRE`` parameter or request body is malformed. - Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED`` or + ``TALER_EC_MERCHANT_GENERIC_H_WIRE_MALFORMED``. :http:statuscode:`404 Not found`: The account (``H_WIRE``) is unknown to the backend. + Returned with ``TALER_EC_MERCHANT_GENERIC_ACCOUNT_UNKNOWN``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED`` or + ``TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE``. **Details:** diff --git a/core/merchant/patch-private-otp-devices-DEVICE_ID.rst b/core/merchant/patch-private-otp-devices-DEVICE_ID.rst @@ -16,9 +16,11 @@ The request body is malformed. :http:statuscode:`404 Not found`: The OTP device(ID) is unknown to the backend. + Returned with ``TALER_EC_MERCHANT_GENERIC_OTP_DEVICE_UNKNOWN``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED`` or + ``TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE``. **Details:** diff --git a/core/merchant/patch-private-products-PRODUCT_ID.rst b/core/merchant/patch-private-products-PRODUCT_ID.rst @@ -23,6 +23,8 @@ The backend has successfully expanded the inventory. :http:statuscode:`400 Bad Request`: The request body is malformed or a validation check failed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED`` or + ``TALER_EC_MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_LOST_EXCEEDS_STOCKS``. :http:statuscode:`404 Not found`: The instance, product, category, product group or money pot specified are unknown. Possible error ``code`` values are thus: @@ -40,7 +42,9 @@ ``TALER_EC_MERCHANT_PRIVATE_PATCH_PRODUCTS_TOTAL_STOCKED_REDUCED``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED`` or + ``TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE``. .. ts:def:: ProductPatchDetailRequest diff --git a/core/merchant/patch-private-templates-TEMPLATE_ID.rst b/core/merchant/patch-private-templates-TEMPLATE_ID.rst @@ -14,14 +14,18 @@ The template has successfully modified. :http:statuscode:`400 Bad Request`: The request body is malformed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. :http:statuscode:`404 Not found`: The template(ID) is unknown to the backend. + Returned with ``TALER_EC_MERCHANT_GENERIC_TEMPLATE_UNKNOWN``. :http:statuscode:`409 Conflict`: The provided information is inconsistent with the current state of the template. Changes made is the same with another store. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED`` or + ``TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE``. **Details:** diff --git a/core/merchant/patch-private-units-UNIT.rst b/core/merchant/patch-private-units-UNIT.rst @@ -16,13 +16,16 @@ The request body is malformed. Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. :http:statuscode:`404 Not found`: - The unit is unknown to the backend. + The unit or instance is unknown to the backend. + Returned with ``TALER_EC_MERCHANT_GENERIC_INSTANCE_UNKNOWN`` or + ``TALER_EC_MERCHANT_GENERIC_UNIT_UNKNOWN``. :http:statuscode:`409 Conflict`: The unit is a builtin unit and cannot be modified. Returned with ``TALER_EC_MERCHANT_GENERIC_UNIT_BUILTIN``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED`` or + ``TALER_EC_GENERIC_DB_SOFT_FAILURE``. Built-in units allow changing ``unit_allow_fraction``, ``unit_precision_level``, and ``unit_active``; other fields are immutable for built-ins. diff --git a/core/merchant/patch-private-webhooks-WEBHOOK_ID.rst b/core/merchant/patch-private-webhooks-WEBHOOK_ID.rst @@ -16,11 +16,14 @@ The request body is malformed. :http:statuscode:`404 Not found`: The webhook(ID) is unknown to the backend. + Returned with ``TALER_EC_MERCHANT_GENERIC_WEBHOOK_UNKNOWN``. :http:statuscode:`409 Conflict`: The provided information is inconsistent with the current state of the webhook. Changes made is the same with another store. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED`` or + ``TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE``. **Details:** diff --git a/core/merchant/post-challenge-CHALLENGE_ID-confirm.rst b/core/merchant/post-challenge-CHALLENGE_ID-confirm.rst @@ -35,7 +35,8 @@ Returned with ``TALER_EC_MERCHANT_TAN_TOO_MANY_ATTEMPTS``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_COMMIT_FAILED`` or + ``TALER_EC_GENERIC_DB_SOFT_FAILURE``. **Details:** diff --git a/core/merchant/post-challenge-CHALLENGE_ID.rst b/core/merchant/post-challenge-CHALLENGE_ID.rst @@ -32,7 +32,11 @@ Returned with ``TALER_EC_MERCHANT_TAN_TOO_EARLY``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_COMMIT_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE``, + ``TALER_EC_GENERIC_DB_INVARIANT_FAILURE``, + ``TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE`` or + ``TALER_EC_GENERIC_ALLOCATION_FAILURE``. :http:statuscode:`501 Not Implemented`: The challenge channel (e.g. TOTP) is not yet supported. Returned with ``TALER_EC_GENERIC_FEATURE_NOT_IMPLEMENTED``. diff --git a/core/merchant/post-management-instances-INSTANCE-auth.rst b/core/merchant/post-management-instances-INSTANCE-auth.rst @@ -23,9 +23,12 @@ Returned with ``TALER_EC_MERCHANT_GENERIC_MFA_MISSING``. :http:statuscode:`404 Not found`: This instance is unknown and thus cannot be reconfigured. + Returned with ``TALER_EC_MERCHANT_GENERIC_INSTANCE_UNKNOWN``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_START_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED`` or + ``TALER_EC_GENERIC_DB_COMMIT_FAILED``. **Details:** diff --git a/core/merchant/post-management-instances.rst b/core/merchant/post-management-instances.rst @@ -30,9 +30,13 @@ currency supported by this backend. Another possible conflict would be if a deleted but not purged instance is known under this ID to the backend. + Returned with ``TALER_EC_MERCHANT_PRIVATE_POST_INSTANCES_ALREADY_EXISTS`` or + ``TALER_EC_MERCHANT_PRIVATE_POST_INSTANCES_PURGE_REQUIRED``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_START_FAILED`` or + ``TALER_EC_GENERIC_DB_COMMIT_FAILED``. **Details:** diff --git a/core/merchant/post-orders-ORDER_ID-abort.rst b/core/merchant/post-orders-ORDER_ID-abort.rst @@ -26,11 +26,14 @@ Either the client request is malformed or some specific processing error happened that may be the fault of the client as detailed in the JSON body of the response. + Returned with ``TALER_EC_MERCHANT_POST_ORDERS_ID_ABORT_COINS_ARRAY_EMPTY`` or + ``TALER_EC_MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_HASH_MISSMATCH``. :http:statuscode:`403 Forbidden`: The ``h_contract`` does not match the $ORDER_ID. :http:statuscode:`404 Not found`: The merchant backend could not find the order or the instance and thus cannot process the abort request. + Returned with ``TALER_EC_MERCHANT_POST_ORDERS_ID_ABORT_CONTRACT_NOT_FOUND``. :http:statuscode:`408 Request timeout`: The merchant backend took too long getting a response from the exchange. The wallet SHOULD retry soon. @@ -38,9 +41,14 @@ Aborting the payment is not allowed, as the original payment did succeed. It is possible that a different wallet succeeded with the payment. This wallet should thus try to refresh all of the coins involved in the payment. + Returned with ``TALER_EC_MERCHANT_POST_ORDERS_ID_ABORT_REFUND_REFUSED_PAYMENT_COMPLETE``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_START_FAILED``, + ``TALER_EC_GENERIC_DB_COMMIT_FAILED`` or + ``TALER_EC_GENERIC_DB_SOFT_FAILURE``. :http:statuscode:`502 Bad gateway`: The merchant's interaction with some exchange failed in some way. The errors from the exchanges are included. diff --git a/core/merchant/post-orders-ORDER_ID-claim.rst b/core/merchant/post-orders-ORDER_ID-claim.rst @@ -17,11 +17,15 @@ The response contains the :ref:`contract terms <contract-terms>`. :http:statuscode:`404 Not found`: The backend is unaware of the instance or order. + Returned with ``TALER_EC_MERCHANT_POST_ORDERS_ID_CLAIM_NOT_FOUND``. :http:statuscode:`409 Conflict`: Someone else has already claimed the same order ID with a different nonce. + Returned with ``TALER_EC_MERCHANT_POST_ORDERS_ID_CLAIM_ALREADY_CLAIMED``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_COMMIT_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE`` or + ``TALER_EC_GENERIC_FAILED_COMPUTE_JSON_HASH``. **Details:** diff --git a/core/merchant/post-orders-ORDER_ID-paid.rst b/core/merchant/post-orders-ORDER_ID-paid.rst @@ -33,7 +33,9 @@ and thus cannot process the request. Returned with ``TALER_EC_MERCHANT_GENERIC_INSTANCE_UNKNOWN`` or ``TALER_EC_MERCHANT_GENERIC_ORDER_UNKNOWN``. - :http:statuscode:`404 Not found`: + :http:statuscode:`500 Internal Server Error`: + The server experienced an internal failure. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. **Details**: diff --git a/core/merchant/post-orders-ORDER_ID-pay.rst b/core/merchant/post-orders-ORDER_ID-pay.rst @@ -56,11 +56,19 @@ ``choice_index`` is required but was not provided. * ``MERCHANT_GENERIC_EXCHANGE_UNTRUSTED``: The exchange used for a coin is not trusted by this merchant. + * ``MERCHANT_POST_ORDERS_ID_PAY_AMOUNT_OVERFLOW``: Payment amount overflowed. + * ``MERCHANT_POST_ORDERS_ID_PAY_FEES_EXCEED_PAYMENT``: Fees exceed the payment. + * ``MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_WIRE_FEE_ADDITION_FAILED``: Adding wire fees failed. + * ``MERCHANT_POST_ORDERS_ID_PAY_REFUND_DEADLINE_PAST_WIRE_TRANSFER_DEADLINE``: Refund deadline past wire deadline. + * ``MERCHANT_POST_ORDERS_ID_PAY_WIRE_HASH_UNKNOWN``: Wire hash unknown. + * ``MERCHANT_POST_ORDERS_ID_PAY_WIRE_METHOD_UNSUPPORTED``: Wire method unsupported. + * ``GENERIC_PARAMETER_MALFORMED``: A request parameter is malformed. :http:statuscode:`402 Payment required`: There used to be a sufficient payment, but due to refunds the amount effectively paid is no longer sufficient. (If the amount is generally insufficient, we return "400 Bad Request", only if this is because of refunds we return 402.) + Returned with ``TALER_EC_MERCHANT_POST_ORDERS_ID_PAY_REFUNDED``. :http:statuscode:`403 Forbidden`: One of the coin signatures was not valid. :http:statuscode:`404 Not found`: @@ -128,6 +136,8 @@ The body is a `PaymentDeniedLegallyResponse` with details about the failure. Since protocol **v17**. + Returned with ``TALER_EC_MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_LEGALLY_REFUSED`` or + ``TALER_EC_MERCHANT_POST_ORDERS_ID_PAY_EXCHANGE_TRANSACTION_LIMIT_VIOLATION``. :http:statuscode:`501 Not implemented`: This is returned if an optional feature required to process this particular payment is no longer implemented. @@ -149,7 +159,19 @@ * ``MERCHANT_GENERIC_EXCHANGE_UNEXPECTED_STATUS`` * ``MERCHANT_GENERIC_EXCHANGE_REPLY_MALFORMED`` - + * ``MERCHANT_GENERIC_DONAU_INVALID_RESPONSE`` + + :http:statuscode:`500 Internal Server Error`: + The server experienced an internal failure. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_START_FAILED``, + ``TALER_EC_GENERIC_DB_COMMIT_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE``, + ``TALER_EC_GENERIC_DB_INVARIANT_FAILURE``, + ``TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE``, + ``TALER_EC_GENERIC_FAILED_COMPUTE_JSON_HASH`` or + ``TALER_EC_MERCHANT_GENERIC_DB_CONTRACT_CONTENT_INVALID``. :http:statuscode:`504 Gateway timeout`: The merchant's interaction with the exchange took too long. The client might want to try again later. diff --git a/core/merchant/post-orders-ORDER_ID-refund.rst b/core/merchant/post-orders-ORDER_ID-refund.rst @@ -30,7 +30,8 @@ Since protocol **v24**. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_FETCH_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_FETCH_FAILED`` or + ``TALER_EC_GENERIC_FAILED_COMPUTE_JSON_HASH``. **Details:** diff --git a/core/merchant/post-private-accounts.rst b/core/merchant/post-private-accounts.rst @@ -20,14 +20,24 @@ The merchant instance is unknown or it is not in our data. :http:statuscode:`403 Forbidden`: MFA channels are not available or permission denied. + :http:statuscode:`400 Bad Request`: + The request body is malformed. + Returned with ``TALER_EC_GENERIC_PAYTO_URI_MALFORMED``, + ``TALER_EC_GENERIC_PARAMETER_MALFORMED`` or + ``TALER_EC_GENERIC_PARAMETER_MISSING``. :http:statuscode:`409 Conflict`: The provided information is inconsistent with the current state of the instance. Usually this means we already have this account, but with conflicting credit facade information. Inactive accounts can be reactivated using this method even if the credit facade information differs from the previous state. + Returned with ``TALER_EC_MERCHANT_PRIVATE_ACCOUNT_EXISTS``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_COMMIT_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE`` or + ``TALER_EC_GENERIC_DB_INVARIANT_FAILURE``. **Details:** diff --git a/core/merchant/post-private-categories.rst b/core/merchant/post-private-categories.rst @@ -20,7 +20,10 @@ Returned with ``TALER_EC_MERCHANT_PRIVATE_POST_CATEGORIES_CONFLICT_CATEGORY_EXISTS``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_START_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE`` or + ``TALER_EC_GENERIC_DB_COMMIT_FAILED``. **Details:** diff --git a/core/merchant/post-private-donau.rst b/core/merchant/post-private-donau.rst @@ -28,12 +28,17 @@ Operation requires MFA; a :ts:type:`ChallengeResponse` is returned. @since **v21** :http:statuscode:`400 Bad request`: Malformed JSON or missing fields. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. :http:statuscode:`409 Conflict`: * The charity is already linked with different parameters, or * The charity’s public key does **not** match the merchant instance’s public key. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED`` or + ``TALER_EC_GENERIC_DB_FETCH_FAILED``. + :http:statuscode:`503 Service Unavailable`: + The Donau service could not be reached. + Returned with ``TALER_EC_GENERIC_ALLOCATION_FAILURE``. :http:statuscode:`502 Bad gateway`: Communication with the Donau service failed. :http:statuscode:`503 Service Unavailable`: diff --git a/core/merchant/post-private-orders-ORDER_ID-refund.rst b/core/merchant/post-private-orders-ORDER_ID-refund.rst @@ -19,23 +19,34 @@ :http:statuscode:`403 Forbidden`: For the given order, the refund delay was zero and thus refunds are categorically not allowed. + Returned with ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_NOT_ALLOWED_BY_CONTRACT``. :http:statuscode:`404 Not found`: The order is unknown to the merchant. + Returned with ``TALER_EC_MERCHANT_GENERIC_ORDER_UNKNOWN``. + :http:statuscode:`409 Conflict`: + The refund amount exceeds the amount originally paid or + the order was not yet paid. + Returned with ``TALER_EC_MERCHANT_GENERIC_CURRENCY_MISMATCH`` or + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_ID_REFUND_ORDER_UNPAID``. :http:statuscode:`410 Gone`: - It is too late for aborting, the exchange may have already wired the funds + It is too late for refunds, the exchange may have already wired the funds to the merchant. - :http:statuscode:`409 Conflict`: - The refund amount exceeds the amount originally paid. + Returned with ``TALER_EC_MERCHANT_PRIVATE_POST_REFUND_AFTER_WIRE_DEADLINE``. :http:statuscode:`451 Unavailable for Legal Reasons`: The refund could not be awarded because of legal reasons (an exchange would refuse). The merchant staff needs to find another way to give a refund to the customer. The body is an `ErrorDetail` with an error - code of ``MERCHANT_POST_ORDERS_ID_REFUND_EXCHANGE_TRANSACTION_LIMIT_VIOLATION``. + code of ``TALER_EC_MERCHANT_POST_ORDERS_ID_REFUND_EXCHANGE_TRANSACTION_LIMIT_VIOLATION``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_START_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_COMMIT_FAILED``, + ``TALER_EC_GENERIC_DB_INVARIANT_FAILURE``, + ``TALER_EC_GENERIC_FAILED_COMPUTE_JSON_HASH`` or + ``TALER_EC_MERCHANT_GENERIC_DB_CONTRACT_CONTENT_INVALID``. **Details:** diff --git a/core/merchant/post-private-orders.rst b/core/merchant/post-private-orders.rst @@ -35,6 +35,16 @@ :ts:type:`PostOrderResponse`. :http:statuscode:`400 Bad Request`: The request body is malformed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``, + ``TALER_EC_GENERIC_PARAMETER_MISSING``, + ``TALER_EC_GENERIC_JSON_INVALID``, + ``TALER_EC_GENERIC_VERSION_MALFORMED``, + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_PROPOSAL_PARSE_ERROR``, + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_PAY_DEADLINE_IN_PAST``, + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_DELIVERY_DATE_IN_PAST``, + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_REFUND_DEADLINE_IN_PAST``, + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_WIRE_DEADLINE_IS_NEVER`` or + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_REFUND_AFTER_WIRE_DEADLINE``. :http:statuscode:`404 Not found`: Possible reasons are: @@ -45,13 +55,17 @@ (3) The wire method specified is not supported by the backend. (4) An OTP device ID was specified and is unknown. - Details in the error code. - NOTE: currently the client has no good way to find out which product - is not in the inventory, we MAY want to specify that in the reply. + Returned with ``TALER_EC_MERCHANT_GENERIC_PRODUCT_UNKNOWN``, + ``TALER_EC_MERCHANT_GENERIC_OTP_DEVICE_UNKNOWN``, + ``TALER_EC_MERCHANT_GENERIC_MONEY_POT_UNKNOWN``, + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_INSTANCE_CONFIGURATION_LACKS_WIRE`` or + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_TOKEN_FAMILY_SLUG_UNKNOWN``. :http:statuscode:`409 Conflict`: A different proposal already exists under the specified order ID, - or the requested currency is not supported by this backend. Details in - the error code. + or the requested currency is not supported by this backend. + Returned with ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_ALREADY_EXISTS``, + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_NO_EXCHANGES_FOR_WIRE_METHOD`` or + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_NO_EXCHANGE_FOR_CURRENCY``. :http:statuscode:`410 Gone`: The order given used products from the inventory that are out of stock. The response is a :ts:type:`OutOfStockResponse`. @@ -65,10 +79,19 @@ proceed with the KYC process. Since **v25**, the body is an `OrderRefusedErrorDetailResponse` with an error - code of ``MERCHANT_PRIVATE_POST_ORDERS_AMOUNT_EXCEEDS_LEGAL_LIMITS``. + code of ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_AMOUNT_EXCEEDS_LEGAL_LIMITS``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_COMMIT_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE``, + ``TALER_EC_GENERIC_FAILED_COMPUTE_JSON_HASH``, + ``TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE``, + ``TALER_EC_GENERIC_ALLOCATION_FAILURE``, + ``TALER_EC_MERCHANT_PRIVATE_POST_ORDERS_NO_LOCALTIME``, + ``TALER_EC_MERCHANT_GENERIC_EXCHANGE_KEYS_FAILURE`` or + ``TALER_EC_MERCHANT_GENERIC_CURRENCY_MISMATCH``. **Details:** diff --git a/core/merchant/post-private-otp-devices.rst b/core/merchant/post-private-otp-devices.rst @@ -18,9 +18,13 @@ The merchant instance is unknown or it is not in our data. :http:statuscode:`409 Conflict`: An OTP device with this ID already exists with different details. + Returned with ``TALER_EC_MERCHANT_PRIVATE_POST_OTP_DEVICES_CONFLICT_OTP_DEVICE_EXISTS``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_START_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE`` or + ``TALER_EC_GENERIC_DB_COMMIT_FAILED``. **Details:** diff --git a/core/merchant/post-private-products-PRODUCT_ID-lock.rst b/core/merchant/post-private-products-PRODUCT_ID-lock.rst @@ -28,13 +28,19 @@ The backend has successfully locked (or unlocked) the requested ``quantity``. :http:statuscode:`400 Bad Request`: The request body is malformed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. :http:statuscode:`404 Not found`: The backend has does not know this product. + Returned with ``TALER_EC_MERCHANT_GENERIC_PRODUCT_UNKNOWN``. :http:statuscode:`410 Gone`: The backend does not have enough of product in stock. Returns an `OutOfStockResponse`. + Returned with ``TALER_EC_MERCHANT_PRIVATE_POST_PRODUCTS_LOCK_INSUFFICIENT_STOCKS``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE`` or + ``TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE``. **Details:** diff --git a/core/merchant/post-private-products.rst b/core/merchant/post-private-products.rst @@ -14,6 +14,7 @@ The backend has successfully expanded the inventory. :http:statuscode:`400 Bad Request`: The request body is malformed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. :http:statuscode:`404 Not found`: The instance, category, product group or money pot specified are unknown. Possible error ``code`` values are thus: @@ -29,7 +30,10 @@ ``TALER_EC_MERCHANT_PRIVATE_POST_PRODUCTS_CONFLICT_PRODUCT_EXISTS``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_COMMIT_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE`` or + ``TALER_EC_GENERIC_DB_INVARIANT_FAILURE``. **Details:** diff --git a/core/merchant/post-private-templates.rst b/core/merchant/post-private-templates.rst @@ -15,11 +15,17 @@ The creation of the template is successful. :http:statuscode:`400 Bad Request`: The request body is malformed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. :http:statuscode:`404 Not found`: - The merchant instance is unknown or it is not in our data. + The merchant instance or OTP device is unknown. + Returned with ``TALER_EC_MERCHANT_GENERIC_OTP_DEVICE_UNKNOWN``. + :http:statuscode:`409 Conflict`: + A template with this ID already exists. + Returned with ``TALER_EC_MERCHANT_PRIVATE_POST_TEMPLATES_CONFLICT_TEMPLATE_EXISTS``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED`` or + ``TALER_EC_GENERIC_DB_FETCH_FAILED``. **Details:** diff --git a/core/merchant/post-private-token.rst b/core/merchant/post-private-token.rst @@ -23,6 +23,12 @@ :http:statuscode:`202 Accepted`: 2FA is required for this operation. This returns the `ChallengeResponse`. @since **v21** + :http:statuscode:`400 Bad Request`: + The request body is malformed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. + :http:statuscode:`403 Forbidden`: + The provided token has insufficient permissions for the requested scope. + Returned with ``TALER_EC_GENERIC_TOKEN_PERMISSION_INSUFFICIENT``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. diff --git a/core/merchant/post-private-tokenfamilies.rst b/core/merchant/post-private-tokenfamilies.rst @@ -15,11 +15,20 @@ :http:statuscode:`400 Bad Request`: The request body is malformed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. :http:statuscode:`404 Not found`: The merchant backend is unaware of the instance. + :http:statuscode:`409 Conflict`: + A token family with this slug already exists. + Returned with ``TALER_EC_MERCHANT_POST_TOKEN_FAMILY_CONFLICT``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_START_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE``, + ``TALER_EC_GENERIC_DB_COMMIT_FAILED`` or + ``TALER_EC_GENERIC_DB_INVARIANT_FAILURE``. **Details:** diff --git a/core/merchant/post-private-transfers.rst b/core/merchant/post-private-transfers.rst @@ -17,10 +17,13 @@ The wire transfer is now confirmed at the merchant. :http:statuscode:`404 Not found`: The instance or account are unknown to the exchange. + Returned with ``TALER_EC_MERCHANT_GENERIC_INSTANCE_UNKNOWN`` or + ``TALER_EC_MERCHANT_GENERIC_ACCOUNT_UNKNOWN``. :http:statuscode:`400 Bad Request`: The request body is malformed. :http:statuscode:`409 Conflict`: The wire transfer identifier is already known to us, but for a different amount. + Returned with ``TALER_EC_MERCHANT_PRIVATE_POST_TRANSFERS_CONFLICTING_SUBMISSION``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. diff --git a/core/merchant/post-private-units.rst b/core/merchant/post-private-units.rst @@ -14,11 +14,18 @@ The backend added the unit. :http:statuscode:`400 Bad Request`: The request body is malformed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``. + :http:statuscode:`404 Not found`: + The instance is unknown. + Returned with ``TALER_EC_MERCHANT_GENERIC_INSTANCE_UNKNOWN``. :http:statuscode:`409 Conflict`: A built-in unit with the same short name already exists. + Returned with ``TALER_EC_MERCHANT_GENERIC_UNIT_BUILTIN``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE`` or + ``TALER_EC_GENERIC_DB_INVARIANT_FAILURE``. .. ts:def:: UnitAddRequest diff --git a/core/merchant/post-private-webhooks.rst b/core/merchant/post-private-webhooks.rst @@ -17,9 +17,15 @@ The request body is malformed. :http:statuscode:`404 Not found`: The merchant instance is unknown or it not in our data. + :http:statuscode:`409 Conflict`: + A webhook with this ID already exists. + Returned with ``TALER_EC_MERCHANT_PRIVATE_POST_WEBHOOKS_CONFLICT_WEBHOOK_EXISTS``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_START_FAILED``, + ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_DB_SOFT_FAILURE`` or + ``TALER_EC_GENERIC_DB_COMMIT_FAILED``. **Details:** diff --git a/core/merchant/post-templates-TEMPLATE_ID.rst b/core/merchant/post-templates-TEMPLATE_ID.rst @@ -11,11 +11,24 @@ :http:statuscode:`400 Bad Request`: The request body is malformed. + Returned with ``TALER_EC_GENERIC_PARAMETER_MALFORMED``, + ``TALER_EC_MERCHANT_POST_USING_TEMPLATES_NO_AMOUNT``, + ``TALER_EC_MERCHANT_POST_USING_TEMPLATES_NO_CURRENCY``, + ``TALER_EC_MERCHANT_POST_USING_TEMPLATES_NO_SUMMARY``, + ``TALER_EC_MERCHANT_POST_USING_TEMPLATES_AMOUNT_CONFLICT_TEMPLATES_CONTRACT_AMOUNT``, + ``TALER_EC_MERCHANT_POST_USING_TEMPLATES_SUMMARY_CONFLICT_TEMPLATES_CONTRACT_SUBJECT``, + ``TALER_EC_MERCHANT_POST_USING_TEMPLATES_WRONG_PRODUCT``, + ``TALER_EC_MERCHANT_POST_USING_TEMPLATES_WRONG_TYPE`` or + ``TALER_EC_MERCHANT_GENERIC_CURRENCY_MISMATCH``. :http:statuscode:`404 Not found`: - The template or instance is unknown. + The template, instance, or product is unknown. + Returned with ``TALER_EC_MERCHANT_GENERIC_TEMPLATE_UNKNOWN`` or + ``TALER_EC_MERCHANT_GENERIC_PRODUCT_UNKNOWN``. :http:statuscode:`500 Internal Server Error`: The server experienced an internal failure. - Returned with ``TALER_EC_GENERIC_DB_STORE_FAILED``. + Returned with ``TALER_EC_GENERIC_DB_FETCH_FAILED``, + ``TALER_EC_GENERIC_FAILED_COMPUTE_AMOUNT`` or + ``TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE``. The response is exactly the same type of response as when creating an order using :ref:`POST /private/orders <post-order>`.