mô hình

Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)

Markdown · JSON

Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)

Nano Banana 2 (Gemini 3.1 Flash Image Preview) tạo và chỉnh sửa hình ảnh từ văn bản cùng tài liệu tham chiếu trực quan. Những thế mạnh được tài liệu hóa gồm tính nhất quán của chủ thể, văn bản trong ảnh và bản địa hóa, thay đổi qua hội thoại cùng khả năng điều khiển sáng tạo về bố cục, tỷ lệ khung hình và độ phân giải.

Về mô hình

Mô tả này trình bày khả năng của mô hình. Đầu vào, đầu ra và tùy chọn có trên Ailoot được liệt kê bên dưới cho phương thức đã chọn.

Nano Banana 2 là mô hình Gemini 3.1 Flash Image của Google dành cho tạo ảnh và chỉnh sửa qua hội thoại. Mục này giữ đúng danh tính Preview. Mô tả bằng chữ có thể định nghĩa hình ảnh mới, còn ảnh đầu vào có thể xác lập chủ thể, diện mạo hoặc bố cục cần sửa. Kết quả có thể chứa ảnh và văn bản đi kèm. Tài liệu ra mắt của Google nhấn mạnh kiến thức về thế giới, khả năng hiển thị chữ và tính nhất quán của chủ thể, bên cạnh khả năng tinh chỉnh cảnh qua các lượt trao đổi liên quan.

Đối với sáng tạo hình ảnh có cơ sở nguồn, mô hình được tài liệu hóa có thể dùng thông tin từ tìm kiếm web và hình ảnh để hỗ trợ quá trình tạo. Điều này hỗ trợ các tác vụ như minh họa lấy cảm hứng từ địa điểm hoặc sơ đồ dựa trên thông tin được cung cấp. Xác định dữ kiện nguồn bắt buộc phải thể hiện và phân biệt chúng với lựa chọn nghệ thuật. Việc tạo ảnh có sử dụng tìm kiếm không khiến mọi chi tiết trong ảnh cuối cùng trở thành một khẳng định đã được xác minh. Nếu sản phẩm, địa danh hoặc sơ đồ cần chính xác, hãy cung cấp tài liệu tham chiếu có thẩm quyền và kiểm tra đầu ra theo tài liệu đó.

Thông báo ra mắt mô tả khả năng hiển thị văn bản trong ảnh và bản địa hóa được cải thiện. Với áp phích, đồ họa thông tin hoặc bản mô phỏng tiếp thị, cung cấp nguyên văn, ngôn ngữ và vai trò của từng thành phần chữ. Trước hết chốt nội dung chữ, sau đó yêu cầu ảnh chứa nội dung đó theo khuyến nghị của hướng dẫn hình ảnh. Giải thích thứ tự đọc và mức nhấn tương đối để không nhầm tiêu đề, chú thích và nhãn sơ đồ. Kiểm tra chính tả, dấu câu và mối liên hệ giữa nhãn với yếu tố được minh họa trước khi dùng ảnh trong ấn phẩm.

Các điều khiển sáng tạo gồm tỷ lệ khung hình và độ phân giải. Bản ra mắt bổ sung đầu ra 512 pixel bên cạnh các lựa chọn 1K, 2K và 4K, đồng thời thêm tỷ lệ 4:1, 1:4, 8:1 và 1:8. Hướng dẫn dành cho nhà phát triển xác định mức suy nghĩ minimal là mặc định và high là lựa chọn cho bố cục phức tạp hơn. Chọn mục đích sử dụng trước khi bố trí: story dọc, biểu ngữ rộng và sơ đồ gọn cần khoảng trống khác nhau cho chủ thể và chữ. Những thiết lập này mô tả quy trình tạo của nhà sản xuất cho dòng này, không phải tự động đổi kích thước một tài sản đã hoàn thiện.

Để giữ chủ thể nhất quán, gắn nhãn vai trò cho từng tham chiếu: diện mạo sản phẩm, danh tính nhân vật, nền hoặc phong cách thị giác. Nêu chi tiết cần giữ, sau đó chỉ rõ yếu tố cần thay đổi. Một tác vụ tự xây dựng có thể đặt ảnh sản phẩm được cung cấp vào cảnh mới trong khi giữ hình dạng, chất liệu và dấu hiệu thương hiệu nhìn thấy được. Với chuỗi minh họa, giữ cùng bộ tham chiếu và xác định chi tiết riêng của từng cảnh có thể thay đổi. Nhiều tham chiếu hơn không thay thế chỉ dẫn rõ ràng về đóng góp của từng ảnh.

