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: 5073
title: 'Quis omnis pariatur alias in aperiam.'
author: 'السيدة صبا الحصين'
description: 'Sapiente eveniet aliquid non odit sunt aliquam suscipit saepe veniam minima nam.'
image: 'https://gohodhod.com/images/img-avatar-newsletter.png'
primary_color: '#13b981'
slug: hasan.bashar
profile_url: 'https://gohodhod.com/@hasan.bashar'
externa_links: null
properties:
newsletter_id:
type: integer
example: 5073
title:
type: string
example: 'Quis omnis pariatur alias in aperiam.'
author:
type: string
example: 'السيدة صبا الحصين'
description:
type: string
example: 'Sapiente eveniet aliquid non odit sunt aliquam suscipit saepe veniam minima nam.'
image:
type: string
example: 'https://gohodhod.com/images/img-avatar-newsletter.png'
primary_color:
type: string
example: '#13b981'
slug:
type: string
example: hasan.bashar
profile_url:
type: string
example: 'https://gohodhod.com/@hasan.bashar'
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 dolores aut illum necessitatibus velit.'
primary_color:
type: string
description: '(hex) يجب أن يكون كود لوني صحيح'
example: '#146ec2'
slug:
type: string
description: 'لاحقة النشرة على هدهد (يمكن أن تحوي فقط أحرف لاتينية، أرقام، شرطة أفقية أو شرطة تحتية؟)'
example: unde
/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: 10524
subject: 'Excepturi aut rerum nisi et corporis.'
number: 1
description: null
created_at: '2025-02-10T10:58:24.000000Z'
updated_at: '2025-02-10T10:58:24.000000Z'
published_at: '2025-02-10T10:58:24.000000Z'
is_published: true
is_scheduled: false
-
id: 10525
subject: 'Veritatis quaerat est quaerat tenetur velit.'
number: 1
description: null
created_at: '2025-02-10T10:58:24.000000Z'
updated_at: '2025-02-10T10:58:24.000000Z'
published_at: null
is_published: false
is_scheduled: false
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: 10524
subject: 'Excepturi aut rerum nisi et corporis.'
number: 1
description: null
created_at: '2025-02-10T10:58:24.000000Z'
updated_at: '2025-02-10T10:58:24.000000Z'
published_at: '2025-02-10T10:58:24.000000Z'
is_published: true
is_scheduled: false
-
id: 10525
subject: 'Veritatis quaerat est quaerat tenetur velit.'
number: 1
description: null
created_at: '2025-02-10T10:58:24.000000Z'
updated_at: '2025-02-10T10:58:24.000000Z'
published_at: null
is_published: false
is_scheduled: false
items:
type: object
properties:
id:
type: integer
example: 10524
subject:
type: string
example: 'Excepturi aut rerum nisi et corporis.'
number:
type: integer
example: 1
description:
type: string
example: null
created_at:
type: string
example: '2025-02-10T10:58:24.000000Z'
updated_at:
type: string
example: '2025-02-10T10:58:24.000000Z'
published_at:
type: string
example: '2025-02-10T10:58:24.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: 10526
subject: 'Sit sunt aut sed quidem ea dolorem aperiam.'
number: 5
description: null
html_content: "\n
\n \n \n \n \n Sit sunt aut sed quidem ea dolorem aperiam.\n \n | \n
\n\n | \n
\n\n \n بواسطة umar\n •\n #العدد 5\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-02-10T10:58:24.000000Z'
updated_at: '2025-02-10T10:58:24.000000Z'
published_at: null
is_published: false
is_scheduled: false
properties:
id:
type: integer
example: 10526
subject:
type: string
example: 'Sit sunt aut sed quidem ea dolorem aperiam.'
number:
type: integer
example: 5
description:
type: string
example: null
html_content:
type: string
example: "\n\n \n \n \n \n Sit sunt aut sed quidem ea dolorem aperiam.\n \n | \n
\n\n | \n
\n\n \n بواسطة umar\n •\n #العدد 5\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-02-10T10:58:24.000000Z'
updated_at:
type: string
example: '2025-02-10T10:58:24.000000Z'
published_at:
type: string
example: null
is_published:
type: boolean
example: false
is_scheduled:
type: boolean
example: false
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: 786344
email: abbad.ibrahim@example.net
first_name: بيسان
last_name: السماري
source: embed
created_at: '2025-02-10T10:58:24.000000Z'
updated_at: '2025-02-10T10:58:24.000000Z'
unsubscribed_at: null
suppressed_at: null
-
id: 786345
email: zaloum.abdullah@example.com
first_name: طه
last_name: الشهري
source: dashboard
created_at: '2025-02-10T10:58:24.000000Z'
updated_at: '2025-02-10T10:58:24.000000Z'
unsubscribed_at: '2025-02-10 10:58:24'
suppressed_at: '2025-02-10 10:58:24'
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: 786344
email: abbad.ibrahim@example.net
first_name: بيسان
last_name: السماري
source: embed
created_at: '2025-02-10T10:58:24.000000Z'
updated_at: '2025-02-10T10:58:24.000000Z'
unsubscribed_at: null
suppressed_at: null
-
id: 786345
email: zaloum.abdullah@example.com
first_name: طه
last_name: الشهري
source: dashboard
created_at: '2025-02-10T10:58:24.000000Z'
updated_at: '2025-02-10T10:58:24.000000Z'
unsubscribed_at: '2025-02-10 10:58:24'
suppressed_at: '2025-02-10 10:58:24'
items:
type: object
properties:
id:
type: integer
example: 786344
email:
type: string
example: abbad.ibrahim@example.net
first_name:
type: string
example: بيسان
last_name:
type: string
example: السماري
source:
type: string
example: embed
created_at:
type: string
example: '2025-02-10T10:58:24.000000Z'
updated_at:
type: string
example: '2025-02-10T10:58:24.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: fisher.milton@example.org
first_name:
type: string
description: ''
example: temporibus
last_name:
type: string
description: ''
example: dolorum
source:
type: string
description: ''
example: asperiores
unsubscribed_at:
type: string
description: 'value ليس تاريخًا صحيحًا.'
example: '2025-02-10T10:58:24'
suppressed_at:
type: string
description: 'value ليس تاريخًا صحيحًا.'
example: '2025-02-10T10:58:24'
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: 786346
email: karam.akram@example.org
first_name: اسحق
last_name: السالم
source: dashboard
created_at: '2025-02-10T10:58:24.000000Z'
updated_at: '2025-02-10T10:58:24.000000Z'
unsubscribed_at: null
suppressed_at: '2025-02-10 10:58:24'
properties:
id:
type: integer
example: 786346
email:
type: string
example: karam.akram@example.org
first_name:
type: string
example: اسحق
last_name:
type: string
example: السالم
source:
type: string
example: dashboard
created_at:
type: string
example: '2025-02-10T10:58:24.000000Z'
updated_at:
type: string
example: '2025-02-10T10:58:24.000000Z'
unsubscribed_at:
type: string
example: null
suppressed_at:
type: string
example: '2025-02-10 10:58:24'
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: jalon42@example.org
first_name:
type: string
description: ''
example: qui
last_name:
type: string
description: ''
example: est
source:
type: string
description: ''
example: et
unsubscribed_at:
type: string
description: 'value ليس تاريخًا صحيحًا.'
example: '2025-02-10T10:58:24'
suppressed_at:
type: string
description: 'value ليس تاريخًا صحيحًا.'
example: '2025-02-10T10:58:24'
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: []