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 Tempore est quo voluptas quisquam voluptatum et voluptatem.\n \n | \n
\n\n | \n
\n\n \n بواسطة سلمى الصابري\n •\n #العدد 1\n •\n \n عرض في المتصفح\n \n | \n
\n\n\n\n | \n
\n\n \n \n | \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 Tempore est quo voluptas quisquam voluptatum et voluptatem.\n \n | \n
\n\n | \n
\n\n \n بواسطة سلمى الصابري\n •\n #العدد 1\n •\n \n عرض في المتصفح\n \n | \n
\n\n\n\n | \n
\n\n \n \n | \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: []