modeller

SpaceXAI: Grok 4.7

Markdown · JSON

SpaceXAI: Grok 4.7

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Om modellen

Denne beskrivelsen dekker modellens funksjoner. Tilgjengelige inndata, utdata og alternativer i Ailoot er oppført nedenfor for den valgte metoden.

Utvikling og kunnskapsarbeid

Grok 4.7 er laget for programmering, agentoppgaver og profesjonelt informasjonsarbeid. xAI la vekt på krevende oppgaver som krever langvarig utførelse i rekkefølge, kontroll av eget arbeid og styring av lang kontekst.

Treningen brukte en større grunnmodell og en lang periode med forsterkningslæring på vanskelige oppgaver. Praktiske bruksområder omfatter programutvikling, oppretting av dokumenter og presentasjoner samt samtaleoppgaver og kunnskapsarbeid. Kjøring av kommandoer og oppretting av filer skjer gjennom miljøets verktøy, mens selve modellen returnerer tekst.

Viktigste egenskaper

  • Inndata: tekst og bilder.
  • Utdata: tekst, inkludert programkode og data i strukturert format.
  • Kontekst: 500 000 tokener.
  • Grense for innebygd kunnskap: mai 2026.
  • Resonnering: low, medium, high eller xhigh; high som standard.

Disse egenskapene gjelder Grok 4.7. Modellen mottar tilleggsdata og handlingsresultater gjennom innsendt kontekst og tilkoblede funksjoner.

Ifølge xAIs spesifikasjoner har Grok 4.7 ingen egen lengdegrense for tekstutdata. Denne modellegenskapen er ikke et løfte om et ubegrenset svar gjennom Ailoot API.

Resonnering i arbeid med flere trinn

low beholder overveielsen og passer for enkle handlinger; medium er laget for dataanalyse og arbeid med langt materiale. high setter av mer innsats til krevende matematikk og logikk, og xhigh til de vanskeligste oppgavene. Ifølge xAI gir økt dybde større forsinkelse. Resonnering kan ikke deaktiveres.

I Responses-formatet returnerer Grok 4.7 kryptert resonneringstilstand. Disse elementene kan sendes uendret til neste runde sammen med historikken for å bevare tilstanden i arbeidet gjennom flere trinn. De avslører ikke skjult resonnering i lesbar form. Chat Completions har ikke et felt med slikt kryptert innhold.

Modellen støtter også en kort fremstilling av resonneringen, som kan sendes mens svaret kommer. Den skiller seg fra de krypterte elementene: sammendraget er ment for lesing, og den krypterte tilstanden for videreføring av prosessen.

Verktøy og resultatformat

Brukerdefinerte funksjoner knytter modellen til programmets data og handlinger. Modellen formulerer et kall med argumenter, programmet utfører funksjonen og returnerer resultatet. Automatisk valg, obligatoriske kall, forbud mot verktøy og valg av en bestemt funksjon støttes; flere kall kan komme i samme svar.

JSON og JSON etter et angitt skjema er tilgjengelig for resultater som behandles av kode. Skjemaet angir felttyper, nestet struktur og tillatte alternativer. Denne modusen brukes for datauttrekk, dokumentanalyse og rapportutarbeiding og kan kombineres med brukerdefinerte funksjonskall.

I modusen xAI beskriver, er nettsøk, søk i X-publikasjoner og kjøring av kode tilgjengelig; disse kan kombineres med brukerdefinerte funksjoner. Tilgjengeligheten til innebygde verktøy gjennom Ailoot API bestemmes av støtten i valgt metode.

Styringsbegrensninger

presencePenalty, frequencyPenalty og stop brukes ikke med denne modellen. Støtten for JSON Schema har grenser: noen betingede konstruksjoner og sammensatte begrensninger blir fortsatt avhengige av modellens atferd og kontrolleres derfor av programmet. Stor kontekst bidrar til arbeid med omfattende materiale, men erstatter ikke et verktøy som henter nye fakta eller utfører en handling.

Praktisk oppgave

Praktisk oppgave

Teknisk eksempel på engelsk

Build a decision memo from supplied evidence

Prepare a procurement memo from these records: vendor A delivers in 5 days, costs 900 credits and offers a 12-month warranty; vendor B delivers in 9 days, costs 750 and offers 24 months. The team needs delivery within 7 days and budget below 1,000. Recommend an option, explain trade-offs and list missing evidence.

Forventet resultat

A concise decision memo with requirements, recommendation, trade-offs and unanswered questions tied to the records.

Kontroller resultatet

The recommendation applies both the delivery deadline and budget, while warranty length remains a separate trade-off.
Ailoot · Anthropic Messages POST /v1/messages grok-4.7

grok-4.7

SpaceXAI /grok-4.7
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · Anthropic Messages POST /v1/messages
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-4.7
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
user, assistant
Standard—
Feltmessages[].contentTypestring|content_block[]KravPåkrevdVerdier & grenserStandard—
FeltsystemTypestring|content_block[]KravValgfrittVerdier & grenserStandard—
Feltmax_tokensTypeintegerKravPåkrevdVerdier & grenser
Minimum: 1
Grensen gjelder for: den eksakte øvre grensen for valgt modell/kort
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltstop_sequencesTypestring[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypetool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].nameTypestringKravValgfrittVerdier & grenser
Gjelder når: verktøy oppgitt
Standard—
Felttools[].descriptionTypestringKravValgfrittVerdier & grenserStandard—
Felttools[].input_schemaTypeJSON_schemaKravValgfrittVerdier & grenserStandard—
Felttool_choiceTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltthinking.typeTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltthinking.budget_tokensTypeintegerKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltoutput_config.effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltmetadataTypeobjectKravValgfrittVerdier & grenserStandard—
Feltcache_controlTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content eller type=text-blokk

Tekst + bilde

{type:image,source:{type:base64,media_type,data}} eller en kilde med type=url

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, messages, max_tokens
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot Anthropic MessagesPOST /v1/messages
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · Anthropic Messages

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · Anthropic Messages

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="grok-4.7",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "grok-4.7",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='grok-4.7',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · Anthropic Messages

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold alle innholdsblokker, resonneringssignaturer og faktiske ID-er for verktøybruk. Sett sammen alle SSE-blokkendringer; den første tekstblokken er ikke hele resultatet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltmodelTypestring
Feltcontent[]Typetext|thinking|tool_use|other content block
Feltstop_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · OpenAI Responses POST /v1/responses grok-4.7

grok-4.7

