返回 DeepSeek-Reasonix
provider_protocol_endpoints.json
根目录 / internal / config / provider_protocol_endpoints.json
1 {
2 "amd|cn|api": {
3 "openai": {
4 "baseUrl": "https://developer.amd.com.cn/radeon/api/v1",
5 "source": "https://amd-aim.github.io/radeon-cloud-docs/quickstart/",
6 "checkedOn": "2026-09-07"
7 }
8 },
9 "anthropic|global|api": {
10 "anthropic": {
11 "baseUrl": "https://api.anthropic.com",
12 "source": "https://platform.claude.com/docs/en/api/messages/create",
13 "checkedOn": "2026-09-07"
14 }
15 },
16 "baidu|cn|api": {
17 "openai": {
18 "baseUrl": "https://qianfan.baidubce.com/v2",
19 "source": "https://cloud.baidu.com/doc/qianfan/s/Smoghsq3g",
20 "checkedOn": "2026-09-07"
21 },
22 "anthropic": {
23 "baseUrl": "https://qianfan.baidubce.com/anthropic",
24 "source": "https://cloud.baidu.com/doc/qianfan/s/Smoghsq3g",
25 "checkedOn": "2026-09-07",
26 "authHeader": true
27 }
28 },
29 "cerebras|global|api": {
30 "openai": {
31 "baseUrl": "https://api.cerebras.ai/v1",
32 "source": "https://inference-docs.cerebras.ai/resources/openai",
33 "checkedOn": "2026-09-07"
34 }
35 },
36 "deepseek|global|api": {
37 "anthropic": {
38 "baseUrl": "https://api.deepseek.com/anthropic",
39 "source": "https://api-docs.deepseek.com/guides/anthropic_api",
40 "checkedOn": "2026-09-08"
41 },
42 "openai": {
43 "baseUrl": "https://api.deepseek.com/v1",
44 "source": "https://api-docs.deepseek.com/",
45 "checkedOn": "2026-09-07"
46 },
47 "responses": {
48 "baseUrl": "https://api.deepseek.com",
49 "source": "https://api-docs.deepseek.com/",
50 "checkedOn": "2026-09-07",
51 "responsesMode": "stateless"
52 }
53 },
54 "doubao|cn|api": {
55 "openai": {
56 "baseUrl": "https://ark.cn-beijing.volces.com/api/v3",
57 "source": "https://www.volcengine.com/docs/82379/1795150",
58 "checkedOn": "2026-09-07"
59 },
60 "responses": {
61 "baseUrl": "https://ark.cn-beijing.volces.com/api/v3",
62 "source": "https://www.volcengine.com/docs/82379/1795150",
63 "checkedOn": "2026-09-07"
64 }
65 },
66 "fireworks|global|api": {
67 "anthropic": {
68 "baseUrl": "https://api.fireworks.ai/inference",
69 "source": "https://docs.fireworks.ai/getting-started/quickstart",
70 "checkedOn": "2026-09-07"
71 },
72 "openai": {
73 "baseUrl": "https://api.fireworks.ai/inference/v1",
74 "source": "https://docs.fireworks.ai/getting-started/quickstart",
75 "checkedOn": "2026-09-07"
76 },
77 "responses": {
78 "baseUrl": "https://api.fireworks.ai/inference/v1",
79 "source": "https://docs.fireworks.ai/guides/response-api",
80 "checkedOn": "2026-09-07"
81 }
82 },
83 "gemini|global|api": {
84 "openai": {
85 "baseUrl": "https://generativelanguage.googleapis.com/v1beta/openai",
86 "source": "https://ai.google.dev/gemini-api/docs/openai",
87 "checkedOn": "2026-09-07"
88 }
89 },
90 "zai|cn|coding": {
91 "openai": {
92 "baseUrl": "https://open.bigmodel.cn/api/coding/paas/v4",
93 "source": "https://docs.bigmodel.cn/cn/coding-plan/quick-start",
94 "checkedOn": "2026-09-07"
95 },
96 "anthropic": {
97 "baseUrl": "https://open.bigmodel.cn/api/anthropic",
98 "source": "https://docs.bigmodel.cn/cn/coding-plan/quick-start",
99 "checkedOn": "2026-09-07"
100 }
101 },
102 "gmi|global|api": {
103 "openai": {
104 "baseUrl": "https://api.gmi-serving.com/v1",
105 "source": "https://docs.gmicloud.ai/inference-engine/api-reference/llm-api-reference",
106 "checkedOn": "2026-09-07"
107 }
108 },
109 "groq|global|api": {
110 "openai": {
111 "baseUrl": "https://api.groq.com/openai/v1",
112 "source": "https://console.groq.com/docs/responses-api",
113 "checkedOn": "2026-09-07"
114 },
115 "responses": {
116 "baseUrl": "https://api.groq.com/openai/v1",
117 "source": "https://console.groq.com/docs/responses-api",
118 "checkedOn": "2026-09-07"
119 }
120 },
121 "huggingface|global|api": {
122 "openai": {
123 "baseUrl": "https://router.huggingface.co/v1",
124 "source": "https://huggingface.co/docs/inference-providers/en/guides/responses-api",
125 "checkedOn": "2026-09-07"
126 },
127 "responses": {
128 "baseUrl": "https://router.huggingface.co/v1",
129 "source": "https://huggingface.co/docs/inference-providers/en/guides/responses-api",
130 "checkedOn": "2026-09-07"
131 }
132 },
133 "kilocode|global|api": {
134 "openai": {
135 "baseUrl": "https://api.kilo.ai/api/gateway",
136 "source": "https://kilo.ai/docs/gateway/api-reference",
137 "checkedOn": "2026-09-07"
138 }
139 },
140 "kimi|global|coding": {
141 "anthropic": {
142 "baseUrl": "https://api.kimi.com/coding/",
143 "source": "https://www.kimi.com/code/docs/en/",
144 "checkedOn": "2026-09-07"
145 },
146 "openai": {
147 "baseUrl": "https://api.kimi.com/coding/v1",
148 "source": "https://www.kimi.com/code/docs/en/",
149 "checkedOn": "2026-09-07"
150 }
151 },
152 "lmstudio|local|local": {
153 "openai": {
154 "baseUrl": "http://localhost:1234/v1",
155 "source": "https://lmstudio.ai/docs/developer/openai-compat",
156 "checkedOn": "2026-09-07"
157 },
158 "anthropic": {
159 "baseUrl": "http://localhost:1234",
160 "source": "https://lmstudio.ai/docs/developer/anthropic-compat",
161 "checkedOn": "2026-09-07",
162 "authHeader": true
163 },
164 "responses": {
165 "baseUrl": "http://localhost:1234/v1",
166 "source": "https://lmstudio.ai/docs/developer/openai-compat",
167 "checkedOn": "2026-09-07"
168 }
169 },
170 "longcat|global|api": {
171 "anthropic": {
172 "baseUrl": "https://api.longcat.chat/anthropic",
173 "source": "https://longcat.chat/platform/docs/APIDocs.html",
174 "checkedOn": "2026-09-07"
175 },
176 "openai": {
177 "baseUrl": "https://api.longcat.chat/openai/v1",
178 "source": "https://longcat.chat/platform/docs/APIDocs.html",
179 "checkedOn": "2026-09-07"
180 }
181 },
182 "minimax|cn|api": {
183 "anthropic": {
184 "baseUrl": "https://api.minimaxi.com/anthropic",
185 "source": "https://platform.minimaxi.com/docs/guides/text-generation",
186 "checkedOn": "2026-09-07"
187 },
188 "openai": {
189 "baseUrl": "https://api.minimaxi.com/v1",
190 "source": "https://platform.minimaxi.com/docs/guides/text-generation",
191 "checkedOn": "2026-09-07"
192 }
193 },
194 "modelscope|global|api": {
195 "openai": {
196 "baseUrl": "https://api-inference.modelscope.cn/v1",
197 "source": "https://modelscope.cn/models/Qwen/Qwen3.5-397B-A17B",
198 "checkedOn": "2026-09-07"
199 }
200 },
201 "ollama|local|local": {
202 "openai": {
203 "baseUrl": "http://localhost:11434/v1",
204 "source": "https://docs.ollama.com/api/openai-compatibility",
205 "checkedOn": "2026-09-07"
206 },
207 "anthropic": {
208 "baseUrl": "http://localhost:11434",
209 "source": "https://docs.ollama.com/api/anthropic-compatibility",
210 "checkedOn": "2026-09-07",
211 "authHeader": true
212 },
213 "responses": {
214 "baseUrl": "http://localhost:11434/v1",
215 "source": "https://docs.ollama.com/api/openai-compatibility",
216 "checkedOn": "2026-09-07",
217 "responsesMode": "stateless"
218 }
219 },
220 "openai|global|api": {
221 "openai": {
222 "baseUrl": "https://api.openai.com/v1",
223 "source": "https://platform.openai.com/docs/api-reference/responses",
224 "checkedOn": "2026-09-07"
225 },
226 "responses": {
227 "baseUrl": "https://api.openai.com/v1",
228 "source": "https://platform.openai.com/docs/api-reference/responses",
229 "checkedOn": "2026-09-07"
230 }
231 },
232 "opencode|global|go": {
233 "openai": {
234 "baseUrl": "https://opencode.ai/zen/go/v1",
235 "source": "https://opencode.ai/docs/go/",
236 "checkedOn": "2026-09-07"
237 },
238 "anthropic": {
239 "baseUrl": "https://opencode.ai/zen/go",
240 "source": "https://opencode.ai/docs/go/",
241 "checkedOn": "2026-09-07"
242 },
243 "responses": {
244 "baseUrl": "https://opencode.ai/zen/go/v1",
245 "source": "https://opencode.ai/docs/go/",
246 "checkedOn": "2026-09-07"
247 }
248 },
249 "opencode|global|zen": {
250 "anthropic": {
251 "baseUrl": "https://opencode.ai/zen",
252 "source": "https://opencode.ai/docs/zen/",
253 "checkedOn": "2026-09-07"
254 },
255 "openai": {
256 "baseUrl": "https://opencode.ai/zen/v1",
257 "source": "https://opencode.ai/docs/zen/",
258 "checkedOn": "2026-09-07"
259 },
260 "responses": {
261 "baseUrl": "https://opencode.ai/zen/v1",
262 "source": "https://opencode.ai/docs/zen/",
263 "checkedOn": "2026-09-07"
264 }
265 },
266 "openrouter|global|api": {
267 "openai": {
268 "baseUrl": "https://openrouter.ai/api/v1",
269 "source": "https://openrouter.ai/docs/api/api-reference/responses/create-responses",
270 "checkedOn": "2026-09-07"
271 },
272 "anthropic": {
273 "baseUrl": "https://openrouter.ai/api",
274 "source": "https://openrouter.ai/docs/api/api-reference/anthropic-messages/create-messages",
275 "checkedOn": "2026-09-07",
276 "authHeader": true
277 },
278 "responses": {
279 "baseUrl": "https://openrouter.ai/api/v1",
280 "source": "https://openrouter.ai/docs/api/api-reference/responses/create-responses",
281 "checkedOn": "2026-09-07"
282 }
283 },
284 "ppio|cn|api": {
285 "openai": {
286 "baseUrl": "https://api.ppio.com/openai",
287 "source": "https://ppio.com/docs/third-party/OpenAI-Agents-SDK",
288 "checkedOn": "2026-09-07"
289 },
290 "anthropic": {
291 "baseUrl": "https://api.ppio.com/anthropic",
292 "source": "https://resource.ppio.com/docs/model/llm-anthropic-compatibility",
293 "checkedOn": "2026-09-07",
294 "authHeader": true
295 }
296 },
297 "qiniu|cn|api": {
298 "openai": {
299 "baseUrl": "https://api.qnaigc.com/v1",
300 "source": "https://developer.qiniu.com/aitokenapi/13379/real-time-ai-interface-api",
301 "checkedOn": "2026-09-07"
302 },
303 "anthropic": {
304 "baseUrl": "https://api.qnaigc.com",
305 "source": "https://developer.qiniu.com/aitokenapi/13379/real-time-ai-interface-api",
306 "checkedOn": "2026-09-07",
307 "authHeader": true
308 }
309 },
310 "qwen|cn|coding": {
311 "openai": {
312 "baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
313 "source": "https://help.aliyun.com/zh/model-studio/coding-plan-faq",
314 "checkedOn": "2026-09-07"
315 },
316 "anthropic": {
317 "baseUrl": "https://coding.dashscope.aliyuncs.com/apps/anthropic",
318 "source": "https://help.aliyun.com/zh/model-studio/coding-plan-faq",
319 "checkedOn": "2026-09-07"
320 }
321 },
322 "qwen|global|coding": {
323 "openai": {
324 "baseUrl": "https://coding-intl.dashscope.aliyuncs.com/v1",
325 "source": "https://help.aliyun.com/zh/model-studio/coding-plan-faq",
326 "checkedOn": "2026-09-07"
327 },
328 "anthropic": {
329 "baseUrl": "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic",
330 "source": "https://help.aliyun.com/zh/model-studio/coding-plan-faq",
331 "checkedOn": "2026-09-07"
332 }
333 },
334 "scnet|global|token": {
335 "openai": {
336 "baseUrl": "https://api.scnet.cn/api/llm/v1",
337 "source": "https://www2.scnet.cn/ac/openapi/doc/2.0/moduleapi/tutorial/quickstart.html",
338 "checkedOn": "2026-09-07"
339 },
340 "anthropic": {
341 "baseUrl": "https://api.scnet.cn/api/llm/anthropic",
342 "source": "https://www2.scnet.cn/ac/openapi/doc/2.0/moduleapi/tutorial/quickstart.html",
343 "checkedOn": "2026-09-07"
344 }
345 },
346 "siliconflow|cn|api": {
347 "openai": {
348 "baseUrl": "https://api.siliconflow.cn/v1",
349 "source": "https://docs.siliconflow.cn/docs/api/chat-completions-post",
350 "checkedOn": "2026-09-07"
351 },
352 "anthropic": {
353 "baseUrl": "https://api.siliconflow.cn",
354 "source": "https://docs.siliconflow.cn/cn/api-reference/chat-completions/messages",
355 "checkedOn": "2026-09-07",
356 "authHeader": true
357 }
358 },
359 "stepfun|global|coding": {
360 "openai": {
361 "baseUrl": "https://api.stepfun.com/step_plan/v1",
362 "source": "https://platform.stepfun.com/docs/zh/step-plan/quick-start",
363 "checkedOn": "2026-09-07"
364 },
365 "anthropic": {
366 "baseUrl": "https://api.stepfun.com/step_plan",
367 "source": "https://platform.stepfun.com/docs/zh/step-plan/quick-start",
368 "checkedOn": "2026-09-07"
369 }
370 },
371 "together|global|api": {
372 "openai": {
373 "baseUrl": "https://api.together.ai/v1",
374 "source": "https://docs.together.ai/docs/inference/openai-compatibility",
375 "checkedOn": "2026-09-07"
376 }
377 },
378 "token-rhythm|global|api": {
379 "openai": {
380 "baseUrl": "https://tokenrhythm.studio/v1",
381 "source": "https://tokenrhythm.studio/docs/api-integration",
382 "checkedOn": "2026-09-07"
383 },
384 "anthropic": {
385 "baseUrl": "https://tokenrhythm.studio",
386 "source": "https://tokenrhythm.studio/docs/api-integration",
387 "checkedOn": "2026-09-07",
388 "authHeader": true
389 }
390 },
391 "vercel-ai-gateway|global|api": {
392 "anthropic": {
393 "baseUrl": "https://ai-gateway.vercel.sh",
394 "source": "https://vercel.com/docs/ai-gateway/sdks-and-apis",
395 "checkedOn": "2026-09-07"
396 },
397 "openai": {
398 "baseUrl": "https://ai-gateway.vercel.sh/v1",
399 "source": "https://vercel.com/docs/ai-gateway/sdks-and-apis",
400 "checkedOn": "2026-09-07"
401 },
402 "responses": {
403 "baseUrl": "https://ai-gateway.vercel.sh/v1",
404 "source": "https://vercel.com/docs/ai-gateway/sdks-and-apis",
405 "checkedOn": "2026-09-07"
406 }
407 },
408 "xai|global|api": {
409 "openai": {
410 "baseUrl": "https://api.x.ai/v1",
411 "source": "https://docs.x.ai/developers/model-capabilities/text/comparison",
412 "checkedOn": "2026-09-07"
413 },
414 "responses": {
415 "baseUrl": "https://api.x.ai/v1",
416 "source": "https://docs.x.ai/developers/model-capabilities/text/comparison",
417 "checkedOn": "2026-09-07"
418 }
419 },
420 "zai|cn|api": {
421 "anthropic": {
422 "baseUrl": "https://open.bigmodel.cn/api/anthropic",
423 "source": "https://docs.bigmodel.cn/cn/guide/develop/claude/introduction",
424 "checkedOn": "2026-09-07"
425 },
426 "openai": {
427 "baseUrl": "https://open.bigmodel.cn/api/paas/v4",
428 "source": "https://docs.bigmodel.cn/cn/guide/develop/claude/introduction",
429 "checkedOn": "2026-09-07"
430 }
431 },
432 "zai|global|api": {
433 "openai": {
434 "baseUrl": "https://api.z.ai/api/paas/v4",
435 "source": "https://docs.z.ai/guides/overview/quick-start",
436 "checkedOn": "2026-09-07"
437 }
438 },
439 "zai|global|coding": {
440 "openai": {
441 "baseUrl": "https://api.z.ai/api/coding/paas/v4",
442 "source": "https://docs.z.ai/devpack/tool/others",
443 "checkedOn": "2026-09-07"
444 },
445 "anthropic": {
446 "baseUrl": "https://api.z.ai/api/anthropic",
447 "source": "https://docs.z.ai/devpack/tool/others",
448 "checkedOn": "2026-09-07"
449 }
450 },
451 "mimo|global|api": {
452 "responses": {
453 "baseUrl": "https://api.xiaomimimo.com/v1",
454 "source": "https://mimo.mi.com/docs/en-US/api/chat/responses",
455 "checkedOn": "2026-09-07",
456 "responsesMode": "stateless"
457 },
458 "openai": {
459 "baseUrl": "https://api.xiaomimimo.com/v1",
460 "source": "https://mimo.mi.com/docs/en-US/tokenplan/integration/tools-overview",
461 "checkedOn": "2026-09-07"
462 },
463 "anthropic": {
464 "baseUrl": "https://api.xiaomimimo.com/anthropic",
465 "source": "https://mimo.mi.com/docs/en-US/tokenplan/integration/tools-overview",
466 "checkedOn": "2026-09-07"
467 }
468 },
469 "mimo|cn|token": {
470 "responses": {
471 "baseUrl": "https://token-plan-cn.xiaomimimo.com/v1",
472 "source": "https://mimo.mi.com/docs/en-US/tokenplan/integration/codex-configuration",
473 "checkedOn": "2026-09-07",
474 "responsesMode": "stateless"
475 },
476 "openai": {
477 "baseUrl": "https://token-plan-cn.xiaomimimo.com/v1",
478 "source": "https://mimo.mi.com/docs/en-US/tokenplan/Token%20Plan/quick-access",
479 "checkedOn": "2026-09-07"
480 },
481 "anthropic": {
482 "baseUrl": "https://token-plan-cn.xiaomimimo.com/anthropic",
483 "source": "https://mimo.mi.com/docs/en-US/tokenplan/Token%20Plan/quick-access",
484 "checkedOn": "2026-09-07"
485 }
486 },
487 "novita|global|api": {
488 "anthropic": {
489 "baseUrl": "https://api.novita.ai/anthropic",
490 "source": "https://novita.ai/docs/guides/llm-anthropic-compatibility",
491 "checkedOn": "2026-09-07"
492 },
493 "openai": {
494 "baseUrl": "https://api.novita.ai/openai/v1",
495 "source": "https://novita.ai/docs/api-reference/model-apis-llm-create-chat-completion",
496 "checkedOn": "2026-09-07"
497 }
498 },
499 "qwen|cn|api": {
500 "responses": {
501 "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
502 "source": "https://help.aliyun.com/zh/model-studio/compatibility-with-openai-responses-api",
503 "checkedOn": "2026-09-07"
504 },
505 "anthropic": {
506 "baseUrl": "https://dashscope.aliyuncs.com/apps/anthropic",
507 "source": "https://help.aliyun.com/zh/model-studio/claude-code",
508 "checkedOn": "2026-09-07",
509 "authHeader": true
510 },
511 "openai": {
512 "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
513 "source": "https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope",
514 "checkedOn": "2026-09-07"
515 }
516 },
517 "qwen|global|api": {
518 "responses": {
519 "baseUrl": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
520 "source": "https://help.aliyun.com/zh/model-studio/compatibility-with-openai-responses-api",
521 "checkedOn": "2026-09-07"
522 },
523 "openai": {
524 "baseUrl": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
525 "source": "https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope",
526 "checkedOn": "2026-09-07"
527 }
528 },
529 "mimo|sgp|token": {
530 "openai": {
531 "baseUrl": "https://token-plan-sgp.xiaomimimo.com/v1",
532 "source": "https://mimo.mi.com/docs/en-US/tokenplan/Token%20Plan/quick-access",
533 "checkedOn": "2026-09-07"
534 },
535 "anthropic": {
536 "baseUrl": "https://token-plan-sgp.xiaomimimo.com/anthropic",
537 "source": "https://mimo.mi.com/docs/en-US/tokenplan/Token%20Plan/quick-access",
538 "checkedOn": "2026-09-07"
539 }
540 },
541 "mimo|ams|token": {
542 "openai": {
543 "baseUrl": "https://token-plan-ams.xiaomimimo.com/v1",
544 "source": "https://mimo.mi.com/docs/en-US/tokenplan/Token%20Plan/quick-access",
545 "checkedOn": "2026-09-07"
546 },
547 "anthropic": {
548 "baseUrl": "https://token-plan-ams.xiaomimimo.com/anthropic",
549 "source": "https://mimo.mi.com/docs/en-US/tokenplan/Token%20Plan/quick-access",
550 "checkedOn": "2026-09-07"
551 }
552 },
553 "minimax|global|api": {
554 "openai": {
555 "baseUrl": "https://api.minimax.io/v1",
556 "source": "https://platform.minimax.io/docs/api-reference/text-openai-api",
557 "checkedOn": "2026-09-07"
558 },
559 "anthropic": {
560 "baseUrl": "https://api.minimax.io/anthropic",
561 "source": "https://platform.minimax.io/docs/api-reference/text-anthropic-api",
562 "checkedOn": "2026-09-07"
563 }
564 },
565 "kimi|cn|api": {
566 "openai": {
567 "baseUrl": "https://api.moonshot.cn/v1",
568 "source": "https://www.kimi.com/code/docs/en/",
569 "checkedOn": "2026-09-07"
570 }
571 },
572 "kimi|global|api": {
573 "openai": {
574 "baseUrl": "https://api.moonshot.ai/v1",
575 "source": "https://platform.kimi.ai/docs/api/overview",
576 "checkedOn": "2026-09-07"
577 }
578 },
579 "ollama|global|api": {
580 "openai": {
581 "baseUrl": "https://ollama.com/v1",
582 "source": "https://docs.ollama.com/integrations/droid",
583 "checkedOn": "2026-09-07"
584 }
585 },
586 "stepfun|global|api": {
587 "openai": {
588 "baseUrl": "https://api.stepfun.com/v1",
589 "source": "https://platform.stepfun.com/docs/zh/api-reference/chat/chat-completion-create",
590 "checkedOn": "2026-09-07"
591 },
592 "anthropic": {
593 "baseUrl": "https://api.stepfun.com",
594 "source": "https://platform.stepfun.com/docs/zh/api-reference/chat/messages-create",
595 "checkedOn": "2026-09-07"
596 }
597 },
598 "nvidia|global|api": {
599 "openai": {
600 "baseUrl": "https://integrate.api.nvidia.com/v1",
601 "source": "https://docs.api.nvidia.com/nim/reference/meta-llama2-70b-infer",
602 "checkedOn": "2026-09-07"
603 }
604 },
605 "mistral|global|api": {
606 "openai": {
607 "baseUrl": "https://api.mistral.ai/v1",
608 "source": "https://docs.mistral.ai/api/endpoint/chat",
609 "checkedOn": "2026-09-07"
610 }
611 }
612 }
613
613 lines JSON