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
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
Features
- Tamper-proof.
- No third-parties required.
Getting started
Make sure you've read What's in it for you for more info on how to register and start testing 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.
- Seal your data.
- Retrieve the seals.
- Validate the data.
- Sign the data.
- Check your activities.
Authenticate on the CertiMint platform
Authentication workflow
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
Create a seal from a list of SHA3-512 hashes
- Send a
POST
request with your authentication token in the header. For each data item, the endpoint returns a unique identifier, thesealid
. - Every 10 seconds a worker will anchor all the seals on our own personal MintNet.
- 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
- Send a
POST
request with your authentication token in the header. - Every 10 seconds a worker will anchor all the seals on our own personal MintNet.
- 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
- Send a
POST
request with your authentication token in the header. - Every 10 seconds a worker will anchor all the seals on our own personal MintNet.
- 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
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.
- Send a
GET
request with your authentication token in the header. - You can filter your list of seals with different parameters such as
limit
,offset
,order
,orderBy
,type
andmeta.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 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.
- Retrieve the seal details of a seal by either using the request
/seals/list
or/seals/{id}
. - Enter the properties from the seal you received into the request body.
- You receive an updated seal receipt back with an
isValid
property. If the value istrue
, your seal is valid. If the value isfalse
, 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
- You can fetch the seal details of a seal by calling the
/seals/list
route above or by calling the/seals/{id}
route. - Enter the properties from the seal you received into the request body.
- You receive an updated seal receipt back with a status property in the form of a string.
- 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
- Before you can send sign invites, you need to have your file sealed.
- Send your sign invites by sending a POST request with your authentication token in the header.
- Every 10 seconds a worker will anchor all the sign invites on the Ethereum public blockchain.
- 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
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 website 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 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 if the Access-Control-Allow-Credentials value is true. Boolean. |
access-control-allow-origin | Indicates whether the response can be shared with requesting code 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. |