View Issue Details

IDProjectCategoryView StatusLast Update
0011346Talermerchant backendpublic2026-04-09 17:03
Reportersebasjm Assigned Tosebasjm  
PrioritynormalSeveritymajorReproducibilityalways
Status resolvedResolutionfixed 
Product Versiongit (master) 
Target Version1.6 
Summary0011346: wrong etag returned on /kyc
Descriptionthe SPA makes the request [0] which return 2 accounts and the etag MRC59T...

then makes the request [1] which the last etag and

problem 1: a new etag is returned (SRD8JC5VW...)
problem 2: only one bank account is returned.

the request complete fast (meaning new data) so SPA waits a little before doing the next request

the second long polling that the SPA does is [2] with the new etag (SRD8JC5VW...) which return the correct data but again it returns the bad etag and cycle between this two retults
Steps To Reproduce[0]

curl 'https://merchant.taler/private/kyc' \
  -H 'Accept: application/json' \
  -H 'Accept-Language: en-US,en;q=0.9' \
  -H 'Authorization: Bearer secret-token:YE78WNBZ15TTHS24CBXBWGAB296XYFZ5EK1Z4TXDXBMYYQY2N2AG' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Origin: https://dev.taler' \
  -H 'Pragma: no-cache' \
  -H 'Referer: https://dev.taler/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="145", "Not:A-Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Linux"'

HTTP/1.1 200 OK
date: Wed, 08 Apr 2026 22:21:38 GMT
access-control-allow-origin: *
access-control-expose-headers: *
cache-control: no-store
content-type: application/json
etag: "MRC59TN6QWD7MF06MB084S1EN35BQGPJSHP3GX0G1250NY09P1X0"
content-length: 1612
Connection: keep-alive
Keep-Alive: timeout=5


{
  "kyc_data": [
    {
      "payto_uri": "payto://iban/DE1327812254798?receiver-name=the%20name%20of%20merchant",
      "h_wire": "Z4S5Y7N2BQEDQ1FHX5H0GCC4EBRMGVB1ENHFED2XSYBFSDTTRPKP2MHETFYYB3Y1XETH7SMANCT6N4PTNEM8MWBYNCY8NFBQ1RYVRCR",
      "status": "ready",
      "exchange_url": "https://exchange.taler/",
      "exchange_currency": "KUDOS",
      "no_keys": false,
      "auth_conflict": false,
      "exchange_http_status": 200,
      "access_token": "751F91NJKPEWKNX4DMBPBQMH2Y2HTMFAB2X0WM772N86SKHMWR3G",
      "limits": [
        {
          "threshold": "KUDOS:100",
          "timeframe": {
            "d_us": 180000000
          },
          "soft_limit": true,
          "operation_type": "WITHDRAW"
        }
      ]
    },
    {
      "payto_uri": "payto://iban/DE75512108001245126199?receiver-name=seb",
      "h_wire": "XC45320EGSV8R7FZRA2CTQDS8JTBKKPKJ4R5G7JQ9GP5HBAHHJMHYETGF4J6Z395J82V4PZ191NVNG11GKMCAJVHFXH44BAJT14NM38",
      "status": "kyc-wire-required",
      "exchange_url": "https://exchange.taler/",
      "exchange_currency": "KUDOS",
      "no_keys": false,
      "auth_conflict": false,
      "exchange_http_status": 404,
      "exchange_code": 1939,
      "limits": [
        {
          "operation_type": "DEPOSIT",
          "disallowed": true,
          "timeframe": {
            "d_us": 0
          },
          "threshold": "KUDOS:0",
          "soft_limit": true
        }
      ],
      "payto_kycauths": [
        "payto://iban/CH7689144661327513261?receiver-name=Exchanger+Conver&message=KYC:V38GCFQDVWEFX3R17DSKTJGPYNCCXV5EZTS6869FDEWE23NJX38G"
      ]
    }
  ]
}




[1]

curl 'https://merchant.taler/private/kyc?lp_not_etag=MRC59TN6QWD7MF06MB084S1EN35BQGPJSHP3GX0G1250NY09P1X0&timeout_ms=15000' \
  -H 'Accept: application/json' \
  -H 'Accept-Language: en-US,en;q=0.9' \
  -H 'Authorization: Bearer secret-token:YE78WNBZ15TTHS24CBXBWGAB296XYFZ5EK1Z4TXDXBMYYQY2N2AG' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'If-none-match: "MRC59TN6QWD7MF06MB084S1EN35BQGPJSHP3GX0G1250NY09P1X0"' \
  -H 'Origin: https://dev.taler' \
  -H 'Pragma: no-cache' \
  -H 'Referer: https://dev.taler/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="145", "Not:A-Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Linux"'

HTTP/1.1 200 OK
date: Wed, 08 Apr 2026 22:21:53 GMT
access-control-allow-origin: *
access-control-expose-headers: *
cache-control: no-store
content-type: application/json
etag: "SRD8JC5VW17CJX01SMNNPX8GAVDXYP9ZNNG82PM08WA9VWKAD6NG"
content-length: 746
Connection: keep-alive
Keep-Alive: timeout=5

