مستندات API امروزینو
مرجع کامل نقاط پایانی REST نسخهی ۱ — برای توسعهدهندگانی که میخواهند محتوای مجله را در ابزارهای خود به کار بگیرند. همهی پاسخها JSON هستند و خطاها در پاکت استاندارد { error: { code, message } } برمیگردند.
مقدمات۲ نقطه پایانی
پایه و آدرسها، قالب پاسخ و خطاها
/api/v1/{endpoint}همهی درخواستها به آدرس پایه api/v1 میرسند. پاسخها همیشه JSON هستند و خطاها در پاکت استاندارد error قرار میگیرند.
{ data… } | { error: { code, message, details? } }/api/v1/openapiخروجی OpenAPI 3.1 از همین کاتالوگ؛ برای import در Postman و Insomnia یا تولید کلاینت. امنیت کوکی نشست (cookieAuth) برای مسیرهای مدیریتی تعریف شده است.
{ openapi, info, servers, tags, components, paths }احراز هویت۳ نقطه پایانی
ورود، خروج و نشست کاربران
/api/v1/auth/loginورود کاربر با ایمیل و گذرواژه؛ کوکی نشست (HttpOnly) تنظیم میشود.
پارامترها
- بدنه
email*ایمیل کاربر - بدنه
password*گذرواژه
{ user }/api/v1/auth/logoutخروج و حذف نشست جاری.
{ ok: true }/api/v1/auth/meاطلاعات کاربر جاری بر اساس کوکی نشست.
{ user } | 401مقالات۳ نقطه پایانی
فهرست، جزئیات و مطالب مرتبط
/api/v1/articlesفهرست مقالات منتشرشده با فیلتر، جستوجوی فارسیپسند و صفحهبندی.
پارامترها
- کوئری
categoryاسلاگ دستهبندی (شامل زیرمجموعهها) - کوئری
subcategoryاسلاگ زیردستهبندی - کوئری
tagاسلاگ برچسب - کوئری
authorاسلاگ نویسنده - کوئری
qجستوجو در عنوان و خلاصه (نرمالسازی ی/ک) - کوئری
sortnewest | popular | oldest - کوئری
featuredفقط شاخصها (true) - کوئری
editorChoiceفقط منتخب سردبیر (true) - کوئری
pageشماره صفحه (پیشفرض ۱) - کوئری
limitتعداد در صفحه (۱ تا ۲۴)
{ items, total, page, pages }/api/v1/articles/{slug}جزئیات یک مقاله + شمارنده بازدید + مطالب مرتبط. اگر مقاله بخشی از مجموعه باشد، فهرست مرتب قسمتهای مجموعه (seriesParts) هم برگردانده میشود. اگر کوکی ناشناس خواننده (emrozino-reader) موجود باشد، وضعیت پسندیدن (liked) هم برگردانده میشود.
پارامترها
- مسیر
slug*اسلاگ لاتین مقاله
{ article, related, liked, seriesParts? }/api/v1/articles/{slug}/likeپسندیدن/حذف پسند مقاله برای خواننده ناشناس. هر دستگاه (کوکی emrozino-reader) فقط یک پسند برای هر مقاله میتواند داشته باشد؛ فراخوانی مجدد پسند را برمیگرداند (toggle).
پارامترها
- مسیر
slug*اسلاگ لاتین مقاله
{ liked, likeCount } | 404 | 429دستهبندی، برچسب و نویسندگان۶ نقطه پایانی
اختلافات و پروفایلها
/api/v1/categoriesدرخت دستهبندیهای فعال (۲ سطح).
{ items }/api/v1/categories/{slug}جزئیات یک دستهبندی + فرزندانش.
پارامترها
- مسیر
slug*اسلاگ دسته
{ category }/api/v1/tagsهمهی برچسبها بهترتیب تعداد استفاده.
{ items }/api/v1/tags/{slug}جزئیات برچسب + مقالات آن.
پارامترها
- مسیر
slug*اسلاگ برچسب
{ tag, articles }/api/v1/authorsفهرست نویسندگان فعال.
{ items }/api/v1/authors/{slug}پروفایل نویسنده + مقالاتش.
پارامترها
- مسیر
slug*اسلاگ نویسنده
{ author, articles }مجموعه مقالات۲ نقطه پایانی
مجموعههای چندقسمتی
/api/v1/seriesهمهٔ مجموعههای منتشرشده با آمار تجمیعی (تعداد قسمتهای منتشرشده، مجموع زمان مطالعه، تاریخ اولین/آخرین قسمت) و نامک قسمتها برای محاسبهٔ پیشرفت مطالعه.
{ items }/api/v1/series/{slug}جزئیات یک مجموعه منتشرشده + قسمتهای مرتبشده (قسمت ۱ اول) بهصورت مقالهٔ کامل.
پارامترها
- مسیر
slug*اسلاگ لاتین مجموعه
{ series, parts } | 404آزمونهای تعاملی۳ نقطه پایانی
آزمونهای رایگان زبان — تعیین سطح، گرامر و واژگان انگلیسی/آلمانی/فرانسه، آیلتس/تافل
/api/v1/quizzesهمهٔ آزمونهای منتشرشده با تعداد پرسش، زمان پیشنهادی، نمرهٔ قبولی و تعداد شرکتکنندهها.
{ items }/api/v1/quizzes/{slug}جزئیات یک آزمون + پرسشها و گزینهها. توجه: پاسخ درست هرگز قبل از تصحیح به کلاینت فرستاده نمیشود.
پارامترها
- مسیر
slug*اسلاگ لاتین آزمون
{ quiz } | 404/api/v1/quizzes/{slug}/submitتصحیح آزمون در سرور. بدنه: { answers: (number|null)[], durationSec? } بهترتیب پرسشها. پاسخ شامل نمره، وضعیت قبولی و مرور کامل (پاسخ درست + توضیح فارسی) است.
پارامترها
- مسیر
slug*اسلاگ لاتین آزمون
{ score, correct, total, passed, passScore, review } | 400 | 404 | 429واژهنامه تخصصی۲ نقطه پایانی
تعریف واژهها با جستوجو و فیلتر حروف
/api/v1/glossaryواژههای منتشرشده با جستوجوی فارسیپسند، فیلتر حرف الفبا و دستهبندی. مرتبسازی بر اساس الفبای فارسی.
پارامترها
- کوئری
qجستوجو در واژه، معادل انگلیسی و تعریف کوتاه - کوئری
letterحرف اول فارسی (آ → ا نرمال میشود) - کوئری
categoryاسلاگ دسته (شامل فرزندان) - کوئری
pageشماره صفحه (پیشفرض ۱) - کوئری
limitتعداد در صفحه (۱ تا ۶۰)
{ items, total, page, pages, letters }/api/v1/glossary/{slug}تعریف کامل یک واژه + واژههای مرتبط + شمارنده بازدید.
پارامترها
- مسیر
slug*اسلاگ لاتین واژه
{ term, related }هاب کشورهای مهاجرتی۲ نقطه پایانی
مقاصد مهاجرت — همهٔ مطالب هر کشور یکجا
/api/v1/countriesفهرست کشورهای مقصد (ثبت ایستا) بههمراه تعداد مقالات منتشرشدهٔ مرتبط در ریشهٔ مهاجرت (عنوان یا چکیده حاوی کلیدواژههای کشور)؛ مرتبشده بر اساس تعداد مطلب.
{ items: [{ slug, name, flag, tagline, articleCount }] }/api/v1/countries/{slug}هاب یک کشور: مقالات منتشرشدهٔ مرتبط، گروهبندیشده بر اساس زیردستههای مهاجرت (تحصیل، کار، راهنمای کشورها، زندگی در خارج، آمادگی و مدارک — هر گروه حداکثر ۱۲ مطلب، جدیدترین اول) + گروه «از دیگر بخشهای امروزینو» برای مطالب دیگر ریشهها + واژههای مرتبط واژهنامه (حداکثر ۸ مورد).
پارامترها
- مسیر
slug*اسلاگ لاتین کشور (germany، canada، …)
{ country, groups, glossaryTerms } | 404صفحات ثابت و مسیرها۲ نقطه پایانی
صفحات درباره/تماس و مسیرهای یادگیری
/api/v1/pages/{slug}محتوای یک صفحه ثابت (about, contact, …).
پارامترها
- مسیر
slug*اسلاگ صفحه
{ page }/api/v1/learning-pathsمسیرهای یادگیری منتشرشده با گامها.
{ items }جستوجو۲ نقطه پایانی
جستوجوی سراسری سایت
/api/v1/searchجستوجوی یکجا در مقالات، صفحات ثابت، دستهبندیها و برچسبها.
پارامترها
- کوئری
q*عبارت جستوجو (فارسی، URL-encoded)
{ articles, staticPages, categories, tags, total }/api/v1/search/popularجستوجوهای پرطرفدار — پرتکرارترین عبارتهای جستوجوی کاربران در N روز اخیر (تقویم تهران؛ فقط عبارتهایی که نتیجه داشتهاند).
پارامترها
- کوئری
daysپنجرهٔ زمانی به روز (۱ تا ۹۰، پیشفرض ۱۴) - کوئری
limitحداکثر تعداد عبارت (۱ تا ۲۰، پیشفرض ۸)
{ items: [{ query, count }], days }تعامل و بازاریابی۹ نقطه پایانی
تماس و تبلیغات
/api/v1/contactارسال پیام تماس (نرخ محدود: ۵ در ساعت).
پارامترها
- بدنه
name*نام فرستنده - بدنه
email*ایمیل فرستنده - بدنه
subject*موضوع - بدنه
message*متن پیام
{ ok: true }/api/v1/adsبنرهای تبلیغاتی فعال برای یک جایگاه (جایگاه FLOATING برای بنر شناور).
پارامترها
- کوئری
placementHOME_TOP | HOME_MIDDLE | HOME_BOTTOM | CATEGORY | ARTICLE_IN | ARTICLE_END | SIDEBAR | FOOTER | FLOATING - کوئری
countViews0 = بدون شمارش نمایش (برای بنر شناور پس از نمایش واقعی)
{ items }/api/v1/ads/clickثبت کلیک روی تبلیغ.
پارامترها
- بدنه
id*شناسه تبلیغ
{ ok: true }/api/v1/footer-linksلینکهای فعال فوتر (قابل مدیریت از پنل).
{ items, columns }/api/v1/social-linksشبکههای اجتماعی فعال سایت.
پارامترها
- کوئری
placementfooter | header
{ items }/api/v1/partner-linksلینکهای همکاری و حمایتشده فعال (با rel صحیح).
{ items }/api/v1/contact-channelsکانالهای فعال دکمه شناور تماس با ما.
{ items }/api/v1/settingsتنظیمات عمومی سایت (فقط کلیدهای عمومی).
{ items }/api/v1/homeدادههای صفحه اصلی در یک درخواست (شاخص، تازهها، منتخب، دستهها، مسیرها).
{ featured, latest, editorChoice, categories, paths, topViewed, … }مدیریت (CMS)۵۶ نقطه پایانی
نقطههای پایانی پنل مدیریت — نیازمند نشست واردشده
/api/v1/admin/dashboardآمار کلی، نمودار ۱۴ روزه، پربازدیدها و آخرین رخدادها.
{ stats, chart, topViewed, recentArticles, activity }/api/v1/admin/articlesفهرست همه مقالات (همه وضعیتها) با فیلتر وضعیت/دسته/نویسنده/جستوجو.
پارامترها
- کوئری
statusDRAFT | REVIEW | READY | SCHEDULED | PUBLISHED | ARCHIVED - کوئری
qجستوجو - کوئری
categoryIdشناسه دسته - کوئری
authorIdشناسه نویسنده - کوئری
mineفقط مقالات خودم (true) - کوئری
sortnewest | oldest | popular - کوئری
pageشماره صفحه - کوئری
limitتعداد در صفحه
{ items, total, page, pages }/api/v1/admin/articlesایجاد مقاله جدید (پیشنویس یا انتشار).
{ article }/api/v1/admin/articles/{id}جزئیات کامل مقاله شامل بازبینیها و کلیدواژهها.
پارامترها
- مسیر
id*شناسه مقاله
{ article }/api/v1/admin/articles/{id}ویرایش مقاله (نسخه قدیمی بهصورت خودکار بایگانی میشود).
پارامترها
- مسیر
id*شناسه مقاله
{ article }/api/v1/admin/articles/{id}حذف مقاله.
پارامترها
- مسیر
id*شناسه مقاله
{ ok: true }/api/v1/admin/articles/bulkعملیات گروهی روی مقالهها (انتشار، آمازه، بایگانی، حذف).
پارامترها
- بدنه
ids*آرایه شناسهها - بدنه
action*publish | ready | archive | delete
{ count }/api/v1/admin/glossaryفهرست همه واژهها (منتشر + پیشنویس) با فیلتر و صفحهبندی.
پارامترها
- کوئری
qجستوجو - کوئری
statusPUBLISHED | DRAFT - کوئری
categoryIdشناسه دسته - کوئری
pageشماره صفحه - کوئری
limitتعداد در صفحه
{ items, total, page, pages }/api/v1/admin/glossaryایجاد واژه جدید؛ اسلاگ تکراری → 409 SLUG_IN_USE.
{ term }/api/v1/admin/glossary/{id}جزئیات کامل واژه برای ویرایش.
پارامترها
- مسیر
id*شناسه واژه
{ term }/api/v1/admin/glossary/{id}ویرایش واژه.
پارامترها
- مسیر
id*شناسه واژه
{ term }/api/v1/admin/glossary/{id}حذف واژه.
پارامترها
- مسیر
id*شناسه واژه
{ ok: true }/api/v1/admin/glossary/term-of-dayنامک واژهٔ پینشده برای «واژهٔ امروز» صفحهٔ اصلی (null = چرخش روزانه خودکار).
{ slug }/api/v1/admin/glossary/term-of-dayتعیین یا پاککردن واژهٔ روز صفحهٔ اصلی؛ واژه باید منتشرشده باشد.
پارامترها
- بدنه
slug*نامک واژه یا null برای پاککردن
{ slug }/api/v1/admin/seriesهمهٔ مجموعهها (شامل پیشنویسها) + قسمتهای هر مجموعه با وضعیت انتشار.
{ items }/api/v1/admin/seriesایجاد مجموعه؛ orderedArticleIds قسمتها را بهترتیب مشخص تخصیص میدهد (شمارهگذاری ۱-مبنا).
{ series }/api/v1/admin/series/{id}جزئیات مجموعه برای ویرایش.
پارامترها
- مسیر
id*شناسه مجموعه
{ series }/api/v1/admin/series/{id}ویرایش مجموعه؛ orderedArticleIds کل ترتیب را بازنویسی میکند (مقالات حذفشده از فهرست، از مجموعه جدا میشوند).
پارامترها
- مسیر
id*شناسه مجموعه
{ series }/api/v1/admin/series/{id}حذف مجموعه؛ مقالههای مجموعه حذف نمیشوند و فقط جدا میشوند.
پارامترها
- مسیر
id*شناسه مجموعه
{ ok: true }/api/v1/admin/categoriesدرخت کامل دستهها + آمار مقالات هر دسته.
{ items }/api/v1/admin/categoriesایجاد دسته/زیردسته؛ حذفِ وابستهها → 409 HAS_DEPENDENCIES.
{ category }/api/v1/admin/tagsفهرست برچسبها.
{ items }/api/v1/admin/tagsایجاد برچسب جدید.
{ tag }/api/v1/admin/authorsفهرست پروفایل نویسندگان.
{ items }/api/v1/admin/authorsایجاد پروفایل نویسنده.
{ author }/api/v1/admin/mediaکتابخانه رسانه (تصاویر) با آمار مصرف.
{ items }/api/v1/admin/mediaبارگذاری رسانه (multipart/form-data).
{ asset }/api/v1/admin/pagesفهرست صفحات ثابت.
{ items }/api/v1/admin/pagesایجاد صفحه ثابت.
{ page }/api/v1/admin/usersفهرست کاربران تیم (SUPER_ADMIN فقط).
{ items }/api/v1/admin/usersایجاد کاربر جدید با نقش.
{ user }/api/v1/admin/settingsهمه تنظیمات (شامل مقادیر فعلی؛ رازها قابلنوشتن فقط).
{ items }/api/v1/admin/settingsبهروزرسانی دستهای تنظیمات؛ مقدار خالی = بدون تغییر.
{ items }/api/v1/admin/adsفهرست تبلیغها + جایگاهها + نرخ کلیک.
{ items, placements }/api/v1/admin/adsایجاد تبلیغ.
{ ad }/api/v1/admin/ai-generateمولد مقاله با هوش مصنوعی (سمت سرور). action=generate → پیشنویس کامل فارسی (عنوان، چکیده، سئو، متن ۶۰۰-۹۰۰ کلمهای) بدون ذخیره؛ action=save → ذخیره پیشنویس قبلی بهعنوان مقاله DRAFT با یادداشت «نیازمند بازبینی انسانی». هیچ انتشار خودکار وجود ندارد. نیازمند ARTICLE_CREATE.
پارامترها
- بدنه
action*generate یا save - بدنه
topic*موضوع مقاله (۵ تا ۲۰۰ نویسه) - بدنه
categorySlug*اسلاگ دستهٔ اصلی - بدنه
subcategorySlugاسلاگ زیردسته (اختیاری) - بدنه
audienceمخاطب هدف (اختیاری) - بدنه
toneلحن: آموزشی / صمیمی / رسمی / تحلیلی - بدنه
keywordsکلمات کلیدی (اختیاری) - بدنه
draftفقط برای action=save: شیء پیشنویس دریافتی از generate
generate → { ok, draft } · save → { ok, savedId, slug }/api/v1/admin/telegramپیکربندی ربات تلگرام (توکن ماسکشده)، وضعیت ۱۲ رویداد اعلان و ۳۰ گزارش آخر. نیازمند SETTINGS_MANAGE.
{ config, events, logs }/api/v1/admin/telegramذخیره پیکربندی ربات؛ توکن بهصورت رمزنگاریشده نگهداری میشود (botToken=null → حذف؛ خالی = حفظ توکن فعلی). حداکثر ۵ شناسه گیرنده.
پارامترها
- بدنه
isActiveفعال بودن اعلانها - بدنه
botTokenتوکن جدید یا null برای حذف - بدنه
chatIdsآرایه شناسه گیرندهها (حداکثر ۵)
{ success }/api/v1/admin/telegramفعال/غیرفعالکردن یک رویداد اعلان.
پارامترها
- بدنه
key*کلید رویداد (مثل ARTICLE_PUBLISHED) - بدنه
isEnabled*وضعیت رویداد
{ event }/api/v1/admin/telegramaction=test-connection → اعتبارسنجی توکن با getMe تلگرام (توکن تستشدهٔ موفق خودکار ذخیره میشود)؛ action=send-test → ارسال پیام آزمایشی به گیرندهها.
پارامترها
- بدنه
action*test-connection | send-test - بدنه
botTokenتوکن ذخیرهنشده برای تست (اختیاری)
{ ok, botUsername?, error? }/api/v1/admin/footer-linksهمهٔ لینکهای فوتر + فهرست ستونها (pages/explore/company/legal).
{ items, columns }/api/v1/admin/footer-linksایجاد لینک فوتر؛ آدرس باید داخلی (#/… یا /…) یا خارجی امن http(s) باشد — isExternal در سرور تشخیص داده میشود.
201 { link }/api/v1/admin/social-linksهمهٔ لینکهای شبکههای اجتماعی + پلتفرمهای مجاز.
{ items, platforms }/api/v1/admin/social-linksثبت شبکه اجتماعی؛ پلتفرم یکتا است (تکرار → badRequest) و آدرس فقط https.
پارامترها
- بدنه
platform*telegram | instagram | twitter | …
201 { link }/api/v1/admin/partner-linksلینکهای همکاری و حمایت (با نوع همکاری، rel و بازه نمایش).
{ items }/api/v1/admin/partner-linksثبت لینک همکاری؛ دامنه از آدرس استخراج میشود و rel برای لینکهای پولی باید sponsored باشد.
پارامترها
- بدنه
cooperationTypeSPONSORED | EXCHANGE | AFFILIATE | FRIENDLY - بدنه
relsponsored | nofollow | nofollow sponsored (پیشفرض sponsored)
201 { link }/api/v1/admin/contact-channelsکانالهای دکمه شناور تماس + انواع مجاز کانال.
{ items, kinds }/api/v1/admin/contact-channelsایجاد کانال تماس؛ اعتبارسنجی مقدار بر اساس نوع (صفحه داخلی / ایمیل / آدرس وب).
پارامترها
- بدنه
kind*PAGE | EMAIL | TELEGRAM | WHATSAPP | PHONE | WEBSITE
201 { channel }/api/v1/admin/redirectsفهرست تغییر مسیرها.
{ items }/api/v1/admin/redirectsایجاد تغییر مسیر (ایمن در برابر حلقه).
{ redirect }/api/v1/admin/messagesصندوق پیامهای تماس + شمارش ناخوانده.
{ items, total, unread, page, pages }/api/v1/admin/learning-pathsفهرست مسیرهای یادگیری.
{ items }/api/v1/admin/learning-pathsایجاد مسیر یادگیری.
{ path }/api/v1/admin/audit-logsگزارش رخدادهای مدیریتی با فیلتر.
{ items, total, page, pages }/api/v1/admin/{resource}/{id}الگوی مشترک ویرایش برای دستهها، برچسبها، نویسندگان، صفحات، تبلیغها، تغییر مسیرها، مسیرها، کاربران و پیامها — بدنه فیلدهای همان منبع.
پارامترها
- مسیر
id*شناسه منبع
{ resource }/api/v1/admin/{resource}/{id}الگوی مشترک حذف برای همه منابع مدیریتی.
پارامترها
- مسیر
id*شناسه منبع
{ ok: true }