HTTP-API
API-kontrakten
Alt, klienten gør, er almindelige HTTP-kald, du selv kan foretage. Denne side er kontrakten: hvordan du autentificerer, hvad der kommer tilbage, hvad fejlene betyder, og hvilket endpoint der gør hvad.
Base-URL
Hver sti herunder er relativ til dette origin. Behandl værten som en variabel — den flytter til et eget domæne — og hold den ét sted i din konfiguration frem for spredt ud i din kode.
https://pfmem-api.packagefactory.dkTo måder at autentificere på
En bearer-API-nøgle
Alt andet. Nøglen opløses på serveren til en konto, et arbejdsområde, en rolle og et sæt verber. Læg den aldrig i en query-streng, i en fejlrapport eller i noget, der registrerer en URL.
authorization: Bearer mk_live_...En session-cookie
Bruges af ruterne til oprettelse og log ind samt af de to kontoruter — den, der udsteder en kontos første master-nøgle, og den, der giver en browser dens CSRF-token. Det er browserens mekanisme, og det er den eneste vej til det endpoint, der udsteder den første nøgle, for før det kald findes der ingen nøgle at autentificere med.
CSRF-tokenet
Et kald, der ændrer tilstand og er autentificeret med en cookie, skal gentage sessionens token i en header, fordi en browser selv vedhæfter en cookie til et kald på tværs af sites. En kalder, der bruger en API-nøgle, har ikke brug for noget af dette: en browser vedhæfter aldrig en nøgle af sig selv, så en nøgle kan ikke bruges på tværs af sites.
GET /api/v2/account/csrf-token → { "csrf_token": "...", "header_name": "x-csrf-token" }
POST /api/v2/account/master-key → x-csrf-token: <that token>Konvolutten
Hvert endpoint svarer i en af to former. Et vellykket svar bærer et request-id og et data-objekt; en fejl bærer et error-objekt med en stabil kode, en besked til mennesker og en type.
{
"request_id": "23ba77f0c6474ccb8dc5d65d1a44d069",
"data": { }
}{
"error": {
"code": "version_conflict",
"message": "…",
"type": "invalid_request_error"
}
}API'et returnerer aldrig 200 ved en fejl. Er statussen 200, findes der et data-objekt, og findes der et error-objekt, siger statussen det også.
Forgren på koden, aldrig på beskeden. Vis aldrig en rå kode til et menneske — oversæt den til tekst, de kan handle på.
Læg request-id'et et sted, det kan kopieres fra, på enhver fejlskærm. Det er det første, support beder om, og tjenesten logger den samme værdi.
Statuskoder
Fem koder dækker hver fejl. Kun to af dem er værd at prøve igen: et nyt forsøg på de tre andre sender det samme afviste kald en gang til.
| Kode | Betydning | Sådan håndteres den |
|---|---|---|
401 | Manglende eller ugyldig nøgle. | Bed om en nøgle, eller log ind igen. Prøv aldrig igen. |
403 | Nøglen mangler verbet, eller målet ligger uden for dens rækkevidde. | Navngiv den manglende rettighed. Prøv aldrig igen. |
422 | Kaldet fejlede valideringen. | Vis fejlen ved det felt, den hører til. Prøv aldrig igen. |
429 | En kvote eller en rate limit blev nået. | Vis grænsen, og hvornår den nulstilles. Prøv igen efter en pause. |
503 | Noget, MemoryAgent afhænger af, er utilgængeligt. Kaldet blev ikke behandlet; prøv igen. | Forbigående. Prøv igen med stigende ventetid. |
Nøgleniveauer
Præfikset fortæller dig, hvad en nøgle kan nå, før du bruger den. En liste over nøgler returnerer aldrig en hemmelighed — kun et præfiks, en betegnelse og en dato — fordi en hemmelighed vises én gang, i det øjeblik den udstedes.
| Præfiks | Niveau | Rækkevidde | Verber |
|---|---|---|---|
mk_live_ | master | Hvert arbejdsområde i kontoen. | read · write · delete |
tk_live_ | tenant | Ét arbejdsområde. | read · write · delete |
rk_live_ | tenant_role | Ét arbejdsområde, én rolle. | En reader må læse; en writer må læse og skrive. |
Hukommelse
Den flade, din applikation kalder, autentificeret med en bearer-nøgle. Indlæsning er asynkron, så en hukommelse under behandling er en rigtig tilstand i din grænseflade og ikke et særtilfælde.
| Endpoint | Formål |
|---|---|
POST /api/v2/memory/add | Gemmer en samtale. Returnerer et task-id; udtrækningen kører bagefter. |
POST /api/v2/memory/search | Rangerer resultater ved at kombinere betydning og præcis ordlyd. |
POST /api/v2/memory/get | Viser et subjekts hukommelser, filtreret og pagineret. |
POST /api/v2/memory/edit | Retter én gemt hukommelse. Den indekseres på ny, så senere søgninger rammer den nye ordlyd. |
POST /api/v2/memory/delete | Sletter udtrukne hukommelser. Den underliggende samtale bevares. |
POST /api/v2/memory/flush | Kører en sessions ventende udtrækning nu. |
Opgaver
De eneste to GET-kald i hukommelses-API'et. Statusserne er queued, running, succeeded, failed og cancelled; de tre sidste er endelige, så hold op med at spørge, når du når en af dem.
| Endpoint | Formål |
|---|---|
GET /api/v2/tasks | Viser baggrundsopgaver. |
GET /api/v2/tasks/{task_id} | Én opgaves status og fremdrift. |
Administration
Kun med master-nøgle. Det er her, arbejdsområder og nøgler styres, og det ligger bevidst uden for kommandolinjeklientens flade.
| Endpoint | Formål |
|---|---|
POST /api/v2/admin/tenants | Opretter et arbejdsområde. |
POST /api/v2/admin/tenants/list | Viser kontoens arbejdsområder. |
POST /api/v2/admin/tenants/suspend | Suspenderer et arbejdsområde. Kan gøres om. |
POST /api/v2/admin/tenants/resume | Genoptager et suspenderet arbejdsområde. |
POST /api/v2/admin/tenants/erase | Sletter et arbejdsområde. Uigenkaldeligt — alt i det fjernes helt. |
POST /api/v2/admin/keys | Udsteder en nøgle. |
POST /api/v2/admin/keys/list | Viser nøgler. Returnerer aldrig en hemmelighed. |
POST /api/v2/admin/keys/revoke | Tilbagekalder en nøgle. |
POST /api/v2/admin/keys/rotate | Roterer en nøgle og udsteder dens afløser. |
POST /api/v2/admin/credentials | Gemmer din egen udbydernøgle, krypteret. |
Udgivelseskanalen
Fem offentlige ruter uden autentificering, der leverer installationsprogrammet og de offentliggjorte artefakter. De er bevidst fraværende i OpenAPI-dokumentet: det dokument er den hukommelseskontrakt, din applikation kalder, og et shell-script og en download er infrastruktur.
| Endpoint | Returnerer |
|---|---|
GET /install.sh | Installationsprogrammet, stemplet med det origin, det blev hentet fra. |
GET /cli/latest | Den offentliggjorte version, dens sha256 og dens størrelse. |
GET /cli/download/:version | Klientbundtet. |
GET /cli/skill/latest | Den offentliggjorte skill-version, dens sha256 og dens størrelse. |
GET /cli/skill/download/:version | Selve skill'en. |
Konventioner, det er værd at kende, før du skriver en klient
- Næsten alt er POST.
- Også læsninger. En læsning tager en body med filtre, og en nøgle hører hjemme i en header frem for i en URL, som proxyer og browserhistorik registrerer. De to task-endpoints er de eneste GET-kald. Behandl det ikke som en forglemmelse, der skal rettes.
- Tidsstempler er unix-millisekunder.
- Tretten cifre, mindst 1000000000000, i begge retninger. En værdi i sekunders præcision afvises frem for at blive læst som en dato i 1970.
- En læsning navngiver præcis ét subjekt.
- Visningen og søgningen tager hver ét subjekt-id, og det skal svare til hukommelsestypen: en forespørgsel på user navngiver et user_id, en forespørgsel på agent navngiver et agent_id. At sende begge fejler altid valideringen, så byg valget som en kontakt frem for to felter.
- Bodies valideres strengt.
- Et ukendt felt er en valideringsfejl, ikke noget, der stille ignoreres. Et stavet forkert navn fejler højlydt frem for at se ud til at virke — og intet felt, du kunne sende, navngiver overhovedet et arbejdsområde, et filter eller en embedding-version.