vellTRDocs
API ReferencePaymentsFinalize 3DS Challenge

Finalize 3DS Challenge

POST/v1/payments/{id}/3ds-callbackOptional

Complete a 3DS challenge. The hosted checkout posts the ACS pares + the correlationId returned from the card charge. Idempotent — a duplicate submit returns the winner's row byte-for-byte.

Authentication

Signature Pattern

HMAC-SHA256(secretKey, "{timestamp}\nPOST\n/v1/payments/{id}/3ds-callback\n{sha256(body)}")
HeaderValueDescription
X-Api-Keypk_live_a1b2c3d4e5f6g7h8Merchant public API key
X-Signature{hmac_sha256_hex}Hex HMAC-SHA256 request signature (see below)
X-Timestamp2026-04-13T10:00:00ZISO 8601 UTC request time, validated within ±5 min

Request Parameters

NameTypeRequiredDescription
paresstringRequiredSigned ACS assertion from the 3DS challenge
correlationIdstringRequiredValue round-tripped from the card charge response

Request Example

JSONRequest Body
{
  "pares": "eyJjaGFsbGVuZ2VJZCI6Ii4uLiJ9.9a8b7c6d",
  "correlationId": "c0rr-3f1c-9a2e-6b4d"
}

Response Parameters

FieldTypeExample
idstring"pay_1a2b3c4d5e6f"
statusstring"captured"
amountinteger15000
currencystring"TRY"
commissioninteger449
netAmountinteger14551
authCodestring"123456"
completedAtstring"2026-04-13T10:00:05Z"

Response Example

JSONResponse
{
  "id": "pay_1a2b3c4d5e6f",
  "status": "captured",
  "amount": 15000,
  "currency": "TRY",
  "commission": 449,
  "netAmount": 14551,
  "authCode": "123456",
  "completedAt": "2026-04-13T10:00:05Z"
}

Status Codes

200Success
201Created
400Bad Request
401Unauthorized
404Not Found
429Rate Limited
Try itMock
POSThttps://api.pay.sandbox.kvell.group