░▒▓████████████████████████████████▓▒░ ░▒▓█ ▓▒░ ░▒▓█ ~ S W A M P ~ ▓▒░ ░▒▓█ ▓▒░ ░▒▓████████████████████████████████▓▒░
lon105.truehost.cloud
LOCATION:
/home/ilrtztmy/api.jilmekroofingandconstruction.com/docs
☗ ROOT
↻ REFRESH
✎ CARVE FLESH
EDITING: openapi.yaml
openapi: 3.0.3 info: title: JILMEK Roofing & Construction API version: 1.2.0 servers: - url: https://api.jilmekroofingandconstruction.com/api paths: /health: get: {summary: Health check, responses: {"200": {description: OK}}} /ready: get: {summary: Readiness check, responses: {"200": {description: Ready}, "503": {description: Not ready}}} /site-settings/public: get: {summary: Public site settings, responses: {"200": {description: Settings}}} /services: get: {summary: Published services, responses: {"200": {description: Services}}} /projects: get: summary: Published projects with project-only API image URLs responses: "200": description: Projects content: application/json: schema: type: object properties: success: {type: boolean} data: type: array items: {$ref: '#/components/schemas/Project'} post: security: [{bearerAuth: []}] summary: Create a project (administrator or editor) description: Creates a project without modifying or creating image associations. Slugs are lowercase letters/numbers separated by single hyphens. requestBody: required: true content: application/json: schema: {$ref: '#/components/schemas/ProjectInput'} responses: "201": description: Created project including linked image metadata content: application/json: schema: {$ref: '#/components/schemas/AdminProjectResponse'} "401": {description: Unauthorized} "403": {description: Forbidden} "409": {description: Duplicate slug} "422": {description: Validation error} /projects/{id}: put: security: [{bearerAuth: []}] summary: Update project details (administrator or editor) description: Saves project details, clears deleted_at, and preserves existing image associations. Publishing sets published_at. parameters: - {name: id, in: path, required: true, schema: {type: integer}} requestBody: required: true content: application/json: schema: {$ref: '#/components/schemas/ProjectInput'} responses: "200": description: Updated project including linked image metadata content: application/json: schema: {$ref: '#/components/schemas/AdminProjectResponse'} "401": {description: Unauthorized} "403": {description: Forbidden} "404": {description: Not found} "409": {description: Duplicate slug} "422": {description: Validation error} delete: security: [{bearerAuth: []}] summary: Archive a project (administrator or editor) description: Sets status to archived and deleted_at to the current time; project, media, and associations are retained. parameters: - {name: id, in: path, required: true, schema: {type: integer}} responses: {"200": {description: Archived}, "401": {description: Unauthorized}, "403": {description: Forbidden}, "404": {description: Not found}} /admin/projects: get: security: [{bearerAuth: []}] summary: List all projects including drafts and archived projects with image metadata description: Restricted to administrator and editor roles. Records include featured, sort_order, status, cover_media_id, cover_image, and images. responses: "200": description: All projects content: application/json: schema: type: object properties: success: {type: boolean} data: type: array items: {$ref: '#/components/schemas/AdminProject'} "401": {description: Unauthorized} "403": {description: Forbidden} /products: get: summary: Published roofing products responses: {"200": {description: Published products}} post: security: [{bearerAuth: []}] summary: Create a roofing product requestBody: required: true content: application/json: schema: {$ref: '#/components/schemas/ProductInput'} responses: {"201": {description: Created}, "401": {description: Unauthorized}, "422": {description: Validation error}} /products/{id}: put: security: [{bearerAuth: []}] summary: Update a roofing product parameters: - {name: id, in: path, required: true, schema: {type: integer}} requestBody: required: true content: application/json: schema: {$ref: '#/components/schemas/ProductInput'} responses: {"200": {description: Updated}, "404": {description: Not found}} delete: security: [{bearerAuth: []}] summary: Delete a roofing product parameters: - {name: id, in: path, required: true, schema: {type: integer}} responses: {"200": {description: Deleted}, "404": {description: Not found}} /admin/products: get: security: [{bearerAuth: []}] summary: List all products, including drafts, for the dashboard responses: {"200": {description: Products}, "401": {description: Unauthorized}} /listings: get: summary: Published land, property, and development listings responses: {"200": {description: Published listings}} post: security: [{bearerAuth: []}] summary: Create a property listing requestBody: required: true content: application/json: schema: {$ref: '#/components/schemas/ListingInput'} responses: {"201": {description: Created}, "401": {description: Unauthorized}, "422": {description: Validation error}} /listings/{id}: put: security: [{bearerAuth: []}] summary: Update a property listing parameters: - {name: id, in: path, required: true, schema: {type: integer}} requestBody: required: true content: application/json: schema: {$ref: '#/components/schemas/ListingInput'} responses: {"200": {description: Updated}, "404": {description: Not found}} delete: security: [{bearerAuth: []}] summary: Delete a property listing parameters: - {name: id, in: path, required: true, schema: {type: integer}} responses: {"200": {description: Deleted}, "404": {description: Not found}} /admin/listings: get: security: [{bearerAuth: []}] summary: List all property listings, including drafts, for the dashboard responses: {"200": {description: Listings}, "401": {description: Unauthorized}} /enquiries: post: summary: Submit a public enquiry that appears in the admin dashboard requestBody: required: true content: application/json: schema: {$ref: '#/components/schemas/EnquiryInput'} responses: {"201": {description: Created}, "422": {description: Validation error}, "429": {description: Rate limited}} get: security: [{bearerAuth: []}] summary: List enquiries for the admin dashboard responses: {"200": {description: Enquiries}, "401": {description: Unauthorized}} /enquiries/{id}: patch: security: [{bearerAuth: []}] summary: Update enquiry status and/or persistent read state parameters: - {name: id, in: path, required: true, schema: {type: integer}} requestBody: required: true content: application/json: schema: type: object properties: status: {type: string, enum: [new, contacted, in_progress, quoted, won, closed, spam]} is_read: {type: boolean} responses: {"200": {description: Updated}, "401": {description: Unauthorized}, "404": {description: Not found}} delete: security: [{bearerAuth: []}] summary: Delete an enquiry parameters: - {name: id, in: path, required: true, schema: {type: integer}} responses: {"200": {description: Deleted}, "401": {description: Unauthorized}} /media: get: security: [{bearerAuth: []}] summary: List project photos only responses: {"200": {description: Project media}} post: security: [{bearerAuth: []}] summary: Upload a JPEG, PNG, or WebP project photo (maximum 8 MB) requestBody: required: true content: multipart/form-data: schema: type: object required: [file] properties: file: {type: string, format: binary} responses: {"201": {description: Uploaded project photo}, "413": {description: Too large}, "415": {description: Unsupported image type}} /media/{key}: delete: security: [{bearerAuth: []}] summary: Delete an unlinked project photo parameters: - {name: key, in: path, required: true, schema: {type: string}} responses: {"200": {description: Deleted}, "409": {description: Still linked to a project}} /auth/login: post: summary: Issue an administrator JWT requestBody: required: true content: application/json: schema: type: object required: [email, password] properties: email: {type: string, format: email} password: {type: string, format: password} responses: {"200": {description: JWT issued}, "401": {description: Invalid credentials}} /auth/me: get: security: [{bearerAuth: []}] summary: Validate the current administrator JWT responses: {"200": {description: Current administrator}, "401": {description: Unauthorized}} /projects/{slug}/images: post: security: [{bearerAuth: []}] summary: Attach an uploaded project photo to a project parameters: - {name: slug, in: path, required: true, schema: {type: string}} requestBody: required: true content: application/json: schema: type: object required: [media_id] properties: media_id: {type: integer} sort_order: {type: integer} is_cover: {type: boolean} responses: {"200": {description: Attached}, "401": {description: Unauthorized}} /projects/{slug}/images/{media_id}: delete: security: [{bearerAuth: []}] summary: Remove a photo association from a project parameters: - {name: slug, in: path, required: true, schema: {type: string}} - {name: media_id, in: path, required: true, schema: {type: integer}} responses: {"200": {description: Removed}, "401": {description: Unauthorized}} components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT schemas: ProjectImage: type: object properties: id: {type: integer} url: {type: string, format: uri} alt_text: {type: string, nullable: true} caption: {type: string, nullable: true} width: {type: integer, nullable: true} height: {type: integer, nullable: true} Project: type: object properties: id: {type: integer} slug: {type: string} title: {type: string} category: {type: string} summary: {type: string, nullable: true} description: {type: string, nullable: true} location: {type: string, nullable: true} cover_media_id: {type: integer, nullable: true} cover_image: {$ref: '#/components/schemas/ProjectImage', nullable: true} images: type: array items: {$ref: '#/components/schemas/ProjectImage'} AdminProject: allOf: - {$ref: '#/components/schemas/Project'} - type: object required: [featured, sort_order, status] properties: featured: {type: boolean} sort_order: {type: integer, minimum: 0} status: {type: string, enum: [draft, published, archived]} AdminProjectResponse: type: object properties: success: {type: boolean} data: {$ref: '#/components/schemas/AdminProject'} ProjectInput: type: object additionalProperties: false required: [slug, title, category, status] properties: slug: {type: string, maxLength: 180, pattern: '^[a-z0-9]+(?:-[a-z0-9]+)*$'} title: {type: string, maxLength: 220} category: {type: string, maxLength: 80} summary: {type: string, maxLength: 65535, nullable: true} description: {type: string, nullable: true} location: {type: string, maxLength: 180, nullable: true} status: {type: string, enum: [draft, published, archived]} featured: {type: boolean, default: false} sort_order: {type: integer, minimum: 0, maximum: 2147483647, default: 0} ProductInput: type: object required: [name, profile, description] properties: name: {type: string, maxLength: 180} profile: {type: string, maxLength: 180} description: {type: string} image_url: {type: string, nullable: true, description: Frontend static /images path} image_key: {type: string, nullable: true} is_published: {type: boolean} is_featured: {type: boolean} sort_order: {type: integer} ListingInput: type: object required: [title, listing_type, location, status, description] properties: title: {type: string, maxLength: 220} listing_type: {type: string, enum: [land, property, development]} location: {type: string, maxLength: 180} price_label: {type: string, nullable: true} status: {type: string, enum: [available, reserved, sold, draft]} description: {type: string} image_url: {type: string, nullable: true, description: Frontend static /images path} image_key: {type: string, nullable: true} is_published: {type: boolean} is_featured: {type: boolean} EnquiryInput: type: object required: [full_name, phone, location, service_needed, message] properties: full_name: {type: string, maxLength: 180} phone: {type: string, maxLength: 50} email: {type: string, format: email, nullable: true} location: {type: string} service_needed: {type: string} message: {type: string} preferred_contact_method: {type: string} source_page: {type: string}
CANCEL
Name
Type
Size
Modified
Actions
↩ ..
DIR
—
—
📄 openapi.yaml
YAML
14.4 KB
2026-11-06 14:51
EDIT