2338 lines
69 KiB
JSON
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"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|