API दस्तावेज़ीकरण

ऑडियो और वीडियो ट्रांसक्रिप्शन के लिए REST API। भुगतान करने वाले ग्राहक खाता सेटिंग में बनाई गई API कुंजी से तृतीय-पक्ष एकीकरण प्रमाणित करते हैं।

बेस URL

https://scribe.uustudio.cc

प्रमाणीकरण

तृतीय-पक्ष एकीकरण को Authorization हेडर में भुगतान किए गए खाते की API कुंजी भेजनी होगी।

Authorization हेडर

Authorization: Bearer {token}

खाता सेटिंग के API Keys पेज से कुंजियाँ बनाएँ और रद्द करें। ऐप प्रमाणीकरण एंडपॉइंट केवल आधिकारिक क्लाइंट के लिए हैं।

त्रुटि प्रतिक्रियाएँ

सभी त्रुटियां इस फ़ील्ड वाला JSON बॉडी लौटाती हैं message .

मानक त्रुटि

{
    "message": "Description of the error"
}

सत्यापन त्रुटि (422)

{
    "message": "The name field is required.",
    "errors": {
        "name": ["The name field is required."]
    }
}
स्थितिविवरण
401प्रमाणित नहीं (टोकन गायब या अमान्य)
403प्रतिबंधित या योजना सीमा पार
404संसाधन नहीं मिला
422सत्यापन विफल
429दर सीमित या बहुत अधिक समवर्ती टास्क
500आंतरिक सर्वर त्रुटि

दर सीमाएँ

प्रमाणित API एंडपॉइंट प्रति टोकन प्रति मिनट 10 अनुरोधों तक सीमित हैं।

उपयोग सीमाएँ

API उपलब्धता

मुफ़्त योजना में तृतीय-पक्ष REST API उपलब्ध नहीं है। API कुंजियाँ बनाने और उपयोग करने के लिए Pro या Max में अपग्रेड करें, या उपयोग के अनुसार भुगतान वाला पैकेज खरीदें।

अधिकतम फ़ाइल आकार
2 GB
समवर्ती टास्क
अधिकतम 3
प्रति टास्क अधिकतम पुनः प्रयास
3

भुगतान योजनाओं की तुलना

फ़ीचरPay as you goProMax
दैनिक अपलोडअसीमितअसीमितअसीमित
निर्यात फ़ॉर्मेटसभीसभीसभी
टास्क प्राथमिकतामध्यममध्यमउच्च

वर्कफ़्लो

ऑडियो/वीडियो फ़ाइल अपलोड करें

  1. POST /api/uploads/sign → upload_id और पार्ट जानकारी प्राप्त करें
  2. PUT {presigned_url} → प्रत्येक पार्ट को स्टोरेज में अपलोड करें
  3. POST /api/uploads/complete → अपलोड पूरा करें, ऑटो-क्रिएट टास्क
  4. GET /api/tasks/{id} → स्थिति पूछें (pending -> scribing -> finished)
  5. GET /api/tasks/{id}/download/srt → निर्यात करें (वैकल्पिक)

मैन्युअल रूप से टास्क बनाएँ

  1. POST /api/tasks → disk, path, name के साथ बनाएँ
  2. GET /api/tasks/{id} → स्थिति पूछें
  3. GET /api/tasks/{id} → segments, summary, mindmap प्राप्त करें

Auth

POST /api/login

ईमेल और पासवर्ड से प्रमाणित करें। Sanctum टोकन लौटाता है।

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
emailstringYesउपयोगकर्ता ईमेल (अधिकतम 255)
passwordstringYesउपयोगकर्ता पासवर्ड

प्रतिक्रिया 200

{
    "token": "1|abc123...",
    "user": {
        "id": 1,
        "name": "Zhang San",
        "email": "[email protected]"
    }
}

प्रति ईमेल प्रति मिनट 5 प्रयासों तक सीमित।

POST /api/register

नया खाता बनाएँ। Sanctum टोकन लौटाता है।

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
namestringYesप्रदर्शन नाम (अधिकतम 255)
emailstringYesअद्वितीय ईमेल (अधिकतम 255)
passwordstringYesपुष्टि आवश्यक
password_confirmationstringYesपासवर्ड पुष्टि

