Files
2025-10-29 11:09:43 +01:00

2338 lines
69 KiB
JSON

{
"openapi": "3.0.0",
"info": {
"title": "Perfex CRM REST API",
"description": "Comprehensive REST API for Perfex CRM system with full CRUD operations for all entities",
"version": "2.0.8",
"contact": {
"name": "Themesic Interactive",
"url": "https://1.envato.market/themesic"
}
},
"security": [
{
"authtoken": []
}
],
"paths": {
"/api/login/auth": {
"post": {
"tags": ["Authentication"],
"summary": "Authenticate user",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"username": {"type": "string"},
"password": {"type": "string"}
}
}
}
}
},
"responses": {
"200": {
"description": "Authentication successful",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"token": {"type": "string"}
}
}
}
}
}
}
}
},
"/api/login/key": {
"get": {
"tags": ["Authentication"],
"summary": "Get API key information",
"responses": {
"200": {
"description": "API key information",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"key": {"type": "string"},
"expiration": {"type": "string"}
}
}
}
}
}
}
}
},
"/api/contacts": {
"get": {
"tags": ["Contacts"],
"summary": "Get all contacts",
"responses": {
"200": {
"description": "List of contacts",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {"$ref": "#/components/schemas/Contact"}
}
}
}
}
}
},
"post": {
"tags": ["Contacts"],
"summary": "Create new contact",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ContactInput"}
}
}
},
"responses": {
"201": {
"description": "Contact created successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Contact"}
}
}
}
}
}
},
"/contacts/{id}": {
"get": {
"tags": ["Contacts"],
"summary": "Get contact by ID",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Contact details",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Contact"}
}
}
}
}
},
"put": {
"tags": ["Contacts"],
"summary": "Update contact",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ContactInput"}
}
}
},
"responses": {
"200": {
"description": "Contact updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Contact"}
}
}
}
}
},
"delete": {
"tags": ["Contacts"],
"summary": "Delete contact",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Contact deleted successfully"
}
}
}
},
"/api/invoices": {
"get": {
"tags": ["Invoices"],
"summary": "Get all invoices",
"responses": {
"200": {
"description": "List of invoices",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {"$ref": "#/components/schemas/Invoice"}
}
}
}
}
}
},
"post": {
"tags": ["Invoices"],
"summary": "Create new invoice",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/InvoiceInput"}
}
}
},
"responses": {
"201": {
"description": "Invoice created successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Invoice"}
}
}
}
}
}
},
"/invoices/{id}": {
"get": {
"tags": ["Invoices"],
"summary": "Get invoice by ID",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Invoice details",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Invoice"}
}
}
}
}
},
"put": {
"tags": ["Invoices"],
"summary": "Update invoice",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/InvoiceInput"}
}
}
},
"responses": {
"200": {
"description": "Invoice updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Invoice"}
}
}
}
}
},
"delete": {
"tags": ["Invoices"],
"summary": "Delete invoice",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Invoice deleted successfully"
}
}
}
},
"/api/projects": {
"get": {
"tags": ["Projects"],
"summary": "Get all projects",
"responses": {
"200": {
"description": "List of projects",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {"$ref": "#/components/schemas/Project"}
}
}
}
}
}
},
"post": {
"tags": ["Projects"],
"summary": "Create new project",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ProjectInput"}
}
}
},
"responses": {
"201": {
"description": "Project created successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Project"}
}
}
}
}
}
},
"/projects/{id}": {
"get": {
"tags": ["Projects"],
"summary": "Get project by ID",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Project details",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Project"}
}
}
}
}
},
"put": {
"tags": ["Projects"],
"summary": "Update project",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ProjectInput"}
}
}
},
"responses": {
"200": {
"description": "Project updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Project"}
}
}
}
}
},
"delete": {
"tags": ["Projects"],
"summary": "Delete project",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Project deleted successfully"
}
}
}
},
"/api/tasks": {
"get": {
"tags": ["Tasks"],
"summary": "Get all tasks",
"responses": {
"200": {
"description": "List of tasks",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {"$ref": "#/components/schemas/Task"}
}
}
}
}
}
},
"post": {
"tags": ["Tasks"],
"summary": "Create new task",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/TaskInput"}
}
}
},
"responses": {
"201": {
"description": "Task created successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Task"}
}
}
}
}
}
},
"/tasks/{id}": {
"get": {
"tags": ["Tasks"],
"summary": "Get task by ID",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Task details",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Task"}
}
}
}
}
},
"put": {
"tags": ["Tasks"],
"summary": "Update task",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/TaskInput"}
}
}
},
"responses": {
"200": {
"description": "Task updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Task"}
}
}
}
}
},
"delete": {
"tags": ["Tasks"],
"summary": "Delete task",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Task deleted successfully"
}
}
}
},
"/api/tickets": {
"get": {
"tags": ["Tickets"],
"summary": "Get all tickets",
"responses": {
"200": {
"description": "List of tickets",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {"$ref": "#/components/schemas/Ticket"}
}
}
}
}
}
},
"post": {
"tags": ["Tickets"],
"summary": "Create new ticket",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/TicketInput"}
}
}
},
"responses": {
"201": {
"description": "Ticket created successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Ticket"}
}
}
}
}
}
},
"/tickets/{id}": {
"get": {
"tags": ["Tickets"],
"summary": "Get ticket by ID",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Ticket details",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Ticket"}
}
}
}
}
},
"put": {
"tags": ["Tickets"],
"summary": "Update ticket",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/TicketInput"}
}
}
},
"responses": {
"200": {
"description": "Ticket updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Ticket"}
}
}
}
}
},
"delete": {
"tags": ["Tickets"],
"summary": "Delete ticket",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Ticket deleted successfully"
}
}
}
},
"/api/leads": {
"get": {
"tags": ["Leads"],
"summary": "Get all leads",
"responses": {
"200": {
"description": "List of leads",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {"$ref": "#/components/schemas/Lead"}
}
}
}
}
}
},
"post": {
"tags": ["Leads"],
"summary": "Create new lead",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/LeadInput"}
}
}
},
"responses": {
"201": {
"description": "Lead created successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Lead"}
}
}
}
}
}
},
"/leads/{id}": {
"get": {
"tags": ["Leads"],
"summary": "Get lead by ID",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Lead details",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Lead"}
}
}
}
}
},
"put": {
"tags": ["Leads"],
"summary": "Update lead",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/LeadInput"}
}
}
},
"responses": {
"200": {
"description": "Lead updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Lead"}
}
}
}
}
},
"delete": {
"tags": ["Leads"],
"summary": "Delete lead",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Lead deleted successfully"
}
}
}
},
"/api/search": {
"get": {
"tags": ["Search"],
"summary": "Search across all entities",
"parameters": [
{"name": "q", "in": "query", "required": true, "schema": {"type": "string"}},
{"name": "type", "in": "query", "schema": {"type": "string"}}
],
"responses": {
"200": {
"description": "Search results",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"result": {
"type": "array",
"items": {"type": "object"}
},
"type": {"type": "string"},
"search_heading": {"type": "string"}
}
}
}
}
}
}
}
},
"/api/custom_fields/{entity}": {
"get": {
"tags": ["Custom Fields"],
"summary": "Get custom fields for entity",
"parameters": [
{"name": "entity", "in": "path", "required": true, "schema": {"type": "string"}}
],
"responses": {
"200": {
"description": "Custom fields for entity",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {"$ref": "#/components/schemas/CustomField"}
}
}
}
}
}
}
},
"/api/calendar": {
"get": {
"tags": ["Calendar"],
"summary": "Get calendar events",
"responses": {
"200": {
"description": "Calendar events retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/CalendarEvent"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Calendar"],
"summary": "Create calendar event",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/CalendarEventInput"}
}
}
},
"responses": {
"201": {
"description": "Calendar event created successfully"
}
}
},
"put": {
"tags": ["Calendar"],
"summary": "Update calendar event",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/CalendarEventInput"}
}
}
},
"responses": {
"200": {
"description": "Calendar event updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/CalendarEvent"}
}
}
}
}
},
"delete": {
"tags": ["Calendar"],
"summary": "Delete calendar event",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Calendar event deleted successfully"
}
}
}
},
"/api/credit_notes": {
"get": {
"tags": ["Credit Notes"],
"summary": "Get all credit notes",
"responses": {
"200": {
"description": "Credit notes retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/CreditNote"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Credit Notes"],
"summary": "Create credit note",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/CreditNoteInput"}
}
}
},
"responses": {
"201": {
"description": "Credit note created successfully"
}
}
},
"put": {
"tags": ["Credit Notes"],
"summary": "Update credit note",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/CreditNoteInput"}
}
}
},
"responses": {
"200": {
"description": "Credit note updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/CreditNote"}
}
}
}
}
},
"delete": {
"tags": ["Credit Notes"],
"summary": "Delete credit note",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Credit note deleted successfully"
}
}
}
},
"/api/customers": {
"get": {
"tags": ["Customers"],
"summary": "Get all customers",
"responses": {
"200": {
"description": "Customers retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Customer"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Customers"],
"summary": "Create customer",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/CustomerInput"}
}
}
},
"responses": {
"201": {
"description": "Customer created successfully"
}
}
},
"put": {
"tags": ["Customers"],
"summary": "Update customer",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/CustomerInput"}
}
}
},
"responses": {
"200": {
"description": "Customer updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Customer"}
}
}
}
}
},
"delete": {
"tags": ["Customers"],
"summary": "Delete customer",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Customer deleted successfully"
}
}
}
},
"/api/estimates": {
"get": {
"tags": ["Estimates"],
"summary": "Get all estimates",
"responses": {
"200": {
"description": "Estimates retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Estimate"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Estimates"],
"summary": "Create estimate",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/EstimateInput"}
}
}
},
"responses": {
"201": {
"description": "Estimate created successfully"
}
}
},
"put": {
"tags": ["Estimates"],
"summary": "Update estimate",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/EstimateInput"}
}
}
},
"responses": {
"200": {
"description": "Estimate updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Estimate"}
}
}
}
}
},
"delete": {
"tags": ["Estimates"],
"summary": "Delete estimate",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Estimate deleted successfully"
}
}
}
},
"/api/expenses": {
"get": {
"tags": ["Expenses"],
"summary": "Get all expenses",
"responses": {
"200": {
"description": "Expenses retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Expense"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Expenses"],
"summary": "Create expense",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ExpenseInput"}
}
}
},
"responses": {
"201": {
"description": "Expense created successfully"
}
}
},
"put": {
"tags": ["Expenses"],
"summary": "Update expense",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ExpenseInput"}
}
}
},
"responses": {
"200": {
"description": "Expense updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Expense"}
}
}
}
}
},
"delete": {
"tags": ["Expenses"],
"summary": "Delete expense",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Expense deleted successfully"
}
}
}
},
"/api/items": {
"get": {
"tags": ["Items"],
"summary": "Get all items",
"responses": {
"200": {
"description": "Items retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Item"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Items"],
"summary": "Create item",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ItemInput"}
}
}
},
"responses": {
"201": {
"description": "Item created successfully"
}
}
},
"put": {
"tags": ["Items"],
"summary": "Update item",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ItemInput"}
}
}
},
"responses": {
"200": {
"description": "Item updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Item"}
}
}
}
}
},
"delete": {
"tags": ["Items"],
"summary": "Delete item",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Item deleted successfully"
}
}
}
},
"/api/milestones": {
"get": {
"tags": ["Milestones"],
"summary": "Get all milestones",
"responses": {
"200": {
"description": "Milestones retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Milestone"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Milestones"],
"summary": "Create milestone",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/MilestoneInput"}
}
}
},
"responses": {
"201": {
"description": "Milestone created successfully"
}
}
},
"put": {
"tags": ["Milestones"],
"summary": "Update milestone",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/MilestoneInput"}
}
}
},
"responses": {
"200": {
"description": "Milestone updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Milestone"}
}
}
}
}
},
"delete": {
"tags": ["Milestones"],
"summary": "Delete milestone",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Milestone deleted successfully"
}
}
}
},
"/api/payments": {
"get": {
"tags": ["Payments"],
"summary": "Get all payments",
"responses": {
"200": {
"description": "Payments retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Payment"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Payments"],
"summary": "Create payment",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/PaymentInput"}
}
}
},
"responses": {
"201": {
"description": "Payment created successfully"
}
}
},
"put": {
"tags": ["Payments"],
"summary": "Update payment",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/PaymentInput"}
}
}
},
"responses": {
"200": {
"description": "Payment updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Payment"}
}
}
}
}
},
"delete": {
"tags": ["Payments"],
"summary": "Delete payment",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Payment deleted successfully"
}
}
}
},
"/api/proposals": {
"get": {
"tags": ["Proposals"],
"summary": "Get all proposals",
"responses": {
"200": {
"description": "Proposals retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Proposal"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Proposals"],
"summary": "Create proposal",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ProposalInput"}
}
}
},
"responses": {
"201": {
"description": "Proposal created successfully"
}
}
},
"put": {
"tags": ["Proposals"],
"summary": "Update proposal",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ProposalInput"}
}
}
},
"responses": {
"200": {
"description": "Proposal updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Proposal"}
}
}
}
}
},
"delete": {
"tags": ["Proposals"],
"summary": "Delete proposal",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Proposal deleted successfully"
}
}
}
},
"/api/staffs": {
"get": {
"tags": ["Staff"],
"summary": "Get all staff members",
"responses": {
"200": {
"description": "Staff members retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Staff"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Staff"],
"summary": "Create staff member",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/StaffInput"}
}
}
},
"responses": {
"201": {
"description": "Staff member created successfully"
}
}
},
"put": {
"tags": ["Staff"],
"summary": "Update staff member",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/StaffInput"}
}
}
},
"responses": {
"200": {
"description": "Staff member updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Staff"}
}
}
}
}
},
"delete": {
"tags": ["Staff"],
"summary": "Delete staff member",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Staff member deleted successfully"
}
}
}
},
"/api/subscriptions": {
"get": {
"tags": ["Subscriptions"],
"summary": "Get all subscriptions",
"responses": {
"200": {
"description": "Subscriptions retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Subscription"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Subscriptions"],
"summary": "Create subscription",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/SubscriptionInput"}
}
}
},
"responses": {
"201": {
"description": "Subscription created successfully"
}
}
},
"put": {
"tags": ["Subscriptions"],
"summary": "Update subscription",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/SubscriptionInput"}
}
}
},
"responses": {
"200": {
"description": "Subscription updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Subscription"}
}
}
}
}
},
"delete": {
"tags": ["Subscriptions"],
"summary": "Delete subscription",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Subscription deleted successfully"
}
}
}
},
"/api/timesheets": {
"get": {
"tags": ["Timesheets"],
"summary": "Get all timesheets",
"responses": {
"200": {
"description": "Timesheets retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Timesheet"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Timesheets"],
"summary": "Create timesheet",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/TimesheetInput"}
}
}
},
"responses": {
"201": {
"description": "Timesheet created successfully"
}
}
},
"put": {
"tags": ["Timesheets"],
"summary": "Update timesheet",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/TimesheetInput"}
}
}
},
"responses": {
"200": {
"description": "Timesheet updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Timesheet"}
}
}
}
}
},
"delete": {
"tags": ["Timesheets"],
"summary": "Delete timesheet",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Timesheet deleted successfully"
}
}
}
},
"/api/contracts": {
"get": {
"tags": ["Contracts"],
"summary": "Get all contracts",
"responses": {
"200": {
"description": "Contracts retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {
"type": "array",
"items": {"$ref": "#/components/schemas/Contract"}
}
}
}
}
}
}
}
},
"post": {
"tags": ["Contracts"],
"summary": "Create contract",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ContractInput"}
}
}
},
"responses": {
"201": {
"description": "Contract created successfully"
}
}
},
"put": {
"tags": ["Contracts"],
"summary": "Update contract",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/ContractInput"}
}
}
},
"responses": {
"200": {
"description": "Contract updated successfully",
"content": {
"application/json": {
"schema": {"$ref": "#/components/schemas/Contract"}
}
}
}
}
},
"delete": {
"tags": ["Contracts"],
"summary": "Delete contract",
"parameters": [
{"name": "id", "in": "path", "required": true, "schema": {"type": "integer"}}
],
"responses": {
"200": {
"description": "Contract deleted successfully"
}
}
}
},
"/api/common": {
"get": {
"tags": ["Common"],
"summary": "Get common data",
"parameters": [
{"name": "type", "in": "path", "required": true, "schema": {"type": "string"}}
],
"responses": {
"200": {
"description": "Common data retrieved successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {"type": "boolean"},
"data": {"type": "object"}
}
}
}
}
}
}
}
}
},
"components": {
"securitySchemes": {
"authtoken": {
"type": "apiKey",
"in": "header",
"name": "authtoken",
"description": "Authentication token from admin area"
}
},
"schemas": {
"Contact": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"firstname": {"type": "string"},
"lastname": {"type": "string"},
"email": {"type": "string"},
"phonenumber": {"type": "string"},
"title": {"type": "string"},
"userid": {"type": "integer"}
}
},
"ContactInput": {
"type": "object",
"required": ["firstname", "lastname", "email"],
"properties": {
"firstname": {"type": "string"},
"lastname": {"type": "string"},
"email": {"type": "string"},
"phonenumber": {"type": "string"},
"title": {"type": "string"},
"userid": {"type": "integer"}
}
},
"Invoice": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"number": {"type": "string"},
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"duedate": {"type": "string", "format": "date"},
"currency": {"type": "integer"},
"subtotal": {"type": "number"},
"total": {"type": "number"},
"status": {"type": "integer"}
}
},
"InvoiceInput": {
"type": "object",
"required": ["clientid", "date", "duedate", "currency"],
"properties": {
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"duedate": {"type": "string", "format": "date"},
"currency": {"type": "integer"},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {"type": "string"},
"qty": {"type": "number"},
"rate": {"type": "number"},
"taxname": {"type": "string"},
"taxrate": {"type": "number"}
}
}
}
}
},
"Project": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"name": {"type": "string"},
"description": {"type": "string"},
"clientid": {"type": "integer"},
"start_date": {"type": "string", "format": "date"},
"deadline": {"type": "string", "format": "date"},
"status": {"type": "integer"}
}
},
"ProjectInput": {
"type": "object",
"required": ["name", "clientid"],
"properties": {
"name": {"type": "string"},
"description": {"type": "string"},
"clientid": {"type": "integer"},
"start_date": {"type": "string", "format": "date"},
"deadline": {"type": "string", "format": "date"},
"status": {"type": "integer"}
}
},
"Task": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"name": {"type": "string"},
"description": {"type": "string"},
"project_id": {"type": "integer"},
"assigned": {"type": "integer"},
"startdate": {"type": "string", "format": "date"},
"duedate": {"type": "string", "format": "date"},
"status": {"type": "integer"}
}
},
"TaskInput": {
"type": "object",
"required": ["name"],
"properties": {
"name": {"type": "string"},
"description": {"type": "string"},
"project_id": {"type": "integer"},
"assigned": {"type": "integer"},
"startdate": {"type": "string", "format": "date"},
"duedate": {"type": "string", "format": "date"},
"status": {"type": "integer"}
}
},
"Ticket": {
"type": "object",
"properties": {
"ticketid": {"type": "integer"},
"subject": {"type": "string"},
"message": {"type": "string"},
"userid": {"type": "integer"},
"contactid": {"type": "integer"},
"department": {"type": "integer"},
"priority": {"type": "integer"},
"status": {"type": "integer"}
}
},
"TicketInput": {
"type": "object",
"required": ["subject", "message", "userid", "department"],
"properties": {
"subject": {"type": "string"},
"message": {"type": "string"},
"userid": {"type": "integer"},
"contactid": {"type": "integer"},
"department": {"type": "integer"},
"priority": {"type": "integer"},
"status": {"type": "integer"}
}
},
"Lead": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"name": {"type": "string"},
"title": {"type": "string"},
"company": {"type": "string"},
"email": {"type": "string"},
"phonenumber": {"type": "string"},
"address": {"type": "string"},
"city": {"type": "string"},
"state": {"type": "string"},
"zip": {"type": "string"},
"status": {"type": "integer"}
}
},
"LeadInput": {
"type": "object",
"required": ["name"],
"properties": {
"name": {"type": "string"},
"title": {"type": "string"},
"company": {"type": "string"},
"email": {"type": "string"},
"phonenumber": {"type": "string"},
"address": {"type": "string"},
"city": {"type": "string"},
"state": {"type": "string"},
"zip": {"type": "string"},
"status": {"type": "integer"}
}
},
"CustomField": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"name": {"type": "string"},
"fieldto": {"type": "string"},
"type": {"type": "string"},
"options": {"type": "string"},
"required": {"type": "integer"},
"active": {"type": "integer"}
}
},
"CalendarEvent": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"title": {"type": "string"},
"description": {"type": "string"},
"start": {"type": "string", "format": "date-time"},
"end": {"type": "string", "format": "date-time"},
"color": {"type": "string"},
"userid": {"type": "integer"}
}
},
"CalendarEventInput": {
"type": "object",
"required": ["title", "start"],
"properties": {
"title": {"type": "string"},
"description": {"type": "string"},
"start": {"type": "string", "format": "date-time"},
"end": {"type": "string", "format": "date-time"},
"color": {"type": "string"},
"userid": {"type": "integer"}
}
},
"CreditNote": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"number": {"type": "string"},
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"currency": {"type": "integer"},
"subtotal": {"type": "number"},
"total": {"type": "number"},
"status": {"type": "integer"}
}
},
"CreditNoteInput": {
"type": "object",
"required": ["clientid", "date", "currency"],
"properties": {
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"currency": {"type": "integer"},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {"type": "string"},
"qty": {"type": "number"},
"rate": {"type": "number"},
"taxname": {"type": "string"},
"taxrate": {"type": "number"}
}
}
}
}
},
"Customer": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"company": {"type": "string"},
"email": {"type": "string"},
"phone": {"type": "string"},
"address": {"type": "string"},
"city": {"type": "string"},
"state": {"type": "string"},
"zip": {"type": "string"},
"country": {"type": "string"},
"website": {"type": "string"},
"created": {"type": "string", "format": "date-time"}
}
},
"CustomerInput": {
"type": "object",
"required": ["company"],
"properties": {
"company": {"type": "string"},
"email": {"type": "string"},
"phone": {"type": "string"},
"address": {"type": "string"},
"city": {"type": "string"},
"state": {"type": "string"},
"zip": {"type": "string"},
"country": {"type": "string"},
"website": {"type": "string"}
}
},
"Estimate": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"number": {"type": "string"},
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"duedate": {"type": "string", "format": "date"},
"currency": {"type": "integer"},
"subtotal": {"type": "number"},
"total": {"type": "number"},
"status": {"type": "integer"}
}
},
"EstimateInput": {
"type": "object",
"required": ["clientid", "date", "duedate", "currency"],
"properties": {
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"duedate": {"type": "string", "format": "date"},
"currency": {"type": "integer"},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {"type": "string"},
"qty": {"type": "number"},
"rate": {"type": "number"},
"taxname": {"type": "string"},
"taxrate": {"type": "number"}
}
}
}
}
},
"Expense": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"category": {"type": "string"},
"amount": {"type": "number"},
"date": {"type": "string", "format": "date"},
"description": {"type": "string"},
"clientid": {"type": "integer"},
"project_id": {"type": "integer"},
"currency": {"type": "integer"}
}
},
"ExpenseInput": {
"type": "object",
"required": ["category", "amount", "date"],
"properties": {
"category": {"type": "string"},
"amount": {"type": "number"},
"date": {"type": "string", "format": "date"},
"description": {"type": "string"},
"clientid": {"type": "integer"},
"project_id": {"type": "integer"},
"currency": {"type": "integer"}
}
},
"Item": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"description": {"type": "string"},
"long_description": {"type": "string"},
"rate": {"type": "number"},
"taxname": {"type": "string"},
"taxrate": {"type": "number"},
"unit": {"type": "string"},
"group_id": {"type": "integer"}
}
},
"ItemInput": {
"type": "object",
"required": ["description", "rate"],
"properties": {
"description": {"type": "string"},
"long_description": {"type": "string"},
"rate": {"type": "number"},
"taxname": {"type": "string"},
"taxrate": {"type": "number"},
"unit": {"type": "string"},
"group_id": {"type": "integer"}
}
},
"Milestone": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"name": {"type": "string"},
"description": {"type": "string"},
"project_id": {"type": "integer"},
"due_date": {"type": "string", "format": "date"},
"status": {"type": "integer"}
}
},
"MilestoneInput": {
"type": "object",
"required": ["name", "project_id"],
"properties": {
"name": {"type": "string"},
"description": {"type": "string"},
"project_id": {"type": "integer"},
"due_date": {"type": "string", "format": "date"},
"status": {"type": "integer"}
}
},
"Payment": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"invoiceid": {"type": "integer"},
"amount": {"type": "number"},
"paymentmode": {"type": "string"},
"paymentmethod": {"type": "string"},
"date": {"type": "string", "format": "date"},
"note": {"type": "string"},
"currency": {"type": "integer"}
}
},
"PaymentInput": {
"type": "object",
"required": ["invoiceid", "amount", "paymentmode", "date"],
"properties": {
"invoiceid": {"type": "integer"},
"amount": {"type": "number"},
"paymentmode": {"type": "string"},
"paymentmethod": {"type": "string"},
"date": {"type": "string", "format": "date"},
"note": {"type": "string"},
"currency": {"type": "integer"}
}
},
"Proposal": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"subject": {"type": "string"},
"content": {"type": "string"},
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"open_till": {"type": "string", "format": "date"},
"currency": {"type": "integer"},
"subtotal": {"type": "number"},
"total": {"type": "number"},
"status": {"type": "integer"}
}
},
"ProposalInput": {
"type": "object",
"required": ["subject", "content", "clientid", "date"],
"properties": {
"subject": {"type": "string"},
"content": {"type": "string"},
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"open_till": {"type": "string", "format": "date"},
"currency": {"type": "integer"},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {"type": "string"},
"qty": {"type": "number"},
"rate": {"type": "number"},
"taxname": {"type": "string"},
"taxrate": {"type": "number"}
}
}
}
}
},
"Staff": {
"type": "object",
"properties": {
"staffid": {"type": "integer"},
"firstname": {"type": "string"},
"lastname": {"type": "string"},
"email": {"type": "string"},
"phonenumber": {"type": "string"},
"facebook": {"type": "string"},
"linkedin": {"type": "string"},
"skype": {"type": "string"},
"role": {"type": "integer"},
"active": {"type": "integer"}
}
},
"StaffInput": {
"type": "object",
"required": ["firstname", "lastname", "email"],
"properties": {
"firstname": {"type": "string"},
"lastname": {"type": "string"},
"email": {"type": "string"},
"phonenumber": {"type": "string"},
"facebook": {"type": "string"},
"linkedin": {"type": "string"},
"skype": {"type": "string"},
"role": {"type": "integer"},
"active": {"type": "integer"}
}
},
"Subscription": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"name": {"type": "string"},
"description": {"type": "string"},
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"next_billing_cycle": {"type": "string", "format": "date"},
"billing_cycle": {"type": "string"},
"amount": {"type": "number"},
"currency": {"type": "integer"},
"status": {"type": "integer"}
}
},
"SubscriptionInput": {
"type": "object",
"required": ["name", "clientid", "date", "billing_cycle", "amount"],
"properties": {
"name": {"type": "string"},
"description": {"type": "string"},
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"next_billing_cycle": {"type": "string", "format": "date"},
"billing_cycle": {"type": "string"},
"amount": {"type": "number"},
"currency": {"type": "integer"},
"status": {"type": "integer"}
}
},
"Timesheet": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"project_id": {"type": "integer"},
"task_id": {"type": "integer"},
"staff_id": {"type": "integer"},
"start_time": {"type": "string", "format": "date-time"},
"end_time": {"type": "string", "format": "date-time"},
"note": {"type": "string"},
"hourly_rate": {"type": "number"}
}
},
"TimesheetInput": {
"type": "object",
"required": ["project_id", "staff_id", "start_time", "end_time"],
"properties": {
"project_id": {"type": "integer"},
"task_id": {"type": "integer"},
"staff_id": {"type": "integer"},
"start_time": {"type": "string", "format": "date-time"},
"end_time": {"type": "string", "format": "date-time"},
"note": {"type": "string"},
"hourly_rate": {"type": "number"}
}
},
"Contract": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"subject": {"type": "string"},
"description": {"type": "string"},
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"duedate": {"type": "string", "format": "date"},
"contract_value": {"type": "number"},
"currency": {"type": "integer"},
"status": {"type": "integer"}
}
},
"ContractInput": {
"type": "object",
"required": ["subject", "clientid", "date", "duedate"],
"properties": {
"subject": {"type": "string"},
"description": {"type": "string"},
"clientid": {"type": "integer"},
"date": {"type": "string", "format": "date"},
"duedate": {"type": "string", "format": "date"},
"contract_value": {"type": "number"},
"currency": {"type": "integer"},
"status": {"type": "integer"}
}
}
}
}
}