Books — entry 007 of 22

Ganjoor

Verified Aug 2026

REST API behind the Ganjoor open-source classical Persian poetry archive, covering hundreds of poets (Hafez, Rumi, Ferdowsi, and more) with full poem text, biographical metadata, manuscript images, and audio recitations. Every read endpoint (poets, poem categories, verses) is fully keyless; only the write endpoints used by the project's own contributor tools require an OAuth2 bearer token.

poetrypersianclassical-literatureaudioopen-source
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score94out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 94 on greatapis.com
<a href="https://greatapis.com/api/ganjoor/"><img src="https://greatapis.com/badge/ganjoor.svg" alt="Scored 94 on greatapis.com"></a>

Auth quickstart

  1. No key needed — call it now.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Endpoints

Auth
oauth2
AppUser32
GET/api/usersPaginated Users Information (if user does not have user:view permission list only contains him/her information) (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
filterByEmailquerynostring
filterByNickNamequerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/usersadd a new user (if you are trying to add an admin user you yourself should be admin) (Auth policies: user:add)
Request body

application/jsonRegisterRAppUser

Responses
StatusDescriptionSchema
200OKRegisterRAppUser
400Bad Request
401Unauthorized
403Forbidden
GET/api/users/base64imageGet User Image in base 64 (Auth)
Parameters
NameInRequiredType
idquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/users/behaviour/loglog user bad behaviuor (Auth policies: user:administer)
Request body

application/jsonUserCauseViewModel

Responses
StatusDescriptionSchema
200OKRUserBehaviourLog
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/users/behaviour/log/{userId}get user behaviour logs (Auth policies: user:administer)
Parameters
NameInRequiredType
userIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/users/captchaimageget a captcha image for signup or forgot password
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/users/checkmysessionCheck if my session is valid (Auth)
Parameters
NameInRequiredType
sessionIdquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/users/delsessionLogout user (users need user:delothersession to logout other users) (Auth)
Parameters
NameInRequiredType
userIdquerynostring
sessionIdquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/users/email/change/{newmail}/{secret} (Auth)
Parameters
NameInRequiredType
newmailpathyesstring
secretpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/users/email/request/change/{newmail} (Auth)
Parameters
NameInRequiredType
newmailpathyesstring
Request body

application/jsonChangeEmailViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/users/finalizesignupfinalize signup process
Request body

application/jsonVerifiedSignUpViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
POST/api/users/forgotpasswordstart forgot password process by email
Request body

application/jsonUnverifiedSignUpViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/users/imageGet User Image (Auth)
Parameters
NameInRequiredType
idquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/users/imageSet User Image (via FormData, specifying userId as 'id' in formData ) - if Files.count is 0 image would be removed - (users need user:modify to change other users image) (Auth)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/users/isadminChecks if user is admin (Auth)
Parameters
NameInRequiredType
userIdquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/users/kickoutkick out a user (Auth policies: user:administer)
Request body

application/jsonUserCauseViewModel

Responses
StatusDescriptionSchema
200OKRUserBehaviourLog
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/users/loginlogin
Request body

application/jsonLoginViewModel

Responses
StatusDescriptionSchema
200OKLoggedOnUserModel
400Bad Request
PUT/api/users/relogin/{sessionId}renew an expired session
Parameters
NameInRequiredType
sessionIdpathyesstring
Responses
StatusDescriptionSchema
200OKLoggedOnUserModel
400Bad Request
POST/api/users/resetpasswordreset password
Request body

application/jsonResetPasswordViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/users/securableitemsget logged on user securableitems (permissions) (Auth)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/users/selfdelete/finalize/{code}finalize user self delete (Auth)
Parameters
NameInRequiredType
codepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/users/selfdelete/startstart user self delete process (send a verification email to user) (Auth)
Request body

application/jsonSelfDeleteViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/users/sessionsView User Sessions (user needs user:sessions permission to view other users sessions) (Auth)
Parameters
NameInRequiredType
userIdquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/users/setmypasswordset my password (Auth)
Request body

application/jsonSetPasswordModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/users/signupsignup
Request body

application/jsonUnverifiedSignUpViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/users/verifyverify signup / forgot password / self delete user
Parameters
NameInRequiredType
typequeryno
secretquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/users/{id}returns user information (if user does not have user:view permission trying to view other users' information fails with a forbidden error) (Auth)
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200OKPublicRAppUser
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/users/{id}update existing user (if you are trying to update an admin user you yourself should be admin) (if user does not have user:modify permission trying to modify other users' information fails with a forbidden error) (Auth)
Parameters
NameInRequiredType
idpathyesstring
Request body

application/jsonRegisterRAppUser

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/users/{id}delete user (only admin users can delete other admin users, a user cannot delete himself/herself) (Auth policies: user:delete)
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/users/{id}/rolesreturns user roles (if user does not have user:view permission trying to view other users' information fails with a forbidden error) (Auth)
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/users/{id}/roles/{role}add user to role (Auth policies: user:modify)
Parameters
NameInRequiredType
idpathyesstring
rolepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/users/{id}/roles/{role}remove user from role (Auth policies: user:modify)
Parameters
NameInRequiredType
idpathyesstring
rolepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
Artifact86
GET/api/artifactsget all published artifacts (including CoverImage info but not items info)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/artifactsAdd new artifact (multipart/form-data) const data = new FormData(); data.append('name', 'تست'); data.append('description', ''); data.append('srcUrl', ''); data.append('picTitle', 'تست'); data.append('picDescription', ''); data.append('file', this.file); data.append('picSrcUrl', ''); (Auth policies: artifact:add)
Responses
StatusDescriptionSchema
200OKRArtifactMasterRecord
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/ai/create/imagescreate images for ganjoor (Auth policies: artifact:modify)
Parameters
NameInRequiredType
startPoetIdquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/ai/create/images/offlinecreate images for ganjoor - offline (Auth policies: artifact:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/bookmarkuser bookmarks (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/bookmark/item/{itemId}item bookmarks info (Auth)
Parameters
NameInRequiredType
itemIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/bookmark/item/{itemId}bookmark item (Auth)
Parameters
NameInRequiredType
itemIdpathyesstring
Responses
StatusDescriptionSchema
200OKRUserBookmark
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/bookmark/{artifactId}artifact bookmarks info (Auth)
Parameters
NameInRequiredType
artifactIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/bookmark/{artifactId}bookmark artifact (Auth)
Parameters
NameInRequiredType
artifactIdpathyesstring
Responses
StatusDescriptionSchema
200OKRUserBookmark
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/artifacts/bookmark/{bookmarkId}item bookmarks info (Auth)
Parameters
NameInRequiredType
bookmarkIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/favuser favorites (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/fav/item/{itemId}fav item (Auth)
Parameters
NameInRequiredType
itemIdpathyesstring
Responses
StatusDescriptionSchema
200OKRUserBookmark
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/fav/{artifactId}fav artifact (Auth)
Parameters
NameInRequiredType
artifactIdpathyesstring
Responses
StatusDescriptionSchema
200OKRUserBookmark
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/ganjoorget suggested ganjoor links (Auth)
Parameters
NameInRequiredType
statusqueryno
notSyncedquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/ganjoorsuggest ganjoor link (Auth)
Request body

application/jsonLinkSuggestion

Responses
StatusDescriptionSchema
200OKGanjoorLinkViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/artifacts/ganjoorremove ganjoor link (Auth policies: artifact:ganjoor)
Parameters
NameInRequiredType
linkIdquerynostring
removeItemLinkquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/ganjoor/nextunsychedimagefinds next unsynchronized suggested link with an aleady synched one from the artificat if exists, return value might be null or an array with length 1 or 2 (has paging-headers) (Auth)
Parameters
NameInRequiredType
skipquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/ganjoor/review/{linkId}/{result}review suggested ganjoor link (Auth policies: artifact:ganjoor)
Parameters
NameInRequiredType
linkIdpathyesstring
resultpathyes
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/ganjoor/sync/{linkId}/{displayOnPage}mark suggested ganjoor link as synchronized (Auth policies: artifact:ganjoor)
Parameters
NameInRequiredType
linkIdpathyesstring
displayOnPagepathyesboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/ganjoor/toctoc / temporary one time api / to be removed (Auth policies: artifact:ganjoor)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/ganjoorlink/fillsourcestart filling GanjoorLink table OriginalSource values (Auth policies: artifact:ganjoor)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/ganjoorlink/settextorigin/{ganjoorCatId}/{artifactId}start setting an artifact items as a category poems text original source (Auth policies: artifact:ganjoor)
Parameters
NameInRequiredType
ganjoorCatIdpathyesinteger
artifactIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/importimport from external resources (Auth policies: artifact:import)
Parameters
NameInRequiredType
srcTypequerynostring
resourceNumberquerynostring
friendlyUrlquerynostring
resourcePrefixquerynostring
skipUploadquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/itemupdate an artifact item info
Request body

application/jsonRArtifactItemRecord

Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
PUT/api/artifacts/item/{artifactFriendlyUrl}add a new item to an artifact (Auth policies: artifact:modify)
Parameters
NameInRequiredType
artifactFriendlyUrlpathyesstring
Request body

multipart/form-data

Responses
StatusDescriptionSchema
200OKRArtifactItemRecord
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/itemsof/{id}/{start}/{count}get artifact images according to start and count params
Parameters
NameInRequiredType
idpathyesstring
startpathyesinteger
countpathyesinteger
Responses
StatusDescriptionSchema
200OKRArtifactMasterRecordViewModel
400Bad Request
404Not Found
POST/api/artifacts/itemtagvalue/{itemId}add new tag value to item (Auth policies: artifact:edittag)
Parameters
NameInRequiredType
itemIdpathyesstring
Request body

application/jsonRTag

Responses
StatusDescriptionSchema
200OKRTagValue
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/itemtagvalue/{itemId}/{global}edit item attribute value (Auth policies: artifact:edittag)
Parameters
NameInRequiredType
itemIdpathyesstring
globalquerynoboolean
Request body

application/jsonRTagValue

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/artifacts/itemtagvalue/{itemId}/{tagId}/{valueId}/move/{upordown}changes order of tag values based on their position in an item (Auth policies: artifact:edittag)
Parameters
NameInRequiredType
itemIdpathyesstring
tagIdpathyesstring
valueIdpathyesstring
upordownpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/artifacts/itemtagvalue/{itemId}/{tagValueId}remove tag from item (Auth policies: artifact:edittag)
Parameters
NameInRequiredType
itemIdpathyesstring
tagValueIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/jobs (Auth policies: artifact:add)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/keep-alivekeep alive (for import background service)
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/artifacts/limited/{friendlyUrl}/{count}get specific artifact info with limited number of images
Parameters
NameInRequiredType
friendlyUrlpathyesstring
countpathyesinteger
Responses
StatusDescriptionSchema
200OKRArtifactMasterRecordViewModel
400Bad Request
404Not Found
POST/api/artifacts/noteadd note for artifact (Auth)
Request body

application/jsonPostUserNote

Responses
StatusDescriptionSchema
200OKRUserNoteViewModel
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/note/allall users public notes
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/artifacts/note/itemadd note for artifact item (Auth)
Request body

application/jsonPostUserNote

Responses
StatusDescriptionSchema
200OKRUserNoteViewModel
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/note/item/private/{itemId}get private notes for artifact item (Auth)
Parameters
NameInRequiredType
itemIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/note/item/{itemId}get public notes for artifact item
Parameters
NameInRequiredType
itemIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/artifacts/note/privateuser public notes (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/note/private/{artifactId}get private notes for artifact (Auth)
Parameters
NameInRequiredType
artifactIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/note/publicuser public notes (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/note/reportreport a public note (Auth)
Request body

application/jsonPostRUserNoteAbuseReportViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/artifacts/note/report/{id}delete a report for abuse in public user notes (Auth policies: note:moderate)
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/artifacts/note/reported/moderate/{reportid}delete a reported user note (accept the complaint) (Auth policies: note:moderate)
Parameters
NameInRequiredType
reportidpathyesstring
Responses
StatusDescriptionSchema
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/artifacts/note/{artifactId}get private notes for artifact
Parameters
NameInRequiredType
artifactIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
PUT/api/artifacts/note/{noteId}Edit User Notes (Auth)
Parameters
NameInRequiredType
noteIdpathyesstring
Request body

application/jsonPostUserNote

Responses
StatusDescriptionSchema
200OKRUserNoteViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/artifacts/note/{noteId}delete user notes (Auth)
Parameters
NameInRequiredType
noteIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/notes/reportedGet a list of reported notes (Auth policies: note:moderate)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/artifacts/originalimages/removestart removing original images (Auth policies: artifact:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/pinterestget suggested pinterest links (Auth)
Parameters
NameInRequiredType
statusqueryno
notSyncedquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/pinterestsuggest pinterest link for ganjoor (Auth)
Request body

application/jsonPinterestSuggestion

Responses
StatusDescriptionSchema
200OKPinterestLinkViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/artifacts/pinterestremove pinterest link (Auth policies: artifact:ganjoor)
Parameters
NameInRequiredType
linkIdquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/pinterest/review/{linkId}/{result}review suggested ganjoor pinterest link (Auth policies: artifact:ganjoor)
Parameters
NameInRequiredType
linkIdpathyesstring
altTextquerynostring
resultpathyes
reviewDescquerynostring
imageUrlquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/pinterest/sync/{linkId}mark suggested pinterest ganjoor link as synchronized (Auth policies: artifact:ganjoor)
Parameters
NameInRequiredType
linkIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/reexamineimportdue to a bug in loc json outputs some artifacts with more than 1000 pages were downloaded incompletely (Auth policies: artifact:import)
Parameters
NameInRequiredType
passquerynostring
skipUploadquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/retryimportretry import (Auth policies: artifact:import)
Parameters
NameInRequiredType
jobTypequeryno
skipUploadquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/searchsearch artifacts
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
termquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/artifacts/search/itemssearch artifact items
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
termquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/artifacts/secureget all artifacts visible by user (including CoverImage info but not items info) (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/secure/limited/{friendlyUrl}/{count}gets specified publish artifact info (including CoverImage + images) (Auth)
Parameters
NameInRequiredType
friendlyUrlpathyesstring
countpathyesinteger
Responses
StatusDescriptionSchema
200OKRArtifactMasterRecordViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/artifacts/secure/{artifactUrl}/{itemUrl}gets specified publish artifact item info (including images + attributes) (Auth)
Parameters
NameInRequiredType
artifactUrlpathyesstring
itemUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRArtifactItemRecordViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/artifacts/secure/{friendlyUrl}gets specified publish artifact info (including CoverImage + images) (Auth)
Parameters
NameInRequiredType
friendlyUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRArtifactMasterRecordViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/artifacts/secure/{friendlyUrl}/filteritemsbytag/{tagFriendlyUrl}gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag (Auth)
Parameters
NameInRequiredType
friendlyUrlpathyesstring
tagFriendlyUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRArtifactMasterRecordViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/artifacts/secure/{friendlyUrl}/filteritemsbytag/{tagFriendlyUrl}/{valueFriendlyUrl}gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag (Auth)
Parameters
NameInRequiredType
friendlyUrlpathyesstring
tagFriendlyUrlpathyesstring
valueFriendlyUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRArtifactMasterRecordViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/artifacts/tagget all tags
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/artifacts/tagadd new tag (Auth policies: tag:modify)
Request body

application/jsonRTag

Responses
StatusDescriptionSchema
200OKRTag
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/tag/move/{tagid}/in/item/{itemId}/{upordown}changes order of tags based on their position in artifact items (Auth policies: tag:modify)
Parameters
NameInRequiredType
tagIdpathyesstring
itemIdpathyesstring
upordownpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/tag/move/{tagid}/in/{artifactId}/{upordown}changes order of tags based on their position in artifacts (Auth policies: tag:modify)
Parameters
NameInRequiredType
tagIdpathyesstring
artifactIdpathyesstring
upordownpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/tag/{friendlyUrl}
Parameters
NameInRequiredType
friendlyUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRTag
400Bad Request
PUT/api/artifacts/tag/{tagid}edit tag (Auth policies: tag:modify)
Parameters
NameInRequiredType
tagidpathyesstring
Request body

application/jsonRTag

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/artifacts/tagbundle/{friendlyUrl}get tag bundle by frindly url
Parameters
NameInRequiredType
friendlyUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRTagBundleViewModel
400Bad Request
404Not Found
GET/api/artifacts/tagbundle/{friendlyUrl}/{valueUrl}get tag value bundle by frindly url
Parameters
NameInRequiredType
friendlyUrlpathyesstring
valueUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRArtifactTagViewModel
400Bad Request
404Not Found
GET/api/artifacts/tagged/{tagUrl}/{valueUrl}
Parameters
NameInRequiredType
tagUrlpathyesstring
valueUrlpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
DELETE/api/artifacts/tagvalue/{artifactId}/{tagValueId}remove tag from artifact (Auth policies: artifact:edittag)
Parameters
NameInRequiredType
artifactIdpathyesstring
tagValueIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/artifacts/tagvalue/{artifactid}add new tag value to artifact (Auth policies: artifact:edittag)
Parameters
NameInRequiredType
artifactIdpathyesstring
Request body

application/jsonRTag

Responses
StatusDescriptionSchema
200OKRTagValue
400Bad Request
401Unauthorized
403Forbidden
PUT/api/artifacts/tagvalue/{artifactid}/{global}edit artifact attribute value (Auth policies: artifact:edittag)
Parameters
NameInRequiredType
artifactidpathyesstring
globalquerynoboolean
Request body

application/jsonRTagValue

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/artifacts/tagvalue/{artifactid}/{tagId}/{valueId}/move/{upordown}changes order of tag values based on their position in an artifact (Auth policies: artifact:edittag)
Parameters
NameInRequiredType
artifactIdpathyesstring
tagIdpathyesstring
valueIdpathyesstring
upordownpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/tagvalue/{tagId}/{friendlyUrl}get tag value by frindly url
Parameters
NameInRequiredType
tagIdpathyesstring
friendlyUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRTagValue
400Bad Request
PUT/api/artifacts/upload/external/{friendlyUrl}upload artifact to external server (Auth policies: artifact:modify)
Parameters
NameInRequiredType
friendlyUrlpathyesstring
skipUploadquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/artifacts/{artifactId}remove unpublished artifact having no notes and not bookmarked (Auth policies: artifact:delete)
Parameters
NameInRequiredType
artifactIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/artifacts/{artifactUrl}/{itemUrl}gets specified publish artifact item info (including images + attributes)
Parameters
NameInRequiredType
artifactUrlpathyesstring
itemUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRArtifactItemRecordViewModel
400Bad Request
404Not Found
GET/api/artifacts/{friendlyUrl}gets specified publish artifact info (including CoverImage + images)
Parameters
NameInRequiredType
friendlyUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRArtifactMasterRecordViewModel
400Bad Request
404Not Found
GET/api/artifacts/{friendlyUrl}/filteritemsbytag/{tagFriendlyUrl}gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag
Parameters
NameInRequiredType
friendlyUrlpathyesstring
tagFriendlyUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRArtifactMasterRecordViewModel
400Bad Request
404Not Found
GET/api/artifacts/{friendlyUrl}/filteritemsbytag/{tagFriendlyUrl}/{valueFriendlyUrl}gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag
Parameters
NameInRequiredType
friendlyUrlpathyesstring
tagFriendlyUrlpathyesstring
valueFriendlyUrlpathyesstring
Responses
StatusDescriptionSchema
200OKRArtifactMasterRecordViewModel
400Bad Request
404Not Found
PUT/api/artifacts/{id}edit artifactt master record (user should have additional permissions artifact:awaiting and artifact:publish to change status of artifact) (Auth policies: artifact:modify)
Parameters
NameInRequiredType
idpathyesstring
Request body

application/jsonRArtifactMasterRecord

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/artifacts/{id}/coverSet Artifact Cover Item Index (Auth policies: artifact:modify)
Parameters
NameInRequiredType
idpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
AuditLog1
GET/api/auditlogsget all audit logs ordered by time (Auth policies: audit:view)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
userNamequerynostring
orderByTimeDescendingquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
ContributionStats4
GET/api/contributions/{dataType}/by/userdatatype grouped by user
Parameters
NameInRequiredType
dataTypepathyesstring
PageNumberquerynointeger
PageSizequerynointeger
dayquerynostring
userIdquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/contributions/{dataType}/dailydaily stats
Parameters
NameInRequiredType
dataTypepathyesstring
PageNumberquerynointeger
PageSizequerynointeger
userIdquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/contributions/{dataType}/summarysummed up stats of data
Parameters
NameInRequiredType
dataTypepathyesstring
Responses
StatusDescriptionSchema
200OKSummedUpViewModel
400Bad Request
GET/api/contributions/{userId}user contribution
Parameters
NameInRequiredType
userIdpathyesstring
Responses
StatusDescriptionSchema
200OKUserContributionsViewModel
400Bad Request
DonationAccounting13
GET/api/donationsreturns all donations
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/donationsadd donation + regenerate donations page (Auth policies: ganjoor:donations)
Request body

application/jsonGanjoorDonationViewModel

Responses
StatusDescriptionSchema
200OKGanjoorDonationViewModel
400Bad Request
401Unauthorized
403Forbidden
GET/api/donations/accountinfo/visibleis account info settings is on or off (for deciding to regenerate donations page based on it) (Auth policies: ganjoor:donations)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/donations/expensereturns all expenses
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/donations/expenseadd expense + regenerate donations page (Auth policies: ganjoor:donations)
Request body

application/jsonGanjoorExpense

Responses
StatusDescriptionSchema
200OKGanjoorDonationViewModel
400Bad Request
401Unauthorized
403Forbidden
GET/api/donations/expense/{id}expense by id
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorExpense
400Bad Request
PUT/api/donations/expense/{id}update expense date and description + regenerate donations page (Auth policies: ganjoor:donations)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/jsonUpdateDateDescriptionViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/donations/expense/{id}delete expense (Auth policies: ganjoor:donations)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/donations/onetimeimportone time import (Auth policies: ganjoor:donations)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/donations/pageregenerate donations page (Auth policies: ganjoor:donations)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/donations/{id}donation by id
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorDonationViewModel
400Bad Request
PUT/api/donations/{id}update donation date and donorname + regenerate donations page (Auth policies: ganjoor:donations)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/jsonUpdateDateDescriptionViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/donations/{id}delete donation + regenerate donations page (Auth policies: ganjoor:donations)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
ExternalFTP3
GET/api/ftpqueued ftp uploads (Auth policies: ftp:moderate)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ftp/resetreset ftp queue (Auth policies: ftp:moderate)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ftp/startprocess ftp queue (Auth policies: ftp:moderate)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
FAQ14
POST/api/faqadd a new faq item (Auth policies: faq:moderate)
Request body

application/jsonFAQItem

Responses
StatusDescriptionSchema
200OKFAQCategory
400Bad Request
401Unauthorized
403Forbidden
PUT/api/faqupdate an existing faq item (Auth policies: faq:moderate)
Request body

application/jsonFAQItem

Responses
StatusDescriptionSchema
200OKFAQCategory
400Bad Request
401Unauthorized
403Forbidden
GET/api/faq/catget published categories
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/faq/catadd a new faq category (Auth policies: faq:moderate)
Request body

application/jsonFAQCategory

Responses
StatusDescriptionSchema
200OKFAQCategory
400Bad Request
401Unauthorized
403Forbidden
PUT/api/faq/catupdate an existing faq category (Auth policies: faq:moderate)
Request body

application/jsonFAQCategory

Responses
StatusDescriptionSchema
200OKFAQCategory
400Bad Request
401Unauthorized
403Forbidden
GET/api/faq/cat/itemsget published category items
Parameters
NameInRequiredType
catIdquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/faq/cat/items/secureget all category items (Auth policies: faq:moderate)
Parameters
NameInRequiredType
catIdquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/faq/cat/secureget all categories (Auth policies: faq:moderate)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/faq/cat/secure/{id}get category by id (Auth policies: faq:moderate)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKFAQCategory
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/faq/cat/{id}delete a faq category (Auth policies: faq:moderate)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/faq/pinnedget published pinned items
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/faq/secure/{id}get item by id (Auth policies: faq:moderate)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKFAQItem
400Bad Request
401Unauthorized
403Forbidden
GET/api/faq/{id}get published item by id
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKFAQItem
400Bad Request
DELETE/api/faq/{id}delete a faq item (Auth policies: faq:moderate)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
Ganjoor209
PUT/api/ganjoor/ai/generate/poem/geogeo tag poems using AI (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
startFromquerynointeger
countquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/ai/generate/poem/summariesfill poem summaries using open ai (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
startFromquerynointeger
countquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/ai/generate/summariesfill couplet summaries using open ai (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
startFromquerynointeger
countquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/bookmarkuser bookmarks (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
qquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/bookmark/switch/ret/{poemId}/{coupletIndex}switch bookmark and return bookmark id ('0' for switching off a bookmark) (Auth)
Parameters
NameInRequiredType
poemIdpathyesinteger
coupletIndexpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/ganjoor/bookmark/switch/{poemId}/{coupletIndex}switch bookmark (Auth)
Parameters
NameInRequiredType
poemIdpathyesinteger
coupletIndexpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/ganjoor/bookmark/{bookmarkId}modify bookmark private note (Auth)
Parameters
NameInRequiredType
bookmarkIdpathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/ganjoor/bookmark/{bookmarkId}delete bookmark (Auth)
Parameters
NameInRequiredType
bookmarkIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/bookmark/{poemId}get poem user bookmarks (only Id, CoupletIndex and DateTime are valid in the output view model) (Auth)
Parameters
NameInRequiredType
poemIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/bookmark/{poemId}/{coupletIndex}is the poem couplet is bookmarked by user (Auth)
Parameters
NameInRequiredType
poemIdpathyesinteger
coupletIndexpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/ganjoor/bookmark/{poemId}/{coupletIndex}Bookmark couplet if it is not (Auth)
Parameters
NameInRequiredType
poemIdpathyesinteger
coupletIndexpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/bookslist of books
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/ganjoor/catcat by full url
Parameters
NameInRequiredType
urlquerynostring
poemsquerynoboolean
mainSectionsquerynoboolean
Responses
StatusDescriptionSchema
200OKGanjoorPoetCompleteViewModel
400Bad Request
404Not Found
POST/api/ganjoor/cat/correctionsend cat corrections (Auth)
Request body

application/jsonGanjoorCatCorrectionViewModel

Responses
StatusDescriptionSchema
200OKGanjoorCatCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/cat/correction/last/{id}returns last unreviewed correction from the user for a cat (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorCatCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/ganjoor/cat/correction/moderatemoderate cat correction (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorCatCorrectionViewModel

Responses
StatusDescriptionSchema
200OKGanjoorCatCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/cat/correction/nextget next unreviewed cat correction (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
skipquerynointeger
onlyUserCorrectionsquerynoboolean
Responses
StatusDescriptionSchema
200OKGanjoorCatCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/cat/correction/{id}get cat correction by id (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorCatCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
DELETE/api/ganjoor/cat/correction/{id}delete unreviewed user cat corrections for a poem (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/cat/corrections/allget list of all suggested cat corrections (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
userIdquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/cat/corrections/mineget list of user suggested cat corrections (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/cat/extra/{id}set category extra info (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorCatViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/ganjoor/cat/language/{id}/{language}set category poems language tag (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
languagepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/cat/poemformat/{id}/{poemformat}set category poems language tag (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
poemformatpathyes
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/cat/recaptionpoems/{id}batch rename cat poems (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/jsonGanjoorBatchNamingModel

Responses
StatusDescriptionSchema
200OKGanjoorPageCompleteViewModel
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/cat/reslugpoems/{id}batch resulg category poems (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/cat/startassigningrhymes/{id}/{retag} (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
retagpathyesboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/cat/startassigningrhythms/{id}/{retag}start assigning poem rhythms (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
retagpathyesboolean
rhythmquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/cat/subcats/startgentoc/{id}start generating sub cats TOC (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
ganjoorTOCqueryno
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/cat/toc/regenregenerate TOCs (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/cat/toc/{id}/{options}generate category toc (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
optionspathyes
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/cat/toc/{id}/{options}directly insert generated TOC (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
optionspathyes
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/cat/{id}cat by id
Parameters
NameInRequiredType
idpathyesinteger
poemsquerynoboolean
mainSectionsquerynoboolean
Responses
StatusDescriptionSchema
200OKGanjoorPoetCompleteViewModel
400Bad Request
404Not Found
DELETE/api/ganjoor/cat/{id}delete a category (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPageCompleteViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/cat/{id}/corrections/effectiveeffective corrections for a cat
Parameters
NameInRequiredType
idpathyesinteger
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/ganjoor/cat/{id}/geotagget a categoty poem tags
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/ganjoor/cat/{id}/imagesget category poem related images
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/ganjoor/cat/{id}/papersourcesget paper sources for a catgeory
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
PUT/api/ganjoor/cat/{id}/regenrelatedsectionsregenerate category related sections (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/centuriesgets list of poets grouped by centuries (first one is the pinned ones)
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/ganjoor/commentpost new comment (Auth)
Request body

application/jsonGanjoorCommentPostViewModel

Responses
StatusDescriptionSchema
200OKGanjoorCommentSummaryViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/ganjoor/commentdelete user's own comment (Auth)
Parameters
NameInRequiredType
idquerynointeger
Responses
StatusDescriptionSchema
400Bad Request
401Unauthorized
403Forbidden
404Not Found
DELETE/api/ganjoor/comment/awaiting/deletedelete awaiting comment (Auth policies: ganjoor:moderate)
Parameters
NameInRequiredType
idquerynointeger
Responses
StatusDescriptionSchema
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/ganjoor/comment/awaiting/publishpublish awaiting comment (Auth policies: ganjoor:moderate)
Request body

application/json

Responses
StatusDescriptionSchema
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/ganjoor/comment/reportreport a comment (Auth)
Request body

application/jsonGanjoorPostReportCommentViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/ganjoor/comment/report/{id}delete a report (without deleting corresponding comment) (Auth policies: ganjoor:moderate)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/ganjoor/comment/reported/moderate/{reportid}delete reported other users comment (Auth policies: ganjoor:moderate)
Parameters
NameInRequiredType
reportidpathyesinteger
Responses
StatusDescriptionSchema
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/ganjoor/comment/{id}edit user's own comment (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/json

Responses
StatusDescriptionSchema
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/ganjoor/comment/{id}/editlink/{coupletIndex}link or unlink user's own comment to a coupletIndex (Auth)
Parameters
NameInRequiredType
idpathyesinteger
coupletIndexpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/commentsget recent comments
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
filterUserIdquerynostring
termquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/comments/awaitingget awaiting comments (Auth policies: ganjoor:moderate)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/comments/mineget logged on users recent comments (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/comments/reportedget list of reported comments (Auth policies: ganjoor:moderate)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/comments/{id}get a single comment information (only published comments, replies are not included)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorCommentFullViewModel
400Bad Request
404Not Found
POST/api/ganjoor/correction/moderatemoderate poem correction (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorPoemCorrectionViewModel

Responses
StatusDescriptionSchema
200OKGanjoorPoemCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/correction/{id}get correction by id (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPoemCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/corrections/allget list of all suggested corrections (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
userIdquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/corrections/mineget list of user suggested corrections (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/couplet/{poemId}/{coupletIndex}/sectionsget couplet sections
Parameters
NameInRequiredType
poemIdpathyesinteger
coupletIndexpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
PUT/api/ganjoor/duplicates/finish/{srcCatId}/{destCatId}start removing category duplicates (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
srcCatIdpathyesinteger
destCatIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/duplicates/manual/{srcCatId}/{srcPoemId}/{destPoemId}manually add a duplicate for a poems (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
srcCatIdpathyesinteger
srcPoemIdpathyesinteger
destPoemIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/duplicates/{catId}list of category saved duplicated poems (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
catIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
DELETE/api/ganjoor/duplicates/{id}delete a duplicate (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/duplicates/{srcCatId}/{destCatId}Finding Category Poems Duplicates (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
srcCatIdpathyesinteger
destCatIdpathyesinteger
hardTryquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/fillpoemscoupletindicesstart filling poems couplet indices (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/fillsectioncoupletcountsfill section couplet counts (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/fixlongurlsincommentsexamine comments for long links (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/generatemissingbookcoversgenerate missing book covers (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/generaterelatedsectionsinfostart generating related sections info for wholepoem sections (Auth policies: ganjoor:import)
Parameters
NameInRequiredType
regeneratequerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/hafez/faalget a random poem from hafez
Responses
StatusDescriptionSchema
200OKGanjoorPoemCompleteViewModel
400Bad Request
POST/api/ganjoor/healthcheckexamine site pages for broken links (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/maintenance/regenfulltitlesregenerate poem full titles to fix an old bug (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/naskbansynchronize https:://naskban.ir links (logs in and then out to naskban.ir using auth info) (Auth policies: ganjoor:moderate)
Request body

application/jsonLoginViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/naskban (Auth policies: ganjoor:moderate)
Request body

application/jsonLoginViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/ganjoor/naskbandelete poem related naskban images by url (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
naskbanUrlquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/naskban/humanreviewed/{naskbanBookId}/{catId}/{humanReviewed}mark naskban links for poems of a categiory and its children as human reviewed (Auth policies: ganjoor:moderate)
Parameters
NameInRequiredType
naskbanBookIdpathyesinteger
catIdpathyesinteger
humanReviewedpathyesboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/naskban/import/matchingbooksimport naskban ganjoor matchings (Auth policies: ganjoor:moderate)
Request body

application/jsonLoginViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/naskban/import/poetbooks/{poetId}discover poet naskban paper sources (Auth policies: ganjoor:moderate)
Parameters
NameInRequiredType
poetIdpathyesinteger
Request body

application/jsonLoginViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/naskban/textoriginal/{naskbanBookId}/{catId}/{textOriginal}mark naskban links a text original for a category (Auth policies: ganjoor:moderate)
Parameters
NameInRequiredType
naskbanBookIdpathyesinteger
catIdpathyesinteger
textOriginalpathyesboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/oldversion/{id}get old version of page (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorModifyPageViewModel
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/ontime/fixbandcoupletsstart band couplets fix (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/pagepage by url
Parameters
NameInRequiredType
urlquerynostring
catPoemsquerynoboolean
commentSortOrderqueryno
Responses
StatusDescriptionSchema
200OKGanjoorPageCompleteViewModel
400Bad Request
404Not Found
POST/api/ganjoor/pageadd new page (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorPage

Responses
StatusDescriptionSchema
200OKGanjoorPage
400Bad Request
401Unauthorized
403Forbidden
404Not Found
DELETE/api/ganjoor/page/cache/{id}clean cache by id (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPageCompleteViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/page/oldversions/{id}older versions of a page (modifications history except for current version) (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/page/{id}modify page (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/jsonGanjoorModifyPageViewModel

Responses
StatusDescriptionSchema
200OKGanjoorPageCompleteViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
DELETE/api/ganjoor/page/{id}delete page (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPageCompleteViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/pageurlpage url by id
Parameters
NameInRequiredType
idquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
PUT/api/ganjoor/papersources/import/{poetid}import paper sources from museum (Auth policies: ganjoor:moderate)
Parameters
NameInRequiredType
poetidpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/ganjoor/periodsregenerate half centuries (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OKGanjoorPoetCompleteViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/poemget poem by url
Parameters
NameInRequiredType
urlquerynostring
catInfoquerynoboolean
catPoemsquerynoboolean
rhymesquerynoboolean
recitationsquerynoboolean
imagesquerynoboolean
songsquerynoboolean
commentsquerynoboolean
verseDetailsquerynoboolean
navigationquerynoboolean
Responses
StatusDescriptionSchema
200OKGanjoorPoemCompleteViewModel
400Bad Request
404Not Found
PUT/api/ganjoor/poem/adminedit/{id}modify poem => only these fields: NoIndex, RedirectFromFullUrl, MixedModeOrder (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/jsonGanjoorModifyPageViewModel

Responses
StatusDescriptionSchema
200OKGanjoorPageCompleteViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/poem/analysisrhyme/{id}find poem rhyme
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjooRhymeAnalysisResult
400Bad Request
GET/api/ganjoor/poem/analysisrhythm/{id}analysis poem to find its prosody information
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/ganjoor/poem/breakbreak a poem from a verse forward (Auth policies: ganjoor:modify)
Request body

application/jsonPoemVerseOrder

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/ganjoor/poem/comment/{id}/rateRate a comment (like / dislike / clear rating) (Auth)
Parameters
NameInRequiredType
idpathyesinteger
valuequerynointeger
Responses
StatusDescriptionSchema
200OKGanjoorCommentRatingResultViewModel
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/poem/correctionsend poem corrections (Auth)
Request body

application/jsonGanjoorPoemCorrectionViewModel

Responses
StatusDescriptionSchema
200OKGanjoorPoemCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/poem/correction/last/{id}returns last unreviewed correction from the user for a poem (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPoemCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/poem/correction/nextget next unreviewed correction (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
skipquerynointeger
onlyUserCorrectionsquerynoboolean
Responses
StatusDescriptionSchema
200OKGanjoorPoemCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
DELETE/api/ganjoor/poem/correction/{id}delete unreviewed user corrections for a poem (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPoemCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/ganjoor/poem/geotagadd poem geo tag (Auth policies: ganjoor:modify)
Request body

application/jsonPoemGeoDateTag

Responses
StatusDescriptionSchema
200OKPoemGeoDateTag
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/poem/geotagupdate poem tag (Auth policies: ganjoor:modify)
Request body

application/jsonPoemGeoDateTag

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/ganjoor/poem/geotag/{id}delete poem tag (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/poem/randomget a random poem from a poet (c.ganjoor.net replacement), 0 means random poet, حافظ (2)، خیام (3)، ابوسعید ابوالخیر (26)، صائب (22)، سعدی (7)، باباطاهر (28)، مولوی (5)، اوحدی (19)، خواجو (20)، شهریار (35)، عراقی (21)، فروغی بسطامی (32)، سلمان ساوجی (40)، محتشم کاشانی (29)، امیرخسرو دهلوی (34)، سیف فرغانی (31)، عبید زاکانی (33)، هاتف اصفهانی (25) یا رهی معیری (41)
Parameters
NameInRequiredType
poetIdquerynointeger
Responses
StatusDescriptionSchema
200OKGanjoorPoemCompleteViewModel
400Bad Request
GET/api/ganjoor/poem/{id}get poem by id
Parameters
NameInRequiredType
idpathyesinteger
catInfoquerynoboolean
catPoemsquerynoboolean
rhymesquerynoboolean
recitationsquerynoboolean
imagesquerynoboolean
songsquerynoboolean
commentsquerynoboolean
verseDetailsquerynoboolean
navigationquerynoboolean
relatedpoemsquerynoboolean
commentSortOrderqueryno
Responses
StatusDescriptionSchema
200OKGanjoorPoemCompleteViewModel
400Bad Request
404Not Found
DELETE/api/ganjoor/poem/{id}delete a poem (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPageCompleteViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/poem/{id}/commentsGet Poem Comments
Parameters
NameInRequiredType
idpathyesinteger
coupletIndexquerynointeger
sortOrderqueryno
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poem/{id}/comments/myratingsget the logged on user's own rating values for a poem's comments (meant to be merged client-side into an already fetched, anonymously cacheable comment list) (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/poem/{id}/corrections/effectiveeffective corrections for poem
Parameters
NameInRequiredType
idpathyesinteger
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/ganjoor/poem/{id}/geotagget poem tags ordered by LunarDateTotalNumber then by Id
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/ganjoor/poem/{id}/imagesget poem images (PlainText/HtmlText are intentionally empty)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poem/{id}/quotedsget quoted poems for a poem
Parameters
NameInRequiredType
idpathyesinteger
skipquerynointeger
itemsCountquerynointeger
onlyClaimedByBothPoetsquerynoboolean
publishedquerynoboolean
chosenForMainListquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poem/{id}/quoteds/{relatedId}two poems quoted records
Parameters
NameInRequiredType
idpathyesinteger
relatedIdpathyesinteger
publishedquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poem/{id}/recitationsget poem recitations (PlainText/HtmlText are intentionally empty)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poem/{id}/recitations/upvotesget user upvoted recitations of a poem (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/poem/{id}/sections/regenerateregenerate poem sections (dangerous: wipes out existing data) (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/poem/{id}/songsget poem songs
Parameters
NameInRequiredType
idpathyesinteger
approvedquerynoboolean
trackTypequeryno
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poem/{id}/versesget poem verses by id
Parameters
NameInRequiredType
idpathyesinteger
coupletIndexquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
PUT/api/ganjoor/poemformats/fillmissingfill missing poem formats (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/poems/searchsearch
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
termquerynostring
poetIdquerynointeger
catIdquerynointeger
equerynoarray
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poems/similarGet Similar Poems accroding to prosody and rhyme informations
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
metrequerynostring
rhymequerynostring
poetIdquerynointeger
catIdquerynointeger
languagequerynostring
formatqueryno
termquerynostring
coupletCountsFromquerynointeger
coupletCountsToquerynointeger
equerynoarray
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poetpoet by url
Parameters
NameInRequiredType
urlquerynostring
Responses
StatusDescriptionSchema
200OKGanjoorPoetCompleteViewModel
400Bad Request
404Not Found
POST/api/ganjoor/poetcreate new poet (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorPoetViewModel

Responses
StatusDescriptionSchema
200OKGanjoorPoetCompleteViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/ganjoor/poet/image/{id}set poet image (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/poet/image/{url}.gifget poet image
Parameters
NameInRequiredType
urlpathyesstring
nocachequerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poet/image/{url}.pngget poet image with png ext
Parameters
NameInRequiredType
urlpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poet/{id}poet by id
Parameters
NameInRequiredType
idpathyesinteger
catPoemsquerynoboolean
Responses
StatusDescriptionSchema
200OKGanjoorPoetCompleteViewModel
400Bad Request
404Not Found
PUT/api/ganjoor/poet/{id}update poet info (except for image) (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/jsonGanjoorPoetViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
DELETE/api/ganjoor/poet/{id}starts deleting poet job ` (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/poetsget list of published poets without their biography
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/poets/secureget list of all poets (including unpublished ones) with their bio (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/ganjoor/probablemetre/dismiss/{id}dismiss ganjoor poem probable metre (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/probablemetre/listget a list of ganjoor poems probable metres
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/ganjoor/probablemetre/nextget next ganjoor poem probable metre
Responses
StatusDescriptionSchema
200OKGanjoorPoemSection
400Bad Request
404Not Found
PUT/api/ganjoor/probablemetre/save/{id}save ganjoor poem probable metre (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/ganjoor/prosody/transfer/{srcId}/{destId}transfer poems and sections from a meter to another one and delete the source meter (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
srcIdpathyesinteger
destIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/publicdata/batchexportstart exporting all published Ganjoor data to the public git-tracked JSON data set (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/publicdata/import(re)build local Ganjoor content from a public data export tree (local folder or HTTP) — intended for local development use, not for production servers (Auth policies: ganjoor:import)
Request body

application/jsonPublicDataImportRequestDto

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/quotedget quoted poems
Parameters
NameInRequiredType
poetIdquerynointeger
relatedPoetIdquerynointeger
chosenquerynoboolean
publishedquerynoboolean
claimedquerynoboolean
indirectquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/ganjoor/quotedinsert quoted (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorQuotedPoemViewModel

Responses
StatusDescriptionSchema
200OKGanjoorQuotedPoemViewModel
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/quotedupdate quoted (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorQuotedPoemViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/ganjoor/quoteddelete quoted (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/quoted/discover/{poetId}/{relatedPoetId}/{breakOnFirstSimilar}/{relatedSubCatId}discover related poems (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
poetIdpathyesinteger
relatedPoetIdpathyesinteger
breakOnFirstSimilarpathyesboolean
relatedSubCatIdpathyesinteger
insertReversequerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/quoted/extractextracting quoted poems (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/quoted/moderatemoderate quoted poems (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorQuotedPoemModerationViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/quoted/pages/generateregenerate related poems pages (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/quoted/pages/generate/{poetId}/{relatedPoetId}regenerate two poets similar page (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
poetIdpathyesinteger
relatedPoetIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/quoted/suggestget list of user suggested corrections (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/quoted/suggestsuggest new quote (for normal users) (Auth)
Request body

application/jsonGanjoorQuotedPoemViewModel

Responses
StatusDescriptionSchema
200OKGanjoorQuotedPoemViewModel
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/quoted/suggestion/nextnext unmoderated quoted poem (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
skipquerynointeger
Responses
StatusDescriptionSchema
200OKGanjoorQuotedPoemViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/quoted/{id}get quoted by id
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200OKGanjoorQuotedPoemViewModel
400Bad Request
PUT/api/ganjoor/rebuild/mundexstart updating mundex page (Auth policies: ganjoor:songrevu)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/rebuild/statsregenerate stats page (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/redirecturlget redirect url for a url
Parameters
NameInRequiredType
urlquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
POST/api/ganjoor/refillcoupletindices/{poemId}refill couplet indices for poem (Auth policies: ganjoor:import)
Parameters
NameInRequiredType
poemIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/regenplaintext/{catId}separate verses in poem.PlainText with Environment.NewLine instead of SPACE (Auth policies: ganjoor:import)
Parameters
NameInRequiredType
catIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/rhythmsreturns ganjoor metre list ordered by rhythm
Parameters
NameInRequiredType
sortOnVerseCountquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/section/analyserhyme/{id}find poem section rhyming letters
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjooRhymeAnalysisResult
400Bad Request
POST/api/ganjoor/section/correctionsend a correction for a section (Auth)
Request body

application/jsonGanjoorPoemSectionCorrectionViewModel

Responses
StatusDescriptionSchema
200OKGanjoorPoemSectionCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/section/correction/last/{id}returns last unreviewed correction from the user for a section (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPoemSectionCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/section/correction/nextget next unreviewed correction for poem sections (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
skipquerynointeger
deletedUserSectionsquerynoboolean
Responses
StatusDescriptionSchema
200OKGanjoorPoemSectionCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/section/correction/{id}get section correction by id (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPoemSectionCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
DELETE/api/ganjoor/section/correction/{id}delete unreviewed user corrections for a poem section (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/section/corrections/allget list of all suggested corrections (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/section/corrections/mineget list of user suggested corrections (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/section/moderatemoderate poem section correction (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorPoemSectionCorrectionViewModel

Responses
StatusDescriptionSchema
200OKGanjoorPoemSectionCorrectionViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/section/{id}/corrections/effectiveeffective corrections for section
Parameters
NameInRequiredType
idpathyesinteger
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/ganjoor/section/{poemId}/{sectionIndex}/relatedGet Section Related ones
Parameters
NameInRequiredType
poemIdpathyesinteger
sectionIndexpathyesinteger
skipquerynointeger
itemsCountquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
DELETE/api/ganjoor/section/{poemId}/{sectionIndex}/{convertVerses}delete a poem section (section should not be linked to a poem verse of types other than paragraphs or comments) (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
poemIdpathyesinteger
sectionIndexpathyesinteger
convertVersespathyesboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/section/{sectionId}get a specific poem section
Parameters
NameInRequiredType
sectionIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/ganjoor/sections/tagged/languagelanguage tagged poem sections
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
languagequerynostring
poetIdquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/ganjoor/sections/updaterelatedupdate related sections manually (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
metreIdquerynointeger
rhymequerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/sections/{poemId}get all poem sections
Parameters
NameInRequiredType
poemIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
POST/api/ganjoor/singlecouplets/startfindingrhymesstart finding rhymes (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/sitemapstart building sitemap (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/ganjoor/sitemap/tajikbuild tj.ganjoor.net site map (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/songget next unreviewed song (Auth)
Parameters
NameInRequiredType
skipquerynointeger
onlyMinequerynoboolean
Responses
StatusDescriptionSchema
200OKPoemMusicTrackViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
POST/api/ganjoor/songsuggest song for poem (Auth)
Request body

application/jsonPoemMusicTrackViewModel

Responses
StatusDescriptionSchema
200OKPoemMusicTrackViewModel
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/songreview song (Auth policies: ganjoor:songrevu)
Request body

application/jsonPoemMusicTrackViewModel

Responses
StatusDescriptionSchema
200OKPoemMusicTrackViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/ganjoor/songdelete a poem song by id (Auth policies: ganjoor:songrevu)
Parameters
NameInRequiredType
idquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/song/adddirectly insert a poem related song (Auth policies: ganjoor:songadd)
Request body

application/jsonPoemMusicTrackViewModel

Responses
StatusDescriptionSchema
200OKPoemMusicTrackViewModel
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/song/mysuggestionsuser suggested songs (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/song/updatemodify a published song (Auth policies: ganjoor:songrevu)
Request body

application/jsonPoemMusicTrackViewModel

Responses
StatusDescriptionSchema
200OKPoemMusicTrackViewModel
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/song/user/stats/{userId}history of suggested songs by a user (Auth policies: ganjoor:songrevu)
Parameters
NameInRequiredType
userIdpathyesstring
Responses
StatusDescriptionSchema
200OKUserSongSuggestionsHistory
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/song/{id}get song by id (Auth policies: ganjoor:songrevu)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKPoemMusicTrackViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/ganjoor/sourcedigital source from tag
Parameters
NameInRequiredType
sourceUrlSlugquerynostring
Responses
StatusDescriptionSchema
200OKDigitalSource
400Bad Request
POST/api/ganjoor/source/stats/rebuildupdate digital sources stats (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/source/{catId}tag category with source (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
catIdpathyesinteger
Request body

application/jsonDigitalSource

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/sqlite/batchexportstart exporting all poets (Auth policies: ganjoor:songrevu)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/sqlite/export/{poetId}export a poet to sqlite database (Auth policies: ganjoor:import)
Parameters
NameInRequiredType
poetIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/sqlite/import/cat/{catId}import category data from ganjoor SQLite database (form file) (Auth policies: ganjoor:import)
Parameters
NameInRequiredType
catIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/sqlite/import/{poetId}imports data from ganjoor SQLite database (form file) (Auth policies: ganjoor:import)
Parameters
NameInRequiredType
poetIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/sqlite/update/{poetId}Apply corrections from sqlite (Auth policies: ganjoor:import)
Parameters
NameInRequiredType
poetIdpathyesinteger
notequerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/startfindingmissingrhythmsStart Finding Missing Rhythms (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
onlyPoemsWithRhymesquerynoboolean
poemsNumquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/tajik/pagetajik page by url
Parameters
NameInRequiredType
urlquerynostring
catPoemsquerynoboolean
Responses
StatusDescriptionSchema
200OKGanjoorPageCompleteViewModel
400Bad Request
404Not Found
GET/api/ganjoor/tajik/poetstajik poets
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/ganjoor/tajik/publicdata/batchexportstart exporting the Tajik (Cyrillic) overlay data to its own, separate public git-tracked JSON data set — only poets/categories/poems with an actual Tajik translation are included (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/tajik/regenerate-htmlre-runs the Tajik poet/category HTML generators for every already-imported poet and category page, overwriting their stored TajikHtmlText. Needed one-time after changing either generator function (e.g. adding poem excerpts to the table of contents), since the normal SQLite import skips pages that already exist and never refreshes them. Runs as a background job - check the Admin area's LongRunningJobs page for progress. (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/tajik/restore-poem-htmlrecovery job: regenerates TajikHtmlText for Tajik poems whose stored HTML currently contains a link (the signature left by the CatPage id corruption bug) - use after RegenerateTajikCatAndPoetHtmlText (or anything else) may have corrupted poem pages. Check the Admin area's LongRunningJobs page for progress. (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/tajik/searchsearch tajik poems
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
termquerynostring
poetIdquerynointeger
catIdquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
PUT/api/ganjoor/tajik/sqlite/onetime/import (Auth policies: ganjoor:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/user/profile/{id}Get user public profile
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200OKGanjoorUserPublicProfile
400Bad Request
404Not Found
GET/api/ganjoor/wordcounts/bycatcomparison of word counts for poets
Parameters
NameInRequiredType
termquerynostring
PageNumberquerynointeger
PageSizequerynointeger
catIdquerynointeger
poetIdquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/wordcounts/bycat/countCategoryWordCount for a specific term in a category
Parameters
NameInRequiredType
termquerynostring
catIdquerynointeger
poetIdquerynointeger
Responses
StatusDescriptionSchema
200OKCategoryWordCount
400Bad Request
PUT/api/ganjoor/wordcounts/fillwordcountsone time fixer for word counts new RowNmbrInCat fields (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/ganjoor/wordcounts/fillwordcountsummeriesone time fixer for category word count summries (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/ganjoor/wordcounts/rebuild/{poetId}build word counts (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
resetquerynoboolean
poetIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/ganjoor/wordcounts/{catId}category word counts
Parameters
NameInRequiredType
catIdpathyesinteger
termquerynostring
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/ganjoor/wordsums/{catId}category words summary
Parameters
NameInRequiredType
catIdpathyesinteger
Responses
StatusDescriptionSchema
200OKCategoryWordCountSummary
400Bad Request
GanjoorPoetSuggestedPhotos7
POST/api/poetphotosadd a suggestion for poets photos (send form) with these fields: poetId, title, description, srcUrl and an image attachment (Auth)
Responses
StatusDescriptionSchema
200OKGanjoorPoetSuggestedPictureViewModel
400Bad Request
401Unauthorized
403Forbidden
PUT/api/poetphotosmodify a suggestion for poets photos (Auth policies: ganjoor:photos)
Request body

application/jsonGanjoorPoetSuggestedPictureViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/poetphotos/poet/{id}returns list of suggested photos for a poet
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
PUT/api/poetphotos/reject/{id}reject a suggestion for poets photos (Auth policies: ganjoor:photos)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/poetphotos/unpublished/nextreturn the next unpublished suggested line for poets (Auth policies: ganjoor:photos)
Parameters
NameInRequiredType
skipquerynointeger
Responses
StatusDescriptionSchema
200OKGanjoorPoetSuggestedPictureViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/poetphotos/{id}returns a single suggested photo (Auth policies: ganjoor:photos)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPoetSuggestedPictureViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/poetphotos/{id}delete published suggested photo (Auth policies: ganjoor:photos)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GanjoorPoetSuggestedSpecLines7
POST/api/poetspecsadd a suggestion for poets spec lines (Auth)
Request body

application/jsonGanjoorPoetSuggestedSpecLineViewModel

Responses
StatusDescriptionSchema
200OKGanjoorPoetSuggestedSpecLineViewModel
400Bad Request
401Unauthorized
403Forbidden
PUT/api/poetspecsmodify a suggestion for poets spec lines (Auth policies: ganjoor:photos)
Request body

application/jsonGanjoorPoetSuggestedSpecLineViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/poetspecs/poet/{id}returns list of suggested spec lines for a poet
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
PUT/api/poetspecs/reject/{id}reject a suggestion for poets spec lines (Auth policies: ganjoor:photos)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/poetspecs/unpublished/nextreturn the next unpublished suggested line for poets (Auth policies: ganjoor:photos)
Parameters
NameInRequiredType
skipquerynointeger
Responses
StatusDescriptionSchema
200OKGanjoorPoetSuggestedSpecLineViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/poetspecs/{id}returns specific suggested line for poets (Auth policies: ganjoor:photos)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorPoetSuggestedSpecLineViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/poetspecs/{id}delete published suggested spec line (Auth policies: ganjoor:photos)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GeoLocation5
GET/api/locationsget all locations
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/locationsadd new location (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorGeoLocation

Responses
StatusDescriptionSchema
200OKGanjoorGeoLocation
400Bad Request
401Unauthorized
403Forbidden
PUT/api/locationsupdate an existing location (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorGeoLocation

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/locations/{id}get location by id
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorGeoLocation
400Bad Request
DELETE/api/locations/{id} (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
Image5
GET/api/images/cropped/{id}Generate Cropped Image Based On ThumbnailCoordinates For Notes (Auth)
Parameters
NameInRequiredType
idpathyesstring
leftquerynonumber
topquerynonumber
widthquerynonumber
heightquerynonumber
Responses
StatusDescriptionSchema
200OKRImage
400Bad Request
401Unauthorized
403Forbidden
PUT/api/images/replace/{id}replace an image (Auth policies: artifact:modify)
Parameters
NameInRequiredType
idpathyesstring
Request body

multipart/form-data

Responses
StatusDescriptionSchema
200OKRPictureFile
400Bad Request
401Unauthorized
403Forbidden
PUT/api/images/{id}/{degIn90mul}Rotate Image in 90 deg. multiplicants: 90, 180 or 270 (Auth policies: artifact:modify)
Parameters
NameInRequiredType
idpathyesstring
degIn90mulpathyesinteger
Responses
StatusDescriptionSchema
200OKRPictureFile
400Bad Request
401Unauthorized
403Forbidden
GET/api/images/{size}/{id}.jpgreturns image stream with image/jpeg MIME type
Parameters
NameInRequiredType
idpathyesstring
sizepathyesstring
mimeForResizedquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/images/{size}/{id}.webpreturns image stream with image/webp MIME type
Parameters
NameInRequiredType
idpathyesstring
sizepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
MusicCatalogue2
GET/api/musiccatalogue/golha/collection/{id}/programsgolha collection programs
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/musiccatalogue/golha/program/{id}/tracksprogram tracks
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
Notification10
GET/api/notificationsGet User Notifications (Auth)
Parameters
NameInRequiredType
notificationTypequeryno
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/notificationsDelete All Read Notifications (Auth)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/notifications/all/{email}notfy all users (Auth policies: notif:bulk)
Parameters
NameInRequiredType
emailpathyesboolean
Request body

application/jsonNewNotificationViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/notifications/allreadSet All User Notifications Status Read (Auth)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/notifications/allunreadSet All User Notifications Status Unread (Auth)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/notifications/paginatedGet User Notifications (Paginated Version) (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
notificationTypequeryno
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/notifications/unread/countGet unread user notifications count (Auth)
Parameters
NameInRequiredType
notificationTypequeryno
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/notifications/{notificationId}Switch Notification Status (Auth)
Parameters
NameInRequiredType
notificationIdpathyesstring
Responses
StatusDescriptionSchema
200OKRUserNotificationViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/notifications/{notificationId}Delete Notification (Auth)
Parameters
NameInRequiredType
notificationIdpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/notifications/{userId}notify a sepcific user (Auth policies: notif:add)
Parameters
NameInRequiredType
userIdpathyesstring
Request body

application/jsonNewNotificationViewModel

Responses
StatusDescriptionSchema
200OKRUserNotificationViewModel
400Bad Request
401Unauthorized
403Forbidden
Numbering9
GET/api/numberingsget all numberings
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/numberingsadd new numbering (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorNumbering

Responses
StatusDescriptionSchema
200OKGanjoorNumbering
400Bad Request
401Unauthorized
403Forbidden
PUT/api/numberingsupdate an existing numbering (Auth policies: ganjoor:modify)
Request body

application/jsonGanjoorNumbering

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/numberings/cat/{id}get all numberings related to a category
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/numberings/couplet/{poemId}/{coupletIndex}get all numbering patterns for a couplet
Parameters
NameInRequiredType
poemIdpathyesinteger
coupletIndexpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/numberings/generatemissinggenerate missing default numberings and start counting (Auth policies: ganjoor:modify)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/numberings/recount/start/{id}recount a numbering (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/numberings/{id}get numbering by id
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorNumbering
400Bad Request
DELETE/api/numberings/{id} (Auth policies: ganjoor:modify)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
Recitation40
GET/api/audioGets audio narrations, user must have recitation::moderate permission to be able to see all users narrations (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
allUsersquerynoboolean
statusqueryno
searchTermquerynostring
mistakesquerynoboolean
recitationTypequeryno
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/audioReciation Upload (Auth)
Parameters
NameInRequiredType
replacequerynoboolean
recitationTypequeryno
Responses
StatusDescriptionSchema
200OKUploadSession
400Bad Request
401Unauthorized
403Forbidden
GET/api/audio/catany/{catId}check if a category has any recitations
Parameters
NameInRequiredType
catIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/audio/cattop1/{catId}get category top one recitations
Parameters
NameInRequiredType
catIdpathyesinteger
includePoemTextquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/audio/cattop1/{catId}/rssrss for category top one recitations
Parameters
NameInRequiredType
catIdpathyesinteger
includePoemTextquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
PUT/api/audio/chownTransfer Recitations Ownership (for recitations owned by current user) (Auth)
Parameters
NameInRequiredType
targetEmailAddressquerynostring
artistNamequerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
DELETE/api/audio/errors/approved/{id}remove approved mistake (Auth policies: recitation:moderate)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/audio/errors/reportget errors reported for recitations (Auth policies: recitation:moderate)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/audio/errors/reportreport an error in a recitation (Auth)
Request body

application/jsonRecitationErrorReportViewModel

Responses
StatusDescriptionSchema
200OKRecitationErrorReportViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/audio/errors/report/accept/{id}accepts a reported error for recitations, change status of the recitation to rejected and notify the reporter and recitation owner (and deletes the report) (Auth policies: recitation:moderate)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/audio/errors/report/editedit approved mistake of a recitation text (Auth policies: recitation:moderate)
Request body

application/jsonRecitationErrorReportViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/audio/errors/report/saveaccepts a reported error for recitations, add mistake to approve the mistake and notify the reporter and recitation owner (and deletes the report) (Auth policies: recitation:moderate)
Request body

application/jsonRecitationErrorReportViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/audio/errors/report/{id}reject a reported error for recitations and notify the reporter (and deletes the report) (Auth policies: recitation:moderate)
Parameters
NameInRequiredType
idpathyesinteger
rejectionNotequerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/audio/ffMakes recitations of فریدون فرح‌اندوز first recitations (Auth policies: recitation:import)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/audio/file/{id}.mp3get the corresponding mp3 file for the narration
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
GET/api/audio/file/{id}.xmlget the corresponding xml file for the recitation
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/audio/healthcheckstarts checking recitaions with missing files and add them to reported errors list job (Auth policies: recitation:moderate)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/audio/moderate/{id}Moderate pending narration (for moderating other users' recitations you also need recitation:moderate permission) (Auth policies: recitation:publish)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/jsonRecitationModerateViewModel

Responses
StatusDescriptionSchema
200OKRecitationViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/audio/profileGet User Profiles (Auth)
Parameters
NameInRequiredType
artistNamequerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/audio/profileAdd a narration profile (Auth)
Request body

application/jsonUserRecitationProfileViewModel

Responses
StatusDescriptionSchema
200OKUserRecitationProfileViewModel
400Bad Request
401Unauthorized
403Forbidden
PUT/api/audio/profileUpdate a narration profile (Auth)
Request body

application/jsonUserRecitationProfileViewModel

Responses
StatusDescriptionSchema
200OKUserRecitationProfileViewModel
400Bad Request
401Unauthorized
403Forbidden
GET/api/audio/profile/defGet User Default Profile (Auth)
Responses
StatusDescriptionSchema
200OKUserRecitationProfileViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/audio/profile/{id}Delete a narration profile (Auth)
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/audio/publishedreturns paginated published recitations (if poetId or catId is non-zero its ordered by poemId ascending if not it is ordered by publish date descending)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
searchTermquerynostring
poetIdquerynointeger
catIdquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/audio/published/rsscreates an RSS file from recent published recitations
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/audio/published/{id}get published recitation by id
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKPublicRecitationViewModel
400Bad Request
404Not Found
GET/api/audio/publishqueuepublishing tracker data (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
unfinishedquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/audio/retrypublishretry publish unpublished narrations
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/audio/syncqueueSynchronization Queue (Auth)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/audio/uploadenabledupload, update, moderate and delete operations on recitations might temporarily become disabled, this method gets the current status remarks: the value of this flag is provided as a custom header called audio-upload-enabled in some common GET methods in order to reduce the need for a separate query (Auth)
Responses
StatusDescriptionSchema
200OK
401Unauthorized
403Forbidden
GET/api/audio/uploadsGet User Uploads (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
allUsersquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/audio/verses/{id}Gets Verse Sync Information
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
PUT/api/audio/vote/switch/{id}revoke recitaion up vote (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/audio/vote/{id}up vote a recitation (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/audio/vote/{id}revoke recitaion up vote (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/audio/votesget user upvoted recitations (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/audio/votes/{poemId}/scorescompute poem recitations order (no update)
Parameters
NameInRequiredType
poemIdpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/audio/xml/{id}get the corresponding xml file contents (xml) for the narration
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
404Not Found
PUT/api/audio/{id}updates narration metadata (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/jsonRecitationViewModel

Responses
StatusDescriptionSchema
200OKRecitationViewModel
400Bad Request
401Unauthorized
403Forbidden
404Not Found
DELETE/api/audio/{id}Delete a recitation (Auth)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
RGenericOptions8
GET/api/options/global/{name}get global option value, Security Warning: every authenticated user could see value of global options, so do not store sensitive data into them or you can override this behaviour in your derived class (Auth)
Parameters
NameInRequiredType
namepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/options/global/{name}set global option value, Security Warning: every authenticated user could change value of global options, so do not store sensitive data into them or you can override this behaviour in your derived class (Auth)
Parameters
NameInRequiredType
namepathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/options/global/{workspace}/{name}get workspace global option value, Security Warning: every authenticated user in a workspace could see value of global options, so do not store sensitive data into them or you can override this behaviour in your derived class (Auth)
Parameters
NameInRequiredType
workspacepathyesstring
namepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/options/global/{workspace}/{name}set global option value, Security Warning: every authenticated user could change value of global options, so do not store sensitive data into them or you can override this behaviour in your derived class (Auth)
Parameters
NameInRequiredType
workspacepathyesstring
namepathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/options/{name}get user level option, if option value is not found it returns empty string (Auth)
Parameters
NameInRequiredType
namepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/options/{name}get user level option (Auth)
Parameters
NameInRequiredType
namepathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/options/{workspace}/{name}get user level option in a workspace, if option value is not found it returns empty string (Auth)
Parameters
NameInRequiredType
workspacepathyesstring
namepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/options/{workspace}/{name}get user level option in a workspace (Auth)
Parameters
NameInRequiredType
workspacepathyesstring
namepathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
RImage2
POST/api/rimagestemporary api for uploading temporary images (Auth policies: audit:view)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/rimages/{id}.{ext}return image with custom extension
Parameters
NameInRequiredType
idpathyesstring
extpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
RLongRunningJobs3
GET/api/rjobsget long running jobs (Auth policies: audit:view)
Parameters
NameInRequiredType
succeededquerynoboolean
failedquerynoboolean
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/rjobsdelete a specific job record, this could be used for deleting records which are not cleanable using the "cleanup" method (Auth policies: audit:view)
Parameters
NameInRequiredType
idquerynostring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/rjobs/cleanupclean up old jobs (Auth policies: audit:view)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
Role8
GET/api/rolesAll Roles Information (Auth policies: role:view)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/rolesadd a new role (Auth policies: role:add)
Request body

application/jsonRAppRole

Responses
StatusDescriptionSchema
200OKRAppRole
400Bad Request
401Unauthorized
403Forbidden
GET/api/roles/permissions/{roleName}lists role permissions (Auth policies: role:view)
Parameters
NameInRequiredType
roleNamepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
PUT/api/roles/permissions/{roleName}Saves role permissions (Auth policies: role:modify)
Parameters
NameInRequiredType
roleNamepathyesstring
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/roles/securableitemsGet All SecurableItems
Responses
StatusDescriptionSchema
200OK
400Bad Request
GET/api/roles/{roleName}returns role information (Auth policies: role:view)
Parameters
NameInRequiredType
roleNamepathyesstring
Responses
StatusDescriptionSchema
200OKRAppRole
400Bad Request
401Unauthorized
403Forbidden
404Not Found
PUT/api/roles/{roleName}update existing role (Auth policies: role:modify)
Parameters
NameInRequiredType
roleNamepathyesstring
Request body

application/jsonRAppRole

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/roles/{roleName}delete role (Auth policies: role:delete)
Parameters
NameInRequiredType
roleNamepathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
SiteBanners5
GET/api/bannersget all defined site banners (Auth policies: ganjoor:banners)
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/bannersadd site banner (send form) with these fields: alt, url and an image attachment (Auth policies: ganjoor:banners)
Responses
StatusDescriptionSchema
200OKGanjoorSiteBannerViewModel
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/bannersdelete site banner (Auth policies: ganjoor:banners)
Parameters
NameInRequiredType
idquerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
GET/api/banners/randomget a random active site banner
Responses
StatusDescriptionSchema
200OKGanjoorSiteBannerViewModel
400Bad Request
401Unauthorized
404Not Found
PUT/api/banners/{id}modify site banner (Auth policies: ganjoor:banners)
Parameters
NameInRequiredType
idpathyesinteger
Request body

application/jsonGanjoorSiteBannerModifyViewModel

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
404Not Found
Translation5
GET/api/translations/languagesget all languages
Responses
StatusDescriptionSchema
200OK
400Bad Request
POST/api/translations/languagesadd new language (Auth policies: ganjoor:translations)
Request body

application/jsonGanjoorLanguage

Responses
StatusDescriptionSchema
200OKGanjoorLanguage
400Bad Request
401Unauthorized
403Forbidden
PUT/api/translations/languagesupdate an existing language (Auth policies: ganjoor:translations)
Request body

application/jsonGanjoorLanguage

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
GET/api/translations/languages/{id}get language by id
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OKGanjoorLanguage
400Bad Request
DELETE/api/translations/languages/{id} (Auth policies: ganjoor:translations)
Parameters
NameInRequiredType
idpathyesinteger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
UserVisitsTracking4
GET/api/trackingget user history (Auth)
Parameters
NameInRequiredType
PageNumberquerynointeger
PageSizequerynointeger
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
POST/api/trackingadd a user history track (Auth)
Request body

application/json

Responses
StatusDescriptionSchema
200OKGanjoorUserPrePoemVisitViewModel
400Bad Request
401Unauthorized
403Forbidden
PUT/api/trackingstart or stop tracking user (Auth)
Request body

application/json

Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden
DELETE/api/tracking/{id}delete a user history track (Auth)
Parameters
NameInRequiredType
idpathyesstring
Responses
StatusDescriptionSchema
200OK
400Bad Request
401Unauthorized
403Forbidden

Try it

Developer reference

Base URLhttps://api.ganjoor.net
Key endpoints
  • GET/api/ganjoor/poets
  • GET/api/ganjoor/poet/{id}
  • GET/api/ganjoor/poem

Availability

Uptime100%
Median latency689 ms
Last checkUp · 200 · Sep 2026

4 checks since Aug 2026. A person runs this check by hand, not an automated monitor.

Changelog

Spec versionv1
Tracked paths402
  • Aug 2026gained an OpenAPI spec
  • Sep 20261 path added

Tracking since Sep 2026. See every tracked change ↗ ·Subscribe with RSS ↗