File size: 12,573 Bytes
3f7d600
d634c97
3f7d600
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d634c97
 
3f7d600
 
 
 
 
 
 
d634c97
3f7d600
 
d634c97
3f7d600
 
 
 
 
 
 
 
 
d634c97
 
3f7d600
 
 
 
 
 
 
 
 
d634c97
3f7d600
 
 
 
 
 
 
 
 
d634c97
3f7d600
 
 
 
 
d634c97
3f7d600
d634c97
3f7d600
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d634c97
 
3f7d600
 
d634c97
 
3f7d600
d634c97
 
 
 
 
 
 
3f7d600
 
d634c97
3f7d600
d634c97
 
 
3f7d600
d634c97
 
 
 
 
 
 
 
 
 
3f7d600
 
d634c97
3f7d600
d634c97
 
 
 
3f7d600
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d634c97
3f7d600
 
 
 
 
293b884
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>API Recipes β€” Modelflare</title>
  <meta name="description" content="Copy-paste Modelflare API recipes: chat, streaming, models, Responses, Anthropic, images, video." />
  <style>
    :root {
      --bg:#0b1020; --card:#121a2f; --text:#e8ecf7; --muted:#9aa6c2;
      --accent:#8b5cf6; --accent2:#ec4899; --border:rgba(255,255,255,.08); --ok:#34d399; --warn:#fbbf24;
    }
    *{box-sizing:border-box}
    body{
      margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;
      background:radial-gradient(1200px 600px at 10% -10%,#2a1850 0%,transparent 50%),
                 radial-gradient(900px 500px at 100% 0%,#3b0f2e 0%,transparent 45%),var(--bg);
      color:var(--text);min-height:100vh;line-height:1.55;
    }
    .wrap{max-width:880px;margin:0 auto;padding:40px 18px 64px}
    .lang{display:flex;gap:8px;margin-bottom:16px}
    .lang button{background:transparent;border:1px solid var(--border);color:var(--muted);border-radius:999px;padding:6px 12px;cursor:pointer}
    .lang button.on{color:#fff;border-color:rgba(139,92,246,.5);background:rgba(139,92,246,.2)}
    .badge{display:inline-flex;gap:8px;align-items:center;padding:6px 12px;border-radius:999px;background:rgba(139,92,246,.15);border:1px solid rgba(139,92,246,.35);color:#d6c7ff;font-size:13px;margin-bottom:18px}
    h1{font-size:clamp(28px,5vw,40px);line-height:1.15;margin:0 0 12px}
    .lead{color:var(--muted);font-size:17px;margin:0 0 24px;max-width:680px}
    .cta{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:28px}
    a.btn{display:inline-flex;align-items:center;padding:12px 16px;border-radius:12px;text-decoration:none;font-weight:600}
    a.primary{background:linear-gradient(135deg,var(--accent),var(--accent2));color:#fff}
    a.ghost{border:1px solid var(--border);color:var(--text)}
    .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-bottom:28px}
    .card{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:18px}
    .card h3{margin:0 0 8px;font-size:16px}
    .card p{margin:0;color:var(--muted);font-size:14px}
    h2{font-size:18px;margin:28px 0 10px}
    h3.sec{font-size:15px;margin:18px 0 8px;color:#d6c7ff}
    ol,ul{color:var(--muted);padding-left:1.2em}
    ol li,ul li{margin:6px 0}
    pre{background:#070b16;border:1px solid var(--border);border-radius:14px;padding:14px 16px;overflow:auto;font-size:12.5px;color:#d7def0;position:relative}
    .copy{position:absolute;top:8px;right:8px;font-size:11px;border:1px solid var(--border);background:#121a2f;color:var(--muted);border-radius:8px;padding:4px 8px;cursor:pointer}
    .foot{margin-top:24px;color:var(--muted);font-size:13px}
    .note{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:14px 16px;color:var(--muted);font-size:14px;margin-top:16px}
    .note strong{color:var(--ok)}
    .tip{border-left:3px solid var(--warn);padding-left:12px;margin:12px 0;color:var(--muted);font-size:14px}
    table{width:100%;border-collapse:collapse;font-size:13px;margin:12px 0 20px}
    th,td{border:1px solid var(--border);padding:10px 12px;text-align:left;vertical-align:top}
    th{background:rgba(139,92,246,.12);color:#d6c7ff;font-weight:600}
    td{color:var(--muted)}
    code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
    .hidden{display:none}
    a{color:#c4b5fd}

  </style>
</head>
<body>
  <div class="wrap">

    <section id="en">
      <div class="badge">API Recipes</div>
      <h1>Modelflare API recipes (copy-paste)</h1>
      <p class="lead">Chat / streaming / list models / Responses / Anthropic / images / video. Auth: <code>Authorization: Bearer YOUR_MODELFLARE_API_KEY</code>. When fields vary by model, follow the linked docs pages.</p>
      <div class="cta">
        <a class="btn primary" href="https://modelflare.dev/?utm_source=huggingface&utm_medium=space&utm_campaign=api_recipes" target="_blank" rel="noopener">Open Console β†’</a>
        <a class="btn ghost" href="https://docs.modelflare.dev/guides/endpoints/?utm_source=huggingface&utm_medium=space&utm_campaign=api_recipes" target="_blank" rel="noopener">Endpoint picker</a>
        <a class="btn ghost" href="https://huggingface.co/spaces/Modelflare/coding-agents" target="_blank" rel="noopener">Coding Agents</a>
        <a class="btn ghost" href="https://huggingface.co/spaces/Modelflare/openai-sdk" target="_blank" rel="noopener">OpenAI SDK</a>
        <a class="btn ghost" href="https://huggingface.co/spaces/Modelflare/blog" target="_blank" rel="noopener">Blog</a>
        <a class="btn ghost" href="https://huggingface.co/datasets/Modelflare/api-examples" target="_blank" rel="noopener">Examples dataset</a>
      </div>
      <div class="tip">Sample model IDs such as <code>gpt-5.6-sol</code> must be enabled on your key’s group. Live catalog = console.</div>

      <h2>Endpoint picker</h2>
      <table>
        <thead><tr><th>Family</th><th>Entry</th><th>Use for</th></tr></thead>
        <tbody>
          <tr><td>Chat Completions</td><td><code>POST /v1/chat/completions</code></td><td>OpenAI-compatible chat</td></tr>
          <tr><td>Responses</td><td><code>POST /v1/responses</code></td><td>Codex, Grok Build</td></tr>
          <tr><td>Anthropic Messages</td><td><code>ANTHROPIC_BASE_URL=https://modelflare.dev</code></td><td>Claude Code (CLI appends path)</td></tr>
          <tr><td>Images</td><td><code>POST /v1/images/generations</code></td><td>GPT Images / Wan / Seedream</td></tr>
          <tr><td>Gemini native</td><td><code>POST /v1/models/{model}:generateContent</code></td><td>Gemini image models (Gemini CLI builds the same path under <code>/v1beta</code>, served only on <code>modelflare.dev</code>)</td></tr>
          <tr><td>Video</td><td><code>POST /v1/videos</code> β†’ poll <code>GET /v1/videos/{task_id}</code> β†’ <code>GET /v1/videos/{task_id}/content</code></td><td>Async video tasks</td></tr>
          <tr><td>Models</td><td><code>GET /v1/models</code></td><td>Models the current key can call</td></tr>
        </tbody>
      </table>
      <p class="foot">Full table: <a href="https://docs.modelflare.dev/guides/endpoints/?utm_source=huggingface&utm_medium=space&utm_campaign=api_recipes" target="_blank" rel="noopener">docs β†’ endpoints</a></p>

      <h2>1) Chat Completions β€” curl</h2>
      <pre><button class="copy" type="button">Copy</button><code>curl https://modelflare.dev/v1/chat/completions \
  -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-sol","messages":[{"role":"user","content":"ping"}]}'</code></pre>

      <h2>2) Chat Completions β€” Python</h2>
      <pre><button class="copy" type="button">Copy</button><code>from openai import OpenAI

client = OpenAI(
    api_key="YOUR_MODELFLARE_API_KEY",
    base_url="https://modelflare.dev/v1",
)
r = client.chat.completions.create(
    model="gpt-5.6-sol",
    messages=[{"role": "user", "content": "Hello from Hugging Face"}],
)
print(r.choices[0].message.content)</code></pre>

      <h2>3) Streaming chat</h2>
      <p class="tip">The docs do not include a streaming example; this follows the OpenAI SDK <code>stream=True</code> pattern. Once content has been sent, the gateway does not replay a stream on another route.</p>
      <pre><button class="copy" type="button">Copy</button><code>stream = client.chat.completions.create(
    model="gpt-5.6-sol",
    messages=[{"role": "user", "content": "Say hi in one line"}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="", flush=True)</code></pre>

      <h2>4) List models</h2>
      <pre><button class="copy" type="button">Copy</button><code>curl https://modelflare.dev/v1/models \
  -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY"</code></pre>

      <h2>5) Responses API (for Codex) β€” curl stub</h2>
      <p class="tip">For full Codex install and <code>wire_api=responses</code>, follow the docs. This is a minimal request sketch only.</p>
      <pre><button class="copy" type="button">Copy</button><code>curl https://modelflare.dev/v1/responses \
  -H "Authorization: Bearer YOUR_MODELFLARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-sol","input":"Reply with one sentence confirming the model."}'</code></pre>
      <p class="foot"><a href="https://docs.modelflare.dev/guides/clients/codex/?utm_source=huggingface&utm_medium=space&utm_campaign=api_recipes" target="_blank" rel="noopener">Full Codex guide β†’</a></p>

      <h2>6) Anthropic Messages</h2>
      <p class="tip">The docs document Anthropic Messages through Claude Code: set <code>ANTHROPIC_BASE_URL=https://modelflare.dev</code> (no <code>/v1</code>); the CLI appends the Messages path itself. Raw HTTP headers are not documented, so no curl sketch is shown.</p>
      <p class="foot"><a href="https://docs.modelflare.dev/guides/clients/claude-code/?utm_source=huggingface&utm_medium=space&utm_campaign=api_recipes" target="_blank" rel="noopener">Full Claude Code guide β†’</a></p>

      <h2>7) Images</h2>
      <p class="tip">Documented <code>gpt-image-2</code> example. Fields vary by model; use a Smart API Key or a <code>media</code> group key.</p>
      <pre><button class="copy" type="button">Copy</button><code>curl https://modelflare.dev/v1/images/generations \
  -H &quot;Authorization: Bearer YOUR_MODELFLARE_API_KEY&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &#x27;{
    &quot;model&quot;: &quot;gpt-image-2&quot;,
    &quot;prompt&quot;: &quot;A white cat runs through a neon-lit street in the rain&quot;,
    &quot;size&quot;: &quot;1024x1024&quot;, &quot;n&quot;: 1
  }&#x27;</code></pre>
      <p class="foot"><a href="https://docs.modelflare.dev/models/image/?utm_source=huggingface&utm_medium=space&utm_campaign=api_recipes" target="_blank" rel="noopener">Image models docs β†’</a></p>

      <h2>8) Video: create, poll, download</h2>
      <ol>
        <li><code>POST /v1/videos</code> creates an async task and returns <code>id</code> (compatibility responses may use <code>task_id</code>). The body is family-specific; this is the documented Seedance example.</li>
        <li>Poll <code>GET /v1/videos/{task_id}</code> while <code>status</code> is <code>queued</code> or <code>in_progress</code>; stop at <code>completed</code> or <code>failed</code>.</li>
        <li>Download <code>GET /v1/videos/{task_id}/content</code>; result URLs can expire, so store the file promptly.</li>
      </ol>
      <pre><button class="copy" type="button">Copy</button><code>curl https://modelflare.dev/v1/videos \
  -H &quot;Authorization: Bearer YOUR_MODELFLARE_API_KEY&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &#x27;{
    &quot;model&quot;: &quot;seedance-2.5&quot;,
    &quot;content&quot;: [{&quot;type&quot;: &quot;text&quot;, &quot;text&quot;: &quot;A cat walks through a sunlit room&quot;}],
    &quot;resolution&quot;: &quot;720p&quot;,
    &quot;duration&quot;: 5,
    &quot;ratio&quot;: &quot;16:9&quot;
  }&#x27;

