Introduction

The CertiMint API enables you to prove the existence, integrity and signature of any file or document using blockchain. You can upload a hash (SHA3-512) of your data, you can upload your data as a string to the API, or upload a file.

The CertiMint API hashes the data for you and stores the data for later retrieval. Then it bundles up your hashes into a Merkle tree and anchors this tree into the Ethereum and Bitcoin blockchain.

After that you can validate an sign your data and documents and invite signatories. You can also retrieve the computer readable crypto seal for your file or data, or download a user-friendly PDF certificate.


API specification

Test the API on SwaggerHub


Base URL

https://api-prd.kpn.com/network/settlemint/certimint


Definitions

Anchoring

Service that takes every piece of meaningful data in its system and computes a single hash that can be used to verify the system’s state, given all of the original data. This hash is then stored in Bitcoin’s blockchain at periodic intervals. The hash can be generated in any number of different ways, though a common method is to build a Merkle tree of all the data and then store the Merkle root as the anchor.

JWT

JSON Web Token. Used for authentication on the CertiMint platform.

Merkle tree

A Merkle tree or hash tree is a tree in which every leaf node is labelled with the hash of a data block, and every non-leaf node is labelled with the cryptographic hash of the labels of its child nodes.

MintNet

A MintNet is an open Proof-of-Authority Ethereum network.


Sending data to the CertiMint platform

The CertiMint API accepts data in 3 ways:

  • Sent as a sealed hash (SHA3-512). This is the most secure way since it does not expose any of the data.

  • Sent as a string.

  • Sent as a file. In this case the CertiMint API hashes the data for you and stores the data for later retrieval.

The hash and string endpoints accept arrays of data, allowing you to batch the data to be anchored together and decrease the performance overhead of high throughput anchor operations.

For each data item, the endpoint returns a unique identifier. This identifier is the key you need to request the crypto seal. The CertiMint API creates the crypto seal in the background.

The endpoint for uploading files works in a different way. You cannot upload the file via an API request, but you need to upload the file to the request with the file selector of the system you are using (i.e. SwaggerHub, Postman or your terminal).


API workflow

API workflow


Features

  • Tamper-proof.
  • No third-parties required.


Getting started

Make sure you've read Getting Started for more info on how to register your application and start trying out our APIs.

Authentication

The API follows the KPN Store API Authentication Standard to secure the API. It includes the use of OAuth 2.0 client_id and client_secret to receive an access token.

Go to the Authentication tab on top of this page to find out how to:

  • Authenticate to an API using cURL.
  • Authenticate to an API on Swaggerhub.
  • Import Open API Specifications (OAS), also called Swagger files into Postman.


How to...

To seal, validate and sign your data in the blockchain using the CertiMint API you need to follow these steps:

Authenticate on the CertiMint platform

Authentication workflow

Authenticate

The CertiMint platform uses JWT-tokens to authenticate users. This token contains your identification for both the API and the underlying blockchains.

Upon completion of the license agreement use this username and password to retrieve a JWT token.

^^cURL request example^^
$ curl -X POST \
       --header 'Content-Type: application/json' \
       --header 'Accept: application/json' \
       -d '{ \
             "password": "supersecret", \
             "username": "user%40settlemint.com" \
           }' \
       'https://dapi.certimint.com/v1/users/authenticate'
^^Response example^^
{
  "jwtToken": "eyJhbGciOiJIUzI1Ni... (abbreviated for readability)",
  "id": "5b23f329269dc5001a10da40"
}

The API responds with a 401 error if your requests do not contain an appropriate authorization header containing a valid JWT token.

Example request

GET /seal/list See on SwaggerHub

^^cURL request example^^
$ curl -X GET \
       --header 'Accept: application/json' \
       'https://dapi.certimint.com/v1/seal/list'
^^Error response example^^
{
  "statusCode": 401,
  "error": "Unauthorized",
  "message": "Missing authentication"
}

You receive a username and password from SettleMint upon completion of the license agreement. Use this username and password to retrieve a JWT token.

^^cURL request example^^
$ curl -X POST \
       --header 'Content-Type: application/json' \
       --header 'Accept: application/json' \
       -d '{ \
             "password": "supersecret", \
             "username": "user%40settlemint.com" \
           }' \
       'https://dapi.certimint.com/v1/users/authenticate'
^^Response example^^
{
  "jwtToken": "eyJhbGciOiJIUzI1Ni... (abbreviated for readability)",
  "id": "5b23f329269dc5001a10da40"
}

Seal your data

Sealing workflow

Seal

Create a seal from a list of SHA3-512 hashes

  1. Send a POST request with your authentication token in the header. For each data item, the endpoint returns a unique identifier, the sealid.
  2. Every 10 seconds a worker will anchor all the seals on our own personal MintNet.
  3. Every 24 hour a worker will collect all seals from the past 24 hour and will anchor them on the Ethereum and Bitcoin main network.

For each data item, the endpoint returns a unique identifier. This identifier is the key you need to request the crypto seal. The platform is creating the crypto seal in the background.

Request

POST /seal/hash See on SwaggerHub

