HiAPI
  • Models
  • Pricing
Search

Search HiAPI models, tools, and resources.

  • Models
  • Pricing
HiAPI

One API, All AI Models

Generate images, video, and audio with leading models through one production-ready API.

Get a free API key

AI Image API

  • All image models
  • GPT Image 2
  • Nano Banana 2
  • Seedream 5.0 Pro
  • Qwen Image 2.0 Pro
  • FLUX 1.1 Pro

AI Video API

  • All video models
  • Seedance 2.5
  • FLUX.3 Video
  • Seedance 2.0
  • Veo 3.1
  • Kling 3.0 Omni

AI Audio API

  • All audio models
  • MiniMax Music 2.6
  • MiniMax Music 1.5
  • ElevenLabs v3
  • Text to music
  • Text to speech

Product

  • Model marketplace
  • Playground
  • Pricing
  • Image API Cost Calculator
  • Free GPT Image 2 Generator
  • Free Background Remover
  • Free Nano Banana Image Generator
  • Outfit Preview
  • Product Photo Lab

Developers

  • Documentation
  • API Reference
  • Agent Skills
  • LLM integration index
  • Blog

Company

  • About
  • Contact support
  • Terms of Service
  • Privacy Policy

© 2026 hiapi. All rights reserved.

Open source on GitHubPython SDK on PyPI
  • Prerequisites
  • Minimal working example
  • curl
  • Python
  • Using the OpenAI SDK instead
  • Production patterns
  • Requests are stateless — replay the full conversation
  • Reasoning effort
  • Streaming
  • Error handling
  • Related docs
  • FAQ
TutorialSep 9, 2026

How to Use deepseek-v4.1-flash via the hiapi API: curl, Python, and a Working Request

hiapideepseekapi-guidetutorial

Latest models

Explore models

Contents
  • Prerequisites
  • Minimal working example
  • curl
  • Python
  • Using the OpenAI SDK instead
  • Production patterns
  • Requests are stateless — replay the full conversation
  • Reasoning effort
  • Streaming
  • Error handling
  • Related docs
  • FAQ

Generate it with HiAPI

Choose a model, enter your prompt, and see the result.

HiAPI Blog

Related articles

HiAPI

Generate it with HiAPI

deepseek-v4.1-flash is a fast, low-cost reasoning model available through the hiapi unified API. It's currently labeled Preview on the model page, which means the underlying build can rotate while the public model ID (deepseek-v4.1-flash) stays stable — you don't need to change any code when that happens. This guide shows a request that actually works: correct endpoint, correct fields, correct auth header.

Prerequisites

  • A hiapi API key (sk-...). Grab one from your hiapi dashboard, then export it:
export HIAPI_API_KEY="sk-your-key-here"
  • Any HTTP client works. Examples below use curl and Python's requests, plus a note on using the official OpenAI SDK.

Minimal working example

hiapi exposes two text endpoints. /v1/responses is the canonical, recommended endpoint (OpenAI Responses API shape, semantic SSE events). /v1/chat/completions is the legacy-compatible endpoint (OpenAI Chat Completions shape) — use it only if you're porting an existing Chat Completions integration. This guide uses /v1/responses.

curl

curl https://api.hiapi.ai/v1/responses \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "input": [
      {"role": "user", "content": "Explain what a hash map is in two sentences."}
    ]
  }'

A successful response returns an output array containing the model's reply plus a usage block:

{
  "id": "resp_...",
  "model": "deepseek-v4.1-flash-expires-on-0910",
  "status": "completed",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [
        {"type": "output_text", "text": "A hash map stores key-value pairs..."}
      ]
    }
  ],
  "usage": {
    "input_tokens": 14,
    "output_tokens": 42,
    "total_tokens": 56,
    "output_tokens_details": {"reasoning_tokens": 0}
  }
}

Notice the model field in the response is tagged deepseek-v4.1-flash-expires-on-0910 — that's the pinned internal build serving this Preview model. This is expected behavior for Preview models on hiapi, not a sign the model is about to disappear; keep requesting the bare deepseek-v4.1-flash ID and hiapi routes you to the current build automatically.

Python

import os
import requests

resp = requests.post(
    "https://api.hiapi.ai/v1/responses",
    headers={
        "Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "deepseek-v4.1-flash",
        "input": [
            {"role": "user", "content": "Explain what a hash map is in two sentences."}
        ],
    },
    timeout=60,
)
resp.raise_for_status()
data = resp.json()
print(data["output"][0]["content"][0]["text"])
print(data["usage"])

Using the OpenAI SDK instead

hiapi's /v1/responses and /v1/chat/completions are compatible with the official OpenAI SDKs — just point the base URL at hiapi and keep the model ID bare:

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["HIAPI_API_KEY"],
    base_url="https://api.hiapi.ai/v1",
)
resp = client.responses.create(
    model="deepseek-v4.1-flash",
    input=[{"role": "user", "content": "Explain what a hash map is in two sentences."}],
)
print(resp.output[0].content[0].text)

Production patterns

Requests are stateless — replay the full conversation

hiapi does not keep server-side conversation state for this model. Every request must include the full message history in input. Do not send store, previous_response_id, conversation, background, or context_management — these are not supported and will be ignored or rejected. For a multi-turn chat, append each new user/assistant turn to the input array yourself and send the whole array each time.

