Start here
Report something
/v1/community/reportson https://api.auray.ai/v1Report a published work, a public profile or a comment — with a key that holds community:write, as your account, ten an hour; or with no key, anonymously, paced per address and network and paying a…
Report a published work, a public profile or a comment — with a key that holds community:write, as your account, ten an hour; or with no key, anonymously, paced per address and network and paying a proof-of-work challenge from POST /v1/community/reports/challenge (send its challenge and your nonce; one challenge is one report). The same report again while it is open is merged into it. A severe report (csam, nonconsensual_likeness) is read first; it hides a work or a comment while our team reviews it once severe reports from enough accounts of some standing have been filed, never on one account's word, and an anonymous report never counts toward that. A report names no account of yours or of the target's.
#Authentication
No key needed: a report with none is anonymous, paced per address and network, and pays a proof-of-work challenge from POST /v1/community/reports/challenge — send its challenge and your nonce in the body. A key that holds community:write reports as its account and solves none.
#Request
#Body
application/json, required.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
kind | string | yes | — | One of "publication", "creator", "comment". |
id | string | yes | — | A work's or a comment's id, or a profile's handle. |
category | string | yes | — | One of "csam", "nonconsensual_likeness", "violent_extremism", "voice_cloning", "harassment", "copyright", "disinformation", "other". |
details | string | no | — | 0 to 2000 characters. May be null. |
challenge | string | no | — | With no key: a challenge from POST /v1/community/reports/challenge, unchanged. Ignored with a key. |
nonce | string | no | — | With no key: a nonce such that sha256("<salt>.<nonce>") begins with the challenge's bits zero bits. Ignored with a key. 0 to 64 characters. |
#Example request
curl -X POST https://api.auray.ai/v1/community/reports \
-H "content-type: application/json" \
-d '{
"kind": "publication",
"id": "3f0c8a52-6a1d-4e8b-9c2d-7e5f4a3b2c1d",
"category": "copyright",
"details": "This is my photograph, published without my permission."
}'import { createClient } from "@auray/client";
const auray = createClient(); // this route needs no key
const answer = await auray.platform.community.report({ kind: "publication", id: "3f0c8a52-6a1d-4e8b-9c2d-7e5f4a3b2c1d", category: "copyright", details: "This is my photograph, published without my permission." });
console.dir(answer, { depth: null });from auray_client import Client
auray = Client() # this route needs no key
answer = auray.platform.community.report(kind="publication", id="3f0c8a52-6a1d-4e8b-9c2d-7e5f4a3b2c1d", category="copyright", details="This is my photograph, published without my permission.")
print(answer)const res = await fetch("https://api.auray.ai/v1/community/reports", {
method: "POST",
headers: {
"content-type": "application/json",
},
body: JSON.stringify({
"kind": "publication",
"id": "3f0c8a52-6a1d-4e8b-9c2d-7e5f4a3b2c1d",
"category": "copyright",
"details": "This is my photograph, published without my permission."
}),
});
console.log(await res.json());import requests
r = requests.post(
"https://api.auray.ai/v1/community/reports",
json={
"kind": "publication",
"id": "3f0c8a52-6a1d-4e8b-9c2d-7e5f4a3b2c1d",
"category": "copyright",
"details": "This is my photograph, published without my permission."
},
)
r.raise_for_status()
print(r.json())package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
body := []byte(`{
"kind": "publication",
"id": "3f0c8a52-6a1d-4e8b-9c2d-7e5f4a3b2c1d",
"category": "copyright",
"details": "This is my photograph, published without my permission."
}`)
req, err := http.NewRequest("POST", "https://api.auray.ai/v1/community/reports", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}<?php
$ch = curl_init("https://api.auray.ai/v1/community/reports");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"kind" => "publication",
"id" => "3f0c8a52-6a1d-4e8b-9c2d-7e5f4a3b2c1d",
"category" => "copyright",
"details" => "This is my photograph, published without my permission.",
], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE),
]);
$response = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), " ", $response, PHP_EOL;require "net/http"
require "json"
uri = URI("https://api.auray.ai/v1/community/reports")
req = Net::HTTP::Post.new(uri)
req["Content-Type"] = "application/json"
req.body = {
"kind" => "publication",
"id" => "3f0c8a52-6a1d-4e8b-9c2d-7e5f4a3b2c1d",
"category" => "copyright",
"details" => "This is my photograph, published without my permission."
}.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts res.code, res.bodyimport java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
String body = """
{
"kind": "publication",
"id": "3f0c8a52-6a1d-4e8b-9c2d-7e5f4a3b2c1d",
"category": "copyright",
"details": "This is my photograph, published without my permission."
}""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.auray.ai/v1/community/reports"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode() + " " + response.body());
}
}using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.auray.ai/v1/community/reports");
var body = """
{
"kind": "publication",
"id": "3f0c8a52-6a1d-4e8b-9c2d-7e5f4a3b2c1d",
"category": "copyright",
"details": "This is my photograph, published without my permission."
}
""";
request.Content = new StringContent(body, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");#Responses
#201 Created
Received.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
object | string | yes | — | One of "report". |
kind | string | yes | — | One of "publication", "creator", "comment". |
category | string | yes | — | One of "csam", "nonconsensual_likeness", "violent_extremism", "voice_cloning", "harassment", "copyright", "disinformation", "other". |
received | boolean | yes | — | |
merged | boolean | yes | — | Merged into the open report about the same thing. |
hidden | boolean | yes | — | The work or comment is hidden while it is reviewed: the severe reports about it now meet the bar that hides it. False for a report below it, which is read first all the same. |
request_id | string | no | — | Mirrored in the X-Request-Id header. |
Headers:
| Header | Description |
|---|---|
RateLimit-Limit | Burst capacity. |
RateLimit-Remaining | |
RateLimit-Reset | Seconds until refill. |
X-RateLimit-Limit | |
X-RateLimit-Remaining | |
X-RateLimit-Reset | Unix seconds. The X- spelling is what client libraries read. |
X-Request-Id |
#400 Bad Request
#401 Unauthorized
#403 Forbidden
#404 Not Found
#409 Conflict
#413 Payload Too Large
#429 Too Many Requests
#503 Service Unavailable
#Status codes
| Status | Meaning |
|---|---|
201 | Received. |
400 | Bad Request |
401 | Unauthorized |
403 | Forbidden |
404 | Not Found |
409 | Conflict |
413 | Payload Too Large |
429 | Too Many Requests |
503 | Service Unavailable |
Every refusal names its code, and every code is explained at Errors.