Score files against the scope's rules
Viewing v1— superseded by v2
curl --request POST \ --url https://api.app.layer.ai/api/v1/workspaces/:workspace_id/scores \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "file_ids": [ "<uuid>" ], "project_id": "<uuid>", "rule_ids": []}'import requests
url = "https://api.app.layer.ai/api/v1/workspaces/:workspace_id/scores"
payload = { "file_ids": ["<uuid>"], "project_id": "<uuid>", "rule_ids": []}headers = { "Authorization": "Bearer <token>", "Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.json())const url = 'https://api.app.layer.ai/api/v1/workspaces/:workspace_id/scores';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"file_ids":["<uuid>"],"project_id":"<uuid>","rule_ids":[]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.app.layer.ai/api/v1/workspaces/:workspace_id/scores"
payload := strings.NewReader("{\n \"file_ids\": [\n \"<uuid>\"\n ],\n \"project_id\": \"<uuid>\",\n \"rule_ids\": []\n}")
req, _ := http.NewRequest("POST", 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(res) fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://api.app.layer.ai/api/v1/workspaces/:workspace_id/scores", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode([ 'file_ids' => [ '<uuid>' ], 'project_id' => '<uuid>', 'rule_ids' => [
] ]), 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;}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");RequestBody body = RequestBody.create(mediaType, "{\n \"file_ids\": [\n \"<uuid>\"\n ],\n \"project_id\": \"<uuid>\",\n \"rule_ids\": []\n}");Request request = new Request.Builder() .url("https://api.app.layer.ai/api/v1/workspaces/:workspace_id/scores") .post(body) .addHeader("Authorization", "Bearer <token>") .addHeader("Content-Type", "application/json") .build();
Response response = client.newCall(request).execute();require 'uri'require 'net/http'
url = URI("https://api.app.layer.ai/api/v1/workspaces/:workspace_id/scores")
http = Net::HTTP.new(url.host, url.port)http.use_ssl = true
request = Net::HTTP::Post.new(url)request["Authorization"] = 'Bearer <token>'request["Content-Type"] = 'application/json'request.body = "{\n \"file_ids\": [\n \"<uuid>\"\n ],\n \"project_id\": \"<uuid>\",\n \"rule_ids\": []\n}"
response = http.request(request)puts response.read_bodyvar client = new RestClient("https://api.app.layer.ai/api/v1/workspaces/:workspace_id/scores");var request = new RestRequest("", Method.Post);request.AddHeader("Authorization", "Bearer <token>");request.AddHeader("Content-Type", "application/json");request.AddParameter("application/json", "{\n \"file_ids\": [\n \"<uuid>\"\n ],\n \"project_id\": \"<uuid>\",\n \"rule_ids\": []\n}", ParameterType.RequestBody);var response = client.Execute(request);v1 is superseded. v1 was superseded by v2 on 2026-08-26. A sunset date has not been announced yet; v1 will be deprecated as a whole before removal. Migrate with the v2 migration guide.
Queue scoring of up to 100 files against the output scoring rules in force.
Accepted and asynchronous: every (file, rule) pair is a vision-model call that spends Creative Units, and the verdicts land over the following seconds to minutes. Poll GET /v1/workspaces/{workspace_id}/files/{file_id}/scores for the results.
Scoring a file again is allowed and appends a fresh verdict rather than replacing the previous one. A scope with no rules in force queues nothing and reports zero pairs.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Id of the workspace that owns the resource.
Id of the workspace that owns the resource.
Request Bodyrequired
Section titled “Request Bodyrequired”Responses
Section titled “Responses”Successful Response
object
How many (file, rule) judgements were queued — one model call each.
How many files were accepted for scoring.
The rules the files are being scored against.
Examplegenerated
{ "requested_pair_count": 1, "file_count": 1, "rule_ids": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ]}Unauthenticated — missing or invalid Bearer token.
object
Example
{ "type": "https://api.layer.ai/errors/ERROR_CODE", "title": "Error Title", "status": 400, "detail": "Human-readable description."}Forbidden — insufficient permissions.
object
Example
{ "type": "https://api.layer.ai/errors/ERROR_CODE", "title": "Error Title", "status": 400, "detail": "Human-readable description."}Resource not found.
object
Example
{ "type": "https://api.layer.ai/errors/ERROR_CODE", "title": "Error Title", "status": 400, "detail": "Human-readable description."}Invalid input parameters.
object
Example
{ "type": "https://api.layer.ai/errors/ERROR_CODE", "title": "Error Title", "status": 400, "detail": "Human-readable description."}Rate limited — too many concurrent requests.
object
Example
{ "type": "https://api.layer.ai/errors/ERROR_CODE", "title": "Error Title", "status": 400, "detail": "Human-readable description."}Internal server error.
object
Example
{ "type": "https://api.layer.ai/errors/ERROR_CODE", "title": "Error Title", "status": 400, "detail": "Human-readable description."}