^^Request example^^
POST /seal/hash HTTP/1.1
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
[
"FC
5A1514CCC32F12A43EEC6E77CA25BCF806869A7B2337274CEC0404B0190B5827CBC9258D26ACC84A824201E34F511B1D994F02DDCFED5E107363F4FE56F523",

"6D81244766D363B7E7506B9C5790029B226321E768DA07E0BB6E5510BFED54B65F6DE868CCFC694747201822B698D863E443D2BBB0CD7A456451A19CA159CA8B"
Parameter Type Description
hash string Pattern: ^[a-f0-9]+$


Response

^^Response example^^
HTTP/1.1, 200 OK
{
  "sealIds": [
    "ck3rbavlo000f10nsa8mj1iqv",
    "ck3rbavlp000g10ns160sbef2"
  ]
}
Parameter Type Description
sealIds string Unique identifier needed to request crypto seals.


Create a seal from a list of strings

  1. Send a POST request with your authentication token in the header.
  2. Every 10 seconds a worker will anchor all the seals on our own personal MintNet.
  3. Every 24 hours a worker will collect all seals from the past 24 hours and will anchor them on the Ethereum and Bitcoin main network.

Request

POST /seal/string See on SwaggerHub

^^Request example^^
POST /seal/string HTTP/1.1
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
[
  "18/05/2018 13:41:15180518/114115.816, (1526643675816:certimint:jhbvurc3:10078) [response] http://certimint:1234: get / {} 200 (3ms)",

  "19/05/2018 16:42:15190458/114156.816, (1526643675816:certimint:jhbvurc3:10078) [response] http://certimint:1234: get / {} 200 (3ms)"
]
Parameter Type Description
string string A list of strings.

Response

^^Response example^^
HTTP/1.1, 200 OK
{
  "sealIds": [
    "ck3rbavlo000f10nsa8mj1iqv",
    "ck3rbavlp000g10ns160sbef2"
  ]
}
Parameter Type Description
sealIds string Unique identifier needed to request crypto seals.

Create a seal from a file

  1. Send a POST request with your authentication token in the header.
  2. Every 10 seconds a worker will anchor all the seals on our own personal MintNet.
  3. Every 24 hours a worker will collect all seals from the past 24 hours and will anchor them on the Ethereum and Bitcoin main network.

The endpoint for uploading files works in a different way. You cannot upload the file via an API request, but you need to upload the file to the request with the file selector of the system you are using (i.e. SwaggerHub, Postman or your terminal).

Request

POST /seal/file See on SwaggerHub

^^Request example^^
POST /seal/file HTTP/1.1
Authorization  eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type  multipart/form-data

Response

^^Response example^^
{
  "sealId": "cjhykqnwl002n01mskesltenk"
}
Parameter Type Description
sealId string Unique identifier needed to request crypto seals.

You can only seal 1 file at a time. It only returns 1 sealId.

Sign your seals

Signing workflow

Sign

Retrieve a list of your crypto seals

Using the GET /seal/list endpoint, you can retrieve the list of all your seals. It returns the seal itself, some metadata and information type where relevant, and the timestamp of the seal in our system. This endpoint has pagination, and sorting and filtering options to easily integrate this API in your applications.

  1. Send a GET request with your authentication token in the header.
  2. You can filter your list of seals with different parameters such as limit, offset, order, orderBy, type and meta.filename.

Request

GET /seal/list See on SwaggerHub

^^Request example^^
GET /seal/list HTTP/1.1
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
Parameter Type Description
limit number Sets the number of objects returned per page. >=0.
offset number Specifies the ranking number of the first item on the page. >=0.
order string Sort order. Default: Ascending.
orderBy string Orders the results by the field name that is given as the value.
type string Orders by type.
meta.filename string The name of the file.

Response

^^Response example^^
HTTP/1.1, 200 OK
{
  "count": 12,
  "seals": [
    {
      "seal": {
        "id": "ck3rdfk09000m10ns26fqer2n",
        "dataHash": "db8ee683f26...",
…,
        "signatures": {},
        "sealed": "2019-12-04T14:13:03.897Z"
      },
      "sealer": { "username": "name@settlemint.com" },
      "type": "STRING",
      "meta": {}
}, 
…
]}

Retrieve the crypto seal info for a given seal

You can request the crypto seal for the item you sent in the previous step using the unique identifier. This seal changes over time.

Directly after sending the data to the API, you receive a 202 HTTP response. This means, that the CertiMint platform is creating the seal and you should try again later.

During the next phase, the sealing process returns an object with the hash of your data item in the SHA3-512 form. The list of anchors is still empty at this stage. The response in this phase tells you that the data is accepted and uniquely identified by its hash in the platform, but not yet sealed in the blockchain networks.

Get the details of a seal by sending a GET request with your authentication token in the header:

Request

GET /seal{id} See on SwaggerHub

^^Request example^^
GET /seal/{id} HTTP/1.1
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
Parameter Type Description
id (path) string The crypto seal identifier. Max. 64 characters.

Response

^^Response example^^
HTTP/1.1, 200 OK
    {
      "seal": {
        "id": "ck3rdfk09000m10ns26fqer2n",
        "dataHash": "db8ee683f26...",
"anchors": {
      "ethereum": {
        "8995": {
          "transactionId": "071ac2...",
          "nodeUrl": "https://mintnet.settlemint.com",
          "explorer": "https://explorer.mintnet.settlemint.com/tx/0x07...",
          "merkleRoot": "2cf19...",
          "proof": []
        }
        "signatures": {},
        "sealed": "2019-12-04T14:13:03.897Z"
      },
      "sealer": { "username": "name@settlemint.com" },
      "type": "STRING",
      "meta": {}
}

A few seconds after sending the GET request, the sealing process creates the Merkle root of all data. The data still needs to be processed and the Merkle root needs to be stored in the MintNet blockchain. The Merkle root, the transaction ID and a link to an explorer are added to the crypto seal object to manually verify this transaction. An array of proofs might be there as well, if more than 1 data item was added in the Merkle tree. This array is needed to prove that a single data item is included in that Merkle root.

Request

^^Request example^^
$ curl -X GET \
       --header 'Accept: application/json' \
       --header 'Authorization: eyJhbGciOiJIUzI1Ni... (abbreviated for readability)' \
       'https://dapi.certimint.com/v1/seal/cjoi3cql700020z0jdfy4zoze'

Response

^^Response example^^
{
  "seal": {
    "id": "cjoi3cql700020z0jdfy4zoze",
    "dataHash": "FC5A1514CCC32F12A43EEC6E77CA25BCF806869A7B2337274CEC0404B0190B5827CBC9258D26ACC84A824201E34F511B1D994F02DDCFED5E107363F4FE56F523",
    "anchors": {
      "ethereum": {
        "8995": {
          "transactionId": "4163444a72afef351d0387ae8dc946565057b1682d52f4bc014bcb7698544401",
          "nodeUrl": "https://mintnet.settlemint.com",
          "explorer": "https://explorer.mintnet.settlemint.com/tx/0x4163444a72afef351d0387ae8dc946565057b1682d52f4bc014bcb7698544401",
          "merkleRoot": "0800a69fe9e3072d06ec5b9da5d259b00dc666ee925dece84006d00796b4971e2bb8ea29ea945e412d3fdd6d27beeaacbe5d46cba046c66509359c1859624f3e",
          "proof": [
            {
              "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
            }
          ]
        },
      }
    },
    "signatures": {},
    "sealed": "2018-11-15T04:25:18.527Z"
  },
  "type": "HASH",
  "meta": {}
}

Sometime later (once per hour) the sealing on the main net (Ethereum and Bitcoin) is added as well.

Request

^^Request example^^
$ curl -X GET \
       --header 'Accept: application/json' \
       --header 'Authorization: eyJhbGciOiJIUzI1Ni... (abbreviated for readability)' \
       'https://dapi.certimint.com/v1/seal/cjoi3cql700020z0jdfy4zoze'

Response

^^Response example^^
{
  "seal": {
    "id": "cjoi3cql700020z0jdfy4zoze",
    "dataHash": "FC5A1514CCC32F12A43EEC6E77CA25BCF806869A7B2337274CEC0404B0190B5827CBC9258D26ACC84A824201E34F511B1D994F02DDCFED5E107363F4FE56F523",
    "anchors": {
      "ethereum": {
        "8995": {
          "transactionId": "4163444a72afef351d0387ae8dc946565057b1682d52f4bc014bcb7698544401",
          "nodeUrl": "https://mintnet.settlemint.com",
          "explorer": "https://explorer.mintnet.settlemint.com/tx/0x4163444a72afef351d0387ae8dc946565057b1682d52f4bc014bcb7698544401",
          "merkleRoot": "0800a69fe9e3072d06ec5b9da5d259b00dc666ee925dece84006d00796b4971e2bb8ea29ea945e412d3fdd6d27beeaacbe5d46cba046c66509359c1859624f3e",
          "proof": [
            {
              "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
            }
          ]
        },
        "1": {
          "transactionId": "c504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996",
          "nodeUrl": "https://mainnet.infura.io",
          "explorer": "https://etherscan.io/tx/0xc504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996",
          "merkleRoot": "0800a69fe9e3072d06ec5b9da5d259b00dc666ee925dece84006d00796b4971e2bb8ea29ea945e412d3fdd6d27beeaacbe5d46cba046c66509359c1859624f3e",
          "proof": [
            {
              "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
            }
          ]
        }
      }
    },
    "signatures": {},
    "sealed": "2018-11-15T04:25:18.527Z"
  },
  "type": "HASH",
  "meta": {}
}
Parameter Type Description
id string The crypto seal identifier. Max. 64 characters.
dataHash string Pattern: ^[a-f0-9]+$
anchors

- transactionId

- nodeUrl

- explorer

- merkleRoot

- proof
array

string

string

string

string

string
Of the following parameters:

- ID of the transaction.

- URL.

- URL to manually verify this transaction.

- Data has of the Merkle root.

- Data hash.
signatures

- transactionId

- explorer

- signature

- signed
array

string

string

string

string
Of the following parameters:

- ID of the transaction.

- URL to manually verify this transaction.




sealed date Date and time when the sealing took place.

Each receipt should be stored in your database, linked to the record or file you wanted to seal. You will need to supply this receipt to the person or machine to whom you want to prove that the record has not been tampered with and has been sealed at a particular time and date.

Validate your seals

Validating workflow

Validate

Validate a seal

Using the seal, it now becomes possible to verify that the record in question has not been tampered with.

First of all, you need to generate a new SHA3-512 hash from the content you want to verify. This hash should be checked against the seal it is attached to. If the hash does not match the data hash in the field, it is evident that this receipt does not prove anything about the data. The platform performs this check for seals with the data stored on the platform.

Next, after sending the receipt to the verify endpoint, the sealing engine verifies if the data hash is part of the Merkle root by validating the proof tree. The platform will then verify if the recorded transaction is indeed sealed in the blockchain, and if the transaction contains the correct Merkle root.

Last but not least, all signatures attached to the seal are validated as well.

  1. Retrieve the seal details of a seal by either using the request /seals/list or /seals/{id}.
  2. Enter the properties from the seal you received into the request body.
  3. You receive an updated seal receipt back with an isValid property. If the value is true, your seal is valid. If the value is false, something is wrong with your seal.

Request

POST /seal/validate See on SwaggerHub

^^Request example^^
POST //seal/validate HTTP/1.1
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
{
"id": "ck3sf85ca000r10nsg5ade3wn",
    "dataHash": "2cf19...",
    "anchors": {
      "ethereum": {
        "8995": {
          "transactionId": "a1120f6...",
...} } },
    "signatures": {},
    "sealed": "2019-12-05T07:50:57.385Z"
}

Response

^^Response example^^
HTTP/1.1, 200 OK
{
  "seal": {
    "id": "ck3sf85ca000r10nsg5ade3wn",
    "dataHash": "2cf1970d9bbc83a...",
    "signatures": {},
  "anchors": {
      "ethereum": {
        "8995": {
          "transactionId": "a1120f6...", 
...} } },
    "sealed": "2019-12-05T07:50:57.385Z" },
  "isValid": true
}

Validate a seal status

  1. You can fetch the seal details of a seal by calling the /seals/list route above or by calling the /seals/{id} route.
  2. Enter the properties from the seal you received into the request body.
  3. You receive an updated seal receipt back with a status property in the form of a string.
  4. There are 3 possible statuses:
    • confirmed
    • pending
    • failed

When the status of a seal status is confirmed, the status can still swap, for example if the anchoring on the Ethereum public blockchain takes place or a user signs your seal. This is because those transactions are done on the Ethereum public blockchain and can take 15 seconds up to a few hours to complete. After completion your status switches back to confirmed.

Request

POST /seal/validate-status See on SwaggerHub

^^Request example^^
POST /seal/validate-status HTTP/1.1
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
{
"id": "ck3sf85ca000r10nsg5ade3wn",
    "dataHash": "2cf19...",
    "anchors": {
      "ethereum": {
        "8995": {
          "transactionId": "a1120f6...",
...} } },
    "signatures": {},
    "sealed": "2019-12-05T07:50:57.385Z"
}

Response

^^Response example^^
HTTP/1.1, 200 OK
{
  "seal": {
    "id": "ck3sf85ca000r10nsg5ade3wn",
    "dataHash": "2cf1970d9bbc83a...",
    "signatures": {},
  "anchors": {
      "ethereum": {
        "8995": {
          "transactionId": "a1120f6...", 
...} } },
    "sealed": "2019-12-05T07:50:57.385Z" },
"status": "confirmed"
}

Get a seal certificate

First, retrieve the list of your activities. See Retrieve a list of activities.

Then retrieve the certificate for your seal with your seal ID and a valid JWT token. The certificate is delivered in PDF format (a 'CertiMint Blockchain Certificate PDF').

Request

GET /seal/{id}/certificate See on SwaggerHub

^^Request example^^
Get /seal/{id}/certificate HTTP/1.1
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…

Response

^^Response example^^
HTTP/1.1, 200 OK
content-type: application/octet-stream

Sign a seal with given seal ID

The CertiMint platform allows you to register a document (in the widest sense of the word) in the blockchain. By doing so you are able to prove existence and integrity of the document (detectable document integrity). We also have native support for elliptic curve cryptography which is built around individual public/private key infrastructure (uniquely linked signatory and signatory is in control).

The signing process will digitally sign the hash of the document, initiated by an individual represented by a private key and address, uniquely tying the individual to that specific document. The platform will package the resulting message and store it in a transaction on the MintNet blockchain network. This way the signature is timestamped and stored immutably.

Request

POST /seal/{id}/sign See on SwaggerHub

^^Request example^^

curl -X "POST" "https://certimint.com/v1/seal/cji5mwedt01p7017woh32358j/sign" \
     -H 'Authorization: eyJhbGciOiJI...  <-- each signer needs their own JWT token, that is their identity!'

{
  "id": "cji5mwedt01p7017woh32358j",
  "dataHash": "FC5A1514CCC32F12A43EEC6E77CA25BCF806869A7B2337274CEC0404B0190B5827CBC9258D26ACC84A824201E34F511B1D994F02DDCFED5E107363F4FE56F523",
  "anchors": {
    "ethereum": {
      "mintnet": {
        "transactionId": "7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6",
        "explorer": "https://explorer.mintnet.settlemint.com/tx/0x7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6",
        "merkleRoot": "0800a69fe9e3072d06ec5b9da5d259b00dc666ee925dece84006d00796b4971e2bb8ea29ea945e412d3fdd6d27beeaacbe5d46cba046c66509359c1859624f3e",
        "proof": [
          {
            "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
          }
        ]
      },
      "mainnet": {
        "transactionId": "c504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996",
        "explorer": "https://etherscan.io/tx/0xc504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996",
        "merkleRoot": "fd2152ff2856ce92316ccea63c6985ffd44be4dcd1bf2c3d51a15e49727541c37f22d9d7ce94c573ca341463816a3bc8452fa2ed7222b943f58e9f35178798a9",
        "proof": [
          {
            "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
          },
          {
            "left": "5d2f80d09dfdd567731524ed94d85c1e6706d05a4f102188ebf03fdee240b4e1ec664ec2f960ad51d3abcf78f03988ba9ee1594de626be3f5d544aedc5e87e12"
          },
          {
            "left": "32d561974c748fa3765b873d92185861ae552bb5ac46c0d05b1c35c350b9b8247f7e9177c85205a7d02c084ec5217357a8d462f5a288e1bea96e4cb8dc5b6e55"
          },
          {
            "left": "6c89d37b4d3cb9d475501a557e464ad57edb34320bcce9b530cd652eebe835a35140790cd86a8aa03fe53b1619149e052994fd43fc772575a9caf476d7766420"
          },
          {
            "left": "73e4add4baa17640186bc16dc16b2a593f6b11006ad7a5e5db5b8e26067e69eedee4aea1543a4d4a1498f808e463565180d29a67506b303247df082d0199be29"
          },
          {
            "left": "da7709a1be30cd85298feac51a0eafb88703fa4efe8759bf552b94608cf3cb82d4bbb926ba5ad2c9a05e24ad32baea91e22a6a39e5b4c06047ac2a39eaa856a6"
          },
          {
            "left": "7a2a32c83e3536b6fea10280ffdfdcabaa8d394e88a8cd7599f861e6b73dedc5db1e4effca107aa83c64b61b2f783d9943c2a498b36008fb192f7f15afdb11a7"
          }
        ]
      }
    }
  },
  "signatures": {
    "0x27007431E7bceF6AD588e288325897977cFD9463": {
      "transactionId": "bbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18",
      "explorer": "https://explorer.mintnet.settlemint.com/tx/0xbbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18",
      "signature": "0xbde3b1f9bc24c3435094725ee7703fcb01c660e3c9c86ceb67d8138136ad34b34cc3e5b85867c55354fa10f5e45a53aec663ec2a85e82656fc8e3652183446ec1b"
    }
  },
  "sealed": "2018-06-08T07:13:14.243Z"
}

Send invitation e-mail to signatories

  1. Before you can send sign invites, you need to have your file sealed.
  2. Send your sign invites by sending a POST request with your authentication token in the header.
  3. Every 10 seconds a worker will anchor all the sign invites on the Ethereum public blockchain.
  4. All the users will receive an invite on their e-mail address, which will redirect them to the CertiMint application. There, they need to log in with either their CertiMint or KPN account in order to sign.

Request

POST /seal/sign-invite See on SwaggerHub

^^Request example^^
POST /seal/sign-invite HTTP/1.1
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
{
  "sealIds": [
    "cjkxswpcp003fpbnmsp623bwf"
  ],
  "emails": [
    "john@certimint.com"
  ],
  "message": "Hi, I'm sending you these documents to sign."
}
Parameter Type Description
sealIds string The seal identifiers. Max. 64 characters.
emails string E-mail address of the signee.
message string Personal message to the signee.

Response

^^Response example^^
HTTP/1.1, 200 OK
{
  "sealId":    "5de7b35745903f00240991cc" }

Validate signatures

Signatures are validated at the same time as the seal validation itself. They will be checked on being valid, that they are on the correct hash, and securely stored in the blockchain.

Request

POST /seal/validate See on SwaggerHub

^^Request example^^
curl -X "POST" "https://certimint.com/v1/seal/validate" \
     -H 'Authorization: eyJhbGciOiJIUzI1...' \
     -H 'Content-Type: text/plain; charset=utf-8' \
     -d "{\"id\":\"cji5mwedt01p7017woh32358j\",\"anchors\":{\"ethereum\":{\"mintnet\":{\"explorer\":\"https:\\/\\/explorer.mintnet.settlemint.com\\/tx\\/0x7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6\",\"proof\":[{\"right\":\"6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b\"}],\"merkleRoot\":\"0800a69fe9e3072d06ec5b9da5d259b00dc666ee925dece84006d00796b4971e2bb8ea29ea945e412d3fdd6d27beeaacbe5d46cba046c66509359c1859624f3e\",\"transactionId\":\"7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6\"},\"mainnet\":{\"explorer\":\"https:\\/\\/etherscan.io\\/tx\\/0xc504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996\",\"proof\":[{\"right\":\"6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b\"},{\"left\":\"5d2f80d09dfdd567731524ed94d85c1e6706d05a4f102188ebf03fdee240b4e1ec664ec2f960ad51d3abcf78f03988ba9ee1594de626be3f5d544aedc5e87e12\"},{\"left\":\"32d561974c748fa3765b873d92185861ae552bb5ac46c0d05b1c35c350b9b8247f7e9177c85205a7d02c084ec5217357a8d462f5a288e1bea96e4cb8dc5b6e55\"},{\"left\":\"6c89d37b4d3cb9d475501a557e464ad57edb34320bcce9b530cd652eebe835a35140790cd86a8aa03fe53b1619149e052994fd43fc772575a9caf476d7766420\"},{\"left\":\"73e4add4baa17640186bc16dc16b2a593f6b11006ad7a5e5db5b8e26067e69eedee4aea1543a4d4a1498f808e463565180d29a67506b303247df082d0199be29\"},{\"left\":\"da7709a1be30cd85298feac51a0eafb88703fa4efe8759bf552b94608cf3cb82d4bbb926ba5ad2c9a05e24ad32baea91e22a6a39e5b4c06047ac2a39eaa856a6\"},{\"left\":\"7a2a32c83e3536b6fea10280ffdfdcabaa8d394e88a8cd7599f861e6b73dedc5db1e4effca107aa83c64b61b2f783d9943c2a498b36008fb192f7f15afdb11a7\"}],\"merkleRoot\":\"fd2152ff2856ce92316ccea63c6985ffd44be4dcd1bf2c3d51a15e49727541c37f22d9d7ce94c573ca341463816a3bc8452fa2ed7222b943f58e9f35178798a9\",\"transactionId\":\"c504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996\"}}},\"dataHash\":\"FC5A1514CCC32F12A43EEC6E77CA25BCF806869A7B2337274CEC0404B0190B5827CBC9258D26ACC84A824201E34F511B1D994F02DDCFED5E107363F4FE56F523\",\"signatures\":{\"0x27007431E7bceF6AD588e288325897977cFD9463\":{\"explorer\":\"https:\\/\\/explorer.mintnet.settlemint.com\\/tx\\/0xbbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18\",\"transactionId\":\"bbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18\",\"signature\":\"0xbde3b1f9bc24c3435094725ee7703fcb01c660e3c9c86ceb67d8138136ad34b34cc3e5b85867c55354fa10f5e45a53aec663ec2a85e82656fc8e3652183446ec1b\"}},\"sealed\":\"2018-06-08T07:13:14.243Z\"}"


{
  "seal": {
    "id": "cji5mwedt01p7017woh32358j",
    "anchors": {
      "ethereum": {
        "mintnet": {
          "explorer": "https://explorer.mintnet.settlemint.com/tx/0x7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6",
          "proof": [
            {
              "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
            }
          ],
          "merkleRoot": "0800a69fe9e3072d06ec5b9da5d259b00dc666ee925dece84006d00796b4971e2bb8ea29ea945e412d3fdd6d27beeaacbe5d46cba046c66509359c1859624f3e",
          "transactionId": "7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6",
          "exists": true
        },
        "mainnet": {
          "explorer": "https://etherscan.io/tx/0xc504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996",
          "proof": [
            {
              "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
            },
            {
              "left": "5d2f80d09dfdd567731524ed94d85c1e6706d05a4f102188ebf03fdee240b4e1ec664ec2f960ad51d3abcf78f03988ba9ee1594de626be3f5d544aedc5e87e12"
            },
            {
              "left": "32d561974c748fa3765b873d92185861ae552bb5ac46c0d05b1c35c350b9b8247f7e9177c85205a7d02c084ec5217357a8d462f5a288e1bea96e4cb8dc5b6e55"
            },
            {
              "left": "6c89d37b4d3cb9d475501a557e464ad57edb34320bcce9b530cd652eebe835a35140790cd86a8aa03fe53b1619149e052994fd43fc772575a9caf476d7766420"
            },
            {
              "left": "73e4add4baa17640186bc16dc16b2a593f6b11006ad7a5e5db5b8e26067e69eedee4aea1543a4d4a1498f808e463565180d29a67506b303247df082d0199be29"
            },
            {
              "left": "da7709a1be30cd85298feac51a0eafb88703fa4efe8759bf552b94608cf3cb82d4bbb926ba5ad2c9a05e24ad32baea91e22a6a39e5b4c06047ac2a39eaa856a6"
            },
            {
              "left": "7a2a32c83e3536b6fea10280ffdfdcabaa8d394e88a8cd7599f861e6b73dedc5db1e4effca107aa83c64b61b2f783d9943c2a498b36008fb192f7f15afdb11a7"
            }
          ],
          "merkleRoot": "fd2152ff2856ce92316ccea63c6985ffd44be4dcd1bf2c3d51a15e49727541c37f22d9d7ce94c573ca341463816a3bc8452fa2ed7222b943f58e9f35178798a9",
          "transactionId": "c504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996",
          "exists": true
        }
      }
    },
    "dataHash": "FC5A1514CCC32F12A43EEC6E77CA25BCF806869A7B2337274CEC0404B0190B5827CBC9258D26ACC84A824201E34F511B1D994F02DDCFED5E107363F4FE56F523",
    "signatures": {
      "0x27007431E7bceF6AD588e288325897977cFD9463": {
        "explorer": "https://explorer.mintnet.settlemint.com/tx/0xbbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18",
        "transactionId": "bbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18",
        "signature": "0xbde3b1f9bc24c3435094725ee7703fcb01c660e3c9c86ceb67d8138136ad34b34cc3e5b85867c55354fa10f5e45a53aec663ec2a85e82656fc8e3652183446ec1b",
        "isValid": true
      }
    },
    "sealed": "2018-06-08T07:13:14.243Z"
  },
  "isValid": true
}

Check your activities

You can retrieve the list of your activities by sending a GET request with your authentication token in the header. Filter the list of seals with different parameters such as limit, offset, order and orderBy.

List activities workflow

Activities

Request

GET /activity/list See on SwaggerHub

^^Request example^^
GET /network/settlemint/certimint/activity/list HTTP/1.1
Host: api-dev.kpn.com
Accept: application/json
Authorization: Bearer qGbEUmRaKfZmf9JdC0...
Content-Type: application/json
Parameter Type Description
limit number Sets the number of objects returned in one page. >=0.
offset number Specifies the ranking number of the first item on the page. >=0.
order string Sort order. Default: Ascending.
orderBy string Orders the results by the field name that is given as the value.
type string Orders by type.
meta.filename string The name of the file.

Response

^^Response example^^
{
    "count": 3,
    "items": [
        {
            "history": {
                "action": "sealing",
                "type": "STRING",
                "meta": {
                    "sealId": "ck56l089e000e0znsh0lf8ns0",
                    "subscriptionType": "BASIC"
                },
                "date": "2020-01-09T10:21:13.310Z"
            },
            "user": {
                "_id": "5e16fe5ed9aff00023c09a47",
                "username": "testapistore9@settlemint.com",
                "meta": {}
            },
            "seal": [
                {
                    "meta": {}
                }
            ],
            "signInvite": []
        },
        {
            "history": {
                "action": "signInvite",
                "meta": {
                    "signInviteId": "5e16fea6d9aff00023c09a54",
                    "subscriptionType": "BASIC"
                },
                "date": "2020-01-09T10:21:26.381Z"
            },
            "user": {
                "_id": "5e16fe5ed9aff00023c09a47",
                "username": "testapistore9@settlemint.com",
                "meta": {}
            },
            "seal": [],
            "signInvite": [
                {
                    "status": "signed",
                    "email": "testapistore9@settlemint.com",
                    "sealIds": [
                        "ck56l089e000e0znsh0lf8ns0"
                    ]
                }
            ]
        },
        {
            "history": {
                "action": "verification",
                "type": "STRING",
                "meta": {
                    "sealId": "ck56l089e000e0znsh0lf8ns0",
                    "isValid": true,
                    "subscriptionType": "BASIC"
                },
                "date": "2020-01-09T10:21:31.093Z"
            },
            "user": {
                "_id": "5e16fe5ed9aff00023c09a47",
                "username": "testapistore9@settlemint.com",
                "meta": {}
            },
            "seal": [
                {
                    "meta": {}
                }
            ],
            "signInvite": []
        },
    ]
}

Does CertiMint enable digital signatures?

The CertiMint platform allows you to register a document (in the widest sense of the word) in the blockchain. By doing so you are able to prove existence and integrity of the document (detectable document integrity). We also have native support for elliptic curve cryptography which is built around individual public/private key infrastructure (uniquely linked signatory and signatory is in control).

The signing process will digitally sign the hash of the document, initiated by an individual represented by a private key and address, uniquely tying the individual to that specific document. The platform will package the resulting message and store it in a transaction on the MintNet blockchain network. This way the signature is timestamped and stored immutably.

^^Request example^^
curl -X "POST" "https://certimint.com/v1/seal/cji5mwedt01p7017woh32358j/sign" \
     -H 'Authorization: eyJhbGciOiJI...  <-- each signer needs their own JWT token, that is their identity!'

{
  "id": "cji5mwedt01p7017woh32358j",
  "dataHash": "FC5A1514CCC32F12A43EEC6E77CA25BCF806869A7B2337274CEC0404B0190B5827CBC9258D26ACC84A824201E34F511B1D994F02DDCFED5E107363F4FE56F523",
  "anchors": {
    "ethereum": {
      "mintnet": {
        "transactionId": "7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6",
        "explorer": "https://explorer.mintnet.settlemint.com/tx/0x7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6",
        "merkleRoot": "0800a69fe9e3072d06ec5b9da5d259b00dc666ee925dece84006d00796b4971e2bb8ea29ea945e412d3fdd6d27beeaacbe5d46cba046c66509359c1859624f3e",
        "proof": [
          {
            "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
          }
        ]
      },
      "mainnet": {
        "transactionId": "c504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996",
        "explorer": "https://etherscan.io/tx/0xc504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996",
        "merkleRoot": "fd2152ff2856ce92316ccea63c6985ffd44be4dcd1bf2c3d51a15e49727541c37f22d9d7ce94c573ca341463816a3bc8452fa2ed7222b943f58e9f35178798a9",
        "proof": [
          {
            "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
          },
          {
            "left": "5d2f80d09dfdd567731524ed94d85c1e6706d05a4f102188ebf03fdee240b4e1ec664ec2f960ad51d3abcf78f03988ba9ee1594de626be3f5d544aedc5e87e12"
          },
          {
            "left": "32d561974c748fa3765b873d92185861ae552bb5ac46c0d05b1c35c350b9b8247f7e9177c85205a7d02c084ec5217357a8d462f5a288e1bea96e4cb8dc5b6e55"
          },
          {
            "left": "6c89d37b4d3cb9d475501a557e464ad57edb34320bcce9b530cd652eebe835a35140790cd86a8aa03fe53b1619149e052994fd43fc772575a9caf476d7766420"
          },
          {
            "left": "73e4add4baa17640186bc16dc16b2a593f6b11006ad7a5e5db5b8e26067e69eedee4aea1543a4d4a1498f808e463565180d29a67506b303247df082d0199be29"
          },
          {
            "left": "da7709a1be30cd85298feac51a0eafb88703fa4efe8759bf552b94608cf3cb82d4bbb926ba5ad2c9a05e24ad32baea91e22a6a39e5b4c06047ac2a39eaa856a6"
          },
          {
            "left": "7a2a32c83e3536b6fea10280ffdfdcabaa8d394e88a8cd7599f861e6b73dedc5db1e4effca107aa83c64b61b2f783d9943c2a498b36008fb192f7f15afdb11a7"
          }
        ]
      }
    }
  },
  "signatures": {
    "0x27007431E7bceF6AD588e288325897977cFD9463": {
      "transactionId": "bbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18",
      "explorer": "https://explorer.mintnet.settlemint.com/tx/0xbbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18",
      "signature": "0xbde3b1f9bc24c3435094725ee7703fcb01c660e3c9c86ceb67d8138136ad34b34cc3e5b85867c55354fa10f5e45a53aec663ec2a85e82656fc8e3652183446ec1b"
    }
  },
  "sealed": "2018-06-08T07:13:14.243Z"
}

Signatures are validated at the same time as the seal validation itself. They will be checked on being valid, that they are on the correct hash, and securely stored in the blockchain.

^^Request example^^
curl -X "POST" "https://certimint.com/v1/seal/validate" \
     -H 'Authorization: eyJhbGciOiJIUzI1...' \
     -H 'Content-Type: text/plain; charset=utf-8' \
     -d "{\"id\":\"cji5mwedt01p7017woh32358j\",\"anchors\":{\"ethereum\":{\"mintnet\":{\"explorer\":\"https:\\/\\/explorer.mintnet.settlemint.com\\/tx\\/0x7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6\",\"proof\":[{\"right\":\"6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b\"}],\"merkleRoot\":\"0800a69fe9e3072d06ec5b9da5d259b00dc666ee925dece84006d00796b4971e2bb8ea29ea945e412d3fdd6d27beeaacbe5d46cba046c66509359c1859624f3e\",\"transactionId\":\"7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6\"},\"mainnet\":{\"explorer\":\"https:\\/\\/etherscan.io\\/tx\\/0xc504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996\",\"proof\":[{\"right\":\"6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b\"},{\"left\":\"5d2f80d09dfdd567731524ed94d85c1e6706d05a4f102188ebf03fdee240b4e1ec664ec2f960ad51d3abcf78f03988ba9ee1594de626be3f5d544aedc5e87e12\"},{\"left\":\"32d561974c748fa3765b873d92185861ae552bb5ac46c0d05b1c35c350b9b8247f7e9177c85205a7d02c084ec5217357a8d462f5a288e1bea96e4cb8dc5b6e55\"},{\"left\":\"6c89d37b4d3cb9d475501a557e464ad57edb34320bcce9b530cd652eebe835a35140790cd86a8aa03fe53b1619149e052994fd43fc772575a9caf476d7766420\"},{\"left\":\"73e4add4baa17640186bc16dc16b2a593f6b11006ad7a5e5db5b8e26067e69eedee4aea1543a4d4a1498f808e463565180d29a67506b303247df082d0199be29\"},{\"left\":\"da7709a1be30cd85298feac51a0eafb88703fa4efe8759bf552b94608cf3cb82d4bbb926ba5ad2c9a05e24ad32baea91e22a6a39e5b4c06047ac2a39eaa856a6\"},{\"left\":\"7a2a32c83e3536b6fea10280ffdfdcabaa8d394e88a8cd7599f861e6b73dedc5db1e4effca107aa83c64b61b2f783d9943c2a498b36008fb192f7f15afdb11a7\"}],\"merkleRoot\":\"fd2152ff2856ce92316ccea63c6985ffd44be4dcd1bf2c3d51a15e49727541c37f22d9d7ce94c573ca341463816a3bc8452fa2ed7222b943f58e9f35178798a9\",\"transactionId\":\"c504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996\"}}},\"dataHash\":\"FC5A1514CCC32F12A43EEC6E77CA25BCF806869A7B2337274CEC0404B0190B5827CBC9258D26ACC84A824201E34F511B1D994F02DDCFED5E107363F4FE56F523\",\"signatures\":{\"0x27007431E7bceF6AD588e288325897977cFD9463\":{\"explorer\":\"https:\\/\\/explorer.mintnet.settlemint.com\\/tx\\/0xbbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18\",\"transactionId\":\"bbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18\",\"signature\":\"0xbde3b1f9bc24c3435094725ee7703fcb01c660e3c9c86ceb67d8138136ad34b34cc3e5b85867c55354fa10f5e45a53aec663ec2a85e82656fc8e3652183446ec1b\"}},\"sealed\":\"2018-06-08T07:13:14.243Z\"}"

{
  "seal": {
    "id": "cji5mwedt01p7017woh32358j",
    "anchors": {
      "ethereum": {
        "mintnet": {
          "explorer": "https://explorer.mintnet.settlemint.com/tx/0x7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6",
          "proof": [
            {
              "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
            }
          ],
          "merkleRoot": "0800a69fe9e3072d06ec5b9da5d259b00dc666ee925dece84006d00796b4971e2bb8ea29ea945e412d3fdd6d27beeaacbe5d46cba046c66509359c1859624f3e",
          "transactionId": "7bd7292e57b978d24cfc49d01af55ff8366a341a861cc317de35970b934aa8b6",
          "exists": true
        },
        "mainnet": {
          "explorer": "https://etherscan.io/tx/0xc504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996",
          "proof": [
            {
              "right": "6d81244766d363b7e7506b9c5790029b226321e768da07e0bb6e5510bfed54b65f6de868ccfc694747201822b698d863e443d2bbb0cd7a456451a19ca159ca8b"
            },
            {
              "left": "5d2f80d09dfdd567731524ed94d85c1e6706d05a4f102188ebf03fdee240b4e1ec664ec2f960ad51d3abcf78f03988ba9ee1594de626be3f5d544aedc5e87e12"
            },
            {
              "left": "32d561974c748fa3765b873d92185861ae552bb5ac46c0d05b1c35c350b9b8247f7e9177c85205a7d02c084ec5217357a8d462f5a288e1bea96e4cb8dc5b6e55"
            },
            {
              "left": "6c89d37b4d3cb9d475501a557e464ad57edb34320bcce9b530cd652eebe835a35140790cd86a8aa03fe53b1619149e052994fd43fc772575a9caf476d7766420"
            },
            {
              "left": "73e4add4baa17640186bc16dc16b2a593f6b11006ad7a5e5db5b8e26067e69eedee4aea1543a4d4a1498f808e463565180d29a67506b303247df082d0199be29"
            },
            {
              "left": "da7709a1be30cd85298feac51a0eafb88703fa4efe8759bf552b94608cf3cb82d4bbb926ba5ad2c9a05e24ad32baea91e22a6a39e5b4c06047ac2a39eaa856a6"
            },
            {
              "left": "7a2a32c83e3536b6fea10280ffdfdcabaa8d394e88a8cd7599f861e6b73dedc5db1e4effca107aa83c64b61b2f783d9943c2a498b36008fb192f7f15afdb11a7"
            }
          ],
          "merkleRoot": "fd2152ff2856ce92316ccea63c6985ffd44be4dcd1bf2c3d51a15e49727541c37f22d9d7ce94c573ca341463816a3bc8452fa2ed7222b943f58e9f35178798a9",
          "transactionId": "c504f434379ec38bb7740711afd2b3c31f054951da769f7625911b802c88b996",
          "exists": true
        }
      }
    },
    "dataHash": "FC5A1514CCC32F12A43EEC6E77CA25BCF806869A7B2337274CEC0404B0190B5827CBC9258D26ACC84A824201E34F511B1D994F02DDCFED5E107363F4FE56F523",
    "signatures": {
      "0x27007431E7bceF6AD588e288325897977cFD9463": {
        "explorer": "https://explorer.mintnet.settlemint.com/tx/0xbbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18",
        "transactionId": "bbce5b030f485f3701507216b42de1f182e4c8cd2441203da6bb92b133f28b18",
        "signature": "0xbde3b1f9bc24c3435094725ee7703fcb01c660e3c9c86ceb67d8138136ad34b34cc3e5b85867c55354fa10f5e45a53aec663ec2a85e82656fc8e3652183446ec1b",
        "isValid": true
      }
    },
    "sealed": "2018-06-08T07:13:14.243Z"
  },
  "isValid": true
}


Return codes

Code Description
200 Success.
201 Created.
202 Accepted.
302 Found. Link in location header.
400 Bad request.
401 Unauthorized.
403 Forbidden.
404 Not found.
405 Method not allowed.
412 Precondition failed.
429 Too many requests.
500 Internal server error.
502 Bad gateway.
503 Service unavailable.

There are return codes whose message is delivered in the body of the main return code message:

Main Code Sub code Description
200 202 Accepted, but seal is not anchored yet.
400 409 Document already exists.
400 424 Failed dependency, could not execute request.


HTTP response headers

The following tables display the standard response headers that are returned with each API response:

Standard response field name Description
sunset This field will be populated with the deprecation details. By default the value is n/a.
api-version Indicates the API version you have used.
quota-interval Used to specify an integer (for example, 1, 2, 5, 60, and so on) that will be paired with the quota-time-unit you specify (minute, hour, day, week, or month) to determine a time period during which the quota use is calculated.
For example, an interval of 24 with a quota-time-unit of hour means that the quota will be calculated over the course of 24 hours.
quota-limit Number of API calls an user can make within a given time period.
If this limit is exceeded, the user will be throttled and API requests will fail.
quota-reset-UTC All quota times are set to the Coordinated Universal Time (UTC) time zone.
quota-time-unit Used to specify the unit of time applicable to the quota.
For example, an interval of 24 with a quota-time-unit of hour means that the quota will be calculated over the course of 24 hours.
quota-used Number of API calls made within the quota.
strict-transport-security The HTTP Strict-Transport-Security (HSTS) response header lets a web site tell browsers that it should only be accessed using HTTPS, instead of using HTTP. All present and future subdomains will be HTTPS for a maximum of 1 year and access is blocked to pages or sub domains that can only be served over HTTP including HSTS preload lists of web browsers.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload.
Access control field name Description
access-control-allow-credentials Tells browsers whether to expose the response to frontend JavaScript samp when the request's credentials mode (Request.credentials) is include.
When a request's credentials mode (Request.credentials) is include, browsers will only expose the response to frontend JavaScript samp if the Access-Control-Allow-Credentials value is true. Boolean.
access-control-allow-origin Indicates whether the response can be shared with requesting samp from the given origin.
access-control-allow-headers Used in response to a pre-flight request which includes the Access-Control-Request-Headers to indicate which HTTP headers can be used during the actual request.
access-control-max-age Indicates how long the results of a pre-flight request (that is the information contained in the Access-Control-Allow-Methods and Access-Control-Allow-Headers headers) can be cached.
access-control-allow-methods Indicates which HTTP methods are allowed on a particular endpoint for cross-origin requests.
For example: GET, PUT, POST, DELETE.
content-length The Content-Length entity header indicates the size of the entity-body, in bytes, sent to the recipient.
content-type The Content-Type entity header the client what the content type of the returned content actually is.

Mopinion feedback