Chỉnh sửa qua hội thoại hữu ích cho một thay đổi cụ thể. Yêu cầu điều chỉnh một đối tượng, nền hoặc ánh sáng trong khi giữ bố cục đã chấp nhận. Hướng dẫn của nhà sản xuất mô tả tạo mặt nạ ngữ nghĩa, trong đó vùng chỉnh sửa được xác định bằng lời. Với công việc nhiều lượt, giữ hội thoại và siêu dữ liệu ngữ cảnh suy luận cần thiết trong giao diện đã chọn; hướng dẫn Gemini 3 giải thích rằng thought signatures giúp chuyển tiếp ngữ cảnh đó. Mô tả vùng không thay đổi là chỉ dẫn cần kiểm tra theo bản gốc, không phải bảo đảm từng pixel giống hệt.

Bảng dành cho nhà phát triển Gemini 3 nêu rõ gemini-3.1-flash-image-preview với hạn mức đầu vào 128K và đầu ra 32K. Giữ nguyên tên mô hình Preview chính xác khi ghi lại một lần tạo. Các thiết lập tham chiếu, đầu ra và độ phân giải khả dụng cần được lưu cùng ảnh nguồn và yêu cầu để có thể tái tạo lần chỉnh sửa một cách nhất quán. Khi sửa, giữ cùng tài liệu tham chiếu nguồn và chỉ định chính xác thay đổi thị giác, bảo toàn vai trò đã chấp nhận của từng đầu vào.

Hướng dẫn hình ảnh cảnh báo rằng số lượng ảnh yêu cầu có thể không luôn được tuân thủ và xác định ảnh được tạo có dấu SynthID. Kiểm tra toàn bộ ảnh trả về cùng mọi văn bản đi kèm thay vì giả định kết quả là một bức ảnh cố định. Kiểm tra danh tính chủ thể, số lượng đối tượng, câu chữ trong ảnh, bố cục và độ trung thành với tham chiếu ở kích thước hiển thị dự kiến. Với cảnh phức tạp, chỉ định các thành phần theo thứ tự hợp lý và mô tả diện mạo mong muốn bằng cách khẳng định trực tiếp. Kết quả hữu ích là tài sản hình ảnh đã được kiểm tra, giữ lại tham chiếu nguồn và danh tính mô hình chính xác để chỉnh sửa tiếp.

Tác vụ thực tế

Tác vụ thực tế

Ví dụ kỹ thuật bằng tiếng Anh

Create a four-stage growing guide

Create a friendly flat illustration for a gardening guide showing four tomato-growing stages from left to right: seed in soil, small seedling, leafy plant, mature plant with red tomatoes. Use a warm cream background, consistent pots and simple green shapes. Keep each stage clearly separated. Include no text, numbers, labels or decorative extra plants.

Kết quả mong đợi

An image with four distinct growing stages in the specified order and a consistent illustration style.

Kiểm tra kết quả

Inspect the actual image for exactly four stages, the left-to-right progression and absence of text or extra plants.
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3.1-flash-image-preview

google/gemini-3.1-flash-image-preview

Google /google/gemini-3.1-flash-image-preview

Bắt đầu

Nano Banana 2 (Gemini 3.1 Flash Image Preview) tạo và chỉnh sửa hình ảnh từ văn bản cùng tài liệu tham chiếu trực quan. Những thế mạnh được tài liệu hóa gồm tính nhất quán của chủ thể, văn bản trong ảnh và bản địa hóa, thay đổi qua hội thoại cùng khả năng điều khiển sáng tạo về bố cục, tỷ lệ khung hình và độ phân giải.

Đầu vào được chấp nhận
Văn bản
Kết quả
Văn bản

