Download the completion certificate
curl --request GET \
--url https://api.craftkit.dev/v1/signatures/{id}/certificate \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.craftkit.dev/v1/signatures/{id}/certificate"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.craftkit.dev/v1/signatures/{id}/certificate', 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://api.craftkit.dev/v1/signatures/{id}/certificate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.craftkit.dev/v1/signatures/{id}/certificate"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.craftkit.dev/v1/signatures/{id}/certificate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.craftkit.dev/v1/signatures/{id}/certificate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body"<string>"{
"error": {
"code": "unauthorized",
"message": "Missing Bearer token."
}
}{
"error": {
"code": "not_found",
"message": "Signature request not found."
}
}{
"error": {
"code": "conflict",
"message": "Completion certificate is not available yet (status: sent)."
}
}{
"error": {
"code": "upstream_error",
"message": "Failed to retrieve the completion certificate from the provider."
}
}Signatures
Download the completion certificate
Stream the signing completion certificate (audit-trail PDF, a sensitive legal artifact, always served through the authenticated API — never a public URL).
GET
/
v1
/
signatures
/
{id}
/
certificate
Download the completion certificate
curl --request GET \
--url https://api.craftkit.dev/v1/signatures/{id}/certificate \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.craftkit.dev/v1/signatures/{id}/certificate"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.craftkit.dev/v1/signatures/{id}/certificate', 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://api.craftkit.dev/v1/signatures/{id}/certificate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.craftkit.dev/v1/signatures/{id}/certificate"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.craftkit.dev/v1/signatures/{id}/certificate")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.craftkit.dev/v1/signatures/{id}/certificate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body"<string>"{
"error": {
"code": "unauthorized",
"message": "Missing Bearer token."
}
}{
"error": {
"code": "not_found",
"message": "Signature request not found."
}
}{
"error": {
"code": "conflict",
"message": "Completion certificate is not available yet (status: sent)."
}
}{
"error": {
"code": "upstream_error",
"message": "Failed to retrieve the completion certificate from the provider."
}
}Authorizations
Project API key (ck_live_… or ck_test_…) presented as a bearer token.
For embed partner endpoints this is the partner secret key, which is the
same credential type.
Path Parameters
The signature request id.
Response
Authenticated completion certificate stream.
The response is of type file.
⌘I