Testing with Veriscope Sandbox Environment (aka Robot VASPs)

To streamline testing & integration efforts, Veriscope has a sandbox environment which enables VASPs to test the end-to-end flow without having to coordinate with others VASPs or run two nodes in parallel.

The sandbox environment simulates webhook events & responses for oVASPs and bVASPs depending on the direction of the flow. If your VASP initiates a new attestation [to a particular destination address], the sandbox will act as bVASP. On the otherhand, if your VASP responds to a particular attestation, the sandbox will act as oVASP.

This page describes how to test with the sandbox environment.

By including a test_vars parameter when creating/sending a KYC template you can determine the IVMS state code that the sandbox VASP uses when creating a KYC template. If the test_vars parameter is not set, the sandbox will auto-accept the template sent.

IVMS state code Description test_vars parameter value

0202

Accepted

"test_vars": "ivms_state_code=0202"

0307

Temporary Rejection

"test_vars": "ivms_state_code=0307"

0308

Permanent Rejection

"test_vars": "ivms_state_code=0308"

Mainnet vs Testnet

The Veriscope Sandbox is designed to be used with Shyft testnet, however, it can also be used in production to check responses to attestations against the Sandbox withdrawal / destination addresses on mainnet. That is to say, the oVASP flow (post attestation, receive a response) will work on both testnet and mainnet whereas the bVASP flow (respond to a specific attestation) will only work on testnet as that’s where those attestation are recorded.

Which Env Be oVASP Be bVASP

Mainnet

O

X

Testnet

O

O

Test as Originator VASP (Sandbox as bVASP)

Step 1 - Post attestation

Using the Veriscope Postman collection, create a new attestation to any of the PCF Corp VASP test addresses listed below (tBTC, tETH, tZEC, or tXMR).

Example 1. endpoint
`POST` {{baseUrl}}/api/v1/server/set_v3_attestation

This example is testing ETH with sandbox.

Example 2. params
"ta_account": "0x5871A9b7BBd7E64db1cdDB01B631545F45A98d0c",
"user_account": "0xb532cCA105f966a76C3826451818b55fB2190933",
"jurisdiction": "5",
"coin_blockchain": "tETH",
"coin_token": "tETH",
"coin_address": "0xA4bdddE6cEA9FB6a57949EBA19E6D213dc569C67",
"coin_memo":"Add some content to remind you of this transaction"
When testing with the sandbox, you need to find the values for "coin_blockchain", "coin_token", and "coin_address" in the table below.
  • ta_account is your TA account

  • user_account is the originator/sender user account_address from Create Shyft User API

  • jurisdiction is the originator/sender VASP jurisdiction id from Get Jurisdictions API

  • coin_blockchain You can find the details for each currency below. For example, you can test with BTC using tBTC

  • coin_token same as coin_blockchain

  • coin_address Regarding the previous "coin_blockchain", we need to use the tBTC coin address. For example, you can test with 18crLganfufUzqFB2eH7jt4jPPYze45gZs this coin address

Example 3. response body (200 OK)
[]
Field Value

VASP ENTITY

PCF Corp

VASP TYPE

BENEFICIARY

VASP API_URL

pcf.veriscope.network/kyc-template

VASP TA Account

0xC0cA43B4848823d5417cAAFB9e8E6704b9d5375c

VASP User

Felix Bailey

VASP User Account (Shyft User Id)

0xb532cCA105f966a76C3826451818b55fB2190933

tBTC Address

18crLganfufUzqFB2eH7jt4jPPYze45gZs

Private Key

L5HBFYkwBtVCk51NCCGDogDRjy5vhn7vP2WhEy1TAwXnYTvbCA1o

tETH Address

0xA4bdddE6cEA9FB6a57949EBA19E6D213dc569C67

Private Key

932dc3b6fae4b3d7234563f34f90487140378b1ee569cff1176f489ea9769b35

tZEC Address

t1V6m4PFXCNU3zBDEHfEEwC3ZpxKAZHmiC2

Private Key

L4PzvEARNJcKhTh7uBXELrXHcMaP8w9pF8rniWXnx66c1X4j76yN

tXMR Address

45VzrocqjddFmy6vC58XPx5unNdHQozupbuCYPtFCXGreP7mZwCLijrX2pCSeMd1jiTFLohGVwqLyJauAtQ9d8xx3WjGKax

Private Key

1e7b4a3c9f464b4a6f65c10089f547504dcdda67bce51cbb0bef52b3b4d4690c

On posting an attestation, you will receive the following webhook events.

Webhook Event: NEW_ATTESTATION

