Start here
What you can write in about
/v1/support/topicson https://api.auray.ai/v1Rows rather than a list compiled into a form, so adding a topic is a routing decision made once rather than a deploy of every surface that renders it.
Rows rather than a list compiled into a form, so adding a topic is a routing decision made once rather than a deploy of every surface that renders it. Each carries the answer /help prints for it, and where to read more; the answer is null for a topic that has none yet. Cached at the edge for five minutes with an hour of stale service. It answers while intake is closed or not configured, because the answers are read on their own; whether a request would be taken is accepting_requests on GET /v1/status.
#Authentication
No key needed — this document is public.
#Example request
curl https://api.auray.ai/v1/support/topicsconst res = await fetch("https://api.auray.ai/v1/support/topics", {
method: "GET",
});
console.log(await res.json());import requests
r = requests.get(
"https://api.auray.ai/v1/support/topics",
)
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/support/topics", 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/support/topics");
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/support/topics")
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/support/topics"))
.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/support/topics");
using var response = await client.SendAsync(request);
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");#Responses
#200 OK
OK
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
topics | object[] | no | — | |
topics[].id | string | no | — | |
topics[].title | string | no | — | |
topics[].description | string | no | — | |
topics[].answer | string | no | — | The answer /help prints for this topic, written by support. {error_codes} stands for the number of documented error codes. May be null. |
topics[].link | object | no | — | Where to read more. href is a path on auray.ai, or {app}/… for a page of the desktop app. May be null. |
topics[].link.href | string | no | — | |
topics[].link.label | string | no | — |
Headers:
| Header | Description |
|---|---|
Cache-Control | public, s-maxage=300, stale-while-revalidate=3600. |
X-Request-Id |
#503 Service Unavailable
support_disabled — the support surface has been switched off — or support_unavailable.
The error body: error, message, docs (the entry that explains it) and request_id.
#Status codes
| Status | Meaning |
|---|---|
200 | OK |
503 | support_disabled — the support surface has been switched off — or support_unavailable. |
Every refusal names its code, and every code is explained at Errors.