Record a model image
Records an image you pushed by digest, so environments and tags can name it. image must
be the full digest, and the body repeats it. No release is registered and no tag is
written.
The first record checks that the repository holds the digest, which counts as one registry
read, and returns 201. A repeat returns 200 with no registry read. Requires the
account_admin or developer role and Serve access.
curl --request PUT \
--url https://api.reactor.inc/projects/{proj_id}/images/{image} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"digest": "sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da"
}
'import requests
url = "https://api.reactor.inc/projects/{proj_id}/images/{image}"
payload = { "digest": "sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
digest: 'sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da'
})
};
fetch('https://api.reactor.inc/projects/{proj_id}/images/{image}', 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.reactor.inc/projects/{proj_id}/images/{image}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'digest' => 'sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.reactor.inc/projects/{proj_id}/images/{image}"
payload := strings.NewReader("{\n \"digest\": \"sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.reactor.inc/projects/{proj_id}/images/{image}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"digest\": \"sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reactor.inc/projects/{proj_id}/images/{image}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"digest\": \"sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da\"\n}"
response = http.request(request)
puts response.read_body{
"digest": "<string>",
"tags": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z"
}{
"digest": "sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da",
"tags": [],
"created_at": "2026-10-10T09:50:00Z"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>",
"quota_type": "<string>",
"limit": "<string>",
"current": "<string>",
"field": "<string>"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>"
}Authorizations
A Reactor API key (rk_...), sent as Authorization: Bearer rk_.... Keep it on a server.
Path Parameters
The project's ID, a UUID. It is not the model's ID.
A model image digest, sha256:<64 hex>, or 12 to 64 lowercase hex characters that start the digest of one image of the project. Writes take the full digest only.
Body
The image digest, sha256:<64 hex>, equal to the path's.
curl --request PUT \
--url https://api.reactor.inc/projects/{proj_id}/images/{image} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"digest": "sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da"
}
'import requests
url = "https://api.reactor.inc/projects/{proj_id}/images/{image}"
payload = { "digest": "sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
digest: 'sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da'
})
};
fetch('https://api.reactor.inc/projects/{proj_id}/images/{image}', 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.reactor.inc/projects/{proj_id}/images/{image}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'digest' => 'sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.reactor.inc/projects/{proj_id}/images/{image}"
payload := strings.NewReader("{\n \"digest\": \"sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.reactor.inc/projects/{proj_id}/images/{image}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"digest\": \"sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reactor.inc/projects/{proj_id}/images/{image}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"digest\": \"sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da\"\n}"
response = http.request(request)
puts response.read_body{
"digest": "<string>",
"tags": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z"
}{
"digest": "sha256:d138642b1cd5ea5bba6ed5655fa1d7dfced33889d149b094b2c32c32f09ed3da",
"tags": [],
"created_at": "2026-10-10T09:50:00Z"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>",
"quota_type": "<string>",
"limit": "<string>",
"current": "<string>",
"field": "<string>"
}{
"error": "<string>",
"message": "<string>",
"resource": "<string>",
"reason": "<string>"
}