Example 4. eventType
"eventType": "NEW_ATTESTATION"
Example 5. params
{
  "eventType": "NEW_ATTESTATION",
  "ta_account": "0x5871A9b7BBd7E64db1cdDB01B631545F45A98d0c",
  "jurisdiction": "5",
  "effective_time": "1628341125",
  "expiry_time": "1691585925",
  "is_managed": "1",
  "attestation_hash": "0xf2f719d6c093732266d2a48fbaba56eebb3e3a7eb22eeecd47f445529fc7b4f7",
  "transaction_hash": "0xecdf5bcf0077fb605a241200795d75d76bc23f1ad6eba827e543d42b274974cc",
  "user_account": "0xb532cCA105f966a76C3826451818b55fB2190933",
  "public_data": "0x00",
  "public_data_decoded": null,
  "documents_matrix_encrypted": "0x37383963383564316331366463343330306330343430653764323438633062373165323632396339623261613439316634313461626264653665353765626662666166633330303937303364313065353664626237643765656563376462653363336663666263336663663737656663663566636233646465363565636364373362643633623664363662313661643362643137366233366662353961636462316362356438363166333838363263336536643938613964353763363737383564633935663235306363353337383535363932613564653535303139326161373065613064336334373531633964323761343834393439303132353234323461343830393239323932356135653462353935393439343932353235323461343230393536333064656231343037326233383138643261613830383437303332633132393931616363363265393961306333333033333231613333343037643864373835623037326135636166303330646531633636366331626335366332623863326636373631623564363734333137366332336362353333356230656239333465383430646439336466666631303735666666366535333061",
  "documents_matrix_encrypted_decoded": "789c85d1c16dc4300c0440e7d248c0b71e2629c9b2aa491f414abbde6e57ebfbfafc3009703d10e56dbb7d7eeec7dbe3c3fcfbc3fcf77efcf5fcb3dde65eccd73bd63b6d66b16ad3bd176b36fb59acdb1cb5d861f38862c3e6d98a9d57c67785dc95f250cc537855692a5de550192aa70ea0d3c4751c9d27a48494901252424a4809292925a5e4b59594949252524a42095630deb14072b3818d2aa80847032c12991acc62e99a0c3303321a33407d8d785b072a5caf030de1c666c1bc56c2b8c2f6761b5d6743176c23cb5335b0eb934e840dd93dfff1075fff6e530a",
  "availability_address_encrypted": "0x2020202020202020202020202020202020202020202020202020202020202020",
  "availability_address_encrypted_decoded": null,
  "version_code": "3",
  "coin_blockchain": "tETH",
  "coin_token": "tETH",
  "coin_address": "0xa4bddde6cea9fb6a57949eba19e6d213dc569c67",
  "coin_memo": null
}

Webhook Event: OR_DATA_REQ

Handling tips
  • This event indicates to oVASPs that a VASP has responded to one of their attestations.

  • Provided the VASP status is BE_TA_VERIFIED oVASPs should respond with their signature data

  • oVASPs can also included encrypted IVMS in the reponse or wait for the bVASP to send encrypted IVMS data first.

Example 6. eventType
"eventType": "OR_DATA_REQ"
Example 7. params
{
  "eventType": "OR_DATA_REQ",
  "kycTemplate": {
    "AttestationHash": "0xf2f719d6c093732266d2a48fbaba56eebb3e3a7eb22eeecd47f445529fc7b4f7",
    "BeneficiaryTAAddress": "0xC0cA43B4848823d5417cAAFB9e8E6704b9d5375c",
    "BeneficiaryTAPublicKey": "0x04c2d213d585fed2213395e61f99b988f692aec84d38b288d14ffc4a90c879531cd92105bf1336da88ec6bf1f86a74293695cfeaa444dc9fcf2614d201e4a64c02",
    "BeneficiaryUserAddress": "0xb532cca105f966a76c3826451818b55fb2190933",
    "BeneficiaryUserPublicKey": "0x04030d33064a0312133b5c658d6639776c2583f536d683d337dcbef9a7a92b3e948309ed6d539af0be4789f2cb12a7f307b5f3b2bba5691d38b7f22780c7f9cf06",
    "BeneficiaryTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "BeneficiaryTASignature": {
      "r": "0x46f872cf316d3dfec32647408cb368fb2d03e99bbd8a96dd6f98548d5ab1e9ab",
      "s": "0x6a2eda3f0fc77a0753d983709a851bb2e66e0d1aa13515a008658f24f252206f",
      "v": "0x25"
    },
    "BeneficiaryUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "BeneficiaryUserSignature": {
      "r": "0x44b6fd5ca7bd65df4b63e532783ab9fba32021677bc86d25a19901b2bcc25212",
      "s": "0x2e005a04016ffb0a4be91feb00a91870fe5b82141f6d901d0f949143c05146c2",
      "v": "0x25"
    },
    "CoinBlockchain": "tETH",
    "CoinToken": "tETH",
    "CoinAddress": "0xa4bddde6cea9fb6a57949eba19e6d213dc569c67",
    "CoinMemo": null,
    "CoinTransactionHash": null,
    "CoinTransactionValue": null,
    "SenderTAAddress": "0x5871a9b7bbd7e64db1cddb01b631545f45a98d0c",
    "SenderTAPublicKey": null,
    "SenderUserAddress": "0xb532cca105f966a76c3826451818b55fb2190933",
    "SenderUserPublicKey": null,
    "SenderTASignatureHash": null,
    "SenderTASignature": null,
    "SenderUserSignatureHash": null,
    "SenderUserSignature": null,
    "BeneficiaryKYC": null,
    "SenderKYC": null,
    "BeneficiaryTAUrl": "https://pcf.veriscope.network/kyc-template",
    "SenderTAUrl": "https://sandbox.veriscope.network/kyc-template"
  }
}

Step 2 - Respond with signature data

Example 8. endpoint
`POST` {{baseUrl}}/api/v1/server/create_kyc_template
Example 9. params
"attestation_hash": "0xf2f719d6c093732266d2a48fbaba56eebb3e3a7eb22eeecd47f445529fc7b4f7",
"user_account": "0xb34111d81f65cc3662db94f2e82303ad5d39dc60",
"user_public_key": "0x04fa1e9e68c2e4d1f7735091f1c72a760b93be8ebb226150c33babc737a7388367752313b30617ef31fd5271d735eaa5ab81046c774698b774794339f8cc7b560d",
"user_signature": "{\"r\":\"0x7696c2cb4895b320d14fd88f92b948bd549b100eef7899d8b0a4710401a322af\",\"s\":\"0x01cd1a9729d88a9db7fe6802c6e52e709170dd93782eb96f5e630d141623ca10\",\"v\":\"0x25\"}",
"user_signature_hash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
"ivms_encrypt": (optional),
"coin_transaction_hash": (optional),
"coin_transaction_value": (optional),
"coin_address_crypto_proof": (Optional)
  • attestation_hash come from your webhook URL

  • user_account which you’re using in the post attestation for that user account

  • user_public_key which you’re creating from Create Shyft User API (The user account and user public key need to be a matching pair.)

  • user_signature which you’re creating from Create Shyft User API (This value needs to be JSONminify)

  • user_signature_hash which you’re creating from Create Shyft User API

  • ivms_encrypt from Encrypt IVMS API

  • Postman: Create Template