SpaceXAI /grok-4.7
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · OpenAI Responses POST /v1/responses
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-4.7
Standard—
FeltinputTypestring|input_item[]KravPåkrevdVerdier & grenserStandard—
FeltinstructionsTypestringKravValgfrittVerdier & grenserStandard—
Feltinput[].typeTypestringKravValgfrittVerdier & grenser
message, reasoning, function_call, function_call_output
Standard—
Feltinput[].contentTypestring|content_part[]KravValgfrittVerdier & grenserStandard—
Feltinput[].call_idTypestringKravValgfrittVerdier & grenser
Gjelder når: function_call_output; behold faktisk returnert call_id
Standard—
Feltinput[].outputTypestring|content_part[]KravValgfrittVerdier & grenser
Gjelder når: function_call_output
Standard—
Feltmax_output_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypetool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttool_choiceTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltparallel_tool_callsTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning.effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning.summaryTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttext.formatTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttext.verbosityTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltincludeTypestring[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltstoreTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprevious_response_idTypestringKravValgfrittVerdier & grenser
ID-krav: Bare en faktisk svar-ID fra en støttet videreføring
Avhenger av modellen
Standard—
Feltservice_tierTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_keyTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_optionsTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

inputtekst eller input_text-del

Tekst + bilde

{type:input_image,image_url}

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, input
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot OpenAI ResponsesPOST /v1/responses
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · OpenAI Responses

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · OpenAI Responses

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="grok-4.7", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "grok-4.7", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="grok-4.7", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · OpenAI Responses

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert outputelement og hver innholdsdel, faktisk call_id for funksjonen, kryptert resonnering og bruksdata. Ved strømming beholder du fullstendig hendelses-/elementidentitet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltstatusTypestring
Feltoutput[]Typemessage|reasoning|function_call|other item
Feltoutput[].content[]Typecontent part
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · OpenAI Chat POST /v1/chat/completions grok-4.7

grok-4.7

SpaceXAI /grok-4.7
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · OpenAI Chat POST /v1/chat/completions
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-4.7
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
Eksempler: system, user, assistant, tool, function
Vilkår: Disse rollene representeres eksplisitt av kompatibilitetstyper i kildekoden; det eksakte rollesettet for modellen er fortsatt modellspesifikt.
Avhenger av modellen
Standard—
Feltmessages[].contentTypestring|content_part[]|nullKravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_callsTypetool_call[]KravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_call_idTypestringKravValgfrittVerdier & grenser
Gjelder når: role=tool; bruk faktisk returnert ID
Standard—
Feltmessages[].nameTypestringKravValgfrittVerdier & grenserStandard—
Feltmessages[].reasoning_contentTypestringKravValgfrittVerdier & grenser
Gjelder når: Send den faktisk returnerte resonneringen tilbake der denne modellen bruker den
Standard—
Feltmessages[].reasoning_detailsTypeobject|arrayKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltmax_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
Feltmax_completion_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
Feltstream_options.include_usageTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltstopTypestring|string[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypefunction_tool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].typeTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].function.nameTypestringKravPåkrevdVerdier & grenser
Gjelder når: funksjonsverktøy oppgitt
Standard—
Felttools[].function.descriptionTypestringKravValgfrittVerdier & grenserStandard—
Felttools[].function.parametersTypeJSON_schemaKravValgfrittVerdier & grenserStandard—
Felttool_choiceTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltparallel_tool_callsTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltresponse_formatTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning_effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltreasoningTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltservice_tierTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltinstructionsTypestringKravValgfrittVerdier & grenser
Kompatibilitetsfelt
Standard—
FeltfunctionsTypefunction[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltfunction_callTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_optionsTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content

Tekst + bilde

{type:image_url,image_url:{url,detail}}

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, messages
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot OpenAI ChatPOST /v1/chat/completions
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · OpenAI Chat

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · OpenAI Chat

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="grok-4.7",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "grok-4.7",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='grok-4.7',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · OpenAI Chat

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert svaralternativ med innhold, verktøykall og resonnering. Sett sammen endringer i SSE etter svaralternativets/verktøyets indeks, og behold endelig avslutningsgrunn og bruksdata.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
Feltchoices[].indexTypeinteger
Feltchoices[].message.contentTypestring|null
Feltchoices[].message.tool_callsTypetool_call[]
Feltchoices[].message.reasoning_contentTypestring
Feltchoices[].message.reasoning_detailsTypeobject|array
Feltchoices[].finish_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions grok-4.7

grok-4.7

SpaceXAI /grok-4.7
Modell-ID
  • grok-4.7
  • x-ai/grok-4.7
  • ~x-ai/grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Inndatatyper
text
Utdatatyper
text
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-4.7
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
Avhenger av modellen
Standard—
Feltmessages[].contentTypestringKravValgfrittVerdier & grenser
Gjelder når: Tekstsamtale
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content

Metodeparametere og livssyklus
ParameterAvtale
Parametercontent_typeAvtaleapplication/json
ParameterrequiredAvtalemodel, messages
Parametermaterial_typesAvtaletext
ParametermessagesAvtalemeldingstabell med role/content-struktur
Parameterfile_materialAvtalefaktisk UTF-8-dokument satt inn som bokstavelig tekst; ingen fil-ID utledes
Parameteroptional_controlsAvtalestream
Parametercontrol_scopeAvtaleTekstsamtale; stream er en boolsk verdi med false som standard.
Parameteroutput_modalitiesAvtaletext
Parameterhosted_operationsAvtalefalse
Parametermultimodal_input_bindingAvtalenull

Metodealiaser: /chat/completions

Livssyklus: synchronous_or_streamed

Send eksakt modell-ID sammen med messages.

Kontekstlengde er ikke en outputgrense.

En tekstfil kan levere bokstavelig tekst; bilde-, lyd- og filobjektinput trenger eksakt binding.

Priser

Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.

Hurtigmodus
Standardpris Når hurtigmodus er valgt
Flex-modus
Standardpris Når flex-modus er valgt
Maksimal resonneringsinnsats
Standardpris Når justeringen «default» brukes for maksimal resonneringsinnsats
Resonneringsinnsats · high
Standardpris Når resonneringsinnsatsen er satt til high
Resonneringsinnsats · low
Standardpris Når resonneringsinnsatsen er satt til low
Resonneringsinnsats · medium
Standardpris Når resonneringsinnsatsen er satt til medium
Resonneringsinnsats · xhigh
Standardpris Når resonneringsinnsatsen er satt til xhigh

Ailoot-satser

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonGrunnpriser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 1 for forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 2 for forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Eksempelforespørsler

Ailoot Ultra · OpenAI Chat

curlPython SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"grok-4.7","messages":[{"role":"user","content":"hello"}],"stream":false}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="grok-4.7", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))

Motta og lagre resultater

Ailoot Ultra · OpenAI Chat

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert svaralternativ med innhold, verktøykall og resonnering. Sett sammen endringer i SSE etter svaralternativets/verktøyets indeks, og behold endelig avslutningsgrunn og bruksdata.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
Feltchoices[].indexTypeinteger
Feltchoices[].message.contentTypestring|null
Feltchoices[].message.tool_callsTypetool_call[]
Feltchoices[].message.reasoning_contentTypestring
Feltchoices[].message.reasoning_detailsTypeobject|array
Feltchoices[].finish_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot Ultra · Anthropic Messages POST /v1/messages grok-4.7

grok-4.7

SpaceXAI /grok-4.7
Modell-ID
  • grok-4.7
  • x-ai/grok-4.7
  • ~x-ai/grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst
Resultater
json · sse

Tilgjengelig i Ailoot · inndata & metoder

Ailoot Ultra · Anthropic Messages POST /v1/messages
Inndatatyper
text
Utdatatyper
json, sse
Utdataformat
JSON eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-4.7
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenserStandard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
user, assistant
Standard—
Feltmessages[].contentTypestringKravPåkrevdVerdier & grenserStandard—
Feltmax_tokensTypeintegerKravPåkrevdVerdier & grenserStandard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
Kombinasjoner av inngående materialer

Tekst · UTF-8-tekst

messages[].content-streng

Metodeparametere og livssyklus
ParameterAvtale
Parametercontent_typeAvtaleapplication/json
ParameterrequiredAvtalemodel, messages, max_tokens
Parameteroptional_controlsAvtalestream
Parametermaterial_typesAvtaletext
Parametertext_file_materialAvtaleLes det faktiske UTF-8-dokumentet og legg teksten i den angitte input- eller meldingsinnholdsstrengen.

Livssyklus: synchronous_or_streamed

Priser

Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.

Hurtigmodus
Standardpris Når hurtigmodus er valgt
Flex-modus
Standardpris Når flex-modus er valgt
Maksimal resonneringsinnsats
Standardpris Når justeringen «default» brukes for maksimal resonneringsinnsats
Resonneringsinnsats · high
Standardpris Når resonneringsinnsatsen er satt til high
Resonneringsinnsats · low
Standardpris Når resonneringsinnsatsen er satt til low
Resonneringsinnsats · medium
Standardpris Når resonneringsinnsatsen er satt til medium
Resonneringsinnsats · xhigh
Standardpris Når resonneringsinnsatsen er satt til xhigh

