Verifying the authenticity of a file by sending it to the notary service

  1. Start the Python shell and configure its session.

    The following variables should be available now:

    >>> base_url  # the base URL of the API
    'https://eu2-cloud.acronis.com/api/notary/v2'
    >>> auth  # the 'Authorization' header value with the access token
    {'Authorization': 'Bearer 8770b34b74f9e4d9424eff50c38182bb4ae7f5596582ae61900b1b6a23e3ec58'}
    
  2. Define a variable named file_path, and then assign the path to your file to this variable:

    >>> file_path = '<path to file>'
    

    Important

    If the path contains backslashes, remember to escape them with an additional backslash.

  3. Define a variable named certificate_id, and then assign the ID of the certificate that is corresponding to this file to this variable:

    >>> certificate_id = '7605f73deaee7b071a570b3ac20cc9fe7a3abf337be7c86c55c28af9d3d8435c'
    
  4. Open the file for reading in binary mode:

    >>> file = open(file_path, 'rb')
    
  5. Define a variable named files, and then assign an object containing the file in the file key to this variable:

    >>> files = {
    ...     'file': file
    ... }
    
  6. Define a variable named file_data, and then assign an object with the certificate_hash parameter to this variable:

    >>> file_data = {
    ...     'certificate_hash': certificate_id
    ... }
    
  7. Send the file to the notary service for verification by sending a POST request to the /files/verify endpoint:

    >>> response = requests.post(f'{base_url}/files/verify', files=files, data=file_data)
    

    Note

    The /files/verify endpoint does not require authentication so Authorization header can be safely omitted.

  8. Close the file:

    >>> file.close()
    
  9. Check the status code of the response:

    >>> response.status_code
    200
    

    Status code 200 means that the notary service has found notarization certificates for this file (the file is notarized or is being notarized) and responded to you with this data. If the status code is 404, no certificates are found (the service has never received and notarized the file).

    A different status code means that an error has occurred. For the details, refer to “Status and error codes”.

    Also, the response body contains the certificates key containing an array of notarization certificate objects formatted as a JSON text. When converted to an object, it will look as follows:

    >>> pprint.pprint(response.json())
    {'certificates': [{'contract': '0xd10e3Be2bc8f959Bc8C41CF65F60dE721cF89ADF',
                       'eventtime': '2019-11-11T13:07:07.004366Z',
                       'id': '7605f73deaee7b071a570b3ac20cc9fe7a3abf337be7c86c55c28af9d3d8435c',
                       'merkle_proof': '[{"left":"88c20ca21dd6fa9e0a64c7e981a012812bbca152010195cd4296d959cfa35f1e"}]',
                       'merkle_root': '6d05fb9f0c2cff4942987661a44e71f0f554d435ce494dd3e7a21df6c6ba963c',
                       'notarized_location': 'beta-baas',
                       'object': {'eTag': '2c7c3d5f244f1a40069a32224215e0cf9b42485c99d80f357d76f006359c7a18',
                                  'key': '<file name>',
                                  'sequencer': 'DEF04BD0C5114542F8',
                                  'size': 446},
                       'blockchain': 'eth',
                       'qr_code': 'data:image/png;base64,iVBORw0KGgoAAAANSUh...',
                       'sender': '0x201354729f8d0f8b64e9a0c353c672c6a66b3857',
                       'signee_details': {'tenant_name': 'John Doe'},
                       'timestamp': 1573572432,
                       'txid': '0x6494a098f6487ebbcfa85b7cbe64c1f9f077f03866477b67be64320ea109fa73',
                       'version': '3.1'}]}
    

    If the notarization is complete:

    • The txid key contains the hash of the blockchain transaction that can be viewed on https://etherscan.io/tx/{txid}.

    • The contract, sender, merkle_root, and merkle_proof keys contain the blockchain transaction details.

    • The timestamp key contains the Unix time when the hash value of the file contents was written to the blockchain (notarization completion time).

    • The eTag key of the object object contains the actual hash value that was written to the blockchain.

    • The web version of the notarization certificate is available at https://eu2-cloud.acronis.com/notary/certificate/{certificate_id}.

    Empty txid, contract, merkle_proof, merkle_root, and sender keys mean that the notarization is still in progress and the web version of the certificate is not created yet.

Full code example