फ़ाइलें API और PDFs
OpenAI-संगत GetVibe API Files API और PDF इनपुट: chat/completions, responses और messages पर base64, लिंक या file_id; कौन-से मॉडल PDF के अंदर की तस्वीरें देख सकते हैं, सीमाएँ और त्रुटियाँ।
फ़ाइलें upload, पढ़ने और delete करने के लिए OpenAI-compatible Files API। हर operation के लिए API key आवश्यक है; कोई फ़ाइल केवल उसी client account के लिए सुलभ है जिसने उसे upload किया।
फ़ाइल upload करें
आवश्यक file और purpose फ़ील्ड के साथ multipart/form-data भेजें। अनुमत purposes: assistants, batch, fine-tune, vision और user_data। अधिकतम फ़ाइल size 50 MiB (52 428 800 bytes) है; इससे ज़्यादा होने पर 413 मिलता है।
curl -X POST https://getvibeapi.com/v1/files \
-H "Authorization: Bearer $GETVIBE_API_KEY" \
-F "purpose=user_data" \
-F "file=@./report.pdf"Metadata, content पाएँ या delete करें
Upload एक file object return करता है जिसमें opaque id, name, size, purpose और creation time होते हैं। /content के बिना GET यही metadata return करता है; GET /content raw bytes download करता है। सफल DELETE के बाद दोनों GET 404 return करते हैं। किसी दूसरे account की existing file 403 return करती है, और unknown identifier 404।
सुरक्षित कार्यप्रवाह
- फ़ाइल upload करें और सिर्फ़ returned
file_idरखें। - उसी key से metadata verify करें; Responses के साथ काम करते समय यह id
input_file.file_idमें pass करें। - secrets upload न करें और काम पूरा होने के बाद फ़ाइल delete कर दें। delete की गई फ़ाइल restore नहीं हो सकती।
मॉडल अनुरोधों में PDF
हर पाठ मॉडल तीनों API प्रारूपों में PDF स्वीकार करता है। संक्षेप में: नीचे दिए गए तीन तरीकों में से किसी से भी फ़ाइल भेजें — डिफ़ॉल्ट रूप से हम उसका पाठ मुफ़्त में निकालकर मॉडल को भेजते हैं। मॉडल पाठ और तालिकाएँ पढ़ता है, लेकिन PDF के अंदर की तस्वीरें या स्कैन नहीं। जब तस्वीरें, लेआउट या स्कैन मायने रखते हों, तो नीचे दी गई तालिका से कोई मॉडल चुनें और पाठ निष्कर्षण बंद करें। इस पृष्ठ की हर बात को 2 नवंबर, 2026 को पाठ, एक तालिका और एक तस्वीर वाले तीन-पृष्ठीय PDF के साथ लाइव अनुरोध करके सत्यापित किया गया था।
PDF भेजने के तीन तरीके
| Method | कैसे | इसे कब इस्तेमाल करें |
|---|---|---|
| अनुरोध में base64 | Chat: {"type":"file","file":{"filename":"report.pdf","file_data":"data:application/pdf;base64,…"}}; Responses: {"type":"input_file","filename":"report.pdf","file_data":"data:…"}; Messages: {"type":"document","source":{"type":"base64","media_type":"application/pdf","data":"…"}} | एक बार इस्तेमाल किया जाने वाला दस्तावेज़। तीनों एंडपॉइंट पर काम करता है। 20 MiB तक की फ़ाइलें। |
| सार्वजनिक लिंक | Chat: "file":{"file_url":"https://…"}; Responses: {"type":"input_file","file_url":"https://…"}; Messages: "source":{"type":"url","url":"https://…"} | फ़ाइल पहले से ऑनलाइन है। हम इसे स्वयं डाउनलोड करते हैं: केवल HTTPS, कोई लॉगिन या पासवर्ड नहीं, सर्वर को application/pdf के साथ उत्तर देना चाहिए, अधिकतम 20 MiB, 10 सेकंड के भीतर और अधिकतम 3 पुनर्निर्देशन। |
अपलोड के बाद file_id | POST /v1/files और purpose=user_data के साथ अपलोड करें, फिर: Chat "file":{"file_id":"file-pv-…"}, Responses {"type":"input_file","file_id":"file-pv-…"}, Messages "source":{"type":"file","file_id":"file-pv-…"} | कई अनुरोधों में एक ही दस्तावेज़: हर बार मेगाबाइट दोबारा भेजने की ज़रूरत नहीं, और एक समान अनुरोध प्रीफ़िक्स कैश किया जाता है। फ़ाइल 7 दिनों तक रखी जाती है और केवल आपके खाते को दिखाई देती है। |
तुरंत चलाने के लिए तैयार उदाहरण
key को GETVIBE_API_KEY environment variable से पढ़ा जाता है। Python के उदाहरण आधिकारिक openai और anthropic SDKs का बिना बदलाव इस्तेमाल करते हैं — केवल पता अलग है।
/v1/chat/completions
# PDF inline (base64); jq builds the body so a large file does not hit the command-line length limit
# macOS: replace base64 -w0 report.pdf with base64 -i report.pdf
jq -n --rawfile b64 <(base64 -w0 report.pdf) '{model: "deepseek-v4.1-flash", messages: [{role: "user", content: [
{type: "text", text: "Summarise the document"},
{type: "file", file: {filename: "report.pdf", file_data: ("data:application/pdf;base64," + $b64)}}]}]}' |
curl https://getvibeapi.com/v1/chat/completions \
-H "Authorization: Bearer $GETVIBE_API_KEY" -H "Content-Type: application/json" -d @-/v1/responses
# FILE_ID comes from the upload, see the "curl · file_id" tab above
curl https://getvibeapi.com/v1/responses \
-H "Authorization: Bearer $GETVIBE_API_KEY" -H "Content-Type: application/json" \
-d '{"model":"gpt-6.1-sol","input":[{"role":"user","content":[
{"type":"input_text","text":"What were the sales in Kazan in August?"},
{"type":"input_file","file_id":"'"$FILE_ID"'"}]}]}'
# base64 instead of file_id:
# {"type":"input_file","filename":"report.pdf","file_data":"data:application/pdf;base64,…"}/v1/messages
curl https://getvibeapi.com/v1/messages \
-H "x-api-key: $GETVIBE_API_KEY" -H "anthropic-version: 2023-06-01" -H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-5.5","max_tokens":1024,"messages":[{"role":"user","content":[
{"type":"document","source":{"type":"file","file_id":"'"$FILE_ID"'"}},
{"type":"text","text":"Summarise the document"}]}]}'
# other sources:
# "source":{"type":"base64","media_type":"application/pdf","data":"<base64>"}
# "source":{"type":"url","url":"https://example.com/report.pdf"}मॉडल क्या देखता है: पाठ या स्वयं फ़ाइल
डिफ़ॉल्ट रूप से, निकाला गया पाठ। हम PDF की पाठ परत लेते हैं और फ़ाइल के बजाय उसे मॉडल को भेजते हैं। यह मुफ़्त है और किसी भी मॉडल के साथ काम करता है, यहाँ तक कि ऐसे मॉडल के साथ भी जिसमें PDF सहायता नहीं है। मॉडल को शब्द और संख्याएँ दिखती हैं, जिनमें तालिकाएँ भी शामिल हैं (किनारों के बिना, लेकिन सही मानों के साथ)। उसे क्या नहीं दिखता: तस्वीरें, चार्ट, मुहरें, हस्ताक्षर, रंग और लेआउट। हर अनुरोध में अधिकतम 60,000 अक्षरों का पाठ भेजा जाता है (लगभग 28 सघन पृष्ठ); बाकी काट दिया जाता है और मॉडल को बताया जाता है कि दस्तावेज़ काटा गया था। x-pv-document-shim प्रतिक्रिया हेडर बताता है कि क्या हुआ: applied:text_extracted का अर्थ है कि मॉडल को पाठ मिला, not-needed:lane_reads_pdf का अर्थ है कि उसे फ़ाइल स्वयं मिली।
फ़ाइल स्वयं। मॉडल को तस्वीरों और लेआउट समेत पूरे पृष्ठ दिखाने के लिए अनुरोध बॉडी में "plugins":[{"id":"documents","enabled":false}] जोड़ें (तब हेडर not-needed:disabled_by_client दिखाएगा)। ऐसा केवल तालिका में “हाँ” चिह्नित मॉडलों के साथ करें: बाकी 400 का जवाब देते हैं या कहते हैं कि उन्हें कोई फ़ाइल नहीं दिख रही, और फ़ाइल के इनपुट टोकन का बिल फिर भी लिया जाता है।
# curl: add the field to the request body
"plugins": [{"id": "documents", "enabled": false}]
# Python (openai SDK)
r = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[...],
extra_body={"plugins": [{"id": "documents", "enabled": False}]},
)| मॉडल | डिफ़ॉल्ट रूप से | फ़ाइल स्वयं देखता है (निष्कर्षण बंद) |
|---|---|---|
gpt-6.1-sol | स्वयं फ़ाइल | हाँ — /chat/completions और /responses पर |
gpt-6-luna | text | हाँ — /chat/completions और /responses पर |
gpt-5.6-sol | text | पुष्टि नहीं हुई — डिफ़ॉल्ट बनाए रखें |
claude-sonnet-5.5, claude-opus-5.5 | text | नहीं — मॉडल फ़ाइल नहीं देख सकता, इसलिए प्लगइन बंद होने पर भी हम पाठ निकालते हैं (हेडर x-getvibe-warnings: plugin_overridden:documents); फ़ाइल के लिए gpt-6.1-sol का उपयोग करें |
claude-haiku-5.5 | text | नहीं — मॉडल फ़ाइल नहीं देखता |
gemini-4-argon, gemini-3.8-flash | text | नहीं — मॉडल फ़ाइल नहीं देखता, या 400 |
qwen3.8-flash | text | हाँ — /chat/completions पर; /responses पर 400 |
deepseek-v4.1-flash, glm-5.3, kimi-k3 | text | नहीं — 400 |
हमने कैसे जाँचा: मॉडल से पृष्ठ 1 का एक शब्द, तालिका के एक खाने की संख्या बताने और एक तस्वीर का वर्णन करने (आकार, रंग और छवि के रूप में बनाई गई संख्या) को कहा गया। “पाठ” का अर्थ है कि उसने शब्द और संख्या सही बताई और कहा कि उसे तस्वीर दिखाई नहीं दे रही। “हाँ” का अर्थ है कि उसने तस्वीर का भी सही वर्णन किया। GPT, Gemini और Qwen मॉडल को /v1/chat/completions या /v1/responses के ज़रिए PDF भेजें: /v1/messages पर उन्हें फ़ाइल स्वयं दिखाई नहीं देती।
not-needed:no_text_layer_unmeasured_lane)। इसके बाद यह मॉडल पर निर्भर करता है: gpt-6.1-sol और qwen3.8-flash हमारा स्कैन पढ़ते हैं, DeepSeek मॉडल 400 का जवाब देते हैं। यदि आपका मॉडल स्कैन नहीं पढ़ सकता, तो अपनी ओर से OCR चलाएँ और पाठ भेजें, या image_url के ज़रिए पृष्ठ PNG/JPEG छवियों के रूप में ऐसे मॉडल को भेजें जो छवियाँ स्वीकार करता हो।सीमाएँ, टोकन और समय
| क्या | सीमा |
|---|---|
| मॉडल अनुरोध में PDF (base64, लिंक या file_id) | प्रति फ़ाइल अधिकतम 20 MiB; फ़ाइल की शुरुआत %PDF- से होनी चाहिए |
POST /v1/files पर अपलोड करें | अधिकतम 50 MiB (52,428,800 bytes), लेकिन मॉडल अनुरोध में केवल 20 MiB तक की PDF जा सकती है |
file_id lifetime | 7 दिन (expires_at फ़ील्ड), फिर फ़ाइल हटा दी जाती है |
| पृष्ठ | कोई अलग सीमा नहीं; पाठ निकालने पर, प्रति अनुरोध अधिकतम 60,000 वर्ण; स्वयं फ़ाइल के साथ, मॉडल की संदर्भ विंडो तक |
| लिंक से डाउनलोड करें | अधिकतम 10 सेकंड और अधिकतम 3 रीडायरेक्ट |
टोकन कैसे गिने जाते हैं। PDF का बिल चुने गए मॉडल के सामान्य इनपुट टोकन के रूप में, उसकी कीमत पर लिया जाता है; फ़ाइल या पाठ निष्कर्षण के लिए कोई अलग शुल्क नहीं है। लागत कितनी आती है (एक छोटा प्रश्न शामिल करके मापा गया):
- निकाला गया पाठ: पाठ के प्रति सघन पृष्ठ पर लगभग 700 टोकन (10 पृष्ठ — 7,300 टोकन; 40 पृष्ठ 60,000 अक्षरों तक काटे जाने पर — 20,300 टोकन)। छोटी तालिका वाले पृष्ठ पर — 100–200 टोकन।
- GPT मॉडल पर फ़ाइल स्वयं: प्रति पृष्ठ लगभग 600–700 टोकन (10 पृष्ठ — 5,900; 40 — 23,300);
gemini-4-argonपर लगभग 1,200 प्रति पृष्ठ; Claude पर लगभग 1,600 प्रति पृष्ठ।gpt-6.1-solपर स्कैन किए गए पृष्ठ में लगभग 5,800 टोकन। - एक ही दस्तावेज़ को दोहराने पर कैश काम करता है, जब अनुरोध की शुरुआत नहीं बदलती: समान
file_idवाला दूसरा अनुरोध 7,309 में से 7,168 टोकन कैश से पढ़ता है।
समय। पाठ निष्कर्षण में एक सेकंड का छोटा-सा अंश लगता है; 40-पृष्ठ के दस्तावेज़ के बारे में जवाब 4–12 सेकंड में आया। बड़े दस्तावेज़ों और लंबे जवाबों के लिए stream: true का उपयोग करें और क्लाइंट टाइमआउट कम से कम 300 सेकंड पर सेट करें।
त्रुटियाँ और उन्हें ठीक करने के तरीके
| Response | कारण | क्या करें |
|---|---|---|
400 invalid_pdf | The PDF must start with the %PDF- signature. | यह PDF नहीं है, या base64 खराब है। पक्का करें कि आप फ़ाइल को encode कर रहे हैं, उसका पथ नहीं, और प्रकार application/pdf है। |
400 invalid_pdf | The PDF size must not exceed 20 MiB. | दस्तावेज़ बाँटें या उसके अंदर की छवियों को संपीड़ित करें। |
413 invalid_request_error | POST /v1/files पर: फ़ाइल 52,428,800 bytes से बड़ी है | फ़ाइल 50 MiB से बड़ी है: इसे विभाजित करें। |
400 invalid_request_error | file_id उपलब्ध नहीं है | फ़ाइल हटा दी गई, इसकी समय-सीमा समाप्त हो गई (7 दिन), इसे किसी दूसरे खाते से अपलोड किया गया था, या आईडी किसी अलग सेवा से है। उसी key से फ़ाइल फिर अपलोड करें। |
400 invalid_pdf | The PDF URL must be a public HTTPS URL without credentials. | लिंक http:// का है, उसमें लॉगिन और पासवर्ड शामिल हैं, वह गैर-मानक पोर्ट का उपयोग करता है या उसका डोमेन मौजूद नहीं है। सार्वजनिक HTTPS लिंक दें या base64 भेजें। |
400 invalid_pdf | Could not safely fetch the PDF from the URL. | लिंक 404, लॉगिन पृष्ठ या PDF के बजाय HTML लौटाता है, या सर्वर ने 10 सेकंड के भीतर जवाब नहीं दिया। लिंक को निजी ब्राउज़र विंडो में खोलें; अगर फ़ाइल तुरंत डाउनलोड नहीं होती, तो base64 भेजें। |
400 unsupported_input | मॉडल PDF पढ़ नहीं सकता और फ़ाइल में कोई पाठ नहीं है (स्कैन)। | ऐसा मॉडल इस्तेमाल करें जो स्कैन पढ़ सके (ऊपर देखें), या अपनी ओर OCR चलाएँ। |
400 invalid_request_error | Invalid request… में पाठ निष्कर्षण बंद हो, या स्कैन हो। | मॉडल PDF फ़ाइल स्वीकार नहीं करता। मॉडल को पाठ देने के लिए plugins documents enabled:false हटाएँ, या तालिका में "हाँ" के रूप में चिह्नित मॉडल चुनें। |
| 200, लेकिन “मुझे कोई फ़ाइल नहीं दिख रही” | निष्कर्षण बंद है, और मॉडल या चैनल फ़ाइल नहीं पढ़ता। | डिफ़ॉल्ट पाठ निष्कर्षण पर लौटें, या तालिका में “हाँ” चिह्नित मॉडल चुनें। |
सर्वोत्तम तरीके
- दस्तावेज़ को कई अनुरोधों में चाहिए? उसे एक बार अपलोड करें और
file_idपास करें: अनुरोध छोटा होता है और बार-बार इस्तेमाल होने वाला प्रीफ़िक्स कैश किया जाता है, जिससे लागत कम होती है। - PDF और स्थायी निर्देश संदेश की शुरुआत में रखें और बदलता हुआ प्रश्न अंत में: इससे कैश अधिक बार काम करेगा।
- ~28 सघन पृष्ठों से लंबे दस्तावेज़ों को अध्यायों के अनुसार बाँटें: पाठ निष्कर्षण के साथ, 60,000 अक्षरों से आगे का कुछ भी मॉडल तक नहीं पहुँचता।
- पाठ परत वाले अनुबंधों, रिपोर्टों और निर्यातों के लिए पाठ निष्कर्षण पर्याप्त है —
deepseek-v4.1-flashसमेत किसी भी मॉडल पर यह सबसे सस्ता विकल्प है। - चार्ट, मुहरें या स्कैन चाहिए? निष्कर्षण बंद करें और तालिका में “हाँ” चिह्नित मॉडल का उपयोग करें, उदाहरण के लिए
gpt-6.1-sol। - PDF में गैर-लैटिन पाठ (रूसी, चीनी और अन्य) बिना किसी सेटिंग के पढ़ा जाता है। भेजने से पहले PDF से पासवर्ड हटाएँ।
- अपलोड की गई फ़ाइलों की ज़रूरत न रहने पर
DELETE /v1/files/{file_id}से उन्हें हटाएँ।
file_id को किसी third-party identifier से न बदलें।