प्रतिक्रिया 201

{
    "token": "1|abc123...",
    "user": {
        "id": 1,
        "name": "Zhang San",
        "email": "[email protected]"
    }
}
POST /api/auth/social-login

Google OAuth से प्रमाणित करें। यदि खाता नहीं है तो बनाता है।

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
providerstringYesgoogle समर्थित प्रदाता
codestringYesOAuth प्राधिकरण कोड

प्रतिक्रिया 200

{
    "token": "1|abc123...",
    "user": {
        "id": 1,
        "name": "Zhang San",
        "email": "[email protected]"
    }
}
POST /api/logout

वर्तमान एक्सेस टोकन रद्द करें।

प्रतिक्रिया 204

कोई बॉडी नहीं लौटाता।

टास्क

POST /api/tasks

ट्रांसक्रिप्शन टास्क बनाएँ। प्रति उपयोगकर्ता अधिकतम 3 समवर्ती टास्क।

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
diskstringYesr2 / remote / youtube स्टोरेज स्रोत पहचानकर्ता
namestringYesटास्क नाम (अधिकतम 255)
pathstringYesफ़ाइल पथ या स्रोत URL
filestringNoमूल फ़ाइल नाम (अधिकतम 255)
sizeintegerNoफ़ाइल आकार (बाइट में)
durationintegerNoअवधि (सेकंड में)
costintegerNoलागत (सेकंड में)
segmentsarrayNoट्रांसक्रिप्शन सेगमेंट
speaker_diarizationbooleanनहींapp.tasks.speaker_diarization_api_description

प्रतिक्रिया 201

{
    "id": 1,
    "name": "Meeting Recording",
    "status": "pending",
    "speaker_diarization": true,
    "created_at": "2026-03-02T10:30:00+08:00"
}

त्रुटियाँ

स्थितिविवरण
403मुफ़्त उपयोगकर्ता API के माध्यम से YouTube लिंक सबमिट नहीं कर सकते।
429अधिकतम 3 समवर्ती टास्क की सीमा पहुँची
GET /api/tasks/{id}

ट्रांसक्रिप्शन परिणाम सहित पूर्ण टास्क विवरण प्राप्त करें।

प्रतिक्रिया

{
    "id": 1,
    "name": "Meeting Recording",
    "file": "meeting.mp3",
    "path": "2026-03-02/01HQX...mp3",
    "disk": "r2",
    "size": 50545869,
    "duration": 1965,
    "cost": 33,
    "status": "finished",
    "attempts": 1,
    "quality": 3,
    "created_at": "2026-03-02T10:30:00+08:00",
    "updated_at": "2026-03-02T10:45:00+08:00",
    "summary": "The meeting discussed three topics...",
    "mindmap": "# Topic\n## Sub-topic 1",
    "folder": "Work",
    "tags": ["Work"],
    "url": "https://youtube.com/watch?v=...",
    "segments": [
        {
            "id": 1,
            "start": 0,
            "end": 5000,
            "speaker": "Speaker 1",
            "tokens": ["Okay", "so let's", "begin"],
            "text": "Okay, so let's begin..."
        }
    ],
    "export": {
        "allowed_formats": ["txt", "srt", "vtt", "csv", "pdf", "docx"],
        "heavy_formats": ["pdf", "docx"],
        "version": "20260302104500"
    }
}

प्रतिक्रिया फ़ील्ड