Webhook Event: BE_ENC

Example 10. eventType
"eventType": "BE_ENC"
Example 11. params
{
  "eventType": "BE_ENC",
  "kycTemplate": {
    "AttestationHash": "0xf2f719d6c093732266d2a48fbaba56eebb3e3a7eb22eeecd47f445529fc7b4f7",
    "BeneficiaryTAAddress": "0xC0cA43B4848823d5417cAAFB9e8E6704b9d5375c",
    "BeneficiaryTAPublicKey": "0x04c2d213d585fed2213395e61f99b988f692aec84d38b288d14ffc4a90c879531cd92105bf1336da88ec6bf1f86a74293695cfeaa444dc9fcf2614d201e4a64c02",
    "BeneficiaryUserAddress": "0xb532cca105f966a76c3826451818b55fb2190933",
    "BeneficiaryUserPublicKey": "0x04030d33064a0312133b5c658d6639776c2583f536d683d337dcbef9a7a92b3e948309ed6d539af0be4789f2cb12a7f307b5f3b2bba5691d38b7f22780c7f9cf06",
    "BeneficiaryTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "BeneficiaryTASignature": {
      "r": "0x46f872cf316d3dfec32647408cb368fb2d03e99bbd8a96dd6f98548d5ab1e9ab",
      "s": "0x6a2eda3f0fc77a0753d983709a851bb2e66e0d1aa13515a008658f24f252206f",
      "v": "0x25"
    },
    "BeneficiaryUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "BeneficiaryUserSignature": {
      "r": "0x44b6fd5ca7bd65df4b63e532783ab9fba32021677bc86d25a19901b2bcc25212",
      "s": "0x2e005a04016ffb0a4be91feb00a91870fe5b82141f6d901d0f949143c05146c2",
      "v": "0x25"
    },
    "CoinBlockchain": "tETH",
    "CoinToken": "tETH",
    "CoinAddress": "0xa4bddde6cea9fb6a57949eba19e6d213dc569c67",
    "CoinMemo": null,
    "CoinTransactionHash": null,
    "CoinTransactionValue": null,
    "SenderTAAddress": "0x5871a9b7bbd7e64db1cddb01b631545f45a98d0c",
    "SenderTAPublicKey": "696b447bdbbd2e6df023c0d8cf4bf0c3867217c5a69513915b3bb5455a176e27eec0014baa4629c1aded7ec16e45b2f8cdfa2cd6a97fe6470ea9d2446aae682a",
    "SenderUserAddress": "0xb532cca105f966a76c3826451818b55fb2190933",
    "SenderUserPublicKey": "0x04fa1e9e68c2e4d1f7735091f1c72a760b93be8ebb226150c33babc737a7388367752313b30617ef31fd5271d735eaa5ab81046c774698b774794339f8cc7b560d",
    "SenderTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "SenderTASignature": {
      "r": "0xda7ad1af2ce1530215e29a842bbd62d77c1ca85515472aab21959463450c6b14",
      "s": "0x57d7f70727d6d8965ec1451c29b9df3bd6e2de2e176db530a6d6ede7b07af5f3",
      "v": "0x25"
    },
    "SenderUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "SenderUserSignature": {
      "r": "0x7696c2cb4895b320d14fd88f92b948bd549b100eef7899d8b0a4710401a322af",
      "s": "0x01cd1a9729d88a9db7fe6802c6e52e709170dd93782eb96f5e630d141623ca10",
      "v": "0x25"
    },
    "BeneficiaryKYC": "BNJjcSmk0+menM+1GznnaxWzFm/SlIr9LHoIVE+dYQ1gU2NG91jAHH1s/fj9nT9mhn1331/flQ8y7HVJZO1WxRnNPfzINvwuM2rf8KnSqBQoI30kljr/0X+ngavp8YtSnbBfB4o1xWM9H1z5cV11MmK5diZ/mFILdSn9AerkvOHjJerx3Is=",
    "SenderKYC": null,
    "BeneficiaryTAUrl": "https://pcf.veriscope.network/kyc-template",
    "SenderTAUrl": "https://sandbox.veriscope.network/kyc-template"
  }
}

Webhook Event: OR_KYC_REQ

