openapi: 3.0.3 info: title: Natiq API version: 1.0.0 description: Natiq Quran API paths: /auth/login/: post: operationId: auth_login_create description: Authenticate user credentials and return an authentication token for API access summary: Login with username and password to obtain a Knox token tags: - auth requestBody: content: application/json: schema: $ref: '#/components/schemas/Login' examples: LoginExample: value: username: testuser password: yourpassword summary: Login Example application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Login' multipart/form-data: schema: $ref: '#/components/schemas/Login' required: true security: - knoxApiToken: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/LoginResponse' examples: LoginResponseExample: value: token: knox_token_here user: username: testuser email: test@example.com first_name: Test last_name: User expiry: '2024-12-31T23:59:59Z' summary: Login Response Example description: '' '400': description: Invalid credentials or validation error '401': description: Authentication failed /auth/logout/: post: operationId: auth_logout_create description: Invalidate the current user's authentication token. The user will need to login again to access protected endpoints. summary: Logout current user tags: - auth security: - knoxApiToken: [] responses: '204': content: application/json: schema: $ref: '#/components/schemas/LogoutResponse' description: '' '401': description: Authentication required /auth/logoutall/: post: operationId: auth_logoutall_create description: Invalidate all authentication tokens for the current user across all devices. The user will need to login again on any device to access protected endpoints. summary: Logout from all devices tags: - auth security: - knoxApiToken: [] responses: '204': content: application/json: schema: $ref: '#/components/schemas/LogoutAllResponse' description: '' '401': description: Authentication required /auth/register/: post: operationId: auth_register_create description: Create a new user account with username, password, email, and optional personal information. Returns user data and authentication token upon successful registration. summary: Register a new user account tags: - auth requestBody: content: application/json: schema: $ref: '#/components/schemas/User' examples: RegisterExample: value: username: newuser password: yourpassword password2: yourpassword email: newuser@example.com first_name: New last_name: User summary: Register Example application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/User' multipart/form-data: schema: $ref: '#/components/schemas/User' required: true security: - knoxApiToken: [] - {} responses: '201': content: application/json: schema: $ref: '#/components/schemas/RegisterResponse' examples: RegisterResponseExample: value: user: username: newuser email: newuser@example.com first_name: New last_name: User token: knox_token_here summary: Register Response Example description: '' '400': description: Validation error or user already exists '422': description: Password validation failed /ayahs/: get: operationId: ayahs_list summary: List all Ayahs (Quran verses) parameters: - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - in: query name: number schema: type: integer - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string enum: - asc - desc - name: search required: false in: query description: A search term. schema: type: string - in: query name: surah_id schema: type: string format: uuid tags: - ayahs security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedAyahList' description: '' post: operationId: ayahs_create summary: Create a new Ayah record tags: - ayahs requestBody: content: application/json: schema: $ref: '#/components/schemas/AyahAdd' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/AyahAdd' multipart/form-data: schema: $ref: '#/components/schemas/AyahAdd' required: true security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/AyahAdd' description: '' /ayahs/{id}/: get: operationId: ayahs_retrieve summary: Retrieve a specific Ayah by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this ayah. required: true tags: - ayahs security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/AyahSerializerView' description: '' put: operationId: ayahs_update summary: Update an existing Ayah record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this ayah. required: true tags: - ayahs requestBody: content: application/json: schema: $ref: '#/components/schemas/Ayah' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Ayah' multipart/form-data: schema: $ref: '#/components/schemas/Ayah' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Ayah' description: '' patch: operationId: ayahs_partial_update summary: Partially update an Ayah record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this ayah. required: true tags: - ayahs requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedAyah' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedAyah' multipart/form-data: schema: $ref: '#/components/schemas/PatchedAyah' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Ayah' description: '' delete: operationId: ayahs_destroy summary: Delete an Ayah record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this ayah. required: true tags: - ayahs security: - knoxApiToken: [] responses: '204': description: No response body /ayahs/random/: get: operationId: ayahs_random_retrieve tags: - ayahs security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Ayah' description: '' /groups/: get: operationId: groups_list summary: List all groups tags: - groups security: - knoxApiToken: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Group' description: '' post: operationId: groups_create summary: Create a new group tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/Group' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Group' multipart/form-data: schema: $ref: '#/components/schemas/Group' required: true security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/Group' description: '' /groups/{id}/: get: operationId: groups_retrieve summary: Retrieve a specific group by ID parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this group. required: true tags: - groups security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Group' description: '' put: operationId: groups_update summary: Update an existing group parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this group. required: true tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/Group' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Group' multipart/form-data: schema: $ref: '#/components/schemas/Group' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Group' description: '' patch: operationId: groups_partial_update summary: Partially update a group parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this group. required: true tags: - groups requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedGroup' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedGroup' multipart/form-data: schema: $ref: '#/components/schemas/PatchedGroup' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Group' description: '' delete: operationId: groups_destroy summary: Delete a group parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this group. required: true tags: - groups security: - knoxApiToken: [] responses: '204': description: No response body /health/: get: operationId: health_retrieve description: Health check endpoint that verifies the status of PostgreSQL database, S3 storage, RabbitMQ, and Forced Alignment service connections. Returns detailed status information for staff users. summary: Health check endpoint tags: - health security: - knoxApiToken: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/HealthCheckResponse' examples: HealthyResponseExample: value: status: healthy services: database: status: healthy details: Database connection successful s3: status: healthy details: S3 connection successful rabbitmq: status: healthy details: RabbitMQ connection successful forced_alignment: status: healthy details: Forced alignment service is responding summary: Healthy Response Example DegradedResponseExample: value: status: degraded services: database: status: healthy details: Database connection successful s3: status: unhealthy details: AWS credentials not configured rabbitmq: status: healthy details: RabbitMQ connection successful forced_alignment: status: healthy details: Forced alignment service is responding summary: Degraded Response Example Non-StaffUserResponseExample: value: status: healthy summary: Non-Staff User Response Example description: '' '503': content: application/json: schema: $ref: '#/components/schemas/HealthCheckResponse' description: '' /mushafs/: get: operationId: mushafs_list summary: List all Mushafs (Quranic manuscripts/editions) parameters: - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string enum: - asc - desc - name: search required: false in: query description: A search term. schema: type: string tags: - general - mushafs security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedMushafList' description: '' post: operationId: mushafs_create summary: Create a new Mushaf record tags: - mushafs requestBody: content: application/json: schema: $ref: '#/components/schemas/Mushaf' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Mushaf' multipart/form-data: schema: $ref: '#/components/schemas/Mushaf' required: true security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/Mushaf' description: '' /mushafs/{id}/: get: operationId: mushafs_retrieve summary: Retrieve a specific Mushaf by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this mushaf. required: true tags: - general - mushafs security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Mushaf' description: '' put: operationId: mushafs_update summary: Update an existing Mushaf record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this mushaf. required: true tags: - mushafs requestBody: content: application/json: schema: $ref: '#/components/schemas/Mushaf' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Mushaf' multipart/form-data: schema: $ref: '#/components/schemas/Mushaf' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Mushaf' description: '' patch: operationId: mushafs_partial_update summary: Partially update a Mushaf record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this mushaf. required: true tags: - mushafs requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedMushaf' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedMushaf' multipart/form-data: schema: $ref: '#/components/schemas/PatchedMushaf' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Mushaf' description: '' delete: operationId: mushafs_destroy summary: Delete a Mushaf record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this mushaf. required: true tags: - mushafs security: - knoxApiToken: [] responses: '204': description: No response body /mushafs/import/: post: operationId: mushafs_import_create summary: Import a Mushaf from a JSON file upload tags: - mushafs requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: JSON file containing the Mushaf data required: - file security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Mushaf' description: '' /notifications/: get: operationId: notifications_list summary: List all notifications parameters: - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer tags: - notifications security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedNotificationList' description: '' post: operationId: notifications_create summary: Create a new notification tags: - notifications requestBody: content: application/json: schema: $ref: '#/components/schemas/Notification' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Notification' multipart/form-data: schema: $ref: '#/components/schemas/Notification' required: true security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/Notification' description: '' /notifications/{id}/: get: operationId: notifications_retrieve summary: Retrieve a specific notification by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this notification. required: true tags: - notifications security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Notification' description: '' put: operationId: notifications_update summary: Update an existing notification parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this notification. required: true tags: - notifications requestBody: content: application/json: schema: $ref: '#/components/schemas/Notification' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Notification' multipart/form-data: schema: $ref: '#/components/schemas/Notification' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Notification' description: '' patch: operationId: notifications_partial_update summary: Partially update a notification parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this notification. required: true tags: - notifications requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedNotification' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedNotification' multipart/form-data: schema: $ref: '#/components/schemas/PatchedNotification' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Notification' description: '' delete: operationId: notifications_destroy summary: Delete a notification parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this notification. required: true tags: - notifications security: - knoxApiToken: [] responses: '204': description: No response body /notifications/me/: get: operationId: notifications_me_list description: Returns a paginated list of the current user's notifications. Marks notifications in the current page as 'got_notification' if not already marked. summary: Get the current user's notifications (paginated) parameters: - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer tags: - notifications security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedNotificationList' description: '' /notifications/opened/: get: operationId: notifications_opened_retrieve description: Marks a specific notification as 'opened_notification' using its id (provided as a query parameter). summary: Mark a notification as opened parameters: - in: query name: id schema: type: string format: uuid description: id of the notification to mark as opened. required: true tags: - notifications security: - knoxApiToken: [] responses: '200': content: application/json: schema: type: object additionalProperties: {} description: '' '400': content: application/json: schema: type: object additionalProperties: {} description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' /notifications/viewed/: get: operationId: notifications_viewed_retrieve description: Marks all notifications with status 'got_notification' as 'viewed_notification' for the current user. summary: Mark notifications as viewed tags: - notifications security: - knoxApiToken: [] responses: '200': content: application/json: schema: type: object additionalProperties: {} description: '' /phrases/: get: operationId: phrases_list summary: List all phrases tags: - phrases security: - knoxApiToken: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Phrase' description: '' post: operationId: phrases_create summary: Create a new phrase tags: - phrases requestBody: content: application/json: schema: $ref: '#/components/schemas/Phrase' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Phrase' multipart/form-data: schema: $ref: '#/components/schemas/Phrase' required: true security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/Phrase' description: '' /phrases/{id}/: get: operationId: phrases_retrieve summary: Retrieve a specific phrase by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this phrase. required: true tags: - phrases security: - knoxApiToken: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/Phrase' description: '' put: operationId: phrases_update summary: Update an existing phrase parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this phrase. required: true tags: - phrases requestBody: content: application/json: schema: $ref: '#/components/schemas/Phrase' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Phrase' multipart/form-data: schema: $ref: '#/components/schemas/Phrase' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Phrase' description: '' patch: operationId: phrases_partial_update summary: Partially update a phrase parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this phrase. required: true tags: - phrases requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedPhrase' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedPhrase' multipart/form-data: schema: $ref: '#/components/schemas/PatchedPhrase' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Phrase' description: '' delete: operationId: phrases_destroy summary: Delete a phrase parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this phrase. required: true tags: - phrases security: - knoxApiToken: [] responses: '204': description: No response body /phrases/modify/: post: operationId: phrases_modify_create description: Modify phrase values for a given language. The 'language' query parameter is required. summary: Modify phrase values parameters: - in: query name: language schema: type: string description: Language code for the translation (required). required: true tags: - phrases requestBody: content: application/json: schema: $ref: '#/components/schemas/PhraseModify' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PhraseModify' multipart/form-data: schema: $ref: '#/components/schemas/PhraseModify' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PhraseModify' description: '' /profile/{id}/: get: operationId: profile_retrieve summary: Retrieve the user's profile by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this user. required: true tags: - profile security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Profile' description: '' /profile/me/: get: operationId: profile_me_retrieve description: 'GET: Retrieve the current user''s profile. POST: Update the current user''s profile information.' summary: Get or update the current user's profile tags: - profile security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Profile' description: '' post: operationId: profile_me_create description: 'GET: Retrieve the current user''s profile. POST: Update the current user''s profile information.' summary: Get or update the current user's profile tags: - profile requestBody: content: application/json: schema: $ref: '#/components/schemas/Profile' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Profile' multipart/form-data: schema: $ref: '#/components/schemas/Profile' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Profile' description: '' /provenances/: get: operationId: provenances_list parameters: - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string enum: - asc - desc - name: search required: false in: query description: A search term. schema: type: string tags: - provenances security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedProvenanceList' description: '' post: operationId: provenances_create tags: - provenances requestBody: content: application/json: schema: $ref: '#/components/schemas/ProvenanceAdd' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ProvenanceAdd' multipart/form-data: schema: $ref: '#/components/schemas/ProvenanceAdd' required: true security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/ProvenanceAdd' description: '' /provenances/{id}/: get: operationId: provenances_retrieve parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this provenance. required: true tags: - provenances security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Provenance' description: '' put: operationId: provenances_update parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this provenance. required: true tags: - provenances requestBody: content: application/json: schema: $ref: '#/components/schemas/Provenance' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Provenance' multipart/form-data: schema: $ref: '#/components/schemas/Provenance' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Provenance' description: '' patch: operationId: provenances_partial_update parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this provenance. required: true tags: - provenances requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedProvenance' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedProvenance' multipart/form-data: schema: $ref: '#/components/schemas/PatchedProvenance' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Provenance' description: '' delete: operationId: provenances_destroy parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this provenance. required: true tags: - provenances security: - knoxApiToken: [] responses: '204': description: No response body /recitations/: get: operationId: recitations_list summary: List all Recitations (audio recordings) parameters: - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - in: query name: mushaf schema: type: string enum: - hafs description: 'Short name of the Mushaf to filter Recitations by. Common value: ''hafs''. Any string is accepted. (e.g. ''hafs'', ''warsh'', etc.)' required: true examples: Hafs: value: hafs summary: Most common - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string enum: - asc - desc - in: query name: reciter_id schema: type: string format: uuid description: id of the Reciter to filter Recitations by. - name: search required: false in: query description: A search term. schema: type: string tags: - recitations security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedRecitationListList' description: '' post: operationId: recitations_create summary: Create a new Recitation record tags: - recitations requestBody: content: application/json: schema: $ref: '#/components/schemas/Recitation' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Recitation' multipart/form-data: schema: $ref: '#/components/schemas/Recitation' required: true security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/Recitation' description: '' /recitations/{id}/: get: operationId: recitations_retrieve summary: Retrieve a specific Recitation by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this recitation. required: true - in: query name: surah_id schema: type: string format: uuid description: id of the Surah to filter timestamps by. When provided, only timestamps for this surah are returned. tags: - recitations security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Recitation' description: '' put: operationId: recitations_update summary: Update an existing Recitation record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this recitation. required: true tags: - recitations requestBody: content: application/json: schema: $ref: '#/components/schemas/Recitation' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Recitation' multipart/form-data: schema: $ref: '#/components/schemas/Recitation' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Recitation' description: '' patch: operationId: recitations_partial_update summary: Partially update a Recitation record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this recitation. required: true tags: - recitations requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedRecitation' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedRecitation' multipart/form-data: schema: $ref: '#/components/schemas/PatchedRecitation' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Recitation' description: '' delete: operationId: recitations_destroy summary: Delete a Recitation record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this recitation. required: true tags: - recitations security: - knoxApiToken: [] responses: '204': description: No response body /recitations/{id}/track/: get: operationId: recitations_track_retrieve description: 'GET: list all tracks (RecitationSurah) for this recitation, optionally filtered by surah_id. POST: upload a surah audio file and optional word-level timestamps for this recitation.' summary: List or create Tracks (per-surah audio files) for this Recitation parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this recitation. required: true tags: - recitations security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Recitation' description: '' post: operationId: recitations_track_create description: 'GET: list all tracks (RecitationSurah) for this recitation, optionally filtered by surah_id. POST: upload a surah audio file and optional word-level timestamps for this recitation.' summary: List or create Tracks (per-surah audio files) for this Recitation parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this recitation. required: true tags: - recitations requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary surah_id: type: string format: id word_timestamps: type: string description: JSON list of word timestamps, optional required: - file - surah_id security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Recitation' description: '' /recitations/{id}/track/{track_id}/: get: operationId: recitations_track_retrieve_2 description: 'GET: retrieve a single track. PATCH: replace the audio file and/or word timestamps. DELETE: remove the track.' summary: Retrieve, update, or delete a single Track for this Recitation parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this recitation. required: true - in: path name: track_id schema: type: string required: true tags: - recitations security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Recitation' description: '' patch: operationId: recitations_track_partial_update description: 'GET: retrieve a single track. PATCH: replace the audio file and/or word timestamps. DELETE: remove the track.' summary: Retrieve, update, or delete a single Track for this Recitation parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this recitation. required: true - in: path name: track_id schema: type: string required: true tags: - recitations requestBody: content: multipart/form-data: schema: $ref: '#/components/schemas/PatchedRecitation' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedRecitation' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Recitation' description: '' delete: operationId: recitations_track_destroy description: 'GET: retrieve a single track. PATCH: replace the audio file and/or word timestamps. DELETE: remove the track.' summary: Retrieve, update, or delete a single Track for this Recitation parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this recitation. required: true - in: path name: track_id schema: type: string required: true tags: - recitations security: - knoxApiToken: [] responses: '204': description: No response body /surahs/: get: operationId: surahs_list summary: List all Surahs (Quran chapters) parameters: - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - in: query name: mushaf schema: type: string enum: - hafs description: 'Short name of the Mushaf to filter Surahs by. Common value: ''hafs''. Any string is accepted. (e.g. ''hafs'', ''warsh'', etc.)' required: true examples: Hafs: value: hafs summary: Most common - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string enum: - asc - desc - name: search required: false in: query description: A search term. schema: type: string tags: - general - surahs security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedSurahList' description: '' post: operationId: surahs_create summary: Create a new Surah record tags: - surahs requestBody: content: application/json: schema: $ref: '#/components/schemas/Surah' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Surah' multipart/form-data: schema: $ref: '#/components/schemas/Surah' required: true security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/Surah' description: '' /surahs/{id}/: get: operationId: surahs_retrieve summary: Retrieve a specific Surah by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this surah. required: true tags: - general - surahs security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/SurahDetail' description: '' put: operationId: surahs_update summary: Update an existing Surah record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this surah. required: true tags: - surahs requestBody: content: application/json: schema: $ref: '#/components/schemas/Surah' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Surah' multipart/form-data: schema: $ref: '#/components/schemas/Surah' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Surah' description: '' patch: operationId: surahs_partial_update summary: Partially update a Surah record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this surah. required: true tags: - surahs requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedSurah' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedSurah' multipart/form-data: schema: $ref: '#/components/schemas/PatchedSurah' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Surah' description: '' delete: operationId: surahs_destroy summary: Delete a Surah record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this surah. required: true tags: - surahs security: - knoxApiToken: [] responses: '204': description: No response body /surahs/{id}/names/: get: operationId: surahs_names_retrieve parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this surah. required: true tags: - surahs security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Surah' description: '' post: operationId: surahs_names_create parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this surah. required: true tags: - surahs requestBody: content: application/json: schema: $ref: '#/components/schemas/Surah' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Surah' multipart/form-data: schema: $ref: '#/components/schemas/Surah' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Surah' description: '' /surahs/{id}/names/{name_id}/: post: operationId: surahs_names_create_2 parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this surah. required: true - in: path name: name_id schema: type: string required: true tags: - surahs requestBody: content: application/json: schema: $ref: '#/components/schemas/Surah' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Surah' multipart/form-data: schema: $ref: '#/components/schemas/Surah' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Surah' description: '' delete: operationId: surahs_names_destroy parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this surah. required: true - in: path name: name_id schema: type: string required: true tags: - surahs security: - knoxApiToken: [] responses: '204': description: No response body /takhtits/: get: operationId: takhtits_list summary: List all Takhtits (text annotations/notes) parameters: - in: query name: account schema: type: string format: uuid - in: query name: creator schema: type: string format: uuid - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - in: query name: mushaf schema: type: string enum: - hafs description: 'Short name of the Mushaf to filter Takhtits by. Common value: ''hafs''. Any string is accepted. (e.g. ''hafs'', ''warsh'', etc.)' - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string enum: - asc - desc - name: search required: false in: query description: A search term. schema: type: string tags: - general - takhtits security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedTakhtitList' description: '' post: operationId: takhtits_create description: Create a new Takhtit. Requires mushaf_id and account_id in the request body. summary: Create a new Takhtit record tags: - takhtits requestBody: content: application/json: schema: type: object properties: mushaf_id: type: string format: id description: id of the mushaf to link. account_id: type: string format: id description: id of the account to link. required: - mushaf_id - account_id security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/Takhtit' description: '' /takhtits/{id}/: get: operationId: takhtits_retrieve summary: Retrieve a specific Takhtit by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true tags: - general - takhtits security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Takhtit' description: '' put: operationId: takhtits_update summary: Update an existing Takhtit record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true tags: - takhtits requestBody: content: application/json: schema: $ref: '#/components/schemas/Takhtit' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Takhtit' multipart/form-data: schema: $ref: '#/components/schemas/Takhtit' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Takhtit' description: '' patch: operationId: takhtits_partial_update summary: Partially update a Takhtit record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true tags: - takhtits requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedTakhtit' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedTakhtit' multipart/form-data: schema: $ref: '#/components/schemas/PatchedTakhtit' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Takhtit' description: '' delete: operationId: takhtits_destroy summary: Delete a Takhtit record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true tags: - takhtits security: - knoxApiToken: [] responses: '204': description: No response body /takhtits/{id}/ayahs_breakers/: get: operationId: takhtits_ayahs_breakers_list description: Returns a flat list containing an entry for every ayah in this takhtit, with breaker info similar to the mushaf ayah_map action. summary: List all ayahs_breakers for this takhtit (ayahs map style) parameters: - in: query name: account schema: type: string format: uuid - in: query name: creator schema: type: string format: uuid - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - in: query name: mushaf schema: type: string format: uuid - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string enum: - asc - desc - name: search required: false in: query description: A search term. schema: type: string tags: - takhtits security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedAyahBreakersResponseList' description: '' post: operationId: takhtits_ayahs_breakers_create description: Add a new ayahs_breaker to this takhtit. Requires ayah_id in the request body. summary: Add an ayahs_breaker to this takhtit parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true tags: - takhtits requestBody: content: application/json: schema: type: object properties: ayah_id: type: string format: id description: id of the ayah to link. type: type: string description: Breaker type (see AyahBreakerType). required: - ayah_id - type security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/AyahBreaker' description: '' /takhtits/{id}/ayahs_breakers/{breaker_id}/: get: operationId: takhtits_ayahs_breakers_retrieve summary: Retrieve a specific ayahs_breaker for this takhtit parameters: - in: path name: breaker_id schema: type: string format: uuid description: id of the ayahs_breaker. required: true - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true tags: - takhtits security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/AyahBreaker' description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' /takhtits/{id}/import/: post: operationId: takhtits_import_create description: 'Accepts a JSON array of strings with the format ''{surah}:{ayah}'' that denote the ayah at which a new breaker (page by default) begins. Existing breakers whose names start with the provided breaker type (default: ''page'') will be removed before importing the new ones.' summary: Import Ayah Breakers for the specified Takhtit parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true - in: query name: type schema: type: string description: Breaker type (e.g., page, juz, hizb). Defaults to 'page'. tags: - takhtits requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: Text/JSON file containing a list of breakers (e.g. ['2:1', '2:6']). required: - file security: - knoxApiToken: [] responses: '201': content: application/json: schema: type: object additionalProperties: {} description: '' /takhtits/{id}/words_breakers/: get: operationId: takhtits_words_breakers_list description: Returns a flat list containing an entry for every word with a breaker for this takhtit, with a line counter (incremented for each breaker). summary: List all words_breakers for this takhtit (with line counters) parameters: - in: query name: account schema: type: string format: uuid - in: query name: creator schema: type: string format: uuid - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - in: query name: mushaf schema: type: string format: uuid - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string enum: - asc - desc - name: search required: false in: query description: A search term. schema: type: string tags: - takhtits security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedWordBreakersResponseList' description: '' post: operationId: takhtits_words_breakers_create description: Add a new words_breaker to this takhtit. Requires word_id in the request body. Only type 'line' is allowed. summary: Add a words_breaker to this takhtit parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true tags: - takhtits requestBody: content: application/json: schema: type: object properties: word_id: type: string format: id description: id of the word to link. type: type: string description: Breaker type (must be 'line'). required: - word_id - type security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/WordBreakerDetailResponse' description: '' /takhtits/{id}/words_breakers/{breaker_id}/: get: operationId: takhtits_words_breakers_retrieve summary: Retrieve a specific words_breaker for this takhtit parameters: - in: path name: breaker_id schema: type: string format: uuid description: id of the words_breaker. required: true - in: path name: id schema: type: string format: uuid description: A UUID string identifying this takhtit. required: true tags: - takhtits security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/WordBreakerDetailResponse' description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' /translations/: get: operationId: translations_list summary: List all Quran Translations parameters: - in: query name: language schema: type: string enum: - af - ar - ar-dz - ast - az - bg - be - bn - br - bs - ca - ckb - cs - cy - da - de - dsb - el - en - en-au - en-gb - eo - es - es-ar - es-co - es-mx - es-ni - es-ve - et - eu - fa - fi - fr - fy - ga - gd - gl - he - hi - hr - hsb - ht - hu - hy - ia - id - ig - io - is - it - ja - ka - kab - kk - km - kn - ko - ky - lb - lt - lv - mk - ml - mn - mr - ms - my - nb - ne - nl - nn - os - pa - pl - pt - pt-br - ro - ru - sk - sl - sq - sr - sr-latn - sv - sw - ta - te - tg - th - tk - tr - tt - udm - ug - uk - ur - uz - vi - zh-hans - zh-hant description: Language code to filter Translations by. - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - in: query name: mushaf schema: type: string enum: - hafs description: 'Short name of the Mushaf to filter Translations by. Common value: ''hafs''. Any string is accepted. (e.g. ''hafs'', ''warsh'', etc.)' required: true examples: Hafs: value: hafs summary: Most common - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string enum: - asc - desc - name: search required: false in: query description: A search term. schema: type: string tags: - general - translations security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedTranslationListList' description: '' post: operationId: translations_create summary: Create a new Translation record tags: - translations requestBody: content: application/json: schema: $ref: '#/components/schemas/TranslationCreate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TranslationCreate' multipart/form-data: schema: $ref: '#/components/schemas/TranslationCreate' required: true security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/TranslationCreate' description: '' /translations/{id}/: get: operationId: translations_retrieve summary: Retrieve a specific Translation by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this translation. required: true tags: - general - translations security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Translation' description: '' put: operationId: translations_update summary: Update an existing Translation record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this translation. required: true tags: - translations requestBody: content: application/json: schema: $ref: '#/components/schemas/TranslationUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TranslationUpdate' multipart/form-data: schema: $ref: '#/components/schemas/TranslationUpdate' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/TranslationUpdate' description: '' patch: operationId: translations_partial_update summary: Partially update a Translation record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this translation. required: true tags: - translations requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedTranslation' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedTranslation' multipart/form-data: schema: $ref: '#/components/schemas/PatchedTranslation' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Translation' description: '' delete: operationId: translations_destroy summary: Delete a Translation record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this translation. required: true tags: - translations security: - knoxApiToken: [] responses: '204': description: No response body /translations/{id}/ayahs/: get: operationId: translations_ayahs_list description: Returns a paginated list of all AyahTranslation objects for the given Translation id. Optionally filter by surah_id (query param). summary: List all AyahTranslations for this Translation parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this translation. required: true - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string enum: - asc - desc - name: search required: false in: query description: A search term. schema: type: string - in: query name: surah_id schema: type: string format: uuid description: id of the Surah to filter AyahTranslations by. tags: - translations security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedAyahTranslationList' description: '' /translations/{id}/ayahs/{ayah_id}/: get: operationId: translations_ayahs_retrieve description: 'Returns a single AyahTranslation object for the given Translation id and Ayah id. URL: /translations/{translation_id}/ayahs/{ayah_id}/' summary: Retrieve a single AyahTranslation for this Translation parameters: - in: path name: ayah_id schema: type: string required: true - in: path name: id schema: type: string format: uuid description: A UUID string identifying this translation. required: true tags: - translations security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/AyahTranslation' description: '' post: operationId: translations_ayahs_create description: Provide the ayah's id in the URL path and the translation's id as the primary resource path. Body requires only `text` (and optional `bismillah`). If an AyahTranslation already exists it will be updated, otherwise it will be created. summary: Create or update (upsert) a specific AyahTranslation parameters: - in: path name: ayah_id schema: type: string required: true - in: path name: id schema: type: string format: uuid description: A UUID string identifying this translation. required: true tags: - translations requestBody: content: application/json: schema: type: object properties: text: type: string bismillah: type: boolean required: - text security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/AyahTranslation' description: '' '200': content: application/json: schema: $ref: '#/components/schemas/AyahTranslation' description: '' put: operationId: translations_ayahs_update description: Provide the ayah's id in the URL path and the translation's id as the primary resource path. Body requires only `text` (and optional `bismillah`). If an AyahTranslation already exists it will be updated, otherwise it will be created. summary: Create or update (upsert) a specific AyahTranslation parameters: - in: path name: ayah_id schema: type: string required: true - in: path name: id schema: type: string format: uuid description: A UUID string identifying this translation. required: true tags: - translations requestBody: content: application/json: schema: type: object properties: text: type: string bismillah: type: boolean required: - text security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/AyahTranslation' description: '' '200': content: application/json: schema: $ref: '#/components/schemas/AyahTranslation' description: '' /translations/import/: post: operationId: translations_import_create summary: Import a Translation from a JSON file upload tags: - translations requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: JSON file containing the Translation data required: - file security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Translation' description: '' /users/: get: operationId: users_list summary: List all users tags: - users security: - knoxApiToken: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/User' description: '' post: operationId: users_create summary: Create a new user tags: - users requestBody: content: application/json: schema: $ref: '#/components/schemas/User' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/User' multipart/form-data: schema: $ref: '#/components/schemas/User' required: true security: - knoxApiToken: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/User' description: '' /users/{id}/: get: operationId: users_retrieve summary: Retrieve a specific user by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this user. required: true tags: - users security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/User' description: '' put: operationId: users_update summary: Update an existing user parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this user. required: true tags: - users requestBody: content: application/json: schema: $ref: '#/components/schemas/User' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/User' multipart/form-data: schema: $ref: '#/components/schemas/User' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/User' description: '' patch: operationId: users_partial_update summary: Partially update a user parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this user. required: true tags: - users requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedUser' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedUser' multipart/form-data: schema: $ref: '#/components/schemas/PatchedUser' security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/User' description: '' delete: operationId: users_destroy summary: Delete a user parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this user. required: true tags: - users security: - knoxApiToken: [] responses: '204': description: No response body /users/{id}/names/: get: operationId: users_names_retrieve parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this user. required: true tags: - users security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/User' description: '' post: operationId: users_names_create parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this user. required: true tags: - users requestBody: content: application/json: schema: $ref: '#/components/schemas/User' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/User' multipart/form-data: schema: $ref: '#/components/schemas/User' required: true security: - knoxApiToken: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/User' description: '' /words/: get: operationId: words_retrieve summary: List all Words in Ayahs parameters: - in: query name: ayah_id schema: type: string format: uuid description: id of the Ayah to filter Words by. tags: - words security: - knoxApiToken: [] responses: '200': description: No response body post: operationId: words_create summary: Create a new Word record parameters: - in: query name: ayah_id schema: type: string format: uuid description: id of the Ayah to associate the new Word with (if ayah_id is not provided in the body). tags: - words security: - knoxApiToken: [] responses: '201': description: No response body /words/{id}/: get: operationId: words_retrieve_2 summary: Retrieve a specific Word by id parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this word. required: true tags: - words security: - knoxApiToken: [] responses: '200': description: No response body put: operationId: words_update summary: Update an existing Word record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this word. required: true tags: - words security: - knoxApiToken: [] responses: '200': description: No response body patch: operationId: words_partial_update summary: Partially update a Word record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this word. required: true tags: - words security: - knoxApiToken: [] responses: '200': description: No response body delete: operationId: words_destroy summary: Delete a Word record parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this word. required: true tags: - words security: - knoxApiToken: [] responses: '204': description: No response body components: schemas: Ayah: type: object properties: id: type: string format: uuid readOnly: true number: type: integer maximum: 2147483647 minimum: -2147483648 sajdah: enum: - none - null type: string description: '* `none` - None' x-spec-enum-id: 00a003bebd5095a2 nullable: true text: type: string readOnly: true breakers: type: string readOnly: true is_bismillah: type: boolean surah: allOf: - $ref: '#/components/schemas/Surah' nullable: true readOnly: true surah_number: type: string readOnly: true length: type: integer maximum: 2147483647 minimum: -2147483648 description: Character count of the ayah text (joined words) required: - breakers - id - number - surah - surah_number - text AyahAdd: type: object properties: surah_id: type: string format: uuid text: type: string is_bismillah: type: boolean default: false sajdah: type: string nullable: true required: - surah_id - text AyahBreaker: type: object properties: id: type: string format: uuid readOnly: true type: enum: - page - juz - hizb - rub - manzil - ruku type: string description: |- * `page` - Page * `juz` - Juz * `hizb` - Hizb * `rub` - Rub * `manzil` - Manzil * `ruku` - Ruku x-spec-enum-id: db2e482895a944cb required: - id - type AyahBreakersResponse: type: object description: Serializer for the ayahs_breakers endpoint response properties: id: type: string format: uuid description: id of the ayah surah: type: integer description: Surah number ayah: type: integer description: Ayah number length: type: integer description: Ayah text length juz: type: integer nullable: true description: Juz number (null if not a juz breaker) hizb: type: integer nullable: true description: Hizb number (null if not a hizb breaker) page: type: integer nullable: true description: Page number (null if not a page breaker) rub: type: integer nullable: true description: Rub number (null if not a rub breaker) manzil: type: integer nullable: true description: Manzil number (null if not a manzil breaker) required: - ayah - hizb - id - juz - length - manzil - page - rub - surah AyahInSurah: type: object properties: id: type: string format: uuid readOnly: true number: type: integer maximum: 2147483647 minimum: -2147483648 sajdah: enum: - none - null type: string description: '* `none` - None' x-spec-enum-id: 00a003bebd5095a2 nullable: true is_bismillah: type: boolean text: type: string readOnly: true required: - id - number - text AyahSerializerView: type: object properties: id: type: string format: uuid readOnly: true number: type: integer maximum: 2147483647 minimum: -2147483648 sajdah: enum: - none - null type: string description: '* `none` - None' x-spec-enum-id: 00a003bebd5095a2 nullable: true text: type: string readOnly: true breakers: type: string readOnly: true is_bismillah: type: boolean surah: allOf: - $ref: '#/components/schemas/SurahInAyah' readOnly: true surah_number: type: string readOnly: true length: type: integer maximum: 2147483647 minimum: -2147483648 description: Character count of the ayah text (joined words) mushaf: type: string readOnly: true words: type: array items: $ref: '#/components/schemas/Word' readOnly: true required: - breakers - id - mushaf - number - surah - surah_number - text - words AyahTranslation: type: object properties: id: type: string format: uuid readOnly: true translation_id: type: string format: uuid writeOnly: true ayah_id: type: string format: uuid writeOnly: true text: type: string bismillah: type: string nullable: true required: - ayah_id - id - text - translation_id Group: type: object properties: url: type: string format: uri readOnly: true name: type: string maxLength: 150 required: - name - url HealthCheckResponse: type: object properties: status: type: string description: 'Overall health status: healthy, degraded, or unhealthy' services: type: object additionalProperties: type: object additionalProperties: type: string description: Service status information description: Detailed status of individual services required: - status Login: type: object properties: username: type: string password: type: string required: - password - username LoginResponse: type: object properties: token: type: string description: Authentication token user: allOf: - $ref: '#/components/schemas/User' description: User information expiry: type: string format: date-time description: Token expiry time required: - expiry - token - user LogoutAllResponse: type: object properties: detail: type: string description: Logout all confirmation message required: - detail LogoutResponse: type: object properties: detail: type: string description: Logout confirmation message required: - detail Mushaf: type: object properties: id: type: string format: uuid readOnly: true slug: type: string maxLength: 50 name: type: string source: type: string status: enum: - draft - pending_review - published type: string description: |- * `draft` - Draft * `pending_review` - Pending review * `published` - Published x-spec-enum-id: 115b2e47abe9bd4d required: - id - name - slug Notification: type: object properties: id: type: string format: uuid readOnly: true resource_controller: type: string maxLength: 128 resource_action: type: string maxLength: 128 resource_uuid: type: string format: uuid nullable: true status: enum: - nothing_happened - got_notification - viewed_notification - opened_notification type: string description: |- * `nothing_happened` - Nothing Happened * `got_notification` - User Got Notification * `viewed_notification` - User Viewed Notification * `opened_notification` - User Opened Notification x-spec-enum-id: 6881ffe299b01c79 description: type: string nullable: true maxLength: 255 message: type: string nullable: true message_type: enum: - success - failed - warning - pending type: string description: |- * `success` - Success * `failed` - Failed * `warning` - Warning * `pending` - Pending x-spec-enum-id: f937e28130037068 created_at: type: string format: date-time readOnly: true required: - created_at - id - resource_action - resource_controller PaginatedAyahBreakersResponseList: type: array items: $ref: '#/components/schemas/AyahBreakersResponse' PaginatedAyahList: type: array items: $ref: '#/components/schemas/Ayah' PaginatedAyahTranslationList: type: array items: $ref: '#/components/schemas/AyahTranslation' PaginatedMushafList: type: array items: $ref: '#/components/schemas/Mushaf' PaginatedNotificationList: type: array items: $ref: '#/components/schemas/Notification' PaginatedProvenanceList: type: array items: $ref: '#/components/schemas/Provenance' PaginatedRecitationListList: type: array items: $ref: '#/components/schemas/RecitationList' PaginatedSurahList: type: array items: $ref: '#/components/schemas/Surah' PaginatedTakhtitList: type: array items: $ref: '#/components/schemas/Takhtit' PaginatedTranslationListList: type: array items: $ref: '#/components/schemas/TranslationList' PaginatedWordBreakersResponseList: type: array items: $ref: '#/components/schemas/WordBreakersResponse' PatchedAyah: type: object properties: id: type: string format: uuid readOnly: true number: type: integer maximum: 2147483647 minimum: -2147483648 sajdah: enum: - none - null type: string description: '* `none` - None' x-spec-enum-id: 00a003bebd5095a2 nullable: true text: type: string readOnly: true breakers: type: string readOnly: true is_bismillah: type: boolean surah: allOf: - $ref: '#/components/schemas/Surah' nullable: true readOnly: true surah_number: type: string readOnly: true length: type: integer maximum: 2147483647 minimum: -2147483648 description: Character count of the ayah text (joined words) PatchedGroup: type: object properties: url: type: string format: uri readOnly: true name: type: string maxLength: 150 PatchedMushaf: type: object properties: id: type: string format: uuid readOnly: true slug: type: string maxLength: 50 name: type: string source: type: string status: enum: - draft - pending_review - published type: string description: |- * `draft` - Draft * `pending_review` - Pending review * `published` - Published x-spec-enum-id: 115b2e47abe9bd4d PatchedNotification: type: object properties: id: type: string format: uuid readOnly: true resource_controller: type: string maxLength: 128 resource_action: type: string maxLength: 128 resource_uuid: type: string format: uuid nullable: true status: enum: - nothing_happened - got_notification - viewed_notification - opened_notification type: string description: |- * `nothing_happened` - Nothing Happened * `got_notification` - User Got Notification * `viewed_notification` - User Viewed Notification * `opened_notification` - User Opened Notification x-spec-enum-id: 6881ffe299b01c79 description: type: string nullable: true maxLength: 255 message: type: string nullable: true message_type: enum: - success - failed - warning - pending type: string description: |- * `success` - Success * `failed` - Failed * `warning` - Warning * `pending` - Pending x-spec-enum-id: f937e28130037068 created_at: type: string format: date-time readOnly: true PatchedPhrase: type: object properties: id: type: string format: uuid readOnly: true phrase: type: string PatchedProvenance: type: object properties: id: type: string format: uuid readOnly: true role: type: string maxLength: 255 recipient: type: string readOnly: true account: type: string readOnly: true PatchedRecitation: type: object properties: id: type: string format: uuid readOnly: true mushaf_id: type: string format: uuid writeOnly: true get_mushaf_id: type: string readOnly: true status: enum: - draft - pending_review - published type: string description: |- * `draft` - Draft * `pending_review` - Pending review * `published` - Published x-spec-enum-id: 115b2e47abe9bd4d reciter_account_id: type: string format: uuid writeOnly: true recitation_date: type: string format: date nullable: true recitation_location: type: string nullable: true track_count: type: string readOnly: true total_duration: type: string readOnly: true recitation_type: type: string created_at: type: string format: date-time readOnly: true updated_at: type: string format: date-time readOnly: true PatchedSurah: type: object properties: id: type: string format: uuid readOnly: true mushaf: allOf: - $ref: '#/components/schemas/Mushaf' readOnly: true mushaf_id: type: string format: uuid writeOnly: true names: type: array items: $ref: '#/components/schemas/SurahName' readOnly: true number: type: integer maximum: 2147483647 minimum: -2147483648 period: enum: - makki - madani - '' - null type: string description: |- * `makki` - Makki * `madani` - Madani x-spec-enum-id: e21a79f9c6a1fc43 nullable: true search_terms: type: string nullable: true number_of_ayahs: type: string readOnly: true bismillah: allOf: - $ref: '#/components/schemas/SurahBismillah' readOnly: true PatchedTakhtit: type: object properties: id: type: string format: uuid readOnly: true creator: type: string format: uuid readOnly: true mushaf_id: type: string format: uuid writeOnly: true account_id: type: string format: uuid writeOnly: true created_at: type: string format: date-time readOnly: true PatchedTranslation: type: object properties: id: type: string format: uuid readOnly: true mushaf_id: type: string readOnly: true translator_id: type: string readOnly: true language: enum: - af - ar - ar-dz - ast - az - bg - be - bn - br - bs - ca - ckb - cs - cy - da - de - dsb - el - en - en-au - en-gb - eo - es - es-ar - es-co - es-mx - es-ni - es-ve - et - eu - fa - fi - fr - fy - ga - gd - gl - he - hi - hr - hsb - ht - hu - hy - ia - id - ig - io - is - it - ja - ka - kab - kk - km - kn - ko - ky - lb - lt - lv - mk - ml - mn - mr - ms - my - nb - ne - nl - nn - os - pa - pl - pt - pt-br - ro - ru - sk - sl - sq - sr - sr-latn - sv - sw - ta - te - tg - th - tk - tr - tt - udm - ug - uk - ur - uz - vi - zh-hans - zh-hant type: string description: |- * `af` - af * `ar` - ar * `ar-dz` - ar-dz * `ast` - ast * `az` - az * `bg` - bg * `be` - be * `bn` - bn * `br` - br * `bs` - bs * `ca` - ca * `ckb` - ckb * `cs` - cs * `cy` - cy * `da` - da * `de` - de * `dsb` - dsb * `el` - el * `en` - en * `en-au` - en-au * `en-gb` - en-gb * `eo` - eo * `es` - es * `es-ar` - es-ar * `es-co` - es-co * `es-mx` - es-mx * `es-ni` - es-ni * `es-ve` - es-ve * `et` - et * `eu` - eu * `fa` - fa * `fi` - fi * `fr` - fr * `fy` - fy * `ga` - ga * `gd` - gd * `gl` - gl * `he` - he * `hi` - hi * `hr` - hr * `hsb` - hsb * `ht` - ht * `hu` - hu * `hy` - hy * `ia` - ia * `id` - id * `ig` - ig * `io` - io * `is` - is * `it` - it * `ja` - ja * `ka` - ka * `kab` - kab * `kk` - kk * `km` - km * `kn` - kn * `ko` - ko * `ky` - ky * `lb` - lb * `lt` - lt * `lv` - lv * `mk` - mk * `ml` - ml * `mn` - mn * `mr` - mr * `ms` - ms * `my` - my * `nb` - nb * `ne` - ne * `nl` - nl * `nn` - nn * `os` - os * `pa` - pa * `pl` - pl * `pt` - pt * `pt-br` - pt-br * `ro` - ro * `ru` - ru * `sk` - sk * `sl` - sl * `sq` - sq * `sr` - sr * `sr-latn` - sr-latn * `sv` - sv * `sw` - sw * `ta` - ta * `te` - te * `tg` - tg * `th` - th * `tk` - tk * `tr` - tr * `tt` - tt * `udm` - udm * `ug` - ug * `uk` - uk * `ur` - ur * `uz` - uz * `vi` - vi * `zh-hans` - zh-hans * `zh-hant` - zh-hant x-spec-enum-id: 6eefa8d93658b068 language_is_rtl: type: string readOnly: true release_date: type: string format: date nullable: true source: type: string nullable: true maxLength: 300 status: enum: - draft - pending_review - published type: string description: |- * `draft` - Draft * `pending_review` - Pending review * `published` - Published x-spec-enum-id: 115b2e47abe9bd4d is_primary: type: boolean PatchedUser: type: object properties: id: type: string format: uuid readOnly: true username: type: string readOnly: true description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. password: type: string writeOnly: true password2: type: string writeOnly: true email: type: string format: email title: Email address maxLength: 254 display_name: type: string maxLength: 255 birth_date: type: string format: date-time nullable: true death_date: type: string format: date-time nullable: true is_dead: type: boolean names: type: array items: $ref: '#/components/schemas/UserName' readOnly: true Phrase: type: object properties: id: type: string format: uuid readOnly: true phrase: type: string required: - id - phrase PhraseModify: type: object properties: phrases: type: object additionalProperties: type: string required: - phrases Profile: type: object properties: id: type: string format: uuid readOnly: true username: type: string description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. pattern: ^[\w.@+-]+$ maxLength: 150 email: type: string format: email title: Email address maxLength: 254 display_name: type: string maxLength: 255 birth_date: type: string format: date-time nullable: true death_date: type: string format: date-time nullable: true is_dead: type: boolean required: - id - username Provenance: type: object properties: id: type: string format: uuid readOnly: true role: type: string maxLength: 255 recipient: type: string readOnly: true account: type: string readOnly: true required: - account - id - recipient - role ProvenanceAdd: type: object properties: account_id: type: string format: uuid role: type: string required: - account_id - role Recitation: type: object properties: id: type: string format: uuid readOnly: true mushaf_id: type: string format: uuid writeOnly: true get_mushaf_id: type: string readOnly: true status: enum: - draft - pending_review - published type: string description: |- * `draft` - Draft * `pending_review` - Pending review * `published` - Published x-spec-enum-id: 115b2e47abe9bd4d reciter_account_id: type: string format: uuid writeOnly: true recitation_date: type: string format: date nullable: true recitation_location: type: string nullable: true track_count: type: string readOnly: true total_duration: type: string readOnly: true recitation_type: type: string created_at: type: string format: date-time readOnly: true updated_at: type: string format: date-time readOnly: true required: - created_at - get_mushaf_id - id - mushaf_id - recitation_type - reciter_account_id - total_duration - track_count - updated_at RecitationList: type: object properties: id: type: string format: uuid readOnly: true status: enum: - draft - pending_review - published type: string description: |- * `draft` - Draft * `pending_review` - Pending review * `published` - Published x-spec-enum-id: 115b2e47abe9bd4d recitation_date: type: string format: date nullable: true recitation_location: type: string nullable: true recitation_type: type: string track_count: type: string readOnly: true created_at: type: string format: date-time readOnly: true updated_at: type: string format: date-time readOnly: true reciter: allOf: - $ref: '#/components/schemas/ReciterDetail' nullable: true readOnly: true mushaf_id: type: string format: uuid readOnly: true required: - created_at - id - mushaf_id - recitation_type - reciter - track_count - updated_at ReciterDetail: type: object properties: id: type: string format: uuid name: type: string required: - id - name RegisterResponse: type: object properties: user: allOf: - $ref: '#/components/schemas/User' description: User information token: type: string description: Authentication token required: - token - user Surah: type: object properties: id: type: string format: uuid readOnly: true mushaf: allOf: - $ref: '#/components/schemas/Mushaf' readOnly: true mushaf_id: type: string format: uuid writeOnly: true names: type: array items: $ref: '#/components/schemas/SurahName' readOnly: true number: type: integer maximum: 2147483647 minimum: -2147483648 period: enum: - makki - madani - '' - null type: string description: |- * `makki` - Makki * `madani` - Madani x-spec-enum-id: e21a79f9c6a1fc43 nullable: true search_terms: type: string nullable: true number_of_ayahs: type: string readOnly: true bismillah: allOf: - $ref: '#/components/schemas/SurahBismillah' readOnly: true required: - bismillah - id - mushaf - mushaf_id - names - number - number_of_ayahs SurahBismillah: type: object properties: is_ayah: type: boolean text: type: string required: - is_ayah - text SurahDetail: type: object properties: id: type: string format: uuid readOnly: true mushaf: allOf: - $ref: '#/components/schemas/Mushaf' readOnly: true mushaf_id: type: string format: uuid writeOnly: true names: type: array items: $ref: '#/components/schemas/SurahName' readOnly: true number: type: integer maximum: 2147483647 minimum: -2147483648 period: enum: - makki - madani - '' - null type: string description: |- * `makki` - Makki * `madani` - Madani x-spec-enum-id: e21a79f9c6a1fc43 nullable: true search_terms: type: string nullable: true number_of_ayahs: type: string readOnly: true bismillah: allOf: - $ref: '#/components/schemas/SurahBismillah' readOnly: true ayahs: type: array items: $ref: '#/components/schemas/AyahInSurah' readOnly: true required: - ayahs - bismillah - id - mushaf - mushaf_id - names - number - number_of_ayahs SurahInAyah: type: object properties: id: type: string format: uuid readOnly: true names: type: array items: type: string format: uuid required: - id - names SurahName: type: object properties: id: type: string format: uuid readOnly: true name: type: string maxLength: 50 pronunciation: type: string nullable: true translation: type: string nullable: true transliteration: type: string nullable: true required: - id - name Takhtit: type: object properties: id: type: string format: uuid readOnly: true creator: type: string format: uuid readOnly: true mushaf_id: type: string format: uuid writeOnly: true account_id: type: string format: uuid writeOnly: true created_at: type: string format: date-time readOnly: true required: - account_id - created_at - creator - id - mushaf_id Translation: type: object properties: id: type: string format: uuid readOnly: true mushaf_id: type: string readOnly: true translator_id: type: string readOnly: true language: enum: - af - ar - ar-dz - ast - az - bg - be - bn - br - bs - ca - ckb - cs - cy - da - de - dsb - el - en - en-au - en-gb - eo - es - es-ar - es-co - es-mx - es-ni - es-ve - et - eu - fa - fi - fr - fy - ga - gd - gl - he - hi - hr - hsb - ht - hu - hy - ia - id - ig - io - is - it - ja - ka - kab - kk - km - kn - ko - ky - lb - lt - lv - mk - ml - mn - mr - ms - my - nb - ne - nl - nn - os - pa - pl - pt - pt-br - ro - ru - sk - sl - sq - sr - sr-latn - sv - sw - ta - te - tg - th - tk - tr - tt - udm - ug - uk - ur - uz - vi - zh-hans - zh-hant type: string description: |- * `af` - af * `ar` - ar * `ar-dz` - ar-dz * `ast` - ast * `az` - az * `bg` - bg * `be` - be * `bn` - bn * `br` - br * `bs` - bs * `ca` - ca * `ckb` - ckb * `cs` - cs * `cy` - cy * `da` - da * `de` - de * `dsb` - dsb * `el` - el * `en` - en * `en-au` - en-au * `en-gb` - en-gb * `eo` - eo * `es` - es * `es-ar` - es-ar * `es-co` - es-co * `es-mx` - es-mx * `es-ni` - es-ni * `es-ve` - es-ve * `et` - et * `eu` - eu * `fa` - fa * `fi` - fi * `fr` - fr * `fy` - fy * `ga` - ga * `gd` - gd * `gl` - gl * `he` - he * `hi` - hi * `hr` - hr * `hsb` - hsb * `ht` - ht * `hu` - hu * `hy` - hy * `ia` - ia * `id` - id * `ig` - ig * `io` - io * `is` - is * `it` - it * `ja` - ja * `ka` - ka * `kab` - kab * `kk` - kk * `km` - km * `kn` - kn * `ko` - ko * `ky` - ky * `lb` - lb * `lt` - lt * `lv` - lv * `mk` - mk * `ml` - ml * `mn` - mn * `mr` - mr * `ms` - ms * `my` - my * `nb` - nb * `ne` - ne * `nl` - nl * `nn` - nn * `os` - os * `pa` - pa * `pl` - pl * `pt` - pt * `pt-br` - pt-br * `ro` - ro * `ru` - ru * `sk` - sk * `sl` - sl * `sq` - sq * `sr` - sr * `sr-latn` - sr-latn * `sv` - sv * `sw` - sw * `ta` - ta * `te` - te * `tg` - tg * `th` - th * `tk` - tk * `tr` - tr * `tt` - tt * `udm` - udm * `ug` - ug * `uk` - uk * `ur` - ur * `uz` - uz * `vi` - vi * `zh-hans` - zh-hans * `zh-hant` - zh-hant x-spec-enum-id: 6eefa8d93658b068 language_is_rtl: type: string readOnly: true release_date: type: string format: date nullable: true source: type: string nullable: true maxLength: 300 status: enum: - draft - pending_review - published type: string description: |- * `draft` - Draft * `pending_review` - Pending review * `published` - Published x-spec-enum-id: 115b2e47abe9bd4d is_primary: type: boolean required: - id - language - language_is_rtl - mushaf_id - translator_id TranslationCreate: type: object properties: id: type: string format: uuid readOnly: true mushaf_id: type: string format: uuid translator_id: type: string format: uuid language: enum: - af - ar - ar-dz - ast - az - bg - be - bn - br - bs - ca - ckb - cs - cy - da - de - dsb - el - en - en-au - en-gb - eo - es - es-ar - es-co - es-mx - es-ni - es-ve - et - eu - fa - fi - fr - fy - ga - gd - gl - he - hi - hr - hsb - ht - hu - hy - ia - id - ig - io - is - it - ja - ka - kab - kk - km - kn - ko - ky - lb - lt - lv - mk - ml - mn - mr - ms - my - nb - ne - nl - nn - os - pa - pl - pt - pt-br - ro - ru - sk - sl - sq - sr - sr-latn - sv - sw - ta - te - tg - th - tk - tr - tt - udm - ug - uk - ur - uz - vi - zh-hans - zh-hant type: string description: |- * `af` - Afrikaans * `ar` - Arabic * `ar-dz` - Algerian Arabic * `ast` - Asturian * `az` - Azerbaijani * `bg` - Bulgarian * `be` - Belarusian * `bn` - Bengali * `br` - Breton * `bs` - Bosnian * `ca` - Catalan * `ckb` - Central Kurdish (Sorani) * `cs` - Czech * `cy` - Welsh * `da` - Danish * `de` - German * `dsb` - Lower Sorbian * `el` - Greek * `en` - English * `en-au` - Australian English * `en-gb` - British English * `eo` - Esperanto * `es` - Spanish * `es-ar` - Argentinian Spanish * `es-co` - Colombian Spanish * `es-mx` - Mexican Spanish * `es-ni` - Nicaraguan Spanish * `es-ve` - Venezuelan Spanish * `et` - Estonian * `eu` - Basque * `fa` - Persian * `fi` - Finnish * `fr` - French * `fy` - Frisian * `ga` - Irish * `gd` - Scottish Gaelic * `gl` - Galician * `he` - Hebrew * `hi` - Hindi * `hr` - Croatian * `hsb` - Upper Sorbian * `ht` - Haitian Creole * `hu` - Hungarian * `hy` - Armenian * `ia` - Interlingua * `id` - Indonesian * `ig` - Igbo * `io` - Ido * `is` - Icelandic * `it` - Italian * `ja` - Japanese * `ka` - Georgian * `kab` - Kabyle * `kk` - Kazakh * `km` - Khmer * `kn` - Kannada * `ko` - Korean * `ky` - Kyrgyz * `lb` - Luxembourgish * `lt` - Lithuanian * `lv` - Latvian * `mk` - Macedonian * `ml` - Malayalam * `mn` - Mongolian * `mr` - Marathi * `ms` - Malay * `my` - Burmese * `nb` - Norwegian Bokmål * `ne` - Nepali * `nl` - Dutch * `nn` - Norwegian Nynorsk * `os` - Ossetic * `pa` - Punjabi * `pl` - Polish * `pt` - Portuguese * `pt-br` - Brazilian Portuguese * `ro` - Romanian * `ru` - Russian * `sk` - Slovak * `sl` - Slovenian * `sq` - Albanian * `sr` - Serbian * `sr-latn` - Serbian Latin * `sv` - Swedish * `sw` - Swahili * `ta` - Tamil * `te` - Telugu * `tg` - Tajik * `th` - Thai * `tk` - Turkmen * `tr` - Turkish * `tt` - Tatar * `udm` - Udmurt * `ug` - Uyghur * `uk` - Ukrainian * `ur` - Urdu * `uz` - Uzbek * `vi` - Vietnamese * `zh-hans` - Simplified Chinese * `zh-hant` - Traditional Chinese x-spec-enum-id: e7e79f7d82de1282 release_date: type: string format: date nullable: true source: type: string nullable: true maxLength: 300 status: enum: - draft - pending_review - published type: string description: |- * `draft` - Draft * `pending_review` - Pending review * `published` - Published x-spec-enum-id: 115b2e47abe9bd4d required: - id - language - mushaf_id - translator_id TranslationList: type: object properties: id: type: string format: uuid readOnly: true mushaf_id: type: string readOnly: true translator: allOf: - $ref: '#/components/schemas/TranslatorDetail' nullable: true readOnly: true language: enum: - af - ar - ar-dz - ast - az - bg - be - bn - br - bs - ca - ckb - cs - cy - da - de - dsb - el - en - en-au - en-gb - eo - es - es-ar - es-co - es-mx - es-ni - es-ve - et - eu - fa - fi - fr - fy - ga - gd - gl - he - hi - hr - hsb - ht - hu - hy - ia - id - ig - io - is - it - ja - ka - kab - kk - km - kn - ko - ky - lb - lt - lv - mk - ml - mn - mr - ms - my - nb - ne - nl - nn - os - pa - pl - pt - pt-br - ro - ru - sk - sl - sq - sr - sr-latn - sv - sw - ta - te - tg - th - tk - tr - tt - udm - ug - uk - ur - uz - vi - zh-hans - zh-hant type: string description: |- * `af` - Afrikaans * `ar` - Arabic * `ar-dz` - Algerian Arabic * `ast` - Asturian * `az` - Azerbaijani * `bg` - Bulgarian * `be` - Belarusian * `bn` - Bengali * `br` - Breton * `bs` - Bosnian * `ca` - Catalan * `ckb` - Central Kurdish (Sorani) * `cs` - Czech * `cy` - Welsh * `da` - Danish * `de` - German * `dsb` - Lower Sorbian * `el` - Greek * `en` - English * `en-au` - Australian English * `en-gb` - British English * `eo` - Esperanto * `es` - Spanish * `es-ar` - Argentinian Spanish * `es-co` - Colombian Spanish * `es-mx` - Mexican Spanish * `es-ni` - Nicaraguan Spanish * `es-ve` - Venezuelan Spanish * `et` - Estonian * `eu` - Basque * `fa` - Persian * `fi` - Finnish * `fr` - French * `fy` - Frisian * `ga` - Irish * `gd` - Scottish Gaelic * `gl` - Galician * `he` - Hebrew * `hi` - Hindi * `hr` - Croatian * `hsb` - Upper Sorbian * `ht` - Haitian Creole * `hu` - Hungarian * `hy` - Armenian * `ia` - Interlingua * `id` - Indonesian * `ig` - Igbo * `io` - Ido * `is` - Icelandic * `it` - Italian * `ja` - Japanese * `ka` - Georgian * `kab` - Kabyle * `kk` - Kazakh * `km` - Khmer * `kn` - Kannada * `ko` - Korean * `ky` - Kyrgyz * `lb` - Luxembourgish * `lt` - Lithuanian * `lv` - Latvian * `mk` - Macedonian * `ml` - Malayalam * `mn` - Mongolian * `mr` - Marathi * `ms` - Malay * `my` - Burmese * `nb` - Norwegian Bokmål * `ne` - Nepali * `nl` - Dutch * `nn` - Norwegian Nynorsk * `os` - Ossetic * `pa` - Punjabi * `pl` - Polish * `pt` - Portuguese * `pt-br` - Brazilian Portuguese * `ro` - Romanian * `ru` - Russian * `sk` - Slovak * `sl` - Slovenian * `sq` - Albanian * `sr` - Serbian * `sr-latn` - Serbian Latin * `sv` - Swedish * `sw` - Swahili * `ta` - Tamil * `te` - Telugu * `tg` - Tajik * `th` - Thai * `tk` - Turkmen * `tr` - Turkish * `tt` - Tatar * `udm` - Udmurt * `ug` - Uyghur * `uk` - Ukrainian * `ur` - Urdu * `uz` - Uzbek * `vi` - Vietnamese * `zh-hans` - Simplified Chinese * `zh-hant` - Traditional Chinese x-spec-enum-id: e7e79f7d82de1282 language_is_rtl: type: string readOnly: true release_date: type: string format: date nullable: true source: type: string nullable: true maxLength: 300 status: enum: - draft - pending_review - published type: string description: |- * `draft` - Draft * `pending_review` - Pending review * `published` - Published x-spec-enum-id: 115b2e47abe9bd4d is_primary: type: boolean required: - id - language - language_is_rtl - mushaf_id - translator TranslationUpdate: type: object properties: id: type: string format: uuid readOnly: true language: enum: - af - ar - ar-dz - ast - az - bg - be - bn - br - bs - ca - ckb - cs - cy - da - de - dsb - el - en - en-au - en-gb - eo - es - es-ar - es-co - es-mx - es-ni - es-ve - et - eu - fa - fi - fr - fy - ga - gd - gl - he - hi - hr - hsb - ht - hu - hy - ia - id - ig - io - is - it - ja - ka - kab - kk - km - kn - ko - ky - lb - lt - lv - mk - ml - mn - mr - ms - my - nb - ne - nl - nn - os - pa - pl - pt - pt-br - ro - ru - sk - sl - sq - sr - sr-latn - sv - sw - ta - te - tg - th - tk - tr - tt - udm - ug - uk - ur - uz - vi - zh-hans - zh-hant type: string description: |- * `af` - Afrikaans * `ar` - Arabic * `ar-dz` - Algerian Arabic * `ast` - Asturian * `az` - Azerbaijani * `bg` - Bulgarian * `be` - Belarusian * `bn` - Bengali * `br` - Breton * `bs` - Bosnian * `ca` - Catalan * `ckb` - Central Kurdish (Sorani) * `cs` - Czech * `cy` - Welsh * `da` - Danish * `de` - German * `dsb` - Lower Sorbian * `el` - Greek * `en` - English * `en-au` - Australian English * `en-gb` - British English * `eo` - Esperanto * `es` - Spanish * `es-ar` - Argentinian Spanish * `es-co` - Colombian Spanish * `es-mx` - Mexican Spanish * `es-ni` - Nicaraguan Spanish * `es-ve` - Venezuelan Spanish * `et` - Estonian * `eu` - Basque * `fa` - Persian * `fi` - Finnish * `fr` - French * `fy` - Frisian * `ga` - Irish * `gd` - Scottish Gaelic * `gl` - Galician * `he` - Hebrew * `hi` - Hindi * `hr` - Croatian * `hsb` - Upper Sorbian * `ht` - Haitian Creole * `hu` - Hungarian * `hy` - Armenian * `ia` - Interlingua * `id` - Indonesian * `ig` - Igbo * `io` - Ido * `is` - Icelandic * `it` - Italian * `ja` - Japanese * `ka` - Georgian * `kab` - Kabyle * `kk` - Kazakh * `km` - Khmer * `kn` - Kannada * `ko` - Korean * `ky` - Kyrgyz * `lb` - Luxembourgish * `lt` - Lithuanian * `lv` - Latvian * `mk` - Macedonian * `ml` - Malayalam * `mn` - Mongolian * `mr` - Marathi * `ms` - Malay * `my` - Burmese * `nb` - Norwegian Bokmål * `ne` - Nepali * `nl` - Dutch * `nn` - Norwegian Nynorsk * `os` - Ossetic * `pa` - Punjabi * `pl` - Polish * `pt` - Portuguese * `pt-br` - Brazilian Portuguese * `ro` - Romanian * `ru` - Russian * `sk` - Slovak * `sl` - Slovenian * `sq` - Albanian * `sr` - Serbian * `sr-latn` - Serbian Latin * `sv` - Swedish * `sw` - Swahili * `ta` - Tamil * `te` - Telugu * `tg` - Tajik * `th` - Thai * `tk` - Turkmen * `tr` - Turkish * `tt` - Tatar * `udm` - Udmurt * `ug` - Uyghur * `uk` - Ukrainian * `ur` - Urdu * `uz` - Uzbek * `vi` - Vietnamese * `zh-hans` - Simplified Chinese * `zh-hant` - Traditional Chinese x-spec-enum-id: e7e79f7d82de1282 release_date: type: string format: date nullable: true source: type: string nullable: true maxLength: 300 status: enum: - draft - pending_review - published type: string description: |- * `draft` - Draft * `pending_review` - Pending review * `published` - Published x-spec-enum-id: 115b2e47abe9bd4d is_primary: type: boolean required: - id - language TranslatorDetail: type: object properties: id: type: string format: uuid name: type: string required: - id - name User: type: object properties: id: type: string format: uuid readOnly: true username: type: string readOnly: true description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. password: type: string writeOnly: true password2: type: string writeOnly: true email: type: string format: email title: Email address maxLength: 254 display_name: type: string maxLength: 255 birth_date: type: string format: date-time nullable: true death_date: type: string format: date-time nullable: true is_dead: type: boolean names: type: array items: $ref: '#/components/schemas/UserName' readOnly: true required: - email - id - names - password - password2 - username UserName: type: object properties: id: type: string format: uuid readOnly: true language: type: string maxLength: 3 phrase: allOf: - $ref: '#/components/schemas/Phrase' readOnly: true type: enum: - given_name - family_name - nasab_name - nick_name - title_name - laqab_name - kunyah_name - nisbah_name type: string description: |- * `given_name` - Given Name * `family_name` - Family Name * `nasab_name` - Nasab * `nick_name` - Nick Name * `title_name` - Title * `laqab_name` - Laqab * `kunyah_name` - Kunyah * `nisbah_name` - Nisbah x-spec-enum-id: 0b8cf3cab3237d22 text: type: string is_primary: type: boolean required: - id - is_primary - language - phrase - text - type Word: type: object properties: id: type: string format: uuid readOnly: true ayah_id: type: string format: uuid writeOnly: true text: type: string required: - ayah_id - id - text WordBreakerDetailResponse: type: object description: Serializer for individual word breaker responses properties: word_id: type: string format: uuid description: id of the word type: type: string description: Breaker type (always 'line') required: - type - word_id WordBreakersResponse: type: object description: Serializer for the words_breakers endpoint response properties: word_id: type: string format: uuid description: id of the word line: type: integer description: Line number counter required: - line - word_id securitySchemes: knoxApiToken: type: apiKey in: header name: Authorization description: Token-based authentication with required prefix "Token" tags: - name: general description: General purpose endpoints - name: auth description: Authentication and authorization endpoints (login, logout, register, token management) - name: profile description: Endpoints for retrieving and updating the current user's profile - name: users description: Admin-only endpoints to list, create, update and delete users - name: groups description: Admin-only endpoints to manage permission groups - name: mushafs description: Manage Quranic manuscripts / editions - name: surahs description: Manage chapters of the Quran (Surahs) - name: ayahs description: Manage verses of the Quran (Ayahs) - name: words description: Manage words within Quranic verses - name: translations description: Create, update and list Quran translations and their verse/ayah translations - name: recitations description: Manage audio recitations of the Quran - name: takhtits description: Manage takhtits (textual annotations) for Quranic verses - name: phrases description: Create and maintain phrases for the application - name: notifications description: Endpoints related to user notifications - name: health description: Health check endpoints for monitoring system status