Start here
Set your avatar
POST
/v1/community/profiles/{handle}/avataron https://api.auray.ai/v1Set your profile's avatar from a picture you send.
Set your profile's avatar from a picture you send. It is stored apart from your account's own photo, under your profile's public id; the one it replaces is deleted. Answered at your own handle only. Takes a key holding community:write — Account offers it unticked — or the desktop's own session key. Spends nothing.
#Authentication
Authorization: Bearer auray_sk_… — community:write — Account offers it unticked; the desktop's session key holds it.
#Request
#Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
handle | string | yes | A profile's handle; one @ before it is read past. |
#Body
application/json, required.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
content_type | string | yes | — | One of "image/png", "image/jpeg", "image/webp". |
data_base64 | string | yes | — | The picture as base64, at most 2,000,000 bytes decoded and at least 64 pixels on each side. It is redrawn square at 512 pixels, cropped where its interest is, as WebP — with every byte of its metadata, a photo's location included, dropped. |
#Example request
curl -X POST https://api.auray.ai/v1/community/profiles/ada/avatar \
-H "Authorization: Bearer $AURAY_API_KEY" \
-H "content-type: application/json" \
-d '{
"content_type": "image/png",
"data_base64": "iVBORw0KGgoAAAANSUhEUgAA…"
}'import { readFile } from "node:fs/promises";
import { createClient } from "@auray/client";
const auray = createClient(); // reads AURAY_API_KEY
const answer = await auray.platform.community.profiles.setAvatar("ada", { contentType: "image/png", data: await readFile("avatar.png") });
console.dir(answer, { depth: null });from pathlib import Path
from auray_client import Client
auray = Client() # reads AURAY_API_KEY
answer = auray.platform.community.profiles.set_avatar("ada", content_type="image/png", data=Path("avatar.png").read_bytes())
print(answer)const res = await fetch("https://api.auray.ai/v1/community/profiles/ada/avatar", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AURAY_API_KEY}`,
"content-type": "application/json",
},
body: JSON.stringify({
"content_type": "image/png",
"data_base64": "iVBORw0KGgoAAAANSUhEUgAA…"
}),
});
console.log(await res.json());import os, requests
r = requests.post(
"https://api.auray.ai/v1/community/profiles/ada/avatar",
headers={"Authorization": f"Bearer {os.environ['AURAY_API_KEY']}"},
json={
"content_type": "image/png",
"data_base64": "iVBORw0KGgoAAAANSUhEUgAA…"
},
)
r.raise_for_status()
print(r.json())package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`{
"content_type": "image/png",
"data_base64": "iVBORw0KGgoAAAANSUhEUgAA…"
}`)
req, err := http.NewRequest("POST", "https://api.auray.ai/v1/community/profiles/ada/avatar", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("AURAY_API_KEY"))
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/profiles/ada/avatar");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("AURAY_API_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"content_type" => "image/png",
"data_base64" => "iVBORw0KGgoAAAANSUhEUgAA…",
], 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/profiles/ada/avatar")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer #{ENV.fetch("AURAY_API_KEY")}"
req["Content-Type"] = "application/json"
req.body = {
"content_type" => "image/png",
"data_base64" => "iVBORw0KGgoAAAANSUhEUgAA…"
}.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 = """
{
"content_type": "image/png",
"data_base64": "iVBORw0KGgoAAAANSUhEUgAA…"
}""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.auray.ai/v1/community/profiles/ada/avatar"))
.header("Authorization", "Bearer " + System.getenv("AURAY_API_KEY"))
.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.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("AURAY_API_KEY"));
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.auray.ai/v1/community/profiles/ada/avatar");
var body = """
{
"content_type": "image/png",
"data_base64": "iVBORw0KGgoAAAANSUhEUgAA…"
}
""";
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
#200 OK
OK: your standing, with the profile.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
object | string | yes | — | One of "community". |
standing | string | yes | — | The account's standing: active, limited, suspended or banned. |
creator | object | yes | — | The account's public profile, or null before one is claimed. May be null. |
creator.id | string | no | — | |
creator.handle | string | no | — | |
creator.name | string | no | — | May be null. |
creator.headline | string | no | — | May be null. |
creator.bio | string | no | — | May be null. |
creator.links | object[] | no | — | |
creator.links[].kind | string | yes | — | One of "website", "x", "instagram", "tiktok", "youtube", "linkedin", "github", "behance", "dribbble", "artstation", "vimeo", "threads", "bluesky". |
creator.links[].url | string | yes | — | https, at the host its kind names; a website anywhere. A URL. |
creator.avatar_url | string | no | — | A URL. May be null. |
creator.banner_url | string | no | — | A URL. May be null. |
creator.team | boolean | no | — | |
creator.url | string | no | — | A URL. |
creator.moderation | string | no | — | One of "visible", "hidden". |
creator.moderation_note | string | no | — | May be null. |
creator.followers | integer | no | — | |
creator.following | integer | no | — | |
creator.works | integer | no | — | |
creator.handle_change_after | string | no | — | May be null. |
creator.created_at | string | no | — | |
creator.hidden | boolean | no | — | You hid your profile from everyone else (hidden on Change your profile). |
creator.show_after | string | no | — | While you hid it less than an hour ago, when it can be shown again; null otherwise. May be null. |
can_publish | boolean | yes | — | An active account with a profile our team has not hidden. |
counts | object | yes | — | |
counts.liked | integer | no | — | |
counts.collections | integer | no | — | |
counts.publications | object | no | — | Works by state. |
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
#413 Payload Too Large
#428 Precondition Required
#429 Too Many Requests
#502 Bad Gateway
#503 Service Unavailable
#Status codes
| Status | Meaning |
|---|---|
200 | OK: your standing, with the profile. |
400 | Bad Request |
401 | Unauthorized |
403 | Forbidden |
404 | Not Found |
413 | Payload Too Large |
428 | Precondition Required |
429 | Too Many Requests |
502 | Bad Gateway |
503 | Service Unavailable |
Every refusal names its code, and every code is explained at Errors.