Example 12. eventType
"eventType": "OR_KYC_REQ"
Example 13. params
{
  "eventType": "OR_KYC_REQ",
  "kycTemplate": {
    "AttestationHash": "0xf2f719d6c093732266d2a48fbaba56eebb3e3a7eb22eeecd47f445529fc7b4f7",
    "BeneficiaryTAAddress": "0xC0cA43B4848823d5417cAAFB9e8E6704b9d5375c",
    "BeneficiaryTAPublicKey": "0x04c2d213d585fed2213395e61f99b988f692aec84d38b288d14ffc4a90c879531cd92105bf1336da88ec6bf1f86a74293695cfeaa444dc9fcf2614d201e4a64c02",
    "BeneficiaryUserAddress": "0xb532cca105f966a76c3826451818b55fb2190933",
    "BeneficiaryUserPublicKey": "0x04030d33064a0312133b5c658d6639776c2583f536d683d337dcbef9a7a92b3e948309ed6d539af0be4789f2cb12a7f307b5f3b2bba5691d38b7f22780c7f9cf06",
    "BeneficiaryTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "BeneficiaryTASignature": {
      "r": "0x46f872cf316d3dfec32647408cb368fb2d03e99bbd8a96dd6f98548d5ab1e9ab",
      "s": "0x6a2eda3f0fc77a0753d983709a851bb2e66e0d1aa13515a008658f24f252206f",
      "v": "0x25"
    },
    "BeneficiaryUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "BeneficiaryUserSignature": {
      "r": "0x44b6fd5ca7bd65df4b63e532783ab9fba32021677bc86d25a19901b2bcc25212",
      "s": "0x2e005a04016ffb0a4be91feb00a91870fe5b82141f6d901d0f949143c05146c2",
      "v": "0x25"
    },
    "CoinBlockchain": "tETH",
    "CoinToken": "tETH",
    "CoinAddress": "0xa4bddde6cea9fb6a57949eba19e6d213dc569c67",
    "CoinMemo": null,
    "CoinTransactionHash": null,
    "CoinTransactionValue": null,
    "SenderTAAddress": "0x5871a9b7bbd7e64db1cddb01b631545f45a98d0c",
    "SenderTAPublicKey": "696b447bdbbd2e6df023c0d8cf4bf0c3867217c5a69513915b3bb5455a176e27eec0014baa4629c1aded7ec16e45b2f8cdfa2cd6a97fe6470ea9d2446aae682a",
    "SenderUserAddress": "0xb532cca105f966a76c3826451818b55fb2190933",
    "SenderUserPublicKey": "0x04fa1e9e68c2e4d1f7735091f1c72a760b93be8ebb226150c33babc737a7388367752313b30617ef31fd5271d735eaa5ab81046c774698b774794339f8cc7b560d",
    "SenderTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "SenderTASignature": {
      "r": "0xda7ad1af2ce1530215e29a842bbd62d77c1ca85515472aab21959463450c6b14",
      "s": "0x57d7f70727d6d8965ec1451c29b9df3bd6e2de2e176db530a6d6ede7b07af5f3",
      "v": "0x25"
    },
    "SenderUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "SenderUserSignature": {
      "r": "0x7696c2cb4895b320d14fd88f92b948bd549b100eef7899d8b0a4710401a322af",
      "s": "0x01cd1a9729d88a9db7fe6802c6e52e709170dd93782eb96f5e630d141623ca10",
      "v": "0x25"
    },
    "BeneficiaryKYC": "BNJjcSmk0+menM+1GznnaxWzFm/SlIr9LHoIVE+dYQ1gU2NG91jAHH1s/fj9nT9mhn1331/flQ8y7HVJZO1WxRnNPfzINvwuM2rf8KnSqBQoI30kljr/0X+ngavp8YtSnbBfB4o1xWM9H1z5cV11MmK5diZ/mFILdSn9AerkvOHjJerx3Is=",
    "SenderKYC": null,
    "BeneficiaryTAUrl": "https://pcf.veriscope.network/kyc-template",
    "SenderTAUrl": "https://sandbox.veriscope.network/kyc-template"
  }
}

Step 3: Send Encrypted IVMS data

Example 14. endpoint
`POST` {{baseUrl}}/api/v1/server/create_kyc_template
Example 15. params
"attestation_hash": "0xf2f719d6c093732266d2a48fbaba56eebb3e3a7eb22eeecd47f445529fc7b4f7",
"user_account": "0xb34111d81f65cc3662db94f2e82303ad5d39dc60",
"user_public_key": "0x04fa1e9e68c2e4d1f7735091f1c72a760b93be8ebb226150c33babc737a7388367752313b30617ef31fd5271d735eaa5ab81046c774698b774794339f8cc7b560d",
"user_signature": "{\"r\":\"0x7696c2cb4895b320d14fd88f92b948bd549b100eef7899d8b0a4710401a322af\",\"s\":\"0x01cd1a9729d88a9db7fe6802c6e52e709170dd93782eb96f5e630d141623ca10\",\"v\":\"0x25\"}",
"user_signature_hash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
"ivms_encrypt": "BHSDX4Epe9uUNUNKsbLFVuEyesD5sohV0q9bDGCPBz087IgYZhiR4HB/uBJTjqrA3n8b3TkepPvBYeRyYdAbdsYc3j1hw9dnRAFZgS02BZrqbwTOsKfTYDZyPj7P+sMjk2hi7TXOmd0Qk2lEdUHB0ARavH/S7zMVI0v8geuv+og=",
"coin_transaction_hash": (optional),
"coin_transaction_value": (optional),
"ivms_state_code": (optional),
"test_vars": "ivms_state_code=0202"(optional),
"coin_address_crypto_proof": (Optional)
  • ivms_encrypt from Encrypt IVMS API

  • test_vars this will affect your sandbox(bVASP) to respond with a different IVMS state code

Webhook Event: OR_KYC_ACCEPTED