फ़ील्डप्रकारविवरण
diskstring|nullस्टोरेज डिस्क: r2 / remote / youtube
sizeint|nullफ़ाइल आकार (बाइट में)
costint|nullलागत (सेकंड में)
attemptsintपुनः प्रयास गणना
qualityint|nullगुणवत्ता स्कोर (0-5)
summarystring|nullAI-जेनरेटेड सारांश
mindmapstring|nullAI-जेनरेटेड माइंड मैप
folderstring|nullपहला टैग नाम (फ़ोल्डर)
tagsarrayसभी टैग नाम
urlstring|nullस्रोत URL (YouTube टास्क के लिए)
segmentsarray|nullट्रांसक्रिप्शन सेगमेंट
segments[].startintप्रारंभ समय (ms)
segments[].endintअंत समय (ms)
segments[].textstringसेगमेंट टेक्स्ट
segments[].speakerstring|nullस्पीकर पहचानकर्ता
segments[].tokensarray|nullशब्द टोकन एरे
exportobjectनिर्यात मेटाडेटा (allowed_formats, heavy_formats, version)
GET /api/tasks

क्वेरी पैरामीटर

पैरामीटरप्रकारडिफ़ॉल्टविवरण
statusstringallस्थिति द्वारा फ़िल्टर करें
searchstring—नाम से खोजें
folderstring—फ़ोल्डर द्वारा फ़िल्टर करें (या Uncategorized)
pageint1पृष्ठ संख्या
per_pageint25प्रति पृष्ठ आइटम (अधिकतम 100)

प्रतिक्रिया

{
    "data": [
        {
            "id": 1,
            "name": "Meeting Recording",
            "file": "meeting.mp3",
            "disk": "r2",
            "size": 50545869,
            "duration": 1965,
            "cost": 33,
            "status": "finished",
            "attempts": 1,
            "quality": 3,
            "folder": "Work",
            "created_at": "2026-03-02T10:30:00+08:00"
        }
    ],
    "current_page": 1,
    "last_page": 1,
    "per_page": 25,
    "total": 1
}
PATCH /api/tasks/{id}/retry

विफल टास्क पुनः प्रयास करें। स्थिति सेट करता है pending (R2) या waiting (remote/YouTube)। अधिकतम 3 पुनः प्रयास।

प्रतिक्रिया 200

{
    "id": 1,
    "status": "pending",
    "attempts": 2
}
GET /api/tasks/{id}/download/{format}

ट्रांसक्रिप्ट निर्यात करें। हल्के फ़ॉर्मेट सीधे फ़ाइल लौटाते हैं। भारी फ़ॉर्मेट (pdf/docx) प्रोसेसिंग के दौरान 202 लौटा सकते हैं।

पथ पैरामीटर

पैरामीटरविवरण
formattxt / srt / vtt / csv / pdf / docx

प्रतिक्रियाएँ

200 - फ़ाइल तैयार (हल्के फ़ॉर्मेट)

बाइनरी फ़ाइल लौटाता है।

200 - फ़ाइल तैयार (भारी फ़ॉर्मेट, JSON अनुरोध)

{
    "status": "ready",
    "url": "https://scribe.uustudio.cc/api/tasks/1/download/pdf"
}

202 - भारी फ़ॉर्मेट प्रोसेस हो रहा है

{
    "status": "processing",
    "message": "Your export is being generated. Please try again shortly."
}
GET /api/tasks/{id}/audio

मूल ऑडियो या वीडियो फ़ाइल को सीधे स्टोरेज से स्ट्रीम करें (केवल R2)।

प्रतिक्रिया

200 - ऑडियो या वीडियो फ़ाइल का बाइनरी स्ट्रीम। यदि फ़ाइल गायब है या R2 डिस्क पर नहीं है तो 404 लौटाता है।

GET /api/tasks/{id}/refresh-summary

नवीनतम AI-जेनरेटेड सारांश और माइंड मैप रीफ़्रेश करें और लौटाएँ।

प्रतिक्रिया

{
    "summary": "The meeting discussed three topics...",
    "mindmap": "# Topic\n## Sub-topic 1"
}
GET /api/tasks/{id}/share-url

Get or generate a public share URL for the task.

प्रतिक्रिया

{
    "share_url": "https://scribe.uustudio.cc/share/tasks/1"
}
PATCH /api/tasks/{id}

टास्क फ़ील्ड अपडेट करें। सभी फ़ील्ड वैकल्पिक हैं।

अनुरोध बॉडी