curl https://modelflare.dev/v1/videos/TASK_ID \
  -H &quot;Authorization: Bearer YOUR_MODELFLARE_API_KEY&quot;

curl --fail --location \
  https://modelflare.dev/v1/videos/TASK_ID/content \
  -H &quot;Authorization: Bearer YOUR_MODELFLARE_API_KEY&quot; \
  --output seedance-result.mp4</code></pre>
      <p class="foot"><a href="https://docs.modelflare.dev/models/video/?utm_source=huggingface&utm_medium=space&utm_campaign=api_recipes" target="_blank" rel="noopener">Video models docs β†’</a></p>

      <div class="note">
        <strong>Coming from Hub?</strong>
        <a href="https://huggingface.co/spaces/Modelflare/start">start</a> Β·
        <a href="https://huggingface.co/spaces/Modelflare/coding-agents">coding-agents</a> Β·
        <a href="https://huggingface.co/collections/Modelflare/modelflare-getting-started">Getting Started</a>.
        Gradio Chat needs HF PRO (upcoming); use console + API for now.
      </div>
    </section>
  </div>

  <script>
    document.querySelectorAll('pre .copy').forEach(btn=>{
      btn.addEventListener('click',async()=>{
        const code=btn.parentElement.querySelector('code').innerText;
        try{await navigator.clipboard.writeText(code);const t=btn.textContent;btn.textContent='Copied';setTimeout(()=>btn.textContent=t,1200)}catch(_){}
      });
    });
  </script>

</body>
</html>