Có trên Ailoot · đầu vào & phương thức

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Đầu vào
text
Đầu ra
text
Định dạng đầu ra
json hoặc SSE
TrườngLoạiYêu cầuGiá trị & giới hạnMặc định
TrườngmodelLoạistringYêu cầuBắt buộcGiá trị & giới hạn
google/gemini-3.1-flash-image-preview
Mặc định—
TrườngmessagesLoạimessage[]Yêu cầuBắt buộcGiá trị & giới hạn
Số mục tối thiểu: 1
Mặc định—
Trườngmessages[].roleLoạistringYêu cầuBắt buộcGiá trị & giới hạn
Ví dụ: system, user, assistant, tool, function
Điều kiện: Các vai trò này được biểu diễn rõ trong các kiểu tương thích của mã nguồn; tập vai trò chính xác vẫn tùy từng mô hình.
Tùy thuộc vào mô hình
Mặc định—
Trườngmessages[].contentLoạistring|content_part[]|nullYêu cầuKhông bắt buộcGiá trị & giới hạnMặc định—
Trườngmessages[].tool_callsLoạitool_call[]Yêu cầuKhông bắt buộcGiá trị & giới hạnMặc định—
Trườngmessages[].tool_call_idLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạn
Áp dụng khi: role=tool; dùng ID thực tế được trả về
Mặc định—
Trườngmessages[].nameLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạnMặc định—
Trườngmessages[].reasoning_contentLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạn
Áp dụng khi: Gửi lại dữ liệu suy luận thực tế đã được trả về khi mô hình này sử dụng dữ liệu đó
Mặc định—
Trườngmessages[].reasoning_detailsLoạiobject|arrayYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
Trườngmax_tokensLoạiintegerYêu cầuKhông bắt buộcGiá trị & giới hạn
Tối thiểu: 1
Tùy thuộc vào mô hình
Mặc định—
Trườngmax_completion_tokensLoạiintegerYêu cầuKhông bắt buộcGiá trị & giới hạn
Tối thiểu: 1
Tùy thuộc vào mô hình
Mặc định—
TrườngstreamLoạibooleanYêu cầuKhông bắt buộcGiá trị & giới hạnMặc địnhfalse
Trườngstream_options.include_usageLoạibooleanYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
TrườngtemperatureLoạinumberYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
Trườngtop_pLoạinumberYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
TrườngstopLoạistring|string[]Yêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
TrườngtoolsLoạifunction_tool[]Yêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
Trườngtools[].typeLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạn
function
Tùy thuộc vào mô hình
Mặc định—
Trườngtools[].function.nameLoạistringYêu cầuBắt buộcGiá trị & giới hạn
Áp dụng khi: Có cung cấp công cụ hàm
Mặc định—
Trườngtools[].function.descriptionLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạnMặc định—
Trườngtools[].function.parametersLoạiJSON_schemaYêu cầuKhông bắt buộcGiá trị & giới hạnMặc định—
Trườngtool_choiceLoạistring|objectYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
Trườngparallel_tool_callsLoạibooleanYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
Trườngresponse_formatLoạiobjectYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
Trườngreasoning_effortLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
TrườngreasoningLoạiobjectYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
Trườngservice_tierLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
TrườnginstructionsLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạn
Trường tương thích
Mặc định—
TrườngfunctionsLoạifunction[]Yêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
Trườngfunction_callLoạistring|objectYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
Trườngprompt_cache_optionsLoạiobjectYêu cầuKhông bắt buộcGiá trị & giới hạn
Tùy thuộc vào mô hình
Mặc định—
TrườngmodalitiesLoạistring[]Yêu cầuKhông bắt buộcGiá trị & giới hạn
text
Mặc định—
TrườngproviderLoạiobjectYêu cầuKhông bắt buộcGiá trị & giới hạn
Điều kiện: provider.options bị từ chối trên tuyến văn bản Ultra này
Mặc định—
Trườngcache_control.ttlLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạn
Điều kiện: 1h bị từ chối tại các vị trí lưu đệm prompt thực tế
Mặc định—
Tổ hợp tư liệu đầu vào

Văn bản · Văn bản UTF8

messages[].content

Tham số phương thức và vòng đời
Tham sốHợp đồng
Tham sốcontent_typeHợp đồngapplication/json
Tham sốrequiredHợp đồngmodel, messages
Tham sốmaterial_typesHợp đồngtext
Tham sốmessagesHợp đồngMảng thông điệp có cấu trúc role/content
Tham sốfile_materialHợp đồngTài liệu UTF-8 thực tế được chèn nguyên dạng văn bản; không suy ra ID tệp
Tham sốoptional_controlsHợp đồngstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Tham sốcontrol_scopeHợp đồngTùy từng mô hình; công cụ hàm của người dùng khác với công cụ do dịch vụ cung cấp
Tham sốoutput_modalitiesHợp đồngtext
Tham sốhosted_operationsHợp đồngfalse
Tham sốmultimodal_input_bindingHợp đồngnull