Example 16. eventType
"eventType": "OR_KYC_ACCEPTED"
Example 17. params
{
  "eventType": "OR_KYC_ACCEPTED",
  "kycTemplate": {
    "AttestationHash": "0xf2f719d6c093732266d2a48fbaba56eebb3e3a7eb22eeecd47f445529fc7b4f7",
    "BeneficiaryTAAddress": "0xC0cA43B4848823d5417cAAFB9e8E6704b9d5375c",
    "BeneficiaryTAPublicKey": "0x04c2d213d585fed2213395e61f99b988f692aec84d38b288d14ffc4a90c879531cd92105bf1336da88ec6bf1f86a74293695cfeaa444dc9fcf2614d201e4a64c02",
    "BeneficiaryUserAddress": "0xb532cca105f966a76c3826451818b55fb2190933",
    "BeneficiaryUserPublicKey": "0x04030d33064a0312133b5c658d6639776c2583f536d683d337dcbef9a7a92b3e948309ed6d539af0be4789f2cb12a7f307b5f3b2bba5691d38b7f22780c7f9cf06",
    "BeneficiaryTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "BeneficiaryTASignature": {
      "r": "0x46f872cf316d3dfec32647408cb368fb2d03e99bbd8a96dd6f98548d5ab1e9ab",
      "s": "0x6a2eda3f0fc77a0753d983709a851bb2e66e0d1aa13515a008658f24f252206f",
      "v": "0x25"
    },
    "BeneficiaryUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "BeneficiaryUserSignature": {
      "r": "0x44b6fd5ca7bd65df4b63e532783ab9fba32021677bc86d25a19901b2bcc25212",
      "s": "0x2e005a04016ffb0a4be91feb00a91870fe5b82141f6d901d0f949143c05146c2",
      "v": "0x25"
    },
    "CoinBlockchain": "tETH",
    "CoinToken": "tETH",
    "CoinAddress": "0xa4bddde6cea9fb6a57949eba19e6d213dc569c67",
    "CoinMemo": null,
    "CoinTransactionHash": null,
    "CoinTransactionValue": null,
    "SenderTAAddress": "0x5871a9b7bbd7e64db1cddb01b631545f45a98d0c",
    "SenderTAPublicKey": "696b447bdbbd2e6df023c0d8cf4bf0c3867217c5a69513915b3bb5455a176e27eec0014baa4629c1aded7ec16e45b2f8cdfa2cd6a97fe6470ea9d2446aae682a",
    "SenderUserAddress": "0xb532cca105f966a76c3826451818b55fb2190933",
    "SenderUserPublicKey": "0x04fa1e9e68c2e4d1f7735091f1c72a760b93be8ebb226150c33babc737a7388367752313b30617ef31fd5271d735eaa5ab81046c774698b774794339f8cc7b560d",
    "SenderTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "SenderTASignature": {
      "r": "0xda7ad1af2ce1530215e29a842bbd62d77c1ca85515472aab21959463450c6b14",
      "s": "0x57d7f70727d6d8965ec1451c29b9df3bd6e2de2e176db530a6d6ede7b07af5f3",
      "v": "0x25"
    },
    "SenderUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "SenderUserSignature": {
      "r": "0x7696c2cb4895b320d14fd88f92b948bd549b100eef7899d8b0a4710401a322af",
      "s": "0x01cd1a9729d88a9db7fe6802c6e52e709170dd93782eb96f5e630d141623ca10",
      "v": "0x25"
    },
    "BeneficiaryKYC": "BNJjcSmk0+menM+1GznnaxWzFm/SlIr9LHoIVE+dYQ1gU2NG91jAHH1s/fj9nT9mhn1331/flQ8y7HVJZO1WxRnNPfzINvwuM2rf8KnSqBQoI30kljr/0X+ngavp8YtSnbBfB4o1xWM9H1z5cV11MmK5diZ/mFILdSn9AerkvOHjJerx3Is=",
    "SenderKYC": "BGNoMNJ8DVLFEFsRvsduOsipPAf3zCwmlQnMOFYPxv5GBzXUGcX8TvPmf/6W5kHJ4ubUIIPN9uPjVrsqirLFWloW2sjLUS5Q2z75Nxl/O0Z0jfr6WDvLV2AO5/qfDQPl8CP6R8ZCdKY3Bt9exfYa8+nCLxYDEttnP0mwdxgQLHY=",
    "BeneficiaryTAUrl": "https://pcf.veriscope.network/kyc-template",
    "SenderTAUrl": "https://sandbox.veriscope.network/kyc-template"
  }
}

Step 4: Accept bVASP KYC template

Example 18. endpoint
`POST` {{baseUrl}}/api/v1/server/create_kyc_template
Example 19. params
"attestation_hash": "0xf2f719d6c093732266d2a48fbaba56eebb3e3a7eb22eeecd47f445529fc7b4f7",
"user_account": "0xb34111d81f65cc3662db94f2e82303ad5d39dc60",
"user_public_key": "0x04fa1e9e68c2e4d1f7735091f1c72a760b93be8ebb226150c33babc737a7388367752313b30617ef31fd5271d735eaa5ab81046c774698b774794339f8cc7b560d",
"user_signature": "{\"r\":\"0x7696c2cb4895b320d14fd88f92b948bd549b100eef7899d8b0a4710401a322af\",\"s\":\"0x01cd1a9729d88a9db7fe6802c6e52e709170dd93782eb96f5e630d141623ca10\",\"v\":\"0x25\"}",
"user_signature_hash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
"ivms_state_code": "0202",
"coin_transaction_hash": (optional),
"coin_transaction_value": (optional),
"coin_address_crypto_proof": (Optional)
In this step, there is no need to include the value of ivms_encrypt.
  • ivms_state_code response to bVASP: accepted(0202) / soft reject(0307) / hard reject(0308)

Test as Beneficiary VASP (Sandbox as oVASP)

Step 1: Respond to attestation

Using the Veriscope Postman collection, create a KYC template and respond to any of the attestations listed below.

Attestation Hash

0xb4584f3c6cd13da48d4ade65491d5a07ff2ab8dade45a65d956818c818c8aab3

0x45310f730a6c342566ae3449414cfd825e4b4a9fa1b4fac0c9889cd7df68152e

0x73406f62b3cd862305dfa3b29a1cd3731be58a263494003ca59e219728b7d5c0

0x9187cdd007b3f560876fdb495c33e808038e1b9479d933342a03d898dcbbbf1c

