Verify TEE quote
curl --request POST \
--url https://cloud-api.phala.com/api/v1/attestations/verify \
--header 'Content-Type: multipart/form-data' \
--form 'file=<string>' \
--form 'hex=<string>'import requests
url = "https://cloud-api.phala.com/api/v1/attestations/verify"
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"hex\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
headers = {"Content-Type": "multipart/form-data"}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('hex', '<string>');
const options = {method: 'POST'};
options.body = form;
fetch('https://cloud-api.phala.com/api/v1/attestations/verify', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cloud-api.phala.com/api/v1/attestations/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"hex\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cloud-api.phala.com/api/v1/attestations/verify"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"hex\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cloud-api.phala.com/api/v1/attestations/verify")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"hex\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud-api.phala.com/api/v1/attestations/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"hex\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"success": true,
"proof_of_cloud": true,
"quote": {
"header": {
"version": 123,
"ak_type": 2,
"tee_type": 0,
"qe_vendor": "<string>",
"user_data": "<string>"
},
"cert_data": "<string>",
"body": {
"tee_tcb_svn": "<string>",
"mrseam": "<string>",
"mrsignerseam": "<string>",
"seamattributes": "<string>",
"tdattributes": "<string>",
"xfam": "<string>",
"mrtd": "<string>",
"mrconfig": "<string>",
"mrowner": "<string>",
"mrownerconfig": "<string>",
"rtmr0": "<string>",
"rtmr1": "<string>",
"rtmr2": "<string>",
"rtmr3": "<string>",
"reportdata": "<string>"
},
"verified": false
},
"checksum": "<string>",
"can_download": true,
"uploaded_at": "<string>",
"verified_at": "<string>",
"quote_collateral": {
"pck_crl_issuer_chain": "<string>",
"root_ca_crl": "<string>",
"pck_crl": "<string>",
"tcb_info_issuer_chain": "<string>",
"tcb_info": "<string>",
"tcb_info_signature": "<string>",
"qe_identity_issuer_chain": "<string>",
"qe_identity": "<string>",
"qe_identity_signature": "<string>"
},
"node_provider": {
"proof_of_cloud": true,
"ppid": "<string>",
"provider": "<string>"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Attestations
Verify TEE quote
Accepts quote as file upload, form hex, or JSON hex. 0x prefix handled automatically.
POST
/
api
/
v1
/
attestations
/
verify
Verify TEE quote
curl --request POST \
--url https://cloud-api.phala.com/api/v1/attestations/verify \
--header 'Content-Type: multipart/form-data' \
--form 'file=<string>' \
--form 'hex=<string>'import requests
url = "https://cloud-api.phala.com/api/v1/attestations/verify"
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"hex\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
headers = {"Content-Type": "multipart/form-data"}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('hex', '<string>');
const options = {method: 'POST'};
options.body = form;
fetch('https://cloud-api.phala.com/api/v1/attestations/verify', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cloud-api.phala.com/api/v1/attestations/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"hex\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cloud-api.phala.com/api/v1/attestations/verify"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"hex\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cloud-api.phala.com/api/v1/attestations/verify")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"hex\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud-api.phala.com/api/v1/attestations/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"hex\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"success": true,
"proof_of_cloud": true,
"quote": {
"header": {
"version": 123,
"ak_type": 2,
"tee_type": 0,
"qe_vendor": "<string>",
"user_data": "<string>"
},
"cert_data": "<string>",
"body": {
"tee_tcb_svn": "<string>",
"mrseam": "<string>",
"mrsignerseam": "<string>",
"seamattributes": "<string>",
"tdattributes": "<string>",
"xfam": "<string>",
"mrtd": "<string>",
"mrconfig": "<string>",
"mrowner": "<string>",
"mrownerconfig": "<string>",
"rtmr0": "<string>",
"rtmr1": "<string>",
"rtmr2": "<string>",
"rtmr3": "<string>",
"reportdata": "<string>"
},
"verified": false
},
"checksum": "<string>",
"can_download": true,
"uploaded_at": "<string>",
"verified_at": "<string>",
"quote_collateral": {
"pck_crl_issuer_chain": "<string>",
"root_ca_crl": "<string>",
"pck_crl": "<string>",
"tcb_info_issuer_chain": "<string>",
"tcb_info": "<string>",
"tcb_info_signature": "<string>",
"qe_identity_issuer_chain": "<string>",
"qe_identity": "<string>",
"qe_identity_signature": "<string>"
},
"node_provider": {
"proof_of_cloud": true,
"ppid": "<string>",
"provider": "<string>"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Response
Quote verified
Quote verification result.
Quote checksum identifier
Verification passed
Quote from Phala Cloud TEE
Parsed quote structure
Show child attributes
Show child attributes
SHA256 of quote bytes
Raw quote downloadable
ISO8601 upload timestamp
ISO8601 timestamp when verified was computed
TCB collateral data
Show child attributes
Show child attributes
Node provider info
Show child attributes
Show child attributes
Was this page helpful?