फ़ील्डप्रकारविवरण
namestringनया नाम (अधिकतम 255)
folderstring|nullफ़ोल्डर नाम (null टास्क को फ़ोल्डर से हटाता है)
durationintegerअवधि (सेकंड में)
costintegerलागत (सेकंड में)
segmentsarrayबदलने के लिए पूर्ण सेगमेंट एरे
textstringपूर्ण ट्रांसक्रिप्ट टेक्स्ट
qualityintegerगुणवत्ता स्कोर (0-5)
indexintegerटास्क क्रम सूचकांक

प्रतिक्रिया 200

पूर्ण टास्क ऑब्जेक्ट लौटाता है (टास्क विवरण के समान)।

DELETE /api/tasks/{id}

Response 200

{
    "message": "Task deleted successfully"
}
DELETE /api/tasks/bulk

एक साथ कई टास्क हटाएँ। केवल प्रमाणित उपयोगकर्ता के टास्क हटाए जाएंगे। अन्य उपयोगकर्ता की ID को अनदेखा किया जाता है।

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
idsarrayYesहटाने के लिए टास्क ID एरे (न्यूनतम 1)

प्रतिक्रिया 200

{
    "message": "2 task(s) deleted successfully",
    "deleted_count": 2
}
PATCH /api/tasks/bulk/move

एक साथ कई टास्क किसी फ़ोल्डर में ले जाएँ। केवल प्रमाणित उपयोगकर्ता के टास्क ले जाए जाएंगे।

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
idsarrayYesले जाने के लिए टास्क ID एरे (न्यूनतम 1)
folderstringYesलक्ष्य फ़ोल्डर नाम (अधिकतम 255)

प्रतिक्रिया 200

{
    "message": "2 task(s) moved to Work",
    "moved_count": 2
}

अपलोड

मल्टीपार्ट अपलोड
POST /api/uploads/sign

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
filestringYesफ़ाइल नाम (समर्थित फ़ॉर्मेट का उपयोग करें)
content_typestringYesMIME प्रकार (फ़ाइल एक्सटेंशन से मेल खाना चाहिए)
sizeintegerYesफ़ाइल आकार बाइट में (अधिकतम 2,147,483,648 / 2 GB)
durationintegerNoऑडियो अवधि सेकंड में

प्रतिक्रिया

{
    "path": "2026-03-02/01HQX...mp3",
    "upload_id": "abc123",
    "part_size": 5242880,
    "part_count": 10,
    "expires_at": "2026-03-02T10:40:00+08:00"
}
POST /api/uploads/sign-part

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
pathstringYesअपलोड पथ (अधिकतम 2048)
upload_idstringYesअपलोड ID (अधिकतम 2048)
part_numberintegerYesपार्ट नंबर (1-10000)

प्रतिक्रिया

{
    "url": "https://storage.example.com/...?X-Amz-...",
    "headers": {
        "Content-Type": "audio/mpeg"
    }
}

उपयोग करें PUT पार्ट अपलोड करने के लिए लौटाए गए URL और हेडर के साथ।

POST /api/uploads/complete

मल्टीपार्ट अपलोड पूरा करें। यह अपने आप ट्रांसक्रिप्शन टास्क बनाता है और API उपलब्ध न होने या योजना सीमा पार होने पर 403 लौटाता है।

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
pathstringYesअपलोड पथ (अधिकतम 2048)
upload_idstringYesअपलोड ID (अधिकतम 2048)
original_namestringYesमूल फ़ाइल नाम (समर्थित फ़ॉर्मेट का उपयोग करें)
content_typestringYesMIME प्रकार (फ़ाइल एक्सटेंशन से मेल खाना चाहिए)
sizeintegerYesफ़ाइल आकार बाइट में (अधिकतम 2 GB)
namestringNoटास्क नाम (डिफ़ॉल्ट फ़ाइल नाम बिना एक्सटेंशन)
durationintegerNoअवधि सेकंड में (न्यूनतम 1)
speaker_diarizationbooleanनहींapp.tasks.speaker_diarization_api_description

प्रतिक्रिया 201