Example 20. endpoint
`POST` {{baseUrl}}/api/v1/server/create_kyc_template
Example 21. params
"attestation_hash": "0x390438fbb40ea36ddaea9bf550fd0102f42304965ce6a3ad53e1e6bab39b6988",
"user_account": "0xDF122a5c1d5ddE991E2FDC5a5743B30F2a34EA6e",
"user_public_key": "0x04f0c1de568a05a905951dac793b718a34b38269e4df028c995c2e00c1d64179fadebcbcd8fad4471ebb93f684946f8be8cb9b6087439357eb147f2b7da4a33006",
"user_signature": "{\"r\":\"0x74f05df791123c5b3ced1df6547d07d6eb8f280a6221e44fa7aa2f9bf6812e44\",\"s\":\"0x5422e347d5d0c499f5650dda3a69f0162074a4412ee002c20b9c299a341c1876\",\"v\":\"0x26\"}",
"user_signature_hash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
"ivms_encrypt": (optional),
"coin_transaction_hash": (optional),
"coin_transaction_value": (optional),
"coin_address_crypto_proof": (Optional)

On creating a KYC template, you will receive the following webhook events.

Webhook Event: OR_KYC_ACCEPTED

Example 22. eventType
"eventType": "BE_KYC_REQ"
Example 23. params
{
  "eventType": "BE_KYC_REQ",
  "kycTemplate": {
    "AttestationHash": "0x390438fbb40ea36ddaea9bf550fd0102f42304965ce6a3ad53e1e6bab39b6988",
    "BeneficiaryTAAddress": "0x5871A9b7BBd7E64db1cdDB01B631545F45A98d0c",
    "BeneficiaryTAPublicKey": "696b447bdbbd2e6df023c0d8cf4bf0c3867217c5a69513915b3bb5455a176e27eec0014baa4629c1aded7ec16e45b2f8cdfa2cd6a97fe6470ea9d2446aae682a",
    "BeneficiaryUserAddress": "0xdf122a5c1d5dde991e2fdc5a5743b30f2a34ea6e",
    "BeneficiaryUserPublicKey": "0x04f0c1de568a05a905951dac793b718a34b38269e4df028c995c2e00c1d64179fadebcbcd8fad4471ebb93f684946f8be8cb9b6087439357eb147f2b7da4a33006",
    "BeneficiaryTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "BeneficiaryTASignature": {
      "r": "0xda7ad1af2ce1530215e29a842bbd62d77c1ca85515472aab21959463450c6b14",
      "s": "0x57d7f70727d6d8965ec1451c29b9df3bd6e2de2e176db530a6d6ede7b07af5f3",
      "v": "0x25"
    },
    "BeneficiaryUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "BeneficiaryUserSignature": {
      "r": "0x74f05df791123c5b3ced1df6547d07d6eb8f280a6221e44fa7aa2f9bf6812e44",
      "s": "0x5422e347d5d0c499f5650dda3a69f0162074a4412ee002c20b9c299a341c1876",
      "v": "0x26"
    },
    "CoinBlockchain": "tBTC",
    "CoinToken": "tBTC",
    "CoinAddress": "1FRf4bSEBw7zbKDjZZ47kbeB4Lw6rvbnxm",
    "CoinMemo": "sandbox test btc",
    "CoinTransactionHash": null,
    "CoinTransactionValue": null,
    "SenderTAAddress": "0xc2106031dac53b629976e12af769f60afcb38793",
    "SenderTAPublicKey": "0x046131efac648ffc1980062b428f532e0b5860dd0c559a853c3e43058bba54e79bab5c03487999f75dfdeacbfd8d5564efe87570fae9a5d309012100d60afd7b37",
    "SenderUserAddress": "0xdf122a5c1d5dde991e2fdc5a5743b30f2a34ea6e",
    "SenderUserPublicKey": "0x04f0c1de568a05a905951dac793b718a34b38269e4df028c995c2e00c1d64179fadebcbcd8fad4471ebb93f684946f8be8cb9b6087439357eb147f2b7da4a33006",
    "SenderTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "SenderTASignature": {
      "r": "0xf5855d2e9b70d6fd0cfb3658c626742c4e3cde5bdea3961ef796b4bb3363b5f3",
      "s": "0x4e88c6ded3e549683bf936fd764e1322debaead339557dd868edcb00503c8a27",
      "v": "0x26"
    },
    "SenderUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "SenderUserSignature": {
      "r": "0x74f05df791123c5b3ced1df6547d07d6eb8f280a6221e44fa7aa2f9bf6812e44",
      "s": "0x5422e347d5d0c499f5650dda3a69f0162074a4412ee002c20b9c299a341c1876",
      "v": "0x26"
    },
    "BeneficiaryKYC": null,
    "SenderKYC": null,
    "BeneficiaryTAUrl": "https://sandbox.veriscope.network/kyc-template",
    "SenderTAUrl": "https://paycase.veriscope.network/kyc-template"
  }
}

Step 2: Sends IVMS data

Example 24. endpoint
`POST` {{baseUrl}}/api/v1/server/create_kyc_template
Example 25. params
"attestation_hash": "0x390438fbb40ea36ddaea9bf550fd0102f42304965ce6a3ad53e1e6bab39b6988",
"user_account": "0xDF122a5c1d5ddE991E2FDC5a5743B30F2a34EA6e",
"user_public_key": "0x04f0c1de568a05a905951dac793b718a34b38269e4df028c995c2e00c1d64179fadebcbcd8fad4471ebb93f684946f8be8cb9b6087439357eb147f2b7da4a33006",
"user_signature": "{\"r\":\"0x74f05df791123c5b3ced1df6547d07d6eb8f280a6221e44fa7aa2f9bf6812e44\",\"s\":\"0x5422e347d5d0c499f5650dda3a69f0162074a4412ee002c20b9c299a341c1876\",\"v\":\"0x26\"}",
"user_signature_hash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
"ivms_encrypt": "BIKUH525I1VZ6EBVlwKHwmDUcI+hhqiOW8JmA9XRk5hZ675enAjKqlLepoiLGLyckaN14+kvApHDFfdl1I2E4Ost+SkerOYMYQGG1XHUbtVNU+z6vQm/YLwPXWh4cQrUPGGtg/reH93c/o7ikCgRPr4cAuSVv7H2do23w+aKlNE=",
"coin_transaction_hash": (optional),
"coin_transaction_value": (optional),
"test_vars": "ivms_state_code=0202"(optional),
"coin_address_crypto_proof": (Optional)