Vòng đời: synchronous_or_streamed

Gửi ID mô hình chính xác cùng messages.

Độ dài ngữ cảnh không phải giới hạn đầu ra.

Tệp văn bản có thể cung cấp nguyên văn nội dung; đầu vào hình ảnh, âm thanh hoặc đối tượng tệp cần có liên kết chính xác.

Bảng giá

Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.

Chế độ nhanh
Mức giá tiêu chuẩn Khi chọn chế độ nhanh
Chế độ Flex
Mức giá tiêu chuẩn Khi chọn chế độ flex
Mức độ suy luận tối đa
Mức giá tiêu chuẩn Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa
Mức độ suy luận · cao
Mức giá tiêu chuẩn Khi mức độ suy luận cao
Mức độ suy luận · tối thiểu
Mức giá tiêu chuẩn Khi mức độ suy luận tối thiểu
Giá lưu đệm tường minh
Chưa bật Khi yêu cầu lưu đệm tường minh

Mức phí Ailoot

Giá theo cấu hình

Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.

Cấu hìnhBiểu mức phíToken ngữ cảnh, lớn hơnToken ngữ cảnh, tối đa và bao gồmPhí
Cấu hìnhGiá cơ sở cho tokenBiểu mức phíMức phí cơ bảnToken ngữ cảnh, lớn hơn—Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trênPhí
Đầu vào · Token đầu vào $0.001 / 1K token
Đầu ra · Token đầu ra $0.006 / 1K token
Đầu vào · Đọc bộ nhớ đệm — / 1K token
Đầu vào · Ghi bộ nhớ đệm — / 1K token
Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token
Đầu ra · Token ảnh đầu ra $0.12 / 1K token hình ảnh
Cấu hìnhBậc 1 theo độ dài yêu cầuBiểu mức phí—Token ngữ cảnh, lớn hơn0Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trênPhí
Đầu vào · Token đầu vào $0.001 / 1K token
Đầu ra · Token đầu ra $0.006 / 1K token
Đầu vào · Đọc bộ nhớ đệm — / 1K token
Đầu vào · Ghi bộ nhớ đệm — / 1K token
Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token

Chi tiết giá cước tham chiếu

Biểu tham chiếu cấp mô hình không thay đổi việc chọn phương thức, báo giá hoặc khoản phí. Khoản phí đang áp dụng dùng mức phí phương thức Ailoot đã chọn.

google/gemini-3.1-flash-image-preview

Giá theo cấu hình

Cấu hìnhĐiều kiện tính phíPhí
Cấu hìnhgoogle/gemini-3.1-flash-image-preview · Cấu hình mặc địnhĐiều kiện tính phíCấu hình mặc địnhPhí
Đầu vào · Đầu vào 0,001 US$ / 1K token
Đầu ra · Đầu ra 0,12 US$ / 1K token
google/gemini-3.1-flash-image-preview

Giá theo cấu hình

Cấu hìnhĐiều kiện tính phíPhí
Cấu hìnhgoogle/gemini-3.1-flash-image-preview · Cấu hình mặc địnhĐiều kiện tính phíCấu hình mặc địnhPhí
Đầu vào · Đầu vào 0,001 US$ / 1K token
Đầu ra · Đầu ra 0,12 US$ / 1K token
google/gemini-3.1-flash-image-preview

Giá theo cấu hình

Cấu hìnhĐiều kiện tính phíPhí
Cấu hìnhgoogle/gemini-3.1-flash-image-preview · Cấu hình mặc địnhĐiều kiện tính phíCấu hình mặc địnhPhí
Đầu vào · Đầu vào 0,00 US$ mỗi lần gọi
Đầu ra · Đầu ra 0,16 US$ mỗi lần gọi
google/gemini-3.1-flash-image-preview

Giá theo cấu hình

Cấu hìnhĐiều kiện tính phíPhí
Cấu hìnhgoogle/gemini-3.1-flash-image-preview · Cấu hình mặc địnhĐiều kiện tính phíCấu hình mặc địnhPhí
Đầu vào · Đầu vào 0,00 US$ mỗi lần gọi
Đầu ra · Đầu ra 0,32 US$ mỗi lần gọi
google/gemini-3.1-flash-image-preview

Giá theo cấu hình