{
    "message": "File uploaded to the upload server successfully.",
    "task": {
        "id": 1,
        "name": "meeting",
        "path": "2026-03-02/01HQX...mp3",
        "size": 50545869,
        "status": "pending",
        "speaker_diarization": true
    }
}
POST /api/uploads/abort

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
pathstringYesअपलोड पथ (अधिकतम 2048)
upload_idstringYesअपलोड ID (अधिकतम 2048)

प्रतिक्रिया

{
    "message": "Multipart upload cancelled successfully."
}

फ़ोल्डर

टैग-आधारित
GET /api/folders

टास्क गणना के साथ सभी फ़ोल्डर सूचीबद्ध करें।

प्रतिक्रिया

{
    "folders": [
        {"id": 1, "name": "Work", "count": 5},
        {"id": 2, "name": "Personal", "count": 3}
    ],
    "uncategorized_count": 2,
    "total_count": 10
}
POST /api/folders

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
namestringYesफ़ोल्डर नाम (प्रति उपयोगकर्ता अधिकतम 14 अक्षर / 7 चीनी अक्षर, अद्वितीय)

प्रतिक्रिया 201

{
    "id": 1,
    "name": "Work"
}
PATCH /api/folders/{name}

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
namestringYesनया फ़ोल्डर नाम (बनाने के समान बाधाएँ)

प्रतिक्रिया 200

{
    "id": 1,
    "name": "New Name"
}
DELETE /api/folders/{name}

Response 200

{
    "message": "Folder deleted successfully"
}

उपयोगकर्ता

GET /api/user

प्रतिक्रिया

{
    "id": 1,
    "name": "Zhang San",
    "email": "[email protected]",
    "avatar": "https://...",
    "balance": {
        "used_seconds": 9000,
        "remaining_seconds": 36000,
        "allowance_remaining_seconds": 30000,
        "top_up_remaining_seconds": 6000,
        "total_seconds": 45000,
        "usage_percent": 20
    },
    "subscription": {
        "plan": "year",
        "plan_key": "max_yearly",
        "tier": "max",
        "billing_interval": "yearly",
        "active": true,
        "access_tier": "max"
    },
    "queue": {
        "pending_count": 1,
        "running_count": 1,
        "failed_count": 0
    }
}

बैलेंस फ़ील्ड

फ़ील्डप्रकारविवरण
used_secondsintपिछले मासिक अनुदान के बाद से उपयोग किए गए सेकंड
remaining_secondsintशेष सेकंड
total_secondsintकुल सेकंड
usage_percentintउपयोग प्रतिशत (0-100)
PUT /api/user

अनुरोध बॉडी

फ़ील्डप्रकारआवश्यकविवरण
namestringNoप्रदर्शन नाम (अधिकतम 255)
emailstringनहींनया ईमेल (अद्वितीय होना चाहिए)
avatarfileNoछवि फ़ाइल (अधिकतम 5 MB)

प्रतिक्रिया 200

{
    "id": 1,
    "name": "New Name",
    "email": "[email protected]",
    "avatar": "https://..."
}

सूचनाएँ

GET /api/notifications

नवीनतम 10 सूचनाएँ प्राप्त करें।

प्रतिक्रिया

[
    {
        "id": "abc123",
        "title": "Task Completed",
        "message": "Meeting Recording has been transcribed.",
        "read_at": null,
        "created_at": "2026-03-02T10:45:00+08:00"
    }
]
POST /api/notifications/mark-all-as-read

सभी अपठित सूचनाओं को पढ़ा गया चिह्नित करें।

Response 200

{
    "success": true
}

चेकआउट

GET /api/checkout/{plan}

सदस्यता योजना के लिए Paddle चेकआउट URL प्राप्त करें।

पथ पैरामीटर

पैरामीटरविवरण
plantest / month / year

प्रतिक्रिया

Paddle चेकआउट विकल्प ऑब्जेक्ट लौटाता है। अमान्य योजना के लिए 404 लौटाता है।

GET /api/health

सार्वजनिक हेल्थ चेक एंडपॉइंट। कोई प्रमाणीकरण आवश्यक नहीं।

प्रतिक्रिया 200

{
    "status": "ok"
}