Webhook Event: OR_ENC

Example 26. eventType
"eventType": "OR_ENC"
Example 27. params
{
  "eventType": "OR_ENC",
  "kycTemplate": {
    "AttestationHash": "0x390438fbb40ea36ddaea9bf550fd0102f42304965ce6a3ad53e1e6bab39b6988",
    "BeneficiaryTAAddress": "0x5871A9b7BBd7E64db1cdDB01B631545F45A98d0c",
    "BeneficiaryTAPublicKey": "696b447bdbbd2e6df023c0d8cf4bf0c3867217c5a69513915b3bb5455a176e27eec0014baa4629c1aded7ec16e45b2f8cdfa2cd6a97fe6470ea9d2446aae682a",
    "BeneficiaryUserAddress": "0xdf122a5c1d5dde991e2fdc5a5743b30f2a34ea6e",
    "BeneficiaryUserPublicKey": "0x04f0c1de568a05a905951dac793b718a34b38269e4df028c995c2e00c1d64179fadebcbcd8fad4471ebb93f684946f8be8cb9b6087439357eb147f2b7da4a33006",
    "BeneficiaryTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "BeneficiaryTASignature": {
      "r": "0xda7ad1af2ce1530215e29a842bbd62d77c1ca85515472aab21959463450c6b14",
      "s": "0x57d7f70727d6d8965ec1451c29b9df3bd6e2de2e176db530a6d6ede7b07af5f3",
      "v": "0x25"
    },
    "BeneficiaryUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "BeneficiaryUserSignature": {
      "r": "0x74f05df791123c5b3ced1df6547d07d6eb8f280a6221e44fa7aa2f9bf6812e44",
      "s": "0x5422e347d5d0c499f5650dda3a69f0162074a4412ee002c20b9c299a341c1876",
      "v": "0x26"
    },
    "CoinBlockchain": "tBTC",
    "CoinToken": "tBTC",
    "CoinAddress": "1FRf4bSEBw7zbKDjZZ47kbeB4Lw6rvbnxm",
    "CoinMemo": "sandbox test btc",
    "CoinTransactionHash": null,
    "CoinTransactionValue": null,
    "SenderTAAddress": "0xc2106031dac53b629976e12af769f60afcb38793",
    "SenderTAPublicKey": "0x046131efac648ffc1980062b428f532e0b5860dd0c559a853c3e43058bba54e79bab5c03487999f75dfdeacbfd8d5564efe87570fae9a5d309012100d60afd7b37",
    "SenderUserAddress": "0xdf122a5c1d5dde991e2fdc5a5743b30f2a34ea6e",
    "SenderUserPublicKey": "0x04f0c1de568a05a905951dac793b718a34b38269e4df028c995c2e00c1d64179fadebcbcd8fad4471ebb93f684946f8be8cb9b6087439357eb147f2b7da4a33006",
    "SenderTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "SenderTASignature": {
      "r": "0xf5855d2e9b70d6fd0cfb3658c626742c4e3cde5bdea3961ef796b4bb3363b5f3",
      "s": "0x4e88c6ded3e549683bf936fd764e1322debaead339557dd868edcb00503c8a27",
      "v": "0x26"
    },
    "SenderUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "SenderUserSignature": {
      "r": "0x74f05df791123c5b3ced1df6547d07d6eb8f280a6221e44fa7aa2f9bf6812e44",
      "s": "0x5422e347d5d0c499f5650dda3a69f0162074a4412ee002c20b9c299a341c1876",
      "v": "0x26"
    },
    "BeneficiaryKYC": "BIKUH525I1VZ6EBVlwKHwmDUcI+hhqiOW8JmA9XRk5hZ675enAjKqlLepoiLGLyckaN14+kvApHDFfdl1I2E4Ost+SkerOYMYQGG1XHUbtVNU+z6vQm/YLwPXWh4cQrUPGGtg/reH93c/o7ikCgRPr4cAuSVv7H2do23w+aKlNE=",
    "SenderKYC": "BC5QNJ1Vwqo3CQ2BSrum6U1m/df7ultUxP1qTJOZR9efGMuPXAcnei9XZpofa2IEyxqgc6OWC+7SHcwFbHW875Zb2aUgDB9bYrvzw8ZQ4FZsctCP4cDCyHzstaERMSK+p1tteGmV9Q0SmJKwhGKh9BOWyQirpFekV+jfWePd8Sai2sDdH7I=",
    "BeneficiaryTAUrl": "https://sandbox.veriscope.network/kyc-template",
    "SenderTAUrl": "https://paycase.veriscope.network/kyc-template"
  }
}

Webhook Event: BE_KYC_ACCEPTED