Cấu hìnhĐiều kiện tính phíPhí
Cấu hìnhgoogle/gemini-3.1-flash-image-preview · Cấu hình mặc địnhĐiều kiện tính phíCấu hình mặc địnhPhí
Đầu vào · Đầu vào 0,00 US$ mỗi lần gọi
Đầu ra · Đầu ra 0,00 US$ mỗi lần gọi
Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)

Giá theo cấu hình

Cấu hìnhĐiều kiện tính phíPhí
Cấu hìnhGoogle: Nano Banana 2 (Gemini 3.1 Flash Image Preview) · Cấu hình mặc địnhĐiều kiện tính phíCấu hình mặc địnhPhí
Đầu vào · Token đầu vào 0,001 US$ / 1K token
Đầu ra · Token đầu ra 0,006 US$ / 1K token
Đầu ra · Ảnh đầu ra 0,12 US$ / 1K token
Đầu ra · Tìm kiếm trên web 0,028 US$ mỗi lượt tìm kiếm

Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. Cách hoạt động của cơ chế tạm giữ và quyết toán →

Ví dụ yêu cầu

Ailoot Ultra · OpenAI Chat

curlPython SDKLuồng Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemini-3.1-flash-image-preview", "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='google/gemini-3.1-flash-image-preview',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='google/gemini-3.1-flash-image-preview',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")

Nhận và lưu kết quả

Ailoot Ultra · OpenAI Chat

json hoặc SSE

Lưu tất cả kết quả đã hoàn tất

Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.

Giữ mọi phương án trả lời cùng nội dung, lệnh gọi công cụ và dữ liệu suy luận của phương án đó. Với SSE, ghép các phần thay đổi theo chỉ số phương án và công cụ, giữ lý do kết thúc cuối cùng cùng dữ liệu sử dụng.

Nếu cần kiểm tra phản hồi gốc

Giữ ID và header của yêu cầu, phản hồi. Không cung cấp URL chung để truy xuất tác vụ văn bản.

Trường phản hồi
TrườngLoại
Trườngchoices[].indexLoạiinteger
Trườngchoices[].message.contentLoạistring|null
Trườngchoices[].message.tool_callsLoạitool_call[]
Trườngchoices[].message.reasoning_contentLoạistring
Trườngchoices[].message.reasoning_detailsLoạiobject|array
Trườngchoices[].finish_reasonLoạistring|null
TrườngusageLoạiobject
Lỗi và bước tiếp theo
Phản hồiĐiều kiệnBước tiếp theo
Phản hồi400 · invalid_request_errorĐiều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệBước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.

Bí danh

Bí danh mô hình

Ailoot Ultra google/gemini-3.1-flash-image-preview

Bí danh đường dẫn phương thức

/v1/images

ID gọi liên quan

google/gemini-3.1-flash-image-preview

Ailoot Ultra · Ảnh POST /v1/images/generations google/gemini-3.1-flash-image-preview

google/gemini-3.1-flash-image-preview

Google /google/gemini-3.1-flash-image-preview

Bắt đầu

Nano Banana 2 (Gemini 3.1 Flash Image Preview) tạo và chỉnh sửa hình ảnh từ văn bản cùng tài liệu tham chiếu trực quan. Những thế mạnh được tài liệu hóa gồm tính nhất quán của chủ thể, văn bản trong ảnh và bản địa hóa, thay đổi qua hội thoại cùng khả năng điều khiển sáng tạo về bố cục, tỷ lệ khung hình và độ phân giải.

Đầu vào được chấp nhận
Văn bản · Ảnh
Kết quả
Ảnh

Có trên Ailoot · đầu vào & phương thức

Ailoot Ultra · Ảnh POST /v1/images/generations
Đầu vào
text, image
Đầu ra
image
TrườngLoạiYêu cầuGiá trị & giới hạnMặc định
TrườngmodelLoạistringYêu cầuBắt buộcGiá trị & giới hạn
google/gemini-3.1-flash-image-preview
Mặc định—
TrườngpromptLoạistringYêu cầuBắt buộcGiá trị & giới hạn
Độ dài tối thiểu: 1
Mặc định—
TrườngresolutionLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạn
512, 1K, 2K, 4K
Mặc định—
Trườngaspect_ratioLoạistringYêu cầuKhông bắt buộcGiá trị & giới hạn
1:1, 1:4, 1:8, 2:3, 3:2, 3:4, 4:1, 4:3, 4:5, 5:4, 8:1, 9:16, 16:9, 21:9
Mặc định—
TrườngnLoạiintegerYêu cầuKhông bắt buộcGiá trị & giới hạn
Tối thiểu: 1
Tối đa: 1
Mặc định—
Trườnginput_referencesLoạiarrayYêu cầuKhông bắt buộcGiá trị & giới hạn
Số mục tối thiểu: 0
Số mục tối đa: 14
Mặc định—
TrườngproviderLoạiobjectYêu cầuKhông bắt buộcGiá trị & giới hạnMặc định—
Tham số phương thức và vòng đời
Tham sốHợp đồng
Tham sốcontent_typeHợp đồngapplication/json
Tham sốrequiredHợp đồngmodel, prompt
Tham sốmaterial_typesHợp đồngtext, image