{
  "kyc_data": [
    {
      "payto_uri": "payto://iban/DE1327812254798?receiver-name=the%20name%20of%20merchant",
      "h_wire": "Z4S5Y7N2BQEDQ1FHX5H0GCC4EBRMGVB1ENHFED2XSYBFSDTTRPKP2MHETFYYB3Y1XETH7SMANCT6N4PTNEM8MWBYNCY8NFBQ1RYVRCR",
      "status": "ready",
      "exchange_url": "https://exchange.taler/",
      "exchange_currency": "KUDOS",
      "no_keys": false,
      "auth_conflict": false,
      "exchange_http_status": 200,
      "access_token": "751F91NJKPEWKNX4DMBPBQMH2Y2HTMFAB2X0WM772N86SKHMWR3G",
      "limits": [
        {
          "threshold": "KUDOS:100",
          "timeframe": {
            "d_us": 180000000
          },
          "soft_limit": true,
          "operation_type": "WITHDRAW"
        }
      ]
    }
  ]
}

[2]

curl 'https://merchant.taler/private/kyc?lp_not_etag=SRD8JC5VW17CJX01SMNNPX8GAVDXYP9ZNNG82PM08WA9VWKAD6NG&timeout_ms=15000' \
  -H 'Accept: application/json' \
  -H 'Accept-Language: en-US,en;q=0.9' \
  -H 'Authorization: Bearer secret-token:YE78WNBZ15TTHS24CBXBWGAB296XYFZ5EK1Z4TXDXBMYYQY2N2AG' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'If-none-match: "SRD8JC5VW17CJX01SMNNPX8GAVDXYP9ZNNG82PM08WA9VWKAD6NG"' \
  -H 'Origin: https://dev.taler' \
  -H 'Pragma: no-cache' \
  -H 'Referer: https://dev.taler/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="145", "Not:A-Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Linux"'

HTTP/1.1 200 OK
date: Wed, 08 Apr 2026 22:21:53 GMT
access-control-allow-origin: *
access-control-expose-headers: *
cache-control: no-store
content-type: application/json
etag: "MRC59TN6QWD7MF06MB084S1EN35BQGPJSHP3GX0G1250NY09P1X0"
content-length: 1612
Connection: keep-alive
Keep-Alive: timeout=5

{
  "kyc_data": [
    {
      "payto_uri": "payto://iban/DE1327812254798?receiver-name=the%20name%20of%20merchant",
      "h_wire": "Z4S5Y7N2BQEDQ1FHX5H0GCC4EBRMGVB1ENHFED2XSYBFSDTTRPKP2MHETFYYB3Y1XETH7SMANCT6N4PTNEM8MWBYNCY8NFBQ1RYVRCR",
      "status": "ready",
      "exchange_url": "https://exchange.taler/",
      "exchange_currency": "KUDOS",
      "no_keys": false,
      "auth_conflict": false,
      "exchange_http_status": 200,
      "access_token": "751F91NJKPEWKNX4DMBPBQMH2Y2HTMFAB2X0WM772N86SKHMWR3G",
      "limits": [
        {
          "threshold": "KUDOS:100",
          "timeframe": {
            "d_us": 180000000
          },
          "soft_limit": true,
          "operation_type": "WITHDRAW"
        }
      ]
    },
    {
      "payto_uri": "payto://iban/DE75512108001245126199?receiver-name=seb",
      "h_wire": "XC45320EGSV8R7FZRA2CTQDS8JTBKKPKJ4R5G7JQ9GP5HBAHHJMHYETGF4J6Z395J82V4PZ191NVNG11GKMCAJVHFXH44BAJT14NM38",
      "status": "kyc-wire-required",
      "exchange_url": "https://exchange.taler/",
      "exchange_currency": "KUDOS",
      "no_keys": false,
      "auth_conflict": false,
      "exchange_http_status": 404,
      "exchange_code": 1939,
      "limits": [
        {
          "operation_type": "DEPOSIT",
          "disallowed": true,
          "timeframe": {
            "d_us": 0
          },
          "threshold": "KUDOS:0",
          "soft_limit": true
        }
      ],
      "payto_kycauths": [
        "payto://iban/CH7689144661327513261?receiver-name=Exchanger+Conver&message=KYC:V38GCFQDVWEFX3R17DSKTJGPYNCCXV5EZTS6869FDEWE23NJX38G"
      ]
    }
  ]
}
TagsNo tags attached.

Activities

Christian Grothoff

2026-04-09 16:37

manager   ~0028392

I've taken another hard look at the code, and HOPE 09548345..d50f371d (merchant.git) fixes it.
I don't have an easy way to reproduce, so please check that this fixes it. If not, we really need a taler-harness test for this...

sebasjm

2026-04-09 17:03

developer   ~0028393

nailed it, never lose hope

Issue History

Date Modified Username Field Change
2026-04-09 00:32 sebasjm New Issue
2026-04-09 00:32 sebasjm Status new => assigned
2026-04-09 00:32 sebasjm Assigned To => Christian Grothoff
2026-04-09 16:37 Christian Grothoff Note Added: 0028392
2026-04-09 16:37 Christian Grothoff Assigned To Christian Grothoff => sebasjm
2026-04-09 16:37 Christian Grothoff Status assigned => feedback
2026-04-09 17:03 sebasjm Status feedback => resolved
2026-04-09 17:03 sebasjm Resolution open => fixed
2026-04-09 17:03 sebasjm Note Added: 0028393