Example 28. eventType
"eventType": "BE_KYC_ACCEPTED"
Example 29. params
{
  "eventType": "BE_KYC_ACCEPTED",
  "kycTemplate": {
    "AttestationHash": "0x390438fbb40ea36ddaea9bf550fd0102f42304965ce6a3ad53e1e6bab39b6988",
    "BeneficiaryTAAddress": "0x5871A9b7BBd7E64db1cdDB01B631545F45A98d0c",
    "BeneficiaryTAPublicKey": "696b447bdbbd2e6df023c0d8cf4bf0c3867217c5a69513915b3bb5455a176e27eec0014baa4629c1aded7ec16e45b2f8cdfa2cd6a97fe6470ea9d2446aae682a",
    "BeneficiaryUserAddress": "0xdf122a5c1d5dde991e2fdc5a5743b30f2a34ea6e",
    "BeneficiaryUserPublicKey": "0x04f0c1de568a05a905951dac793b718a34b38269e4df028c995c2e00c1d64179fadebcbcd8fad4471ebb93f684946f8be8cb9b6087439357eb147f2b7da4a33006",
    "BeneficiaryTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "BeneficiaryTASignature": {
      "r": "0xda7ad1af2ce1530215e29a842bbd62d77c1ca85515472aab21959463450c6b14",
      "s": "0x57d7f70727d6d8965ec1451c29b9df3bd6e2de2e176db530a6d6ede7b07af5f3",
      "v": "0x25"
    },
    "BeneficiaryUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "BeneficiaryUserSignature": {
      "r": "0x74f05df791123c5b3ced1df6547d07d6eb8f280a6221e44fa7aa2f9bf6812e44",
      "s": "0x5422e347d5d0c499f5650dda3a69f0162074a4412ee002c20b9c299a341c1876",
      "v": "0x26"
    },
    "CoinBlockchain": "tBTC",
    "CoinToken": "tBTC",
    "CoinAddress": "1FRf4bSEBw7zbKDjZZ47kbeB4Lw6rvbnxm",
    "CoinMemo": "sandbox test btc",
    "CoinTransactionHash": null,
    "CoinTransactionValue": null,
    "SenderTAAddress": "0xc2106031dac53b629976e12af769f60afcb38793",
    "SenderTAPublicKey": "0x046131efac648ffc1980062b428f532e0b5860dd0c559a853c3e43058bba54e79bab5c03487999f75dfdeacbfd8d5564efe87570fae9a5d309012100d60afd7b37",
    "SenderUserAddress": "0xdf122a5c1d5dde991e2fdc5a5743b30f2a34ea6e",
    "SenderUserPublicKey": "0x04f0c1de568a05a905951dac793b718a34b38269e4df028c995c2e00c1d64179fadebcbcd8fad4471ebb93f684946f8be8cb9b6087439357eb147f2b7da4a33006",
    "SenderTASignatureHash": "0x0b709dd4809f36a22fe48250b24a5e41e8aea491bace26627f5c68ea9b4fad3f",
    "SenderTASignature": {
      "r": "0xf5855d2e9b70d6fd0cfb3658c626742c4e3cde5bdea3961ef796b4bb3363b5f3",
      "s": "0x4e88c6ded3e549683bf936fd764e1322debaead339557dd868edcb00503c8a27",
      "v": "0x26"
    },
    "SenderUserSignatureHash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
    "SenderUserSignature": {
      "r": "0x74f05df791123c5b3ced1df6547d07d6eb8f280a6221e44fa7aa2f9bf6812e44",
      "s": "0x5422e347d5d0c499f5650dda3a69f0162074a4412ee002c20b9c299a341c1876",
      "v": "0x26"
    },
    "BeneficiaryKYC": "BIKUH525I1VZ6EBVlwKHwmDUcI+hhqiOW8JmA9XRk5hZ675enAjKqlLepoiLGLyckaN14+kvApHDFfdl1I2E4Ost+SkerOYMYQGG1XHUbtVNU+z6vQm/YLwPXWh4cQrUPGGtg/reH93c/o7ikCgRPr4cAuSVv7H2do23w+aKlNE=",
    "SenderKYC": "BC5QNJ1Vwqo3CQ2BSrum6U1m/df7ultUxP1qTJOZR9efGMuPXAcnei9XZpofa2IEyxqgc6OWC+7SHcwFbHW875Zb2aUgDB9bYrvzw8ZQ4FZsctCP4cDCyHzstaERMSK+p1tteGmV9Q0SmJKwhGKh9BOWyQirpFekV+jfWePd8Sai2sDdH7I=",
    "BeneficiaryTAUrl": "https://sandbox.veriscope.network/kyc-template",
    "SenderTAUrl": "https://paycase.veriscope.network/kyc-template"
  }
}

Step 3: Accepts oVASP KYC template

Example 30. endpoint
`POST` {{baseUrl}}/api/v1/server/create_kyc_template
Example 31. params
"attestation_hash": "0x390438fbb40ea36ddaea9bf550fd0102f42304965ce6a3ad53e1e6bab39b6988",
"user_account": "0xDF122a5c1d5ddE991E2FDC5a5743B30F2a34EA6e",
"user_public_key": "0x04f0c1de568a05a905951dac793b718a34b38269e4df028c995c2e00c1d64179fadebcbcd8fad4471ebb93f684946f8be8cb9b6087439357eb147f2b7da4a33006",
"user_signature": "{\"r\":\"0x74f05df791123c5b3ced1df6547d07d6eb8f280a6221e44fa7aa2f9bf6812e44\",\"s\":\"0x5422e347d5d0c499f5650dda3a69f0162074a4412ee002c20b9c299a341c1876\",\"v\":\"0x26\"}",
"user_signature_hash": "0x7ec005c40fadb64f4180dcc14d9f5927f649096a08478a4a5a112a3aa77ca549",
"ivms_state_code": "0202",
"coin_transaction_hash": (optional),
"coin_transaction_value": (optional),
"coin_address_crypto_proof": (Optional)

Delete all sandbox KYC templates

The same attestation cannot be used twice. If you want to re-test as a Beneficiary VASP (Sandbox as oVASP), you need to call this API.

Example 32. endpoint
`POST` {{baseUrl}}/api/v1/server/delete_sandbox_templates