Making Your First API Call (A Stateless Request)
Now, let's dive into the core logic inside our Gemini.ts file. To communicate with Gemini, as indicated in the official Google documentation, we need to send a POST request to a specific endpoint.
The process is broken down into four fundamental steps:
- Assemble the Request URL: This URL tells Google's servers which AI model to use and authenticates our request with the API key.
- Prepare the Payload: The 'payload' is the data we send. For Gemini, this must be a specifically structured JSON object that contains the user's prompt.
- Execute the request using JavaScript's Fetch API.
- Parse the JSON response to extract the text generated by Gemini.
Let's translate these steps into a clean, reusable async function called ask:
const modelGemini = "gemini-2.5-flash"
export async function ask (obj :{key: string, question: string, runtime: IRuntime}):Promise<string> {
const {key, question, runtime} = {...obj};
const url = `https://generativelanguage.googleapis.com/v1/models/${modelGemini}:generateContent?key=${key}`;
// const url = `https://generativelanguage.googleapis.com/v1beta/models/${modelGemini}:generateContent?key=${key}`;
const payload = {
contents: [{
parts: [{
text: question
}]
}]
};
try {
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
if (!response.ok) {
throw new Error(`Server error: ${response.status}`);
}
const data = await response.json();
const answer = data.candidates[0].content.parts[0].text;
return answer;
} catch (error) {
console.error("Error details: ", error);
return `An error occurred. (${(error as Error).message})`;
}
}