Vòng đời: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · Giá trị task_id thực tế đã trả về hoặc bản ghi trong thư viện nội dung đa phương tiện

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Bảng giá

Cách tính phí cuối cùng

Các đơn giá hiển thị dùng để ước tính chi phí trước khi tạo. Khoản phí cuối cùng được tính dựa trên chi phí ghi nhận cho lượt tạo gốc. Thời lượng đầu ra đo được và số lượng dự kiến không phải là số lượng cuối cùng dùng để tính phí.

Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.

Chế độ nhanh
Chưa chỉ định Khi chọn chế độ nhanh
Chế độ Flex
Chưa chỉ định Khi chọn chế độ flex
Mức độ suy luận tối đa
Chưa chỉ định Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa

Mức phí ước tính để so sánh

Giá theo cấu hình

Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.

Cấu hìnhBiểu mức phíSố lượng dự báoPhí
Cấu hìnhGiá cơ sở cho tokenBiểu mức phíMức phí cơ bảnSố lượng dự báo—Phí
Đầu vào · Token đầu vào · Ước tính chỉ để so sánh — / 1K token
Đầu ra · Token đầu ra · Ước tính chỉ để so sánh — / 1K token
Đầu vào · Đọc bộ nhớ đệm · Ước tính chỉ để so sánh — / 1K token
Đầu vào · Ghi bộ nhớ đệm · Ước tính chỉ để so sánh — / 1K token
Đầu vào · Ghi bộ nhớ đệm, 1 giờ · Ước tính chỉ để so sánh — / 1K token
Cấu hìnhChi phí tạo ước tínhBiểu mức phí—Số lượng dự báoước tính cho một lần tạoPhí
Đầu ra · Chi phí tạo ước tính · Ước tính chỉ để so sánh $0.49152 ước tính trước khi tạo

Ước tính này không phải là khoản phí bổ sung hay mức giá cố định cho lượt tạo đã hoàn tất.

Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. Cách hoạt động của cơ chế tạm giữ và quyết toán →

Ví dụ yêu cầu

Ailoot Ultra · Ảnh

curl
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'google/gemini-3.1-flash-image-preview', 'prompt': 'a red panda astronaut floating in space, studio lighting'}

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/images/generations \
  -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, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT

Nhận và lưu kết quả

Ailoot Ultra · Ảnh

Tải xuống từng ảnh trả về hoặc lưu nội dung Base64 của ảnh

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Lượt đọc nội dung khác
Đọc tài nguyên hiện có thuộc về bạn
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
Lưu tất cả kết quả đã hoàn tất

Lưu mọi ảnh đã hoàn tất; truy xuất từng URL trả về hoặc giải mã nội dung Base64 của ảnh.

Giữ lại toàn bộ phản hồi và các header, mọi đầu ra thực tế, các định danh gốc đã trả về và mọi trường usage. Khôi phục thao tác gốc mà không gửi lại yêu cầu tạo.

Nếu cần kiểm tra phản hồi gốc

Giữ lại X-Client-Request-ID đã trả về để đối soát. Chỉ truy xuất theo các giá trị task_id/asset_id thực tế đã trả về hoặc từ thư viện nội dung đa phương tiện thuộc quyền sở hữu của bạn; tuyệt đối không tạo URL tác vụ từ ID thao tác và không gửi lại yêu cầu tạo.

Trường phản hồi
TrườngLoại
TrườngcreatedLoại
Trườngdata[].urlLoại
Trườngdata[].b64_jsonLoại
TrườngusageLoại

Bí danh

Bí danh mô hình

Ailoot Ultra google/gemini-3.1-flash-image-preview

