Start here
Search the Community
/v1/community/searchon https://api.auray.ai/v1Works in the public feeds whose title, description, model or shown prompt holds every word of q as a prefix, best match first — or, with scope=creators, public profiles whose handle starts with q o…
Works in the public feeds whose title, description, model or shown prompt holds every word of q as a prefix, best match first — or, with scope=creators, public profiles whose handle starts with q or whose name holds it, most followed first. Takes no key. A key that holds community:write reads as its account — its likes and follows filled in — and any other key reads what a stranger reads; either way a request with a key is answered for itself alone and kept in no shared cache. An answer without a key is the same for every reader, its request_id included — which names the request that filled the edge's copy — and carries no RateLimit-* headers, since they would describe that request's sender. Cached at the edge for thirty seconds with two minutes of stale service. While our team has paused the feeds, search answers 503 feeds_paused as well.
#Authentication
No key needed. A key that holds community:write is read as its account — its likes and follows filled in — and is answered private, no-store. Paced per address, and cached at the edge for thirty seconds.
#Request
#Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
q | string | yes | One to 100 characters, with a letter or a digit. 0 to 100 characters. |
scope | string | no | One of "works", "creators". |
kind | string | no | Only works of this kind. One of "image", "video", "audio", "model3d", "project". |
cursor | string | no | The next_cursor the previous page answered, unchanged, with the same filters. None for the first page. 0 to 200 characters. |
limit | integer | no | How many on a page. 1 to 60. |
#Example request
curl "https://api.auray.ai/v1/community/search?q=lighthouse"import { createClient } from "@auray/client";
const auray = createClient(); // this route needs no key
const answer = await auray.platform.community.search({ q: "lighthouse" });
console.dir(answer, { depth: null });from auray_client import Client
auray = Client() # this route needs no key
answer = auray.platform.community.search(q="lighthouse")
print(answer)const res = await fetch("https://api.auray.ai/v1/community/search?q=lighthouse", {
method: "GET",
});
console.log(await res.json());import requests
r = requests.get(
"https://api.auray.ai/v1/community/search?q=lighthouse",
)
r.raise_for_status()
print(r.json())package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://api.auray.ai/v1/community/search?q=lighthouse", nil)
if err != nil {
panic(err)
}
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/search?q=lighthouse");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), " ", $response, PHP_EOL;require "net/http"
uri = URI("https://api.auray.ai/v1/community/search?q=lighthouse")
req = Net::HTTP::Get.new(uri)
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 {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.auray.ai/v1/community/search?q=lighthouse"))
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode() + " " + response.body());
}
}using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.auray.ai/v1/community/search?q=lighthouse");
using var response = await client.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");#Responses
#200 OK
OK. data holds cards for works, profile rows for creators.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
object | string | yes | — | One of "list". |
scope | string | no | — | One of "works", "creators". |
data | object or object[] | yes | — | |
next_cursor | string | yes | — | The cursor of the next page; null on the last. May be null. |
request_id | string | no | — | Mirrored in the X-Request-Id header. On an answer without a key it names the request that filled the edge's copy, so readers served from that copy are handed the same one. |
Headers:
| Header | Description |
|---|---|
Cache-Control | public, s-maxage=30, stale-while-revalidate=120 with no key; private, no-store with one. |
Vary | Authorization. |
RateLimit-Limit | Burst capacity, per key, on an answer to a key. An answer without one is cached at the edge and carries none of the RateLimit-* headers; a refusal without one, which is never cached, carries its address's. |
RateLimit-Remaining | |
RateLimit-Reset | Seconds until refill. |
X-Request-Id |
#400 Bad Request
#429 Too Many Requests
#503 Service Unavailable
#Status codes
| Status | Meaning |
|---|---|
200 | OK. data holds cards for works, profile rows for creators. |
400 | Bad Request |
429 | Too Many Requests |
503 | Service Unavailable |
Every refusal names its code, and every code is explained at Errors.