Ailoot-satser

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonGrunnpriser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 1 for forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 2 for forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Eksempelforespørsler

Ailoot Ultra · Anthropic Messages

Komplett, minimal JSON-kroppcurl · bruk UTF-8-dokumentet dittPython · lagre hele resultatet
{
  "model": "grok-4.7",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'grok-4.7', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'grok-4.7', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Motta og lagre resultater

Ailoot Ultra · Anthropic Messages

JSON eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold alle innholdsblokker, resonneringssignaturer og faktiske ID-er for verktøybruk. Sett sammen alle SSE-blokkendringer; den første tekstblokken er ikke hele resultatet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltmodelTypestring
Feltcontent[]Typetext|thinking|tool_use|other content block
Feltstop_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · Anthropic Messages POST /v1/messages grok

grok

SpaceXAI /grok
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · Anthropic Messages POST /v1/messages
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
user, assistant
Standard—
Feltmessages[].contentTypestring|content_block[]KravPåkrevdVerdier & grenserStandard—
FeltsystemTypestring|content_block[]KravValgfrittVerdier & grenserStandard—
Feltmax_tokensTypeintegerKravPåkrevdVerdier & grenser
Minimum: 1
Grensen gjelder for: den eksakte øvre grensen for valgt modell/kort
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltstop_sequencesTypestring[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypetool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].nameTypestringKravValgfrittVerdier & grenser
Gjelder når: verktøy oppgitt
Standard—
Felttools[].descriptionTypestringKravValgfrittVerdier & grenserStandard—
Felttools[].input_schemaTypeJSON_schemaKravValgfrittVerdier & grenserStandard—
Felttool_choiceTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltthinking.typeTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltthinking.budget_tokensTypeintegerKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltoutput_config.effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltmetadataTypeobjectKravValgfrittVerdier & grenserStandard—
Feltcache_controlTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content eller type=text-blokk

Tekst + bilde

{type:image,source:{type:base64,media_type,data}} eller en kilde med type=url

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, messages, max_tokens
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot Anthropic MessagesPOST /v1/messages
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · Anthropic Messages

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · Anthropic Messages

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="grok",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "grok",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='grok',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · Anthropic Messages

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold alle innholdsblokker, resonneringssignaturer og faktiske ID-er for verktøybruk. Sett sammen alle SSE-blokkendringer; den første tekstblokken er ikke hele resultatet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltmodelTypestring
Feltcontent[]Typetext|thinking|tool_use|other content block
Feltstop_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · OpenAI Responses POST /v1/responses grok

grok

SpaceXAI /grok
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · OpenAI Responses POST /v1/responses
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok
Standard—
FeltinputTypestring|input_item[]KravPåkrevdVerdier & grenserStandard—
FeltinstructionsTypestringKravValgfrittVerdier & grenserStandard—
Feltinput[].typeTypestringKravValgfrittVerdier & grenser
message, reasoning, function_call, function_call_output
Standard—
Feltinput[].contentTypestring|content_part[]KravValgfrittVerdier & grenserStandard—
Feltinput[].call_idTypestringKravValgfrittVerdier & grenser
Gjelder når: function_call_output; behold faktisk returnert call_id
Standard—
Feltinput[].outputTypestring|content_part[]KravValgfrittVerdier & grenser
Gjelder når: function_call_output
Standard—
Feltmax_output_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypetool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttool_choiceTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltparallel_tool_callsTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning.effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning.summaryTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttext.formatTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttext.verbosityTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltincludeTypestring[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltstoreTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprevious_response_idTypestringKravValgfrittVerdier & grenser
ID-krav: Bare en faktisk svar-ID fra en støttet videreføring
Avhenger av modellen
Standard—
Feltservice_tierTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_keyTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_optionsTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

inputtekst eller input_text-del

Tekst + bilde

{type:input_image,image_url}

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, input
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot OpenAI ResponsesPOST /v1/responses
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · OpenAI Responses

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · OpenAI Responses

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="grok", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "grok", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="grok", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · OpenAI Responses

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert outputelement og hver innholdsdel, faktisk call_id for funksjonen, kryptert resonnering og bruksdata. Ved strømming beholder du fullstendig hendelses-/elementidentitet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltstatusTypestring
Feltoutput[]Typemessage|reasoning|function_call|other item
Feltoutput[].content[]Typecontent part
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · OpenAI Chat POST /v1/chat/completions grok

grok

SpaceXAI /grok
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · OpenAI Chat POST /v1/chat/completions
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
Eksempler: system, user, assistant, tool, function
Vilkår: Disse rollene representeres eksplisitt av kompatibilitetstyper i kildekoden; det eksakte rollesettet for modellen er fortsatt modellspesifikt.
Avhenger av modellen
Standard—
Feltmessages[].contentTypestring|content_part[]|nullKravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_callsTypetool_call[]KravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_call_idTypestringKravValgfrittVerdier & grenser
Gjelder når: role=tool; bruk faktisk returnert ID
Standard—
Feltmessages[].nameTypestringKravValgfrittVerdier & grenserStandard—
Feltmessages[].reasoning_contentTypestringKravValgfrittVerdier & grenser
Gjelder når: Send den faktisk returnerte resonneringen tilbake der denne modellen bruker den
Standard—
Feltmessages[].reasoning_detailsTypeobject|arrayKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltmax_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
Feltmax_completion_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
Feltstream_options.include_usageTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltstopTypestring|string[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypefunction_tool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].typeTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].function.nameTypestringKravPåkrevdVerdier & grenser
Gjelder når: funksjonsverktøy oppgitt
Standard—
Felttools[].function.descriptionTypestringKravValgfrittVerdier & grenserStandard—
Felttools[].function.parametersTypeJSON_schemaKravValgfrittVerdier & grenserStandard—
Felttool_choiceTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltparallel_tool_callsTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltresponse_formatTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning_effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltreasoningTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltservice_tierTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltinstructionsTypestringKravValgfrittVerdier & grenser
Kompatibilitetsfelt
Standard—
FeltfunctionsTypefunction[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltfunction_callTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_optionsTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content

Tekst + bilde

{type:image_url,image_url:{url,detail}}

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, messages
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot OpenAI ChatPOST /v1/chat/completions
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · OpenAI Chat

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · OpenAI Chat

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="grok",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "grok",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='grok',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · OpenAI Chat

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert svaralternativ med innhold, verktøykall og resonnering. Sett sammen endringer i SSE etter svaralternativets/verktøyets indeks, og behold endelig avslutningsgrunn og bruksdata.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
Feltchoices[].indexTypeinteger
Feltchoices[].message.contentTypestring|null
Feltchoices[].message.tool_callsTypetool_call[]
Feltchoices[].message.reasoning_contentTypestring
Feltchoices[].message.reasoning_detailsTypeobject|array
Feltchoices[].finish_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · Anthropic Messages POST /v1/messages grok-4.7-latest

grok-4.7-latest

SpaceXAI /grok-4.7-latest
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · Anthropic Messages POST /v1/messages
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-4.7-latest
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
user, assistant
Standard—
Feltmessages[].contentTypestring|content_block[]KravPåkrevdVerdier & grenserStandard—
FeltsystemTypestring|content_block[]KravValgfrittVerdier & grenserStandard—
Feltmax_tokensTypeintegerKravPåkrevdVerdier & grenser
Minimum: 1
Grensen gjelder for: den eksakte øvre grensen for valgt modell/kort
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltstop_sequencesTypestring[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypetool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].nameTypestringKravValgfrittVerdier & grenser
Gjelder når: verktøy oppgitt
Standard—
Felttools[].descriptionTypestringKravValgfrittVerdier & grenserStandard—
Felttools[].input_schemaTypeJSON_schemaKravValgfrittVerdier & grenserStandard—
Felttool_choiceTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltthinking.typeTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltthinking.budget_tokensTypeintegerKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltoutput_config.effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltmetadataTypeobjectKravValgfrittVerdier & grenserStandard—
Feltcache_controlTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content eller type=text-blokk

Tekst + bilde

{type:image,source:{type:base64,media_type,data}} eller en kilde med type=url

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, messages, max_tokens
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot Anthropic MessagesPOST /v1/messages
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · Anthropic Messages

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · Anthropic Messages

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7-latest", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7-latest", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="grok-4.7-latest",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "grok-4.7-latest",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='grok-4.7-latest',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · Anthropic Messages

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold alle innholdsblokker, resonneringssignaturer og faktiske ID-er for verktøybruk. Sett sammen alle SSE-blokkendringer; den første tekstblokken er ikke hele resultatet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltmodelTypestring
Feltcontent[]Typetext|thinking|tool_use|other content block
Feltstop_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · OpenAI Responses POST /v1/responses grok-4.7-latest

grok-4.7-latest

SpaceXAI /grok-4.7-latest
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · OpenAI Responses POST /v1/responses
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-4.7-latest
Standard—
FeltinputTypestring|input_item[]KravPåkrevdVerdier & grenserStandard—
FeltinstructionsTypestringKravValgfrittVerdier & grenserStandard—
Feltinput[].typeTypestringKravValgfrittVerdier & grenser
message, reasoning, function_call, function_call_output
Standard—
Feltinput[].contentTypestring|content_part[]KravValgfrittVerdier & grenserStandard—
Feltinput[].call_idTypestringKravValgfrittVerdier & grenser
Gjelder når: function_call_output; behold faktisk returnert call_id
Standard—
Feltinput[].outputTypestring|content_part[]KravValgfrittVerdier & grenser
Gjelder når: function_call_output
Standard—
Feltmax_output_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypetool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttool_choiceTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltparallel_tool_callsTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning.effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning.summaryTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttext.formatTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttext.verbosityTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltincludeTypestring[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltstoreTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprevious_response_idTypestringKravValgfrittVerdier & grenser
ID-krav: Bare en faktisk svar-ID fra en støttet videreføring
Avhenger av modellen
Standard—
Feltservice_tierTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_keyTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_optionsTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

inputtekst eller input_text-del

Tekst + bilde

{type:input_image,image_url}

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, input
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot OpenAI ResponsesPOST /v1/responses
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · OpenAI Responses

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · OpenAI Responses

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7-latest", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7-latest", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="grok-4.7-latest", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "grok-4.7-latest", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="grok-4.7-latest", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · OpenAI Responses

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert outputelement og hver innholdsdel, faktisk call_id for funksjonen, kryptert resonnering og bruksdata. Ved strømming beholder du fullstendig hendelses-/elementidentitet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltstatusTypestring
Feltoutput[]Typemessage|reasoning|function_call|other item
Feltoutput[].content[]Typecontent part
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · OpenAI Chat POST /v1/chat/completions grok-4.7-latest

grok-4.7-latest

SpaceXAI /grok-4.7-latest
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · OpenAI Chat POST /v1/chat/completions
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-4.7-latest
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
Eksempler: system, user, assistant, tool, function
Vilkår: Disse rollene representeres eksplisitt av kompatibilitetstyper i kildekoden; det eksakte rollesettet for modellen er fortsatt modellspesifikt.
Avhenger av modellen
Standard—
Feltmessages[].contentTypestring|content_part[]|nullKravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_callsTypetool_call[]KravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_call_idTypestringKravValgfrittVerdier & grenser
Gjelder når: role=tool; bruk faktisk returnert ID
Standard—
Feltmessages[].nameTypestringKravValgfrittVerdier & grenserStandard—
Feltmessages[].reasoning_contentTypestringKravValgfrittVerdier & grenser
Gjelder når: Send den faktisk returnerte resonneringen tilbake der denne modellen bruker den
Standard—
Feltmessages[].reasoning_detailsTypeobject|arrayKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltmax_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
Feltmax_completion_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
Feltstream_options.include_usageTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltstopTypestring|string[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypefunction_tool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].typeTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].function.nameTypestringKravPåkrevdVerdier & grenser
Gjelder når: funksjonsverktøy oppgitt
Standard—
Felttools[].function.descriptionTypestringKravValgfrittVerdier & grenserStandard—
Felttools[].function.parametersTypeJSON_schemaKravValgfrittVerdier & grenserStandard—
Felttool_choiceTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltparallel_tool_callsTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltresponse_formatTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning_effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltreasoningTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltservice_tierTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltinstructionsTypestringKravValgfrittVerdier & grenser
Kompatibilitetsfelt
Standard—
FeltfunctionsTypefunction[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltfunction_callTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_optionsTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content

Tekst + bilde

{type:image_url,image_url:{url,detail}}

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, messages
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot OpenAI ChatPOST /v1/chat/completions
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · OpenAI Chat

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · OpenAI Chat

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7-latest", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-4.7-latest", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="grok-4.7-latest",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "grok-4.7-latest",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='grok-4.7-latest',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · OpenAI Chat

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert svaralternativ med innhold, verktøykall og resonnering. Sett sammen endringer i SSE etter svaralternativets/verktøyets indeks, og behold endelig avslutningsgrunn og bruksdata.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
Feltchoices[].indexTypeinteger
Feltchoices[].message.contentTypestring|null
Feltchoices[].message.tool_callsTypetool_call[]
Feltchoices[].message.reasoning_contentTypestring
Feltchoices[].message.reasoning_detailsTypeobject|array
Feltchoices[].finish_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · Anthropic Messages POST /v1/messages grok-latest

grok-latest

SpaceXAI /grok-latest
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · Anthropic Messages POST /v1/messages
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-latest
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
user, assistant
Standard—
Feltmessages[].contentTypestring|content_block[]KravPåkrevdVerdier & grenserStandard—
FeltsystemTypestring|content_block[]KravValgfrittVerdier & grenserStandard—
Feltmax_tokensTypeintegerKravPåkrevdVerdier & grenser
Minimum: 1
Grensen gjelder for: den eksakte øvre grensen for valgt modell/kort
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltstop_sequencesTypestring[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypetool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].nameTypestringKravValgfrittVerdier & grenser
Gjelder når: verktøy oppgitt
Standard—
Felttools[].descriptionTypestringKravValgfrittVerdier & grenserStandard—
Felttools[].input_schemaTypeJSON_schemaKravValgfrittVerdier & grenserStandard—
Felttool_choiceTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltthinking.typeTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltthinking.budget_tokensTypeintegerKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltoutput_config.effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltmetadataTypeobjectKravValgfrittVerdier & grenserStandard—
Feltcache_controlTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content eller type=text-blokk

Tekst + bilde

{type:image,source:{type:base64,media_type,data}} eller en kilde med type=url

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, messages, max_tokens
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot Anthropic MessagesPOST /v1/messages
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · Anthropic Messages

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · Anthropic Messages

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-latest", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-latest", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="grok-latest",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "grok-latest",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='grok-latest',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · Anthropic Messages

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold alle innholdsblokker, resonneringssignaturer og faktiske ID-er for verktøybruk. Sett sammen alle SSE-blokkendringer; den første tekstblokken er ikke hele resultatet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltmodelTypestring
Feltcontent[]Typetext|thinking|tool_use|other content block
Feltstop_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · OpenAI Responses POST /v1/responses grok-latest

grok-latest

SpaceXAI /grok-latest
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · OpenAI Responses POST /v1/responses
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-latest
Standard—
FeltinputTypestring|input_item[]KravPåkrevdVerdier & grenserStandard—
FeltinstructionsTypestringKravValgfrittVerdier & grenserStandard—
Feltinput[].typeTypestringKravValgfrittVerdier & grenser
message, reasoning, function_call, function_call_output
Standard—
Feltinput[].contentTypestring|content_part[]KravValgfrittVerdier & grenserStandard—
Feltinput[].call_idTypestringKravValgfrittVerdier & grenser
Gjelder når: function_call_output; behold faktisk returnert call_id
Standard—
Feltinput[].outputTypestring|content_part[]KravValgfrittVerdier & grenser
Gjelder når: function_call_output
Standard—
Feltmax_output_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypetool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttool_choiceTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltparallel_tool_callsTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning.effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning.summaryTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttext.formatTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttext.verbosityTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltincludeTypestring[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltstoreTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprevious_response_idTypestringKravValgfrittVerdier & grenser
ID-krav: Bare en faktisk svar-ID fra en støttet videreføring
Avhenger av modellen
Standard—
Feltservice_tierTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_keyTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_optionsTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

inputtekst eller input_text-del

Tekst + bilde

{type:input_image,image_url}

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, input
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot OpenAI ResponsesPOST /v1/responses
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · OpenAI Responses

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · OpenAI Responses

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-latest", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-latest", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="grok-latest", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "grok-latest", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="grok-latest", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_response()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · OpenAI Responses

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert outputelement og hver innholdsdel, faktisk call_id for funksjonen, kryptert resonnering og bruksdata. Ved strømming beholder du fullstendig hendelses-/elementidentitet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltstatusTypestring
Feltoutput[]Typemessage|reasoning|function_call|other item
Feltoutput[].content[]Typecontent part
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot · OpenAI Chat POST /v1/chat/completions grok-latest

grok-latest

SpaceXAI /grok-latest
Modell-ID
  • grok-4.7
  • grok
  • grok-4.7-latest
  • grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst · Bilder
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot · OpenAI Chat POST /v1/chat/completions
Inndatatyper
text, image
Utdatatyper
text
Kontekst
500 000 tokens
Maksimale utdata
500 000 tokens
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
grok-latest
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
Eksempler: system, user, assistant, tool, function
Vilkår: Disse rollene representeres eksplisitt av kompatibilitetstyper i kildekoden; det eksakte rollesettet for modellen er fortsatt modellspesifikt.
Avhenger av modellen
Standard—
Feltmessages[].contentTypestring|content_part[]|nullKravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_callsTypetool_call[]KravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_call_idTypestringKravValgfrittVerdier & grenser
Gjelder når: role=tool; bruk faktisk returnert ID
Standard—
Feltmessages[].nameTypestringKravValgfrittVerdier & grenserStandard—
Feltmessages[].reasoning_contentTypestringKravValgfrittVerdier & grenser
Gjelder når: Send den faktisk returnerte resonneringen tilbake der denne modellen bruker den
Standard—
Feltmessages[].reasoning_detailsTypeobject|arrayKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltmax_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
Feltmax_completion_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
Feltstream_options.include_usageTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltstopTypestring|string[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypefunction_tool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].typeTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].function.nameTypestringKravPåkrevdVerdier & grenser
Gjelder når: funksjonsverktøy oppgitt
Standard—
Felttools[].function.descriptionTypestringKravValgfrittVerdier & grenserStandard—
Felttools[].function.parametersTypeJSON_schemaKravValgfrittVerdier & grenserStandard—
Felttool_choiceTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltparallel_tool_callsTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltresponse_formatTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning_effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltreasoningTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltservice_tierTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltinstructionsTypestringKravValgfrittVerdier & grenser
Kompatibilitetsfelt
Standard—
FeltfunctionsTypefunction[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltfunction_callTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_optionsTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content

Tekst + bilde

{type:image_url,image_url:{url,detail}}

Metodeparametere og livssyklus
ParameterAvtale
Parametermaterial_typesAvtaletext, image
ParameterrequiredAvtalemodel, messages
Parameteroptional_controlsAvtalenull
Parametercontent_typeAvtaleapplication/json
Parametertext_file_materialAvtalefaktisk UTF-8-innhold satt inn som tekst; fil-ID-er eller URL-adresser (URLs) trenger separat, eksakt støtte

Livssyklus: exact retained published method

Metodestrukturer og ID-er er eksakte; leverandørens evne er adskilt fra godkjenning av forespørselen.

Priser

Satser for Ailoot-metoder

Ailoot OpenAI ChatPOST /v1/chat/completions
Inndata
0,002 USD / 1K
Utdata
0,006 USD / 1K
Lesing fra hurtigbuffer
0,0005 USD / 1K
Skriving til hurtigbuffer
0,00 USD / 1K
Skriving til hurtigbuffer, 5 min
0,00 USD / 1K tokens
Skriving til hurtigbuffer, 1 time
0,00 USD / 1K tokens

Priser etter forespørselslengde · OpenAI Chat

Forespørselsstørrelse, tokenerInndataUtdataLesing fra hurtigbufferSkriving til hurtigbufferHurtigbuffer 5 minHurtigbuffer 1 time
Forespørselsstørrelse, tokener(0; 200 000]Inndata0,002 USDUtdata0,006 USDLesing fra hurtigbuffer0,0005 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD
Forespørselsstørrelse, tokener(200 000; ∞)Inndata0,004 USDUtdata0,012 USDLesing fra hurtigbuffer0,001 USDSkriving til hurtigbuffer0,00 USDHurtigbuffer 5 min0,00 USDHurtigbuffer 1 time0,00 USD

Satser i USD per 1K tokener. Hvis ingen sats er angitt, arves grunnsatsen for denne metoden; «—» betyr at ingen grunnsats er angitt.

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Detaljer om referansetariffen

Referanseprisplaner på modellnivå endrer ikke metodevalg, prisoverslag eller kostnader. Aktive kostnader bruker satsene til den valgte Ailoot-metoden.

Modellens referanseprisplaner

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonOpenAI Chat · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonOpenAI Chat · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Grunnsatser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 1 etter forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonAnthropic Messages · Nivå 2 etter forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Eksempelforespørsler

Ailoot · OpenAI Chat

TeksteksempelInndata, bildePython SDKNode.js SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-latest", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "grok-latest", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="grok-latest",
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
  model: "grok-latest",
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='grok-latest',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot · OpenAI Chat

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert svaralternativ med innhold, verktøykall og resonnering. Sett sammen endringer i SSE etter svaralternativets/verktøyets indeks, og behold endelig avslutningsgrunn og bruksdata.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
Feltchoices[].indexTypeinteger
Feltchoices[].message.contentTypestring|null
Feltchoices[].message.tool_callsTypetool_call[]
Feltchoices[].message.reasoning_contentTypestring
Feltchoices[].message.reasoning_detailsTypeobject|array
Feltchoices[].finish_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions x-ai/grok-4.7

x-ai/grok-4.7

SpaceXAI /x-ai/grok-4.7
Modell-ID
  • grok-4.7
  • x-ai/grok-4.7
  • ~x-ai/grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Inndatatyper
text
Utdatatyper
text
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
x-ai/grok-4.7
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
Eksempler: system, user, assistant, tool, function
Vilkår: Disse rollene representeres eksplisitt av kompatibilitetstyper i kildekoden; det eksakte rollesettet for modellen er fortsatt modellspesifikt.
Avhenger av modellen
Standard—
Feltmessages[].contentTypestring|content_part[]|nullKravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_callsTypetool_call[]KravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_call_idTypestringKravValgfrittVerdier & grenser
Gjelder når: role=tool; bruk faktisk returnert ID
Standard—
Feltmessages[].nameTypestringKravValgfrittVerdier & grenserStandard—
Feltmessages[].reasoning_contentTypestringKravValgfrittVerdier & grenser
Gjelder når: Send den faktisk returnerte resonneringen tilbake der denne modellen bruker den
Standard—
Feltmessages[].reasoning_detailsTypeobject|arrayKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltmax_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
Feltmax_completion_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
Feltstream_options.include_usageTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltstopTypestring|string[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypefunction_tool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].typeTypestringKravValgfrittVerdier & grenser
function
Avhenger av modellen
Standard—
Felttools[].function.nameTypestringKravPåkrevdVerdier & grenser
Gjelder når: funksjonsverktøy oppgitt
Standard—
Felttools[].function.descriptionTypestringKravValgfrittVerdier & grenserStandard—
Felttools[].function.parametersTypeJSON_schemaKravValgfrittVerdier & grenserStandard—
Felttool_choiceTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltparallel_tool_callsTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltresponse_formatTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning_effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltreasoningTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltservice_tierTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltinstructionsTypestringKravValgfrittVerdier & grenser
Kompatibilitetsfelt
Standard—
FeltfunctionsTypefunction[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltfunction_callTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_optionsTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltmodalitiesTypestring[]KravValgfrittVerdier & grenser
text
Standard—
FeltproviderTypeobjectKravValgfrittVerdier & grenser
Vilkår: provider.options avvises på denne Ultra-tekstruten
Standard—
Feltcache_control.ttlTypestringKravValgfrittVerdier & grenser
Vilkår: 1h avvises på faktiske steder for mellomlagring av ledetekster
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content

Metodeparametere og livssyklus
ParameterAvtale
Parametercontent_typeAvtaleapplication/json
ParameterrequiredAvtalemodel, messages
Parametermaterial_typesAvtaletext
ParametermessagesAvtalemeldingstabell med role/content-struktur
Parameterfile_materialAvtalefaktisk UTF-8-dokument satt inn som bokstavelig tekst; ingen fil-ID utledes
Parameteroptional_controlsAvtalestream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametercontrol_scopeAvtalemodellspesifikt; brukerens funksjonsverktøy skiller seg fra driftede verktøy
Parameteroutput_modalitiesAvtaletext
Parameterhosted_operationsAvtalefalse
Parametermultimodal_input_bindingAvtalenull

Livssyklus: synchronous_or_streamed

Send eksakt modell-ID sammen med messages.

Kontekstlengde er ikke en outputgrense.

En tekstfil kan levere bokstavelig tekst; bilde-, lyd- og filobjektinput trenger eksakt binding.

Priser

Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.

Hurtigmodus
Standardpris Når hurtigmodus er valgt
Flex-modus
Standardpris Når flex-modus er valgt
Maksimal resonneringsinnsats
Standardpris Når justeringen «default» brukes for maksimal resonneringsinnsats
Resonneringsinnsats · high
Standardpris Når resonneringsinnsatsen er satt til high
Resonneringsinnsats · low
Standardpris Når resonneringsinnsatsen er satt til low
Resonneringsinnsats · medium
Standardpris Når resonneringsinnsatsen er satt til medium
Resonneringsinnsats · xhigh
Standardpris Når resonneringsinnsatsen er satt til xhigh

Ailoot-satser

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonGrunnpriser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 1 for forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 2 for forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Eksempelforespørsler

Ailoot Ultra · OpenAI Chat

curlPython SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "x-ai/grok-4.7", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='x-ai/grok-4.7',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='x-ai/grok-4.7',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot Ultra · OpenAI Chat

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert svaralternativ med innhold, verktøykall og resonnering. Sett sammen endringer i SSE etter svaralternativets/verktøyets indeks, og behold endelig avslutningsgrunn og bruksdata.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
Feltchoices[].indexTypeinteger
Feltchoices[].message.contentTypestring|null
Feltchoices[].message.tool_callsTypetool_call[]
Feltchoices[].message.reasoning_contentTypestring
Feltchoices[].message.reasoning_detailsTypeobject|array
Feltchoices[].finish_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot Ultra · Anthropic Messages POST /v1/messages x-ai/grok-4.7

x-ai/grok-4.7

SpaceXAI /x-ai/grok-4.7
Modell-ID
  • grok-4.7
  • x-ai/grok-4.7
  • ~x-ai/grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst
Resultater
json · sse

Tilgjengelig i Ailoot · inndata & metoder

Ailoot Ultra · Anthropic Messages POST /v1/messages
Inndatatyper
text
Utdatatyper
json, sse
Utdataformat
JSON eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
x-ai/grok-4.7
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenserStandard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
user, assistant
Standard—
Feltmessages[].contentTypestringKravPåkrevdVerdier & grenserStandard—
Feltmax_tokensTypeintegerKravPåkrevdVerdier & grenserStandard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
Kombinasjoner av inngående materialer

Tekst · UTF-8-tekst

messages[].content-streng

Metodeparametere og livssyklus
ParameterAvtale
Parametercontent_typeAvtaleapplication/json
ParameterrequiredAvtalemodel, messages, max_tokens
Parameteroptional_controlsAvtalestream
Parametermaterial_typesAvtaletext
Parametertext_file_materialAvtaleLes det faktiske UTF-8-dokumentet og legg teksten i den angitte input- eller meldingsinnholdsstrengen.

Livssyklus: synchronous_or_streamed

Priser

Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.

Hurtigmodus
Standardpris Når hurtigmodus er valgt
Flex-modus
Standardpris Når flex-modus er valgt
Maksimal resonneringsinnsats
Standardpris Når justeringen «default» brukes for maksimal resonneringsinnsats
Resonneringsinnsats · high
Standardpris Når resonneringsinnsatsen er satt til high
Resonneringsinnsats · low
Standardpris Når resonneringsinnsatsen er satt til low
Resonneringsinnsats · medium
Standardpris Når resonneringsinnsatsen er satt til medium
Resonneringsinnsats · xhigh
Standardpris Når resonneringsinnsatsen er satt til xhigh

Ailoot-satser

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonGrunnpriser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 1 for forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 2 for forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Eksempelforespørsler

Ailoot Ultra · Anthropic Messages

Komplett, minimal JSON-kroppcurl · bruk UTF-8-dokumentet dittPython · lagre hele resultatet
{
  "model": "x-ai/grok-4.7",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'x-ai/grok-4.7', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'x-ai/grok-4.7', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Motta og lagre resultater

Ailoot Ultra · Anthropic Messages

JSON eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold alle innholdsblokker, resonneringssignaturer og faktiske ID-er for verktøybruk. Sett sammen alle SSE-blokkendringer; den første tekstblokken er ikke hele resultatet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltmodelTypestring
Feltcontent[]Typetext|thinking|tool_use|other content block
Feltstop_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions ~x-ai/grok-latest

~x-ai/grok-latest

SpaceXAI /~x-ai/grok-latest
Modell-ID
  • grok-4.7
  • x-ai/grok-4.7
  • ~x-ai/grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst
Resultater
Tekst

Tilgjengelig i Ailoot · inndata & metoder

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Inndatatyper
text
Utdatatyper
text
Utdataformat
json eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
~x-ai/grok-latest
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenser
Minste antall elementer: 1
Standard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
Eksempler: system, user, assistant, tool, function
Vilkår: Disse rollene representeres eksplisitt av kompatibilitetstyper i kildekoden; det eksakte rollesettet for modellen er fortsatt modellspesifikt.
Avhenger av modellen
Standard—
Feltmessages[].contentTypestring|content_part[]|nullKravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_callsTypetool_call[]KravValgfrittVerdier & grenserStandard—
Feltmessages[].tool_call_idTypestringKravValgfrittVerdier & grenser
Gjelder når: role=tool; bruk faktisk returnert ID
Standard—
Feltmessages[].nameTypestringKravValgfrittVerdier & grenserStandard—
Feltmessages[].reasoning_contentTypestringKravValgfrittVerdier & grenser
Gjelder når: Send den faktisk returnerte resonneringen tilbake der denne modellen bruker den
Standard—
Feltmessages[].reasoning_detailsTypeobject|arrayKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltmax_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
Feltmax_completion_tokensTypeintegerKravValgfrittVerdier & grenser
Minimum: 1
Avhenger av modellen
Standard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
Feltstream_options.include_usageTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttemperatureTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttop_pTypenumberKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltstopTypestring|string[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FelttoolsTypefunction_tool[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Felttools[].typeTypestringKravValgfrittVerdier & grenser
function
Avhenger av modellen
Standard—
Felttools[].function.nameTypestringKravPåkrevdVerdier & grenser
Gjelder når: funksjonsverktøy oppgitt
Standard—
Felttools[].function.descriptionTypestringKravValgfrittVerdier & grenserStandard—
Felttools[].function.parametersTypeJSON_schemaKravValgfrittVerdier & grenserStandard—
Felttool_choiceTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltparallel_tool_callsTypebooleanKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltresponse_formatTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltreasoning_effortTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltreasoningTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltservice_tierTypestringKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltinstructionsTypestringKravValgfrittVerdier & grenser
Kompatibilitetsfelt
Standard—
FeltfunctionsTypefunction[]KravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltfunction_callTypestring|objectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
Feltprompt_cache_optionsTypeobjectKravValgfrittVerdier & grenser
Avhenger av modellen
Standard—
FeltmodalitiesTypestring[]KravValgfrittVerdier & grenser
text
Standard—
FeltproviderTypeobjectKravValgfrittVerdier & grenser
Vilkår: provider.options avvises på denne Ultra-tekstruten
Standard—
Feltcache_control.ttlTypestringKravValgfrittVerdier & grenser
Vilkår: 1h avvises på faktiske steder for mellomlagring av ledetekster
Standard—
Kombinasjoner av inngående materialer

Tekst · UTF8-tekst

messages[].content

Metodeparametere og livssyklus
ParameterAvtale
Parametercontent_typeAvtaleapplication/json
ParameterrequiredAvtalemodel, messages
Parametermaterial_typesAvtaletext
ParametermessagesAvtalemeldingstabell med role/content-struktur
Parameterfile_materialAvtalefaktisk UTF-8-dokument satt inn som bokstavelig tekst; ingen fil-ID utledes
Parameteroptional_controlsAvtalestream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametercontrol_scopeAvtalemodellspesifikt; brukerens funksjonsverktøy skiller seg fra driftede verktøy
Parameteroutput_modalitiesAvtaletext
Parameterhosted_operationsAvtalefalse
Parametermultimodal_input_bindingAvtalenull

Livssyklus: synchronous_or_streamed

Send eksakt modell-ID sammen med messages.

Kontekstlengde er ikke en outputgrense.

En tekstfil kan levere bokstavelig tekst; bilde-, lyd- og filobjektinput trenger eksakt binding.

Priser

Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.

Hurtigmodus
Standardpris Når hurtigmodus er valgt
Flex-modus
Standardpris Når flex-modus er valgt
Maksimal resonneringsinnsats
Standardpris Når justeringen «default» brukes for maksimal resonneringsinnsats
Resonneringsinnsats · high
Standardpris Når resonneringsinnsatsen er satt til high
Resonneringsinnsats · low
Standardpris Når resonneringsinnsatsen er satt til low
Resonneringsinnsats · medium
Standardpris Når resonneringsinnsatsen er satt til medium
Resonneringsinnsats · xhigh
Standardpris Når resonneringsinnsatsen er satt til xhigh

Ailoot-satser

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonGrunnpriser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 1 for forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 2 for forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Eksempelforespørsler

Ailoot Ultra · OpenAI Chat

curlPython SDKPython-strømming
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "~x-ai/grok-latest", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='~x-ai/grok-latest',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='~x-ai/grok-latest',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Motta og lagre resultater

Ailoot Ultra · OpenAI Chat

json eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold hvert svaralternativ med innhold, verktøykall og resonnering. Sett sammen endringer i SSE etter svaralternativets/verktøyets indeks, og behold endelig avslutningsgrunn og bruksdata.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
Feltchoices[].indexTypeinteger
Feltchoices[].message.contentTypestring|null
Feltchoices[].message.tool_callsTypetool_call[]
Feltchoices[].message.reasoning_contentTypestring
Feltchoices[].message.reasoning_detailsTypeobject|array
Feltchoices[].finish_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

Ailoot Ultra · Anthropic Messages POST /v1/messages ~x-ai/grok-latest

~x-ai/grok-latest

SpaceXAI /~x-ai/grok-latest
Modell-ID
  • grok-4.7
  • x-ai/grok-4.7
  • ~x-ai/grok-latest

Start

Grok 4.7 er en xAI-modell for programutvikling og profesjonelt kunnskapsarbeid. Den støtter tekst, bilder, en kontekst på 500 000 tokener, funksjonskall og strukturerte svar.

Godkjente inndata
Tekst
Resultater
json · sse

Tilgjengelig i Ailoot · inndata & metoder

Ailoot Ultra · Anthropic Messages POST /v1/messages
Inndatatyper
text
Utdatatyper
json, sse
Utdataformat
JSON eller SSE
FeltTypeKravVerdier & grenserStandard
FeltmodelTypestringKravPåkrevdVerdier & grenser
~x-ai/grok-latest
Standard—
FeltmessagesTypemessage[]KravPåkrevdVerdier & grenserStandard—
Feltmessages[].roleTypestringKravPåkrevdVerdier & grenser
user, assistant
Standard—
Feltmessages[].contentTypestringKravPåkrevdVerdier & grenserStandard—
Feltmax_tokensTypeintegerKravPåkrevdVerdier & grenserStandard—
FeltstreamTypebooleanKravValgfrittVerdier & grenserStandardfalse
Kombinasjoner av inngående materialer

Tekst · UTF-8-tekst

messages[].content-streng

Metodeparametere og livssyklus
ParameterAvtale
Parametercontent_typeAvtaleapplication/json
ParameterrequiredAvtalemodel, messages, max_tokens
Parameteroptional_controlsAvtalestream
Parametermaterial_typesAvtaletext
Parametertext_file_materialAvtaleLes det faktiske UTF-8-dokumentet og legg teksten i den angitte input- eller meldingsinnholdsstrengen.

Livssyklus: synchronous_or_streamed

Priser

Tariffopplysninger legger ikke til forespørselsvalg. Støttede parametere står ved den valgte metoden.

Hurtigmodus
Standardpris Når hurtigmodus er valgt
Flex-modus
Standardpris Når flex-modus er valgt
Maksimal resonneringsinnsats
Standardpris Når justeringen «default» brukes for maksimal resonneringsinnsats
Resonneringsinnsats · high
Standardpris Når resonneringsinnsatsen er satt til high
Resonneringsinnsats · low
Standardpris Når resonneringsinnsatsen er satt til low
Resonneringsinnsats · medium
Standardpris Når resonneringsinnsatsen er satt til medium
Resonneringsinnsats · xhigh
Standardpris Når resonneringsinnsatsen er satt til xhigh

Ailoot-satser

Priser etter konfigurasjon

Knytt hver kostnad til de viste vilkårene. Bruk én sats for hvert sett med alternative konfigurasjoner.

KonfigurasjonPrisplanKonteksttokener, mer ennKonteksttokener, opptil og medKostnad
KonfigurasjonGrunnpriser for tokenerPrisplanGrunnsatsKonteksttokener, mer enn—Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 1 for forespørselslengdePrisplan—Konteksttokener, mer enn0Konteksttokener, opptil og med200 000Kostnad
Inndata · Inngående tokener $0.004 / 1K tokener
Utdata · Utgående tokener $0.012 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.001 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener
KonfigurasjonNivå 2 for forespørselslengdePrisplan—Konteksttokener, mer enn200 000Konteksttokener, opptil og medIngen øvre grenseKostnad
Inndata · Inngående tokener $0.008 / 1K tokener
Utdata · Utgående tokener $0.024 / 1K tokener
Inndata · Lesing fra hurtigbuffer $0.002 / 1K tokener
Inndata · Skriving til hurtigbuffer — / 1K tokener
Inndata · Skriving til hurtigbuffer, 1 time — / 1K tokener

Ailoot reserverer et estimert beløp før en forespørsel. Etter resultatet gjøres det endelige beløpet opp basert på målt forbruk. Oppgjør for strømming bruker den endelige forbruksposten. Slik fungerer reservasjon og oppgjør →

Eksempelforespørsler

Ailoot Ultra · Anthropic Messages

Komplett, minimal JSON-kroppcurl · bruk UTF-8-dokumentet dittPython · lagre hele resultatet
{
  "model": "~x-ai/grok-latest",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': '~x-ai/grok-latest', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': '~x-ai/grok-latest', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Motta og lagre resultater

Ailoot Ultra · Anthropic Messages

JSON eller SSE

Behold alle ferdige resultater

Behold alle fullstendige returnerte svar, filer og innholdsdeler.

Behold alle innholdsblokker, resonneringssignaturer og faktiske ID-er for verktøybruk. Sett sammen alle SSE-blokkendringer; den første tekstblokken er ikke hele resultatet.

Hvis det opprinnelige svaret må kontrolleres

Behold forespørsels-/svar-ID-er og headere. Ingen generell URL for henting av tekstjobber oppgis.

Svarfelter
FeltType
FeltidTypestring
FeltmodelTypestring
Feltcontent[]Typetext|thinking|tool_use|other content block
Feltstop_reasonTypestring|null
FeltusageTypeobject
Feil og neste trinn
SvarVilkårNeste trinn
Svar400 · invalid_request_errorVilkårUgyldige påkrevde felter, materialrepresentasjon eller parameterverdiNeste trinnKorriger de angitte feltene før en ny opprettelsesforespørsel.

Aliaser

Modellaliaser

Ailoot grok-4.7, grok, grok-4.7-latest, grok-latest
Ailoot Ultra grok-4.7, x-ai/grok-4.7, ~x-ai/grok-latest

Aliaser for metodestier

/chat/completions

Tilknyttede anroper-ID-er

x-ai/grok-4.7, grok, grok-4.7-latest, grok-latest, ~x-ai/grok-latest, grok-4.7, grok-4.7

FAQ · SpaceXAI: Grok 4.7
Hvilke inndata og resultater er tilgjengelige?

POST /v1/messages · grok-4.7: text, image → text

POST /v1/responses · grok-4.7: text, image → text

POST /v1/chat/completions · grok-4.7: text, image → text

POST /v1/chat/completions · grok-4.7: text → text

POST /v1/messages · grok-4.7: text → json, sse

POST /v1/messages · grok: text, image → text

POST /v1/responses · grok: text, image → text

POST /v1/chat/completions · grok: text, image → text

POST /v1/messages · grok-4.7-latest: text, image → text

POST /v1/responses · grok-4.7-latest: text, image → text

POST /v1/chat/completions · grok-4.7-latest: text, image → text

POST /v1/messages · grok-latest: text, image → text

POST /v1/responses · grok-latest: text, image → text

POST /v1/chat/completions · grok-latest: text, image → text

POST /v1/chat/completions · x-ai/grok-4.7: text → text

POST /v1/messages · x-ai/grok-4.7: text → json, sse

POST /v1/chat/completions · ~x-ai/grok-latest: text → text

POST /v1/messages · ~x-ai/grok-latest: text → json, sse

Hvilke felt bruker forespørselen?

POST /v1/messages · grok-4.7: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · grok-4.7: model, input, instructions, stream

POST /v1/chat/completions · grok-4.7: model, messages, stream

POST /v1/chat/completions · grok-4.7: model, messages, stream

POST /v1/messages · grok-4.7: model, messages, max_tokens, stream

POST /v1/messages · grok: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · grok: model, input, instructions, stream

POST /v1/chat/completions · grok: model, messages, stream

POST /v1/messages · grok-4.7-latest: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · grok-4.7-latest: model, input, instructions, stream

POST /v1/chat/completions · grok-4.7-latest: model, messages, stream

POST /v1/messages · grok-latest: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · grok-latest: model, input, instructions, stream

POST /v1/chat/completions · grok-latest: model, messages, stream

POST /v1/chat/completions · x-ai/grok-4.7: model, messages, stream, modalities, provider

POST /v1/messages · x-ai/grok-4.7: model, messages, max_tokens, stream

POST /v1/chat/completions · ~x-ai/grok-latest: model, messages, stream, modalities, provider

POST /v1/messages · ~x-ai/grok-latest: model, messages, max_tokens, stream

Hvilke grenser gjelder?

POST /v1/messages · grok-4.7: ctx: 500000; max_out: 500000; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · grok-4.7: ctx: 500000; max_out: 500000

POST /v1/chat/completions · grok-4.7: ctx: 500000; max_out: 500000; messages.min_items: 1

POST /v1/chat/completions · grok-4.7: messages.min_items: 1

POST /v1/messages · grok: ctx: 500000; max_out: 500000; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · grok: ctx: 500000; max_out: 500000

POST /v1/chat/completions · grok: ctx: 500000; max_out: 500000; messages.min_items: 1

POST /v1/messages · grok-4.7-latest: ctx: 500000; max_out: 500000; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · grok-4.7-latest: ctx: 500000; max_out: 500000

POST /v1/chat/completions · grok-4.7-latest: ctx: 500000; max_out: 500000; messages.min_items: 1

POST /v1/messages · grok-latest: ctx: 500000; max_out: 500000; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · grok-latest: ctx: 500000; max_out: 500000

POST /v1/chat/completions · grok-latest: ctx: 500000; max_out: 500000; messages.min_items: 1

POST /v1/chat/completions · x-ai/grok-4.7: messages.min_items: 1

POST /v1/chat/completions · ~x-ai/grok-latest: messages.min_items: 1

Flere detaljer

Koble Ailoot til Claude Code, OpenCode, Hermes eller egen applikasjon.

Selskapet og dets prosjektportefølje

Selskapet og dets prosjektportefølje: millioner av kunder; månedlig salg for milliarder.

Kjøp tokener med rabatt.

Abonnementsrabatt for jevnlig bruk. Kampanjekoder gir opptil 50% på tokenkjøp.

Abonnement
Velg et rabattabonnement for faste forespørsler.
Kampanjekode opptil 50%
Oppgi kode ved kjøp. Prisen beregnes på nytt etter gjeldende kampanje.
Kostnader i historikken
Modell, tokener og beløp lagres for hver forespørsel.

Velg abonnement · Se modellpriser

Koble API-et til produktet du selger.

SaaS, apper og boter etter Ailoots offentlige tilbud og lisensavtale. Be om forhandlerlisens for videresalg.

Kommersiell applikasjon
Bygg tekst-, bilde-, video- og lydgenerering inn i betalte funksjoner i tjenesten.
Forhandlerlisens
Send prosjektbeskrivelse og tilgangsopplegg. Be om skriftlige vilkår for bruk og videresalg.
Dokumenter på nettstedet
Offentlig tilbud, lisensavtale og retningslinjer for databehandling er tilgjengelige før tilkobling.

Be om forhandlerlisens · Offentlig tilbud og lisensavtale