Felo APIs
PPT Task API
PPT তৈরির টাস্ক করুন, থিমের তালিকা দেখুন এবং শেয়ার করা টাস্ক endpoints পোল করুন।
/v2/pptsঅথেন্টিকেশন
Bearer API key
কনটেন্ট টাইপ
application/json
রেট সংক্রান্ত নোট
endpoint-ভিত্তিক সীমা প্রযোজ্য হতে পারে।
PPT Task API অ্যাসিঙ্ক্রোনাস PPT তৈরির সক্ষমতা দেয়। আপনি একটি টাস্ক তৈরি করে task_id দিয়ে টাস্ক স্ট্যাটাস পোল করতে পারেন। এছাড়া উপলব্ধ PPT থিম ব্রাউজ করে টাস্ক তৈরির সময় সেগুলো প্রয়োগ করতে পারেন।
এটি একটি অ্যাসিঙ্ক্রোনাস API। শেয়ার করা সাবমিট, পোল ও রিট্রিভ প্যাটার্নের জন্য Async Tasks দেখুন।
প্রমাণীকরণ
সব অনুরোধের Authorization header-এ একটি API Key প্রয়োজন:
Authorization: Bearer YOUR_API_KEYAI এজেন্টের সাথে ব্যবহার
Agent থেকে স্লাইড তৈরি করতে Skills-এর নির্দিষ্ট উপসেটের বদলে সম্পূর্ণ felo-ai প্যাকেজ ইনস্টল করুন। এর ইনস্টলার গতিশীলভাবে SKILL.md থাকা প্রতিটি প্যাকেজ ডিরেক্টরি আবিষ্কার করে, PPT Skill ও ভবিষ্যতের সংযোজনসহ। আবিষ্কৃত সব Skill আপনার Agent-এর নেটিভ ডিরেক্টরিতে ইনস্টল করুন: Codex ~/.codex/skills, Claude Code ~/.claude/skills, OpenClaw ~/.agents/skills বা Hermes Agent ~/.hermes/skills। প্ল্যাটফর্ম-নির্দিষ্ট API key কনফিগারেশন ও যাচাইয়ের জন্য ম্যানুয়াল AI Agent সেটআপ গাইড অনুসরণ করুন।
1. List PPT Themes (থিমের তালিকা)
পেজিনেশন, কীওয়ার্ড সার্চ, ভাষা ও ধরন ফিল্টারসহ উপলব্ধ PPT থিম query করুন।
Endpoint
GET https://openapi.felo.ai/v2/ppt-themesQuery প্যারামিটার
| প্যারামিটার | ধরন | আবশ্যক | বর্ণনা |
|---|---|---|---|
lang | string | না | স্থানীয়কৃত কনটেন্টের ভাষা কোড (যেমন en, zh-Hans)। ডিফল্ট: en |
type | string | না | থিমের ধরন অনুযায়ী ফিল্টার (যেমন default, custom) |
keyword | string | না | সার্চ কীওয়ার্ড, থিমের শিরোনামের সাথে মেলে |
page | integer | না | পেজ নম্বর, 1 থেকে শুরু। ডিফল্ট: 1 |
size | integer | না | পেজের আকার, সর্বোচ্চ 100। ডিফল্ট: 20 |
উদাহরণ
curl -X GET 'https://openapi.felo.ai/v2/ppt-themes?lang=en&page=1&size=10' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'সফল রেসপন্স (200)
{
"status": "ok",
"message": null,
"data": {
"total": 8,
"page": 1,
"size": 10,
"items": [
{
"id": "43122897-0d3c-4c9e-ae19-20527ad36c04",
"title": "Inspiration Themes",
"subtitle": "AI-tailored visual solutions",
"description": "Style and layout, both crafted by AI from your content in real time"
}
]
}
}থিম রেসপন্স ফিল্ড
| ফিল্ড | ধরন | বর্ণনা |
|---|---|---|
total | integer | ফিল্টারের সাথে মিলে যাওয়া থিমের মোট সংখ্যা |
page | integer | বর্তমান পেজ নম্বর |
size | integer | পেজের আকার |
items | array | থিম অবজেক্টের তালিকা |
items[].id | string | থিম ID, PPT তৈরির সময় ai_theme_id হিসেবে এটি ব্যবহার করুন |
items[].title | string | থিমের শিরোনাম (স্থানীয়কৃত) |
items[].subtitle | string | থিমের সাবটাইটেল (স্থানীয়কৃত) |
items[].description | string | থিমের বর্ণনা (স্থানীয়কৃত) |
2. PPT টাস্ক তৈরি করুন
Endpoint
POST https://openapi.felo.ai/v2/pptsঅনুরোধ Header
| Header | আবশ্যক | বর্ণনা |
|---|---|---|
Authorization | হ্যাঁ | Bearer YOUR_API_KEY ফরম্যাটে আপনার API Key |
Content-Type | হ্যাঁ | application/json বা multipart/form-data |
অনুরোধ বডি
| প্যারামিটার | ধরন | আবশ্যক | বর্ণনা |
|---|---|---|---|
query | string | হ্যাঁ | PPT তৈরির অনুরোধ prompt |
livedoc_short_id | string | না | PPT সেশনের সাথে সংযুক্ত করার জন্য বিদ্যমান LiveDoc short ID। বাদ দিলে স্বয়ংক্রিয়ভাবে নতুন LiveDoc তৈরি হয়। |
resource_ids | array of strings | না | PPT তৈরির context হিসেবে ব্যবহারের LiveDoc রিসোর্স ID-এর তালিকা |
ppt_config | object | না | PPT কনফিগারেশন অপশন |
ppt_config.ai_theme_id | string | না | List PPT Themes endpoint থেকে থিম ID |
উদাহরণ
curl -X POST 'https://openapi.felo.ai/v2/ppts' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"query": "Felo, 2 pages",
"ppt_config": {
"ai_theme_id": "02968979-a69f-42c4-b136-de02c40ab2d7"
}
}'আপলোড করা ফাইল থেকে তৈরি করুন
একটি ফাইল আপলোড করে একক অনুরোধে PPT টাস্ক তৈরি করতে multipart/form-data ব্যবহার করুন। প্ল্যাটফর্ম প্রথমে ফাইলটি LiveDoc রিসোর্স হিসেবে আপলোড করে, তারপর এর resource ID PPT টাস্কে পাঠায়।
| Part | ধরন | আবশ্যক | বর্ণনা |
|---|---|---|---|
query | string | হ্যাঁ | PPT তৈরির অনুরোধ prompt |
file | file | হ্যাঁ | PPT context হিসেবে ব্যবহৃত উৎস ফাইল |
stream_protocol | string | না | স্ট্রিমিং প্রোটোকল; ডিফল্ট message_center_v1 |
livedoc_short_id | string | না | ফাইল গ্রহণ করার জন্য বিদ্যমান LiveDoc। বাদ দিলে নতুন LiveDoc তৈরি হয়। |
ppt_config | JSON | না | JSON অনুরোধ body-র মতো একই গঠনের PPT কনফিগারেশন। এই part application/json হিসেবে পাঠান। |
curl -X POST 'https://openapi.felo.ai/v2/ppts' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-F 'query=Create a 10-page presentation based on this report' \
-F 'ppt_config={"ai_theme_id":"02968979-a69f-42c4-b136-de02c40ab2d7"};type=application/json' \
-F '[email protected]'রেসপন্স JSON অনুরোধের মতো একই স্কিমা ব্যবহার করে। ফেরত দেওয়া livedoc_short_id আপলোড করা রিসোর্স ধারণকারী LiveDoc শনাক্ত করে।
সফল রেসপন্স (200)
{
"status": "ok",
"message": null,
"data": {
"livedoc_short_id": "PvyKouzJirXjFdst4uKRK3",
"ppt_business_id": "BfLPuQKmChk9SPmyQawxgr",
"task_id": "019cad6d-e874-55ef-d577-686344b5a7e9"
}
}3. টাস্ক স্ট্যাটাস query করুন
Endpoint
GET https://openapi.felo.ai/v2/tasks/{task_id}/statusউদাহরণ
curl -X GET 'https://openapi.felo.ai/v2/tasks/019cad6d-e874-55ef-d577-686344b5a7e9/status' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'সফল রেসপন্স (200)
{
"status": "ok",
"message": null,
"data": {
"status": "RUNNING"
}
}4. টাস্কের ঐতিহাসিক তথ্য query করুন
Endpoint
GET https://openapi.felo.ai/v2/tasks/{task_id}/historicalউদাহরণ
curl -X GET 'https://openapi.felo.ai/v2/tasks/019cb17e-9e23-3d40-4447-48a651249460/historical' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'RUNNING রেসপন্স
{
"status": "ok",
"message": null,
"data": {
"task_id": "019cb17e-9e23-3d40-4447-48a651249460",
"task_status": "RUNNING",
"ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
"ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx"
}
}COMPLETED রেসপন্স
{
"status": "ok",
"message": null,
"data": {
"task_id": "019cb17e-9e23-3d40-4447-48a651249460",
"task_status": "COMPLETED",
"ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
"ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx",
"live_doc_short_id": "oM8A9iJHg8dT4ZKgHThQTx",
"live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx"
}
}COMPLETED রেসপন্স (AI_PAGE)
{
"status": "ok",
"message": null,
"data": {
"task_id": "019d7a4d-6ab5-a96d-0f98-43ca434ab621",
"task_status": "COMPLETED",
"ppt_biz_id": "9qiLTmT77fA3aVurrMHvRJ",
"ppt_url": "https://felo.ai/slides/9qiLTmT77fA3aVurrMHvRJ",
"ai_page_html": "https://felo.ai/ai-page/9qiLTmT77fA3aVurrMHvRJ"
}
}FAILED / PENDING / EXPIRED / CANCELED রেসপন্স
{
"status": "ok",
"message": null,
"data": {
"task_id": "019cb17e-9e23-3d40-4447-48a651249460",
"task_status": "FAILED",
"ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
"ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx",
"error_message": "PPT generation failed",
"live_doc_short_id": "oM8A9iJHg8dT4ZKgHThQTx",
"live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx"
}
}ঐতিহাসিক রেসপন্স ফিল্ড
| ফিল্ড | ধরন | বর্ণনা |
|---|---|---|
task_id | string | টাস্ক ID |
task_status | string | বর্তমান টাস্ক স্ট্যাটাস |
ppt_biz_id | string | PPT বিজনেস ID (ব্যাকএন্ড thread_short_id থেকে ম্যাপ করা) |
ppt_url | string | PPT URL, ফরম্যাট: https://felo.ai/slides/{ppt_biz_id} |
error_message | string | FAILED / PENDING / EXPIRED / CANCELED-এর জন্য থাকে; ডাউনস্ট্রিম ত্রুটির বিস্তারিত না দিলে খালি স্ট্রিং "" |
ai_page_html | string | টাস্ক AI_PAGE মোডে চললে এবং ডাউনস্ট্রিম historical একটি HTML ফলাফল URL ফেরত দিলে থাকে |
live_doc_short_id | string | LiveDoc short ID। COMPLETED-এর জন্য এটি ডাউনস্ট্রিম live_doc_short_id থেকে আসে; টার্মিনাল ব্যর্থতার স্ট্যাটাসে উপলব্ধ হলে ফেরত আসে |
live_doc_url | string | live_doc_short_id-এর সংশ্লিষ্ট LiveDoc URL |
PPTX এক্সপোর্ট করুন
PPT তৈরির টাস্ক COMPLETED-এ পৌঁছানোর পর তৈরি রেসপন্সের ppt_business_id (বা ঐতিহাসিক রেসপন্সের ppt_biz_id) ব্যবহার করে একটি অ্যাসিঙ্ক্রোনাস এক্সপোর্ট সাবমিট করুন:
curl -X POST 'https://openapi.felo.ai/v2/ppts/YOUR_PPT_BUSINESS_ID/export' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{}'একই Bearer API Key দিয়ে প্রতি 2–5 সেকেন্ডে GET https://openapi.felo.ai/v2/ppts/{ppt_business_id}/export পোল করুন। API Key-এর মালিককেই PPT-এর মালিক হতে হবে। উভয় endpoint data.status ফেরত দেয়: NOT_STARTED, PROCESSING, COMPLETED বা FAILED। কেবল COMPLETED-এ download_url ও expires_at থাকে।
স্বাক্ষরিত ডাউনলোড URL ইস্যু হওয়ার 30 মিনিট পরে মেয়াদোত্তীর্ণ হয়। নতুন URL-এর জন্য GET endpoint আবার কল করুন; এটি PPTX পুনরায় জেনারেট করে না। POST application/json ব্যবহার করে এবং {} গ্রহণ করে। এক্সপোর্ট প্রসেসিংয়ের সময় POST পুনরাবৃত্তি করলে অন্য জব শুরু হয় না; সম্পূর্ণ হওয়ার পর কল করলে PPTX পুনরায় জেনারেট হয় এবং বিদ্যমান PPT এক্সপোর্ট ক্রেডিট চার্জ প্রযোজ্য হয়। অপর্যাপ্ত ক্রেডিটে HTTP 402 ফেরত আসে। endpoint-নির্দিষ্ট রেট সীমা প্রযোজ্য হতে পারে; HTTP 429-এ পরে রিট্রাই করুন। ব্যর্থ এক্সপোর্ট আবার সাবমিট করা যায়।
{
"status": "ok",
"message": null,
"data": {
"status": "COMPLETED",
"download_url": "https://example.com/presentation.pptx?signature=...",
"expires_at": "2026-09-29T10:30:00Z"
}
}পোলিং সুপারিশ
তৈরি রেসপন্সের task_id ব্যবহার করুন এবং স্ট্যাটাস টার্মিনাল অবস্থায় না পৌঁছানো পর্যন্ত প্রতি 2-5 সেকেন্ডে পোল করুন।
সাধারণ স্ট্যাটাস উদাহরণ:
RUNNING: টাস্ক এখনো প্রসেস হচ্ছেCOMPLETED: টাস্ক সফলভাবে সম্পূর্ণFAILED/PENDING/EXPIRED/CANCELED: টাস্কerror_messageসহ টার্মিনাল স্ট্যাটাসে পৌঁছেছে; উপলব্ধ হলেlive_doc_url-ও ফেরত আসে
ব্যাকএন্ড বিকশিত হওয়ার সাথে অজানা স্ট্যাটাস মান দেখা দিতে পারে; ডকুমেন্টেশন অন্যথা না বললে সেগুলোকে নন-টার্মিনাল হিসেবে ধরুন।
ত্রুটি কোড
| কোড | HTTP স্ট্যাটাস | বর্ণনা |
|---|---|---|
UNAUTHORIZED | 401 | API Key অবৈধ বা প্রত্যাহৃত |
PPT_TASK_CREATE_FAILED | 502 | টাস্ক তৈরির ডাউনস্ট্রিম কল ব্যর্থ |
PPT_TASK_QUERY_FAILED | 502 | টাস্ক স্ট্যাটাস query-র ডাউনস্ট্রিম কল ব্যর্থ |