Gå til indhold

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.

base URL
https://pfmem-api.packagefactory.dk

To 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.

request header
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.

session-authenticated writes
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.

success
{
  "request_id": "23ba77f0c6474ccb8dc5d65d1a44d069",
  "data": { }
}
failure
{
  "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.

Statuskoder, deres betydning og hvordan de håndteres
KodeBetydningSådan håndteres den
401Manglende eller ugyldig nøgle.Bed om en nøgle, eller log ind igen. Prøv aldrig igen.
403Nøglen mangler verbet, eller målet ligger uden for dens rækkevidde.Navngiv den manglende rettighed. Prøv aldrig igen.
422Kaldet fejlede valideringen.Vis fejlen ved det felt, den hører til. Prøv aldrig igen.
429En kvote eller en rate limit blev nået.Vis grænsen, og hvornår den nulstilles. Prøv igen efter en pause.
503Noget, 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.

Nøglepræfikser, niveauer, rækkevidde og verber
PræfiksNiveauRækkeviddeVerber
mk_live_masterHvert 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.

Hukommelsesendpoints
EndpointFormål
POST /api/v2/memory/addGemmer en samtale. Returnerer et task-id; udtrækningen kører bagefter.
POST /api/v2/memory/searchRangerer resultater ved at kombinere betydning og præcis ordlyd.
POST /api/v2/memory/getViser et subjekts hukommelser, filtreret og pagineret.
POST /api/v2/memory/editRetter én gemt hukommelse. Den indekseres på ny, så senere søgninger rammer den nye ordlyd.
POST /api/v2/memory/deleteSletter udtrukne hukommelser. Den underliggende samtale bevares.
POST /api/v2/memory/flushKø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.

Opgaveendpoints
EndpointFormål
GET /api/v2/tasksViser 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.

Administrationsendpoints
EndpointFormål
POST /api/v2/admin/tenantsOpretter et arbejdsområde.
POST /api/v2/admin/tenants/listViser kontoens arbejdsområder.
POST /api/v2/admin/tenants/suspendSuspenderer et arbejdsområde. Kan gøres om.
POST /api/v2/admin/tenants/resumeGenoptager et suspenderet arbejdsområde.
POST /api/v2/admin/tenants/eraseSletter et arbejdsområde. Uigenkaldeligt — alt i det fjernes helt.
POST /api/v2/admin/keysUdsteder en nøgle.
POST /api/v2/admin/keys/listViser nøgler. Returnerer aldrig en hemmelighed.
POST /api/v2/admin/keys/revokeTilbagekalder en nøgle.
POST /api/v2/admin/keys/rotateRoterer en nøgle og udsteder dens afløser.
POST /api/v2/admin/credentialsGemmer 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.

Offentlige udgivelsesendpoints
EndpointReturnerer
GET /install.shInstallationsprogrammet, stemplet med det origin, det blev hentet fra.
GET /cli/latestDen offentliggjorte version, dens sha256 og dens størrelse.
GET /cli/download/:versionKlientbundtet.
GET /cli/skill/latestDen offentliggjorte skill-version, dens sha256 og dens størrelse.
GET /cli/skill/download/:versionSelve 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.