declare
    l_url varchar2(400);
    l_request clob;
    l_response clob;
    e_api_call_failed exception;
begin
    l_url := 'https://us-central1-aiplatform.googleapis.com/v1beta1/projects/my-gemini-project/locations/us-central1/publishers/google/models/gemini-pro:streamGenerateContent';
    l_request := q'~{
  "contents": {
    "role": "user",
    "parts": {
        "text": "Give me a recipe for banana bread."
    },
  },
  "safety_settings": {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_LOW_AND_ABOVE"
  },
  "generation_config": {
    "temperature": 0.2,
    "topP": 0.8,
    "topK": 40,
    "maxOutputTokens": 200,
    "stopSequences": [".", "?", "!"]
  }
}~';
    -- dbms_output.put_line(l_request);
    apex_web_service.clear_request_headers();
    apex_web_service.set_request_headers('Content-Type','application/json',p_reset => false);
    l_response := apex_web_service.make_rest_request(
        p_url => l_url
        ,p_http_method => 'POST'
        ,p_body => l_request
        ,p_credential_static_id => 'GOOGLE_GEMINI_API_TOKEN'
    );
    if apex_web_service.g_status_code <> 200 then
        dbms_output.put_line('Status = ' || apex_web_service.g_status_code);
        dbms_output.put_line(l_response);
        -- raise e_api_call_failed;
    end if;
    dbms_output.put_line(l_response);
end;