Document API Specification¶
Overview¶
The Document API provides endpoints for document generation, quote management, file uploads, and payment registration.
Base Path: /document
Content Types:
- Request: application/json
- Response: application/json or application/octet-stream (for PDF downloads)
Response Format¶
All endpoints return a TlinqApiResponse object (or binary data for PDFs):
Date Format: All dates are returned in ISO 8601 format (yyyy-MM-dd'T'HH:mm:ss)
Invoice Printing Endpoints¶
POST /document/printInvoice¶
Generates and downloads an invoice as PDF.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | docnum | string | Yes | Invoice document number |
Request Example:
Response:
Returns a PDF file as binary stream with Content-Disposition header.
Error Codes:
- MISSING_PARAMETER - Document number not provided
GET /document/printInvoice¶
Generates and downloads an invoice as PDF (GET version).
Query Parameters: | Field | Type | Required | Description | |-------|------|----------|-------------| | token | string | No | User session token | | docnum | string | Yes | Invoice document number |
Quote Printing Endpoints¶
POST /document/printQuote¶
Generates and downloads a quote as PDF.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | docnum | string | Yes | Quote document number |
Request Example:
Response: Returns a PDF file as binary stream.
GET /document/printQuote¶
Generates and downloads a quote as PDF (GET version).
Query Parameters: | Field | Type | Required | Description | |-------|------|----------|-------------| | token | string | No | User session token | | docnum | string | Yes | Quote document number |
Quote Management Endpoints¶
POST /document/createQuote¶
Creates a new quote for a customer.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | customerId | integer | Yes | Customer ID | | currencyId | integer | No | Currency ID | | items | array | No | Array of quote items |
Request Example:
{
"session": "user-session-token",
"customerId": 1001,
"currencyId": 1,
"items": [
{
"description": "Desert Safari Premium - 2 Adults",
"quantity": 2,
"unitPrice": 299.00,
"productId": 1001
},
{
"description": "Desert Safari Premium - 1 Child",
"quantity": 1,
"unitPrice": 199.00,
"productId": 1001
}
]
}
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"quoteId": 5001,
"quoteNumber": "QT-2025-001234",
"customerId": 1001,
"customerName": "John Smith",
"currencyId": 1,
"currencyCode": "AED",
"totalAmount": 797.00,
"status": "DRAFT",
"createDate": "2025-06-15T10:30:00",
"validUntil": "2025-07-15T23:59:59",
"createdBy": 101,
"items": [
{
"itemId": 10001,
"description": "Desert Safari Premium - 2 Adults",
"quantity": 2,
"unitPrice": 299.00,
"totalPrice": 598.00
},
{
"itemId": 10002,
"description": "Desert Safari Premium - 1 Child",
"quantity": 1,
"unitPrice": 199.00,
"totalPrice": 199.00
}
]
}
}
POST /document/addQuoteItem¶
Adds items to an existing quote.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | quoteId | integer | Yes | Quote ID to add items to | | items | array | Yes | Array of quote items to add |
Request Example:
{
"session": "user-session-token",
"quoteId": 5001,
"items": [
{
"description": "Private Transfer - Dubai Hotel to Airport",
"quantity": 1,
"unitPrice": 150.00
}
]
}
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"quoteId": 5001,
"quoteNumber": "QT-2025-001234",
"totalAmount": 947.00,
"items": [
{
"itemId": 10001,
"description": "Desert Safari Premium - 2 Adults",
"quantity": 2,
"unitPrice": 299.00,
"totalPrice": 598.00
},
{
"itemId": 10002,
"description": "Desert Safari Premium - 1 Child",
"quantity": 1,
"unitPrice": 199.00,
"totalPrice": 199.00
},
{
"itemId": 10003,
"description": "Private Transfer - Dubai Hotel to Airport",
"quantity": 1,
"unitPrice": 150.00,
"totalPrice": 150.00
}
]
}
}
POST /document/getQuote¶
Retrieves a quote by ID or number.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | quoteId | integer | No | Quote ID | | quoteNumber | string | No | Quote number |
*Either quoteId or quoteNumber must be provided.
Request Example:
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"quoteId": 5001,
"quoteNumber": "QT-2025-001234",
"customerId": 1001,
"customerName": "John Smith",
"currencyId": 1,
"currencyCode": "AED",
"totalAmount": 947.00,
"status": "DRAFT",
"createDate": "2025-06-15T10:30:00",
"validUntil": "2025-07-15T23:59:59",
"createdBy": 101
}
}
POST /document/getQuoteItems¶
Retrieves items for a quote.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | quoteId | integer | Yes | Quote ID |
Request Example:
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"itemId": 10001,
"quoteId": 5001,
"description": "Desert Safari Premium - 2 Adults",
"quantity": 2,
"unitPrice": 299.00,
"totalPrice": 598.00,
"productId": 1001,
"productName": "Desert Safari Premium"
},
{
"itemId": 10002,
"quoteId": 5001,
"description": "Desert Safari Premium - 1 Child",
"quantity": 1,
"unitPrice": 199.00,
"totalPrice": 199.00,
"productId": 1001,
"productName": "Desert Safari Premium"
}
]
}
POST /document/getCustomerQuotes¶
Retrieves all quotes for a customer.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | customerId | integer | Yes | Customer ID |
Request Example:
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"quoteId": 5001,
"quoteNumber": "QT-2025-001234",
"customerId": 1001,
"totalAmount": 947.00,
"status": "DRAFT",
"createDate": "2025-06-15T10:30:00"
},
{
"quoteId": 5002,
"quoteNumber": "QT-2025-001235",
"customerId": 1001,
"totalAmount": 2500.00,
"status": "SENT",
"createDate": "2025-06-10T14:00:00"
}
]
}
POST /document/getMyQuotes¶
Retrieves quotes for the currently logged-in user.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | Yes | User session token |
Request Example:
Response Structure:
Same as /document/getCustomerQuotes.
Error Codes:
- NOT_LOGGED_IN - User must be logged in
POST /document/searchQuotes¶
Searches quotes by various criteria (employees only).
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | Yes | User session token | | searchType | string | Yes | Search type: "NUM", "CUST", "DATE", or "USER" | | quoteNumber | string | No | Quote number (for NUM search) | | customerId | integer | No | Customer ID (for CUST search) | | fromDate | string | No | Start date (for DATE search) | | toDate | string | No | End date (for DATE search) |
Request Example:
{
"session": "user-session-token",
"searchType": "DATE",
"fromDate": "2025-06-01",
"toDate": "2025-06-30"
}
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": [
{
"quoteId": 5001,
"quoteNumber": "QT-2025-001234",
"customerId": 1001,
"customerName": "John Smith",
"totalAmount": 947.00,
"status": "DRAFT",
"createDate": "2025-06-15T10:30:00"
}
]
}
Payment Management Endpoints¶
POST /document/registerPayment¶
Registers a payment for an invoice.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | Yes | User session token | | invoice | string | Yes | Invoice number | | online | boolean | No | Whether payment was made online |
Request Example:
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"paymentId": 8001,
"invoiceNumber": "INV-2025-001234",
"amount": 947.00,
"paymentDate": "2025-06-15T11:00:00",
"online": true,
"paymentMethod": "CARD",
"status": "COMPLETED"
}
}
File Upload Endpoints¶
POST /document/upload¶
Uploads a file (multipart form).
Form Parameters: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | fileToUpload | file | Yes | File to upload |
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"receivedSize": 12345,
"originalName": "passport.pdf",
"savedFileName": "abc123-passport.pdf"
}
}
POST /document/upload2¶
Uploads a file (Base64 encoded).
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | fileToUpload | string | Yes | Base64-encoded file content | | fileName | string | No | Original file name | | uploadedFileName | string | No | Target file name |
Request Example:
{
"session": "user-session-token",
"fileToUpload": "JVBERi0xLjQKJeLjz9MK...",
"fileName": "visa_document.pdf"
}
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"receivedSize": 45678,
"originalName": "visa_document.pdf",
"savedFileName": "xyz789-visa_document.pdf"
}
}
Data Models¶
CQuote¶
| Field | Type | Description |
|---|---|---|
| quoteId | integer | Unique quote identifier |
| quoteNumber | string | Quote document number |
| customerId | integer | Customer ID |
| customerName | string | Customer name |
| currencyId | integer | Currency ID |
| currencyCode | string | Currency code |
| totalAmount | number | Total amount |
| status | string | Quote status (DRAFT, SENT, ACCEPTED, REJECTED) |
| createDate | datetime | Creation date |
| validUntil | datetime | Quote validity date |
| createdBy | integer | User ID who created |
| items | array | Quote items array |
CQuoteItem¶
| Field | Type | Description |
|---|---|---|
| itemId | integer | Item identifier |
| quoteId | integer | Parent quote ID |
| description | string | Item description |
| quantity | number | Quantity |
| unitPrice | number | Price per unit |
| totalPrice | number | Total price for item |
| productId | integer | Product ID (if applicable) |
| productName | string | Product name |
CPayment¶
| Field | Type | Description |
|---|---|---|
| paymentId | integer | Payment identifier |
| invoiceNumber | string | Related invoice |
| amount | number | Payment amount |
| paymentDate | datetime | Date of payment |
| online | boolean | Online payment flag |
| paymentMethod | string | Payment method (CARD, CASH, BANK) |
| status | string | Payment status |