Start here
Read your own request
/v1/support/requests/{token}on https://api.auray.ai/v1Shows what is already inside the emails we sent, and nothing more — so a forwarded link reveals nothing new.
Shows what is already inside the emails we sent, and nothing more — so a forwarded link reveals nothing new. There is no plan, no credit balance, no account id, no other ticket, no API key, no job prompt or output, no internal note and no staff member's name; the requester's own address is masked. Reading slides the link's expiry, up to the hard cap it was issued with.
#Authentication
No key needed — this document is public.
#Request
#Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
token | string | yes | The whole path segment, never a query parameter — a token in a query string lands in referrer headers and in analytics. 32 random bytes, base64url. |
#Example request
curl https://api.auray.ai/v1/support/requests/…const res = await fetch("https://api.auray.ai/v1/support/requests/…", {
method: "GET",
});
console.log(await res.json());import requests
r = requests.get(
"https://api.auray.ai/v1/support/requests/…",
)
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/requests/…", 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/requests/…");
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/requests/…")
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/requests/…"))
.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/requests/…");
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 |
|---|---|---|---|---|
reference | string | no | — | |
subject | string | no | — | |
status | string | no | — | quarantined and spam are never shown; they read as open, which is the only thing true from outside — we have it and have not answered. One of "new", "open", "pending", "on_hold", "solved", "closed". |
opened_at | string | no | — | |
updated_at | string | no | — | |
requester | string | no | — | |
messages | object[] | no | — | |
messages[].seq | integer | no | — | |
messages[].from | string | no | — | One of "you", "support". |
messages[].body | string | no | — | |
messages[].at | string | no | — |
Headers:
| Header | Description |
|---|---|
RateLimit-Limit | |
RateLimit-Remaining | |
RateLimit-Reset | Seconds until refill. |
X-Request-Id | |
X-Robots-Tag | noindex, nofollow, noarchive. |
#404 Not Found
support_link_invalid
The error body: error, message, docs (the entry that explains it) and request_id.
#410 Gone
support_link_expired
The error body: error, message, docs (the entry that explains it) and request_id.
#429 Too Many Requests
support_rate_limited
The error body: error, message, docs (the entry that explains it) and request_id.
#503 Service Unavailable
support_disabled, support_not_configured or support_unavailable.
The error body: error, message, docs (the entry that explains it) and request_id.
#Status codes
| Status | Meaning |
|---|---|
200 | OK |
404 | support_link_invalid |
410 | support_link_expired |
429 | support_rate_limited |
503 | support_disabled, support_not_configured or support_unavailable. |
Every refusal names its code, and every code is explained at Errors.