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: 4923
title: 'Ea placeat exercitationem eum cum.'
author: 'نهاد رائف مرشد هوساوي'
description: 'Ea unde repellat ut sit est veritatis amet et expedita repudiandae.'
image: 'https://gohodhod.com/images/img-avatar-newsletter.png'
primary_color: '#13b981'
slug: jobaisi
profile_url: 'https://gohodhod.com/@jobaisi'
externa_links: null
properties:
newsletter_id:
type: integer
example: 4923
title:
type: string
example: 'Ea placeat exercitationem eum cum.'
author:
type: string
example: 'نهاد رائف مرشد هوساوي'
description:
type: string
example: 'Ea unde repellat ut sit est veritatis amet et expedita repudiandae.'
image:
type: string
example: 'https://gohodhod.com/images/img-avatar-newsletter.png'
primary_color:
type: string
example: '#13b981'
slug:
type: string
example: jobaisi
profile_url:
type: string
example: 'https://gohodhod.com/@jobaisi'
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: 'Eaque eos et rerum quia et consectetur a.'
primary_color:
type: string
description: '(hex) يجب أن يكون كود لوني صحيح'
example: '#146ec2'
slug:
type: string
description: 'لاحقة النشرة على هدهد (يمكن أن تحوي فقط أحرف لاتينية، أرقام، شرطة أفقية أو شرطة تحتية؟)'
example: aliquid
/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: 10110
subject: 'Aliquid veniam adipisci ipsa eos.'
number: 1
description: null
created_at: '2025-01-20T10:25:32.000000Z'
updated_at: '2025-01-20T10:25:32.000000Z'
published_at: '2025-01-20T10:25:32.000000Z'
is_published: true
is_scheduled: false
-
id: 10111
subject: 'Enim temporibus dicta qui qui impedit quos.'
number: 3
description: null
created_at: '2025-01-20T10:25:32.000000Z'
updated_at: '2025-01-20T10:25:32.000000Z'
published_at: '2025-01-22T10:25:32.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: 10110
subject: 'Aliquid veniam adipisci ipsa eos.'
number: 1
description: null
created_at: '2025-01-20T10:25:32.000000Z'
updated_at: '2025-01-20T10:25:32.000000Z'
published_at: '2025-01-20T10:25:32.000000Z'
is_published: true
is_scheduled: false
-
id: 10111
subject: 'Enim temporibus dicta qui qui impedit quos.'
number: 3
description: null
created_at: '2025-01-20T10:25:32.000000Z'
updated_at: '2025-01-20T10:25:32.000000Z'
published_at: '2025-01-22T10:25:32.000000Z'
is_published: false
is_scheduled: true
items:
type: object
properties:
id:
type: integer
example: 10110
subject:
type: string
example: 'Aliquid veniam adipisci ipsa eos.'
number:
type: integer
example: 1
description:
type: string
example: null
created_at:
type: string
example: '2025-01-20T10:25:32.000000Z'
updated_at:
type: string
example: '2025-01-20T10:25:32.000000Z'
published_at:
type: string
example: '2025-01-20T10:25:32.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: 10112
subject: 'Quae hic excepturi voluptatibus nihil dolores consequuntur praesentium.'
number: 1
description: null
html_content: "\n
\n \n \n \n \n Quae hic excepturi voluptatibus nihil dolores consequuntur praesentium.\n \n | \n
\n\n | \n
\n\n \n بواسطة ahmed serag\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-01-20T10:25:32.000000Z'
updated_at: '2025-01-20T10:25:32.000000Z'
published_at: null
is_published: false
is_scheduled: false
properties:
id:
type: integer
example: 10112
subject:
type: string
example: 'Quae hic excepturi voluptatibus nihil dolores consequuntur praesentium.'
number:
type: integer
example: 1
description:
type: string
example: null
html_content:
type: string
example: "\n\n \n \n \n \n Quae hic excepturi voluptatibus nihil dolores consequuntur praesentium.\n \n | \n
\n\n | \n
\n\n \n بواسطة ahmed serag\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-01-20T10:25:32.000000Z'
updated_at:
type: string
example: '2025-01-20T10:25:32.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: 782778
email: obaisi.bashar@example.net
first_name: 'عبد السلام'
last_name: الشيباني
source: profile
created_at: '2025-01-20T10:25:32.000000Z'
updated_at: '2025-01-20T10:25:32.000000Z'
unsubscribed_at: '2025-01-20 10:25:32'
suppressed_at: null
-
id: 782779
email: fadi67@example.org
first_name: نظام
last_name: برماوي
source: profile
created_at: '2025-01-20T10:25:32.000000Z'
updated_at: '2025-01-20T10:25:32.000000Z'
unsubscribed_at: '2025-01-20 10:25:32'
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: 782778
email: obaisi.bashar@example.net
first_name: 'عبد السلام'
last_name: الشيباني
source: profile
created_at: '2025-01-20T10:25:32.000000Z'
updated_at: '2025-01-20T10:25:32.000000Z'
unsubscribed_at: '2025-01-20 10:25:32'
suppressed_at: null
-
id: 782779
email: fadi67@example.org
first_name: نظام
last_name: برماوي
source: profile
created_at: '2025-01-20T10:25:32.000000Z'
updated_at: '2025-01-20T10:25:32.000000Z'
unsubscribed_at: '2025-01-20 10:25:32'
suppressed_at: null
items:
type: object
properties:
id:
type: integer
example: 782778
email:
type: string
example: obaisi.bashar@example.net
first_name:
type: string
example: 'عبد السلام'
last_name:
type: string
example: الشيباني
source:
type: string
example: profile
created_at:
type: string
example: '2025-01-20T10:25:32.000000Z'
updated_at:
type: string
example: '2025-01-20T10:25:32.000000Z'
unsubscribed_at:
type: string
example: '2025-01-20 10:25:32'
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: felipe.lemke@example.com
first_name:
type: string
description: ''
example: sit
last_name:
type: string
description: ''
example: distinctio
source:
type: string
description: ''
example: sunt
unsubscribed_at:
type: string
description: 'value ليس تاريخًا صحيحًا.'
example: '2025-01-20T10:25:32'
suppressed_at:
type: string
description: 'value ليس تاريخًا صحيحًا.'
example: '2025-01-20T10:25:32'
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: 782780
email: saleem74@example.net
first_name: لنا
last_name: الصقير
source: dashboard
created_at: '2025-01-20T10:25:32.000000Z'
updated_at: '2025-01-20T10:25:32.000000Z'
unsubscribed_at: '2025-01-20 10:25:32'
suppressed_at: '2025-01-20 10:25:32'
properties:
id:
type: integer
example: 782780
email:
type: string
example: saleem74@example.net
first_name:
type: string
example: لنا
last_name:
type: string
example: الصقير
source:
type: string
example: dashboard
created_at:
type: string
example: '2025-01-20T10:25:32.000000Z'
updated_at:
type: string
example: '2025-01-20T10:25:32.000000Z'
unsubscribed_at:
type: string
example: '2025-01-20 10:25:32'
suppressed_at:
type: string
example: '2025-01-20 10:25:32'
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: elmo83@example.com
first_name:
type: string
description: ''
example: est
last_name:
type: string
description: ''
example: sit
source:
type: string
description: ''
example: unde
unsubscribed_at:
type: string
description: 'value ليس تاريخًا صحيحًا.'
example: '2025-01-20T10:25:32'
suppressed_at:
type: string
description: 'value ليس تاريخًا صحيحًا.'
example: '2025-01-20T10:25:32'
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: []