Bí danh đường dẫn phương thức

/v1/images

ID gọi liên quan

google/gemini-3.1-flash-image-preview

Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3.1-flash-image-preview

google/gemini-3.1-flash-image-preview

Google /google/gemini-3.1-flash-image-preview

Bắt đầu

Nano Banana 2 (Gemini 3.1 Flash Image Preview) tạo và chỉnh sửa hình ảnh từ văn bản cùng tài liệu tham chiếu trực quan. Những thế mạnh được tài liệu hóa gồm tính nhất quán của chủ thể, văn bản trong ảnh và bản địa hóa, thay đổi qua hội thoại cùng khả năng điều khiển sáng tạo về bố cục, tỷ lệ khung hình và độ phân giải.

Đầu vào được chấp nhận
Văn bản
Kết quả
json · sse

Có trên Ailoot · đầu vào & phương thức

Ailoot Ultra · Anthropic Messages POST /v1/messages
Đầu vào
text
Đầu ra
json, sse
Định dạng đầu ra
JSON hoặc SSE
TrườngLoạiYêu cầuGiá trị & giới hạnMặc định
TrườngmodelLoạistringYêu cầuBắt buộcGiá trị & giới hạn
google/gemini-3.1-flash-image-preview
Mặc định—
TrườngmessagesLoạimessage[]Yêu cầuBắt buộcGiá trị & giới hạnMặc định—
Trườngmessages[].roleLoạistringYêu cầuBắt buộcGiá trị & giới hạn
user, assistant
Mặc định—
Trườngmessages[].contentLoạistringYêu cầuBắt buộcGiá trị & giới hạnMặc định—
Trườngmax_tokensLoạiintegerYêu cầuBắt buộcGiá trị & giới hạnMặc định—
TrườngstreamLoạibooleanYêu cầuKhông bắt buộcGiá trị & giới hạnMặc địnhfalse
Tổ hợp tư liệu đầu vào

Văn bản · Văn bản UTF-8

Chuỗi messages[].content

Tham số phương thức và vòng đời
Tham sốHợp đồng
Tham sốcontent_typeHợp đồngapplication/json
Tham sốrequiredHợp đồngmodel, messages, max_tokens
Tham sốoptional_controlsHợp đồngstream
Tham sốmaterial_typesHợp đồngtext
Tham sốtext_file_materialHợp đồngĐọc tài liệu UTF-8 thực tế và đặt nội dung văn bản vào chuỗi đầu vào hoặc nội dung thông điệp được chỉ định.

Vòng đời: synchronous_or_streamed

Bảng giá

Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.

Chế độ nhanh
Mức giá tiêu chuẩn Khi chọn chế độ nhanh
Chế độ Flex
Mức giá tiêu chuẩn Khi chọn chế độ flex
Mức độ suy luận tối đa
Mức giá tiêu chuẩn Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa
Mức độ suy luận · cao
Mức giá tiêu chuẩn Khi mức độ suy luận cao
Mức độ suy luận · tối thiểu
Mức giá tiêu chuẩn Khi mức độ suy luận tối thiểu
Giá lưu đệm tường minh
Chưa bật Khi yêu cầu lưu đệm tường minh

Mức phí Ailoot

Giá theo cấu hình

Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.

Cấu hìnhBiểu mức phíToken ngữ cảnh, lớn hơnToken ngữ cảnh, tối đa và bao gồmPhí
Cấu hìnhGiá cơ sở cho tokenBiểu mức phíMức phí cơ bảnToken ngữ cảnh, lớn hơn—Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trênPhí
Đầu vào · Token đầu vào $0.001 / 1K token
Đầu ra · Token đầu ra $0.006 / 1K token
Đầu vào · Đọc bộ nhớ đệm — / 1K token
Đầu vào · Ghi bộ nhớ đệm — / 1K token
Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token
Đầu ra · Token ảnh đầu ra $0.12 / 1K token hình ảnh
Cấu hìnhBậc 1 theo độ dài yêu cầuBiểu mức phí—Token ngữ cảnh, lớn hơn0Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trênPhí
Đầu vào · Token đầu vào $0.001 / 1K token
Đầu ra · Token đầu ra $0.006 / 1K token
Đầu vào · Đọc bộ nhớ đệm — / 1K token
Đầu vào · Ghi bộ nhớ đệm — / 1K token
Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token

Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. Cách hoạt động của cơ chế tạm giữ và quyết toán →

