openapi: 3.0.3 info: title: 'Hodhod Api V1 - Beta' description: '' version: 1.0.0 servers: - url: 'https://gohodhod.com' paths: /api/v1/newsletter/profile-info: get: summary: 'Returns profile info for the newsletter.' operationId: returnsProfileInfoForTheNewsletter description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: newsletter_id: 5235 title: 'Ut ea est non doloremque voluptates praesentium voluptates assumenda.' author: 'عبدالجواد عيد الحنتوشي' description: 'Praesentium consequatur voluptatem harum magnam doloribus rem impedit et.' image: 'https://gohodhod.com/images/img-avatar-newsletter.png' primary_color: '#13b981' slug: bilal46 profile_url: 'https://gohodhod.com/@bilal46' externa_links: null properties: newsletter_id: type: integer example: 5235 title: type: string example: 'Ut ea est non doloremque voluptates praesentium voluptates assumenda.' author: type: string example: 'عبدالجواد عيد الحنتوشي' description: type: string example: 'Praesentium consequatur voluptatem harum magnam doloribus rem impedit et.' image: type: string example: 'https://gohodhod.com/images/img-avatar-newsletter.png' primary_color: type: string example: '#13b981' slug: type: string example: bilal46 profile_url: type: string example: 'https://gohodhod.com/@bilal46' externa_links: type: string example: null tags: - Newsletter patch: summary: 'Update profile info for the newsletter.' operationId: updateProfileInfoForTheNewsletter description: '' parameters: [] responses: { } tags: - Newsletter requestBody: required: false content: application/json: schema: type: object properties: title: type: string description: '' example: 'نشرة هدهد البريدية' author: type: string description: 'يجب ألا يتجاوز 255 حرفًا' example: 'عماد الدين' description: type: string description: 'يجب ألا يتجاوز 512 حرفًا' example: 'Qui recusandae magni dolorum laboriosam quis et omnis rem.' primary_color: type: string description: '(hex) يجب أن يكون كود لوني صحيح' example: '#146ec2' slug: type: string description: 'لاحقة النشرة على هدهد (يمكن أن تحوي فقط أحرف لاتينية، أرقام، شرطة أفقية أو شرطة تحتية؟)' example: eos /api/v1/newsletter/profile-image: post: summary: "Update newsletter's profile image." operationId: updateNewslettersProfileImage description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: boolean example: true tags: - Newsletter requestBody: required: true content: multipart/form-data: schema: type: object properties: image: type: string format: binary description: 'يجب أن يكون value صورةً. يجب أن لا يتجاوز حجم الملف value 512 كيلوبايت.' required: - image /api/v1/issues: get: summary: "Fetch a listing of the newsletter's issues." operationId: fetchAListingOfTheNewslettersIssues description: '' parameters: - in: query name: status description: '(optional) Filters issue based on status. Can only be: "draft", "published" or "scheduled"' example: null required: false schema: type: string description: '(optional) Filters issue based on status. Can only be: "draft", "published" or "scheduled"' example: null responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 10942 subject: 'Quia eos deleniti aut tenetur voluptatem sed dolorum.' number: 1 description: null created_at: '2025-03-05T08:43:04.000000Z' updated_at: '2025-03-05T08:43:04.000000Z' published_at: '2025-03-05T08:43:04.000000Z' is_published: true is_scheduled: false - id: 10943 subject: 'Odio voluptatum non alias in harum.' number: 1 description: null created_at: '2025-03-05T08:43:04.000000Z' updated_at: '2025-03-05T08:43:04.000000Z' published_at: '2025-03-07T08:43:04.000000Z' is_published: false is_scheduled: true links: first: '/?page=1' last: null prev: null next: null meta: current_page: 1 from: 1 path: / per_page: '50' to: 2 properties: data: type: array example: - id: 10942 subject: 'Quia eos deleniti aut tenetur voluptatem sed dolorum.' number: 1 description: null created_at: '2025-03-05T08:43:04.000000Z' updated_at: '2025-03-05T08:43:04.000000Z' published_at: '2025-03-05T08:43:04.000000Z' is_published: true is_scheduled: false - id: 10943 subject: 'Odio voluptatum non alias in harum.' number: 1 description: null created_at: '2025-03-05T08:43:04.000000Z' updated_at: '2025-03-05T08:43:04.000000Z' published_at: '2025-03-07T08:43:04.000000Z' is_published: false is_scheduled: true items: type: object properties: id: type: integer example: 10942 subject: type: string example: 'Quia eos deleniti aut tenetur voluptatem sed dolorum.' number: type: integer example: 1 description: type: string example: null created_at: type: string example: '2025-03-05T08:43:04.000000Z' updated_at: type: string example: '2025-03-05T08:43:04.000000Z' published_at: type: string example: '2025-03-05T08:43:04.000000Z' is_published: type: boolean example: true is_scheduled: type: boolean example: false links: type: object properties: first: type: string example: '/?page=1' last: type: string example: null prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 path: type: string example: / per_page: type: string example: '50' to: type: integer example: 2 tags: - Issues '/api/v1/issues/{issue_id}': get: summary: 'Fetch the specified issue.' operationId: fetchTheSpecifiedIssue description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: id: 10944 subject: 'Tempore est quo voluptas quisquam voluptatum et voluptatem.' number: 1 description: null html_content: "\n\n \n \n \n\n\n \n\n\n \n\n\n\n\n \n\n\n \n\n\n \n\n\n \n
\n \n Tempore est quo voluptas quisquam voluptatum et voluptatem.\n \n
\n بواسطة سلمى الصابري\n \n #العدد 1\n \n \n عرض في المتصفح\n \n
\n
\n
\n" created_at: '2025-03-05T08:43:04.000000Z' updated_at: '2025-03-05T08:43:04.000000Z' published_at: '2025-03-07T08:43:04.000000Z' is_published: false is_scheduled: true properties: id: type: integer example: 10944 subject: type: string example: 'Tempore est quo voluptas quisquam voluptatum et voluptatem.' number: type: integer example: 1 description: type: string example: null html_content: type: string example: "\n\n \n \n \n\n\n \n\n\n \n\n\n\n\n \n\n\n \n\n\n \n\n\n \n
\n \n Tempore est quo voluptas quisquam voluptatum et voluptatem.\n \n
\n بواسطة سلمى الصابري\n \n #العدد 1\n \n \n عرض في المتصفح\n \n
\n
\n
\n" created_at: type: string example: '2025-03-05T08:43:04.000000Z' updated_at: type: string example: '2025-03-05T08:43:04.000000Z' published_at: type: string example: '2025-03-07T08:43:04.000000Z' is_published: type: boolean example: false is_scheduled: type: boolean example: true tags: - Issues delete: summary: 'Remove the specified issue from storage.' operationId: removeTheSpecifiedIssueFromStorage description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: boolean example: true tags: - Issues parameters: - in: path name: issue_id description: 'The ID of the issue.' example: 3 required: true schema: type: integer '/api/v1/issues/{issue_id}/publish': post: summary: 'Publish the specified issue immediatly.' operationId: publishTheSpecifiedIssueImmediatly description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: boolean example: true tags: - Issues parameters: - in: path name: issue_id description: 'The ID of the issue.' example: 3 required: true schema: type: integer '/api/v1/issues/{issue_id}/schedule': post: summary: 'Schedue the specified issue for publish.' operationId: schedueTheSpecifiedIssueForPublish description: '' parameters: - in: query name: published_at description: 'The date and time when the issue should be published. Should be a valid datetime string and in the future (after current datetime).' example: '2023-01-01 00:00:00' required: true schema: type: string description: 'The date and time when the issue should be published. Should be a valid datetime string and in the future (after current datetime).' example: '2023-01-01 00:00:00' responses: 200: description: '' content: application/json: schema: type: boolean example: true tags: - Issues parameters: - in: path name: issue_id description: 'The ID of the issue.' example: 3 required: true schema: type: integer '/api/v1/issues/{issue_id}/cancel-schedule': post: summary: 'Cancel scheduling for the specified issue.' operationId: cancelSchedulingForTheSpecifiedIssue description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: boolean example: true tags: - Issues parameters: - in: path name: issue_id description: 'The ID of the issue.' example: 3 required: true schema: type: integer /api/v1/subscribers: get: summary: "Fetch a listing of newsletter's subscribers." operationId: fetchAListingOfNewslettersSubscribers description: '' parameters: - in: query name: status description: '(optional) Filters subscribers based on status. Can only be: "subscribed", "unsubscribed" or "supressed"' example: null required: false schema: type: string description: '(optional) Filters subscribers based on status. Can only be: "subscribed", "unsubscribed" or "supressed"' example: null responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 814284 email: fadi60@example.org first_name: حمدالله last_name: الفرحان source: import created_at: '2025-03-05T08:43:04.000000Z' updated_at: '2025-03-05T08:43:04.000000Z' unsubscribed_at: null suppressed_at: null - id: 814285 email: osama.zaloum@example.org first_name: سهير last_name: الخالدي source: import created_at: '2025-03-05T08:43:04.000000Z' updated_at: '2025-03-05T08:43:04.000000Z' unsubscribed_at: '2025-03-05 08:43:04' suppressed_at: null links: first: '/?page=1' last: null prev: null next: null meta: current_page: 1 from: 1 path: / per_page: '50' to: 2 properties: data: type: array example: - id: 814284 email: fadi60@example.org first_name: حمدالله last_name: الفرحان source: import created_at: '2025-03-05T08:43:04.000000Z' updated_at: '2025-03-05T08:43:04.000000Z' unsubscribed_at: null suppressed_at: null - id: 814285 email: osama.zaloum@example.org first_name: سهير last_name: الخالدي source: import created_at: '2025-03-05T08:43:04.000000Z' updated_at: '2025-03-05T08:43:04.000000Z' unsubscribed_at: '2025-03-05 08:43:04' suppressed_at: null items: type: object properties: id: type: integer example: 814284 email: type: string example: fadi60@example.org first_name: type: string example: حمدالله last_name: type: string example: الفرحان source: type: string example: import created_at: type: string example: '2025-03-05T08:43:04.000000Z' updated_at: type: string example: '2025-03-05T08:43:04.000000Z' unsubscribed_at: type: string example: null suppressed_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: null prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 path: type: string example: / per_page: type: string example: '50' to: type: integer example: 2 tags: - Subscribers post: summary: 'Store a newly created subscriber in storage.' operationId: storeANewlyCreatedSubscriberInStorage description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: boolean example: true tags: - Subscribers requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: 'يجب أن يكون value عنوان بريد إلكتروني صحيح البُنية.' example: xpagac@example.org first_name: type: string description: '' example: corrupti last_name: type: string description: '' example: totam source: type: string description: '' example: quisquam unsubscribed_at: type: string description: 'value ليس تاريخًا صحيحًا.' example: '2025-03-05T08:43:04' suppressed_at: type: string description: 'value ليس تاريخًا صحيحًا.' example: '2025-03-05T08:43:04' required: - email '/api/v1/subscribers/{subscriber_id}': get: summary: 'Fetch the specified subscriber.' operationId: fetchTheSpecifiedSubscriber description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: id: 814286 email: abd21@example.com first_name: أمينة last_name: الأسمري source: profile created_at: '2025-03-05T08:43:04.000000Z' updated_at: '2025-03-05T08:43:04.000000Z' unsubscribed_at: null suppressed_at: '2025-03-05 08:43:04' properties: id: type: integer example: 814286 email: type: string example: abd21@example.com first_name: type: string example: أمينة last_name: type: string example: الأسمري source: type: string example: profile created_at: type: string example: '2025-03-05T08:43:04.000000Z' updated_at: type: string example: '2025-03-05T08:43:04.000000Z' unsubscribed_at: type: string example: null suppressed_at: type: string example: '2025-03-05 08:43:04' tags: - Subscribers put: summary: 'Update the specified subscriber in storage.' operationId: updateTheSpecifiedSubscriberInStorage description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: boolean example: true tags: - Subscribers requestBody: required: false content: application/json: schema: type: object properties: email: type: string description: 'يجب أن يكون value عنوان بريد إلكتروني صحيح البُنية.' example: towne.teagan@example.net first_name: type: string description: '' example: tempora last_name: type: string description: '' example: laboriosam source: type: string description: '' example: in unsubscribed_at: type: string description: 'value ليس تاريخًا صحيحًا.' example: '2025-03-05T08:43:04' suppressed_at: type: string description: 'value ليس تاريخًا صحيحًا.' example: '2025-03-05T08:43:04' delete: summary: 'Remove the specified subscriber from storage.' operationId: removeTheSpecifiedSubscriberFromStorage description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: boolean example: true tags: - Subscribers parameters: - in: path name: subscriber_id description: 'The ID of the subscriber.' example: 1 required: true schema: type: integer '/api/v1/subscribers/{subscriber_id}/unsubscribe': post: summary: 'Unsubscribe the specified subscriber from the newsletter.' operationId: unsubscribeTheSpecifiedSubscriberFromTheNewsletter description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: boolean example: true tags: - Subscribers parameters: - in: path name: subscriber_id description: 'The ID of the subscriber.' example: 1 required: true schema: type: integer '/api/v1/subscribers/{subscriber_id}/resubscribe': post: summary: 'Resubscribe the specified subscriber to the newsletter.' operationId: resubscribeTheSpecifiedSubscriberToTheNewsletter description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: boolean example: true tags: - Subscribers parameters: - in: path name: subscriber_id description: 'The ID of the subscriber.' example: 1 required: true schema: type: integer tags: - name: Newsletter description: '' - name: Issues description: '' - name: Subscribers description: '' components: securitySchemes: default: type: http scheme: bearer description: 'You can retrieve your token by visiting your dashboard and clicking Generate API token.' security: - default: []