history = [{"role": "user", "content": "What's a hash map?"}]
# ... call, get a reply, then append it and the next question ...
history.append({"role": "assistant", "content": "<model's previous reply>"})
history.append({"role": "user", "content": "How is that different from a hash set?"})

Reasoning effort

deepseek-v4.1-flash accepts a reasoning object to control how much internal reasoning it does before answering. The effort enum for this model is none | high | max — note this is not the low/medium/high scale used by some other reasoning models on hiapi, so don't assume it carries over.

{
  "model": "deepseek-v4.1-flash",
  "input": [{"role": "user", "content": "Prove that the square root of 2 is irrational."}],
  "reasoning": {"effort": "high"}
}

Reasoning tokens are billed as output tokens and reported separately in usage.output_tokens_details.reasoning_tokens, so a high/max effort request can cost noticeably more than none even for the same visible answer length. Check current per-token rates on the pricing page before setting a default effort level for production traffic.

Streaming

Pass "stream": true to get Server-Sent Events instead of a single JSON blob. /v1/responses streams semantic events, not raw text deltas wrapped in a Chat-Completions-style [DONE] marker. The event sequence for a normal completion is:

response.created
response.in_progress
response.output_item.added
response.content_part.added
response.output_text.delta   (repeated, one per chunk of text)
response.output_text.done
response.content_part.done
response.output_item.done
response.completed

Handle response.completed as your success terminal event. Also handle response.incomplete (e.g. hit a token/length limit) and response.failed (server-side error) as terminal states — don't assume every stream ends in response.completed.

import json
import requests

with requests.post(
    "https://api.hiapi.ai/v1/responses",
    headers={
        "Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "deepseek-v4.1-flash",
        "input": [{"role": "user", "content": "Count to 5."}],
        "stream": True,
    },
    stream=True,
    timeout=60,
) as r:
    for line in r.iter_lines():
        if not line or not line.startswith(b"data: "):
            continue
        event = json.loads(line[len(b"data: "):])
        if event.get("type") == "response.output_text.delta":
            print(event["delta"], end="", flush=True)
        elif event.get("type") in ("response.completed", "response.incomplete", "response.failed"):
            break

Error handling

An invalid or missing API key returns HTTP 401 with a structured error body:

{"error": {"code": "permission_denied", "message": "..."}}

Check resp.status_code and branch on error.code rather than parsing the message string, since messages can change wording without notice.

Related docs

  • deepseek-v4.1-flash model page
  • /v1/responses reference
  • /v1/chat/completions reference
  • Authentication
  • Pricing

FAQ

Is deepseek-v4.1-flash production-ready, or just for testing? It's labeled Preview, which on hiapi means the model is live and fully callable, but the underlying build can rotate on hiapi's schedule. The public model ID doesn't change when that happens — your code keeps working without edits. If you need a non-Preview commitment, check the model list for a non-Preview DeepSeek v4 variant.

Why does the response show a different model name than what I requested? You'll see something like deepseek-v4.1-flash-expires-on-0910 in the model field of the response. That's the specific pinned build currently serving your request under the deepseek-v4.1-flash ID — expected for Preview models, not an error.

Can I use /v1/chat/completions instead of /v1/responses? Yes, hiapi supports both for this model. /v1/chat/completions uses the OpenAI Chat Completions request/response shape (messages array, choices[0].message.content) instead of /v1/responses's input/output shape. Pick whichever matches your existing integration; new integrations should default to /v1/responses.

Does hiapi store my conversation history so I can just send the latest message? No. There's no previous_response_id or server-side conversation state for this model — send the complete message history in input on every request.

What does reasoning.effort: "none" actually skip? It skips the model's internal reasoning pass entirely, answering directly. Use "high" or "max" for tasks that benefit from multi-step reasoning (math, multi-constraint logic); expect higher output-token usage and latency as effort increases.

Do I need a separate API key for streaming vs. non-streaming requests? No — the same Authorization: Bearer sk-... key works for both. Streaming is controlled purely by the "stream": true field in the request body.

Latest models

View all models
  • GPT Image 2From $0.030/image
  • Nano Banana 2From $0.051/image
  • Seedream 5.0 ProFrom $0.050/image
  • Seedance 2.5From $0.231/s

Explore models

TextImageVideoAudio
Back to blog
GPT Image 2From $0.030/image
Nano Banana 2From $0.051/image
Seedream 5.0 ProFrom $0.050/image
Seedance 2.5From $0.231/s
View all models
TextChat and reasoning
ImageGenerate and edit
VideoText and image to video
AudioSpeech and music
Start generating
View model pricing
View all articles
GPT Image 2.5 API: Generate, Edit, and Migrate

GPT Image 2.5 API: Generate, Edit, and Migrate

How to Use deepseek-v4-flash-vision-exp via the hiapi API: curl, Python, and a Working Request

How to Use deepseek-v4-flash-vision-exp via the hiapi API: curl, Python, and a Working Request

How to Increase Image Resolution with hiapi's API: a 4K Upscaling Workflow

How to Increase Image Resolution with hiapi's API: a 4K Upscaling Workflow

How to Use gpt-6-astra via the hiapi API: curl, Python, and a Working Request

How to Use gpt-6-astra via the hiapi API: curl, Python, and a Working Request

Recraft Remove Background API: A Working Example

Recraft Remove Background API: A Working Example

How to use 851-labs/background-remover via the hiapi API: curl, Python, and a working request

How to use 851-labs/background-remover via the hiapi API: curl, Python, and a working request

Start generating