Ví dụ yêu cầu

Ailoot Ultra · Anthropic Messages

Nội dung yêu cầu JSON tối thiểu, đầy đủcurl · dùng tài liệu UTF-8 của bạnPython · lưu kết quả đầy đủ
{
  "model": "google/gemini-3.1-flash-image-preview",
  "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': 'google/gemini-3.1-flash-image-preview', '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': 'google/gemini-3.1-flash-image-preview', '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))

Nhận và lưu kết quả

Ailoot Ultra · Anthropic Messages

JSON hoặc SSE

Lưu tất cả kết quả đã hoàn tất

Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.

Giữ mọi khối nội dung, chữ ký suy nghĩ và ID sử dụng công cụ thực tế. Ghép tất cả các phần thay đổi của khối SSE; khối văn bản đầu tiên không phải toàn bộ đầu ra.

Nếu cần kiểm tra phản hồi gốc

Giữ ID và header của yêu cầu, phản hồi. Không cung cấp URL chung để truy xuất tác vụ văn bản.

Trường phản hồi
TrườngLoại
TrườngidLoạistring
TrườngmodelLoạistring
Trườngcontent[]Loạitext|thinking|tool_use|other content block
Trườngstop_reasonLoạistring|null
TrườngusageLoạiobject
Lỗi và bước tiếp theo
Phản hồiĐiều kiệnBước tiếp theo
Phản hồi400 · invalid_request_errorĐiều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệBước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới.

Bí danh

Bí danh mô hình

Ailoot Ultra google/gemini-3.1-flash-image-preview

Bí danh đường dẫn phương thức

/v1/images

ID gọi liên quan

google/gemini-3.1-flash-image-preview

FAQ · Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)
Có những đầu vào và kết quả nào?

POST /v1/chat/completions · google/gemini-3.1-flash-image-preview: text → text

POST /v1/images/generations · google/gemini-3.1-flash-image-preview: text, image → image

POST /v1/messages · google/gemini-3.1-flash-image-preview: text → json, sse

Yêu cầu sử dụng những trường nào?

POST /v1/chat/completions · google/gemini-3.1-flash-image-preview: model, messages, stream, modalities, provider

POST /v1/images/generations · google/gemini-3.1-flash-image-preview: model, prompt, resolution, aspect_ratio, n, input_references, provider

POST /v1/messages · google/gemini-3.1-flash-image-preview: model, messages, max_tokens, stream

Áp dụng những giới hạn nào?

POST /v1/chat/completions · google/gemini-3.1-flash-image-preview: messages.min_items: 1

POST /v1/images/generations · google/gemini-3.1-flash-image-preview: n.minimum: 1; n.maximum: 1

Xem thêm chi tiết

Kết nối Ailoot với Claude Code, OpenCode, Hermes hoặc ứng dụng của bạn.

Công ty và danh mục dự án của công ty

Công ty và danh mục dự án của công ty: hàng triệu khách hàng; doanh số hàng tỷ mỗi tháng.

Mua token với giá ưu đãi.

Ưu đãi thuê bao cho nhu cầu thường xuyên. Mã khuyến mãi giảm đến 50% khi mua token.

Thuê bao
Chọn gói ưu đãi cho các yêu cầu thường xuyên của bạn.
Mã giảm đến 50%
Nhập mã khi mua. Giá được tính lại theo chương trình đang áp dụng.
Chi phí trong lịch sử
Mô hình, token và số tiền được lưu cho mỗi yêu cầu.

Chọn gói thuê bao · Xem giá mô hình

Kết nối API vào sản phẩm bạn đang bán.

SaaS, ứng dụng và bot — theo đề nghị giao kết chính thức và thỏa thuận cấp phép Ailoot. Muốn bán lại, hãy yêu cầu giấy phép bán lại.

Ứng dụng thương mại
Tích hợp tạo văn bản, ảnh, video và âm thanh vào các tính năng trả phí của dịch vụ.
Giấy phép bán lại
Gửi mô tả dự án và cách cung cấp quyền truy cập. Yêu cầu điều khoản sử dụng và bán lại bằng văn bản.
Tài liệu trên website
Đề nghị giao kết, thỏa thuận cấp phép và chính sách xử lý dữ liệu có sẵn trước khi kết nối.

Yêu cầu giấy phép bán lại · Đề nghị giao kết và thỏa thuận cấp phép