Report Cloud Run environment
curl --request PUT \
--url https://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"artifacts": [
{
"creationTimestamp": 1632122962,
"digests": {
"europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7"
},
"kind": "service",
"revisionName": "hello-world-00007-abc",
"serviceName": "hello-world"
},
{
"creationTimestamp": 1632122962,
"digests": {
"europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc": "1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc"
},
"jobName": "sandman-job",
"kind": "job"
}
]
}
'import requests
url = "https://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run"
payload = { "artifacts": [
{
"creationTimestamp": 1632122962,
"digests": { "europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7" },
"kind": "service",
"revisionName": "hello-world-00007-abc",
"serviceName": "hello-world"
},
{
"creationTimestamp": 1632122962,
"digests": { "europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc": "1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc" },
"jobName": "sandman-job",
"kind": "job"
}
] }
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({
artifacts: [
{
creationTimestamp: 1632122962,
digests: {
'europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7': 'c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7'
},
kind: 'service',
revisionName: 'hello-world-00007-abc',
serviceName: 'hello-world'
},
{
creationTimestamp: 1632122962,
digests: {
'europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc': '1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc'
},
jobName: 'sandman-job',
kind: 'job'
}
]
})
};
fetch('https://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run', 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://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run",
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([
'artifacts' => [
[
'creationTimestamp' => 1632122962,
'digests' => [
'europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7' => 'c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7'
],
'kind' => 'service',
'revisionName' => 'hello-world-00007-abc',
'serviceName' => 'hello-world'
],
[
'creationTimestamp' => 1632122962,
'digests' => [
'europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc' => '1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc'
],
'jobName' => 'sandman-job',
'kind' => 'job'
]
]
]),
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://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run"
payload := strings.NewReader("{\n \"artifacts\": [\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\": \"c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\"\n },\n \"kind\": \"service\",\n \"revisionName\": \"hello-world-00007-abc\",\n \"serviceName\": \"hello-world\"\n },\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\": \"1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\"\n },\n \"jobName\": \"sandman-job\",\n \"kind\": \"job\"\n }\n ]\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://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"artifacts\": [\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\": \"c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\"\n },\n \"kind\": \"service\",\n \"revisionName\": \"hello-world-00007-abc\",\n \"serviceName\": \"hello-world\"\n },\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\": \"1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\"\n },\n \"jobName\": \"sandman-job\",\n \"kind\": \"job\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run")
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 \"artifacts\": [\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\": \"c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\"\n },\n \"kind\": \"service\",\n \"revisionName\": \"hello-world-00007-abc\",\n \"serviceName\": \"hello-world\"\n },\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\": \"1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\"\n },\n \"jobName\": \"sandman-job\",\n \"kind\": \"job\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body"<string>"{
"errors": {
"email": "Field must be a valid email address",
"name": "Field cannot be empty"
},
"message": "Invalid report data"
}{
"message": "Environment not found"
}Report Cloud Run environment
Process a report for a Google Cloud Run environment.
PUT
/
environments
/
{org}
/
{env_name}
/
report
/
cloud-run
Report Cloud Run environment
curl --request PUT \
--url https://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"artifacts": [
{
"creationTimestamp": 1632122962,
"digests": {
"europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7"
},
"kind": "service",
"revisionName": "hello-world-00007-abc",
"serviceName": "hello-world"
},
{
"creationTimestamp": 1632122962,
"digests": {
"europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc": "1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc"
},
"jobName": "sandman-job",
"kind": "job"
}
]
}
'import requests
url = "https://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run"
payload = { "artifacts": [
{
"creationTimestamp": 1632122962,
"digests": { "europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7" },
"kind": "service",
"revisionName": "hello-world-00007-abc",
"serviceName": "hello-world"
},
{
"creationTimestamp": 1632122962,
"digests": { "europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc": "1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc" },
"jobName": "sandman-job",
"kind": "job"
}
] }
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({
artifacts: [
{
creationTimestamp: 1632122962,
digests: {
'europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7': 'c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7'
},
kind: 'service',
revisionName: 'hello-world-00007-abc',
serviceName: 'hello-world'
},
{
creationTimestamp: 1632122962,
digests: {
'europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc': '1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc'
},
jobName: 'sandman-job',
kind: 'job'
}
]
})
};
fetch('https://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run', 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://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run",
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([
'artifacts' => [
[
'creationTimestamp' => 1632122962,
'digests' => [
'europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7' => 'c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7'
],
'kind' => 'service',
'revisionName' => 'hello-world-00007-abc',
'serviceName' => 'hello-world'
],
[
'creationTimestamp' => 1632122962,
'digests' => [
'europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc' => '1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc'
],
'jobName' => 'sandman-job',
'kind' => 'job'
]
]
]),
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://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run"
payload := strings.NewReader("{\n \"artifacts\": [\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\": \"c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\"\n },\n \"kind\": \"service\",\n \"revisionName\": \"hello-world-00007-abc\",\n \"serviceName\": \"hello-world\"\n },\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\": \"1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\"\n },\n \"jobName\": \"sandman-job\",\n \"kind\": \"job\"\n }\n ]\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://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"artifacts\": [\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\": \"c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\"\n },\n \"kind\": \"service\",\n \"revisionName\": \"hello-world-00007-abc\",\n \"serviceName\": \"hello-world\"\n },\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\": \"1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\"\n },\n \"jobName\": \"sandman-job\",\n \"kind\": \"job\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.kosli.com/api/v2/environments/{org}/{env_name}/report/cloud-run")
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 \"artifacts\": [\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/svc@sha256:c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\": \"c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7\"\n },\n \"kind\": \"service\",\n \"revisionName\": \"hello-world-00007-abc\",\n \"serviceName\": \"hello-world\"\n },\n {\n \"creationTimestamp\": 1632122962,\n \"digests\": {\n \"europe-west1-docker.pkg.dev/proj/job@sha256:1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\": \"1e54935005f517e13b0a104681d2aad9092a147ba7f3573a84c56dda8001f1dc\"\n },\n \"jobName\": \"sandman-job\",\n \"kind\": \"job\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body"<string>"{
"errors": {
"email": "Field must be a valid email address",
"name": "Field cannot be empty"
},
"message": "Invalid report data"
}{
"message": "Environment not found"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Response
Report processed successfully, no new snapshots to create
Last modified on August 20, 2026
⌘I