====== API ======
Use ITFlow's API to work with ITFlow in scripts third-party applications.
The current version of the ITFlow API is v1. It can be accessed at **itflow.example.com/api/v1/{module}/{function}.php**
===== Generating an API Key =====
- Login and navigate to the **Admin Settings** page
- Select **API Keys**
- Select **Create** to open the New Key modal
- On Details tab, input the key name and expiration date. Select whether the key will allow access to all clients or a specific client
- On Keys tab, note down the API key and credential password and select the checkbox to confirm you've made a copy of the keys. You will not see these admin in the admin interface.
- Select Create to add the key into the database
===== Modules with API support at present =====
* assets
* certificates
* clients
* contacts
* credentials (logins)
* documents
* domains
* expenses
* invoices
* locations
* networks
* payments
* products
* quotes
* software
* tickets
* vendors
===== API Functions =====
* read
* create //(partial)//
* update //(partial)//
* delete //(partial)//
* //We may also add archive//
===== Request Methods =====
* GET - Retrieving (READ) data
* POST - Inserting (CREATE), Updating (UPDATE) or Deleting (DELETE) data
==== Data Returned ====
* Success - True/False
* Message - Failure info / Helpful debug info
* Count - Count of rows affected/returned
* Data - The data requested/created/changed
==== Notes ====
* For read requests, 50 records are shown by default. This can be adjusted by supplying the ''limit'' and ''offset'' parameters.
* For POST requests, the ''client_id'' parameter is always required if the API key used has scope/access to all clients
* Be sure to check your Apache/PHP error logs if you're running into issues
==== API Docs/Examples ====
Documentation / an example of how to use a module API endpoint is shown on that module's doc page. Additional examples are available [[https://github.com/itflow-org/itflow-api-powershell|here]].
----
====== API ======
Use ITFlow's API to work with ITFlow in scripts and third-party applications.
The current version of the ITFlow API is v1. It can be accessed at **itflow.example.com/api/v1/{module}/{function}.php**
===== Generating an API Key =====
- Login and navigate to the **Admin Settings** page
- Select **API Keys**
- Select **Create** to open the New Key modal
- On Details tab, input the key name and expiration date. Select whether the key will allow access to all clients or a specific client
- On Keys tab, note down the API key and credential password and select the checkbox to confirm you've made a copy of the keys. You will not see these again in the admin interface.
- Select Create to add the key into the database
===== Modules with API support =====
* assets
* certificates
* clients
* contacts
* credentials (logins)
* documents
* domains
* expenses
* invoices
* locations
* networks
* payments
* products
* quotes
* software
* tickets
* vendors
===== API Functions =====
* read
* create //(partial - see module details)//
* update //(partial - see module details)//
* delete //(partial - see module details)//
* archive //(clients and contacts only)//
* unarchive //(clients and contacts only)//
* resolve //(tickets only)//
===== Request Methods =====
* GET - Retrieving (READ) data
* POST - Inserting (CREATE), Updating (UPDATE), Deleting (DELETE), or Archiving data
==== Data Returned ====
* Success - True/False
* Message - Failure info / Helpful debug info
* Count - Count of rows affected/returned
* Data - The data requested/created/changed
==== Notes ====
* For read requests, 50 records are shown by default. This can be adjusted by supplying the ''limit'' and ''offset'' parameters.
* For POST requests, the ''client_id'' parameter is always required if the API key used has scope/access to all clients
* Be sure to check your Apache/PHP error logs if you're running into issues
----
====== API Reference Guide ======
**Current API v1 Endpoints, Authentication, Examples, and Integration Guide**
===== Quick Start Guide =====
==== Your First API Call in 5 Minutes ====
- **Generate API Key**
- Login to ITFlow as admin
- Navigate to **Admin > API**
- Click **New Key**
- Choose scope: **All Clients** (for testing) or **Specific Client**
- Copy the generated key
- **Test Connection**
curl "https://itflow.yourdomain.com/api/v1/clients/read.php?api_key=YOUR_KEY&limit=1"
- **Expected Response**
{
"success": "True",
"count": 1,
"data": [{"client_id": "123", "client_name": "Example Corp"}]
}
===== API Overview =====
* **Base URL**: ''/api/v1/{module}/{function}.php''
* **Version**: 1.0 (current)
* **Authentication**: API Key via query parameter ''?api_key=YOUR_KEY''
* **Response Format**: JSON with ''success'', ''message'', ''count'', ''data'' fields
* **Pagination**: Default 50 records, adjustable with ''limit'' and ''offset'' parameters
* **Content-Type**: ''application/json'' for POST requests
* **Character Encoding**: UTF-8 (utf8mb4 in database)
==== Standard Response Format ====
{
"success": "True|False",
"message": "Descriptive status message",
"count": 50,
"data": [
{
"id": 123,
"field": "value"
}
]
}
==== Create Response Format ====
{
"success": "True",
"count": "1",
"data": [
{
"insert_id": 123
}
]
}
===== Authentication & Security =====
==== API Key Management ====
* **Generation**: Admin > API > New Key
* **Scoping Options**:
* **All Clients** (client_id = 0): Full access to all client data
* **Specific Client**: Limited to single client data only
* **Usage**: Query parameter ''?api_key=YOUR_KEY'' for GET, or in JSON body for POST
* **Security**: Keys stored encrypted in database with expiration dates
==== Best Practices ====
* **Rotate keys** regularly (monthly recommended)
* **Use client-scoped keys** for third-party integrations
* **Store keys securely** (environment variables, not code)
* **Monitor usage** via Apache/PHP logs
* **Use HTTPS only** for all API calls
----
===== Module Reference =====
==== Assets ''/api/v1/assets/'' ====
**Purpose**: Computer and equipment inventory management
**Available Endpoints**:
* ''GET /read.php'' - List/get asset information
* ''POST /create.php'' - Create new asset record
* ''POST /update.php'' - Update existing asset
* ''POST /delete.php'' - Delete asset record
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| asset_id | integer | Get specific asset by ID |
| asset_type | string | Filter by asset type (auto-capitalized) |
| asset_name | string | Filter by exact asset name |
| asset_serial | string | Filter by serial number |
| asset_mac | string | Filter by MAC address (searches primary interface) |
| asset_uri | string | Filter by URI |
**Create/Update Parameters (POST)**:
^ Parameter ^ Type ^ Required (Create) ^ Description ^
| api_key | string | Yes | API authentication key |
| client_id | integer | Yes* | Required if API key has all-client access |
| asset_name | string | Yes | Asset name/hostname |
| asset_description | string | No | Asset description |
| asset_type | string | No | Type (Laptop, Desktop, Server, etc.) |
| asset_make | string | No | Manufacturer |
| asset_model | string | No | Model name/number |
| asset_serial | string | No | Serial number |
| asset_os | string | No | Operating system |
| asset_ip | string | No | IP address (stored in primary interface) |
| asset_mac | string | No | MAC address (stored in primary interface) |
| asset_uri | string | No | Management URL |
| asset_status | string | No | Status (Deployed, Spare, etc.) |
| asset_purchase_date | date | No | Purchase date (YYYY-MM-DD) |
| asset_warranty_expire | date | No | Warranty expiration date |
| asset_install_date | date | No | Installation date |
| asset_notes | string | No | Notes |
| asset_vendor_id | integer | No | Associated vendor ID |
| asset_location_id | integer | No | Associated location ID |
| asset_contact_id | integer | No | Associated contact ID |
| asset_network_id | integer | No | Network ID for primary interface |
**Update Additional Parameters**:
^ Parameter ^ Type ^ Required ^ Description ^
| asset_id | integer | Yes | ID of asset to update |
**Delete Parameters**:
^ Parameter ^ Type ^ Required ^ Description ^
| asset_id | integer | Yes | ID of asset to delete |
Note: Deleting an asset also removes all associated network interfaces.
**Example - Create Asset**:
curl -X POST "https://itflow.example.com/api/v1/assets/create.php" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"client_id": 1,
"asset_name": "DESKTOP-001",
"asset_type": "Desktop",
"asset_make": "Dell",
"asset_model": "OptiPlex 7090",
"asset_serial": "ABC123XYZ",
"asset_os": "Windows 11 Pro",
"asset_ip": "192.168.1.100",
"asset_mac": "00:11:22:33:44:55",
"asset_status": "Deployed"
}'
----
==== Certificates ''/api/v1/certificates/'' ====
**Purpose**: SSL/TLS certificate management and expiration tracking
**Available Endpoints**:
* ''GET /read.php'' - List/get certificate information
* ''POST /create.php'' - Create certificate record
Note: Update and delete endpoints are not implemented.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| certificate_id | integer | Get specific certificate by ID |
| certificate_name | string | Filter by certificate name |
**Create Parameters (POST)**:
^ Parameter ^ Type ^ Required ^ Description ^
| api_key | string | Yes | API authentication key |
| client_id | integer | Yes* | Required if API key has all-client access |
| certificate_name | string | Yes | Certificate friendly name |
| certificate_domain | string | Yes | Domain the certificate covers |
| certificate_description | string | No | Description |
| certificate_issued_by | string | No | Issuing authority (e.g., Let's Encrypt) |
| certificate_expire | date | No | Expiration date (YYYY-MM-DD) |
| certificate_public_key | string | No | Certificate content/public key |
| certificate_notes | string | No | Additional notes |
| certificate_domain_id | integer | No | Link to domains table |
----
==== Clients ''/api/v1/clients/'' ====
**Purpose**: Customer/company management
**Available Endpoints**:
* ''GET /read.php'' - List/get client information
* ''POST /create.php'' - Create new client
* ''POST /update.php'' - Update client details
* ''POST /archive.php'' - Archive client
* ''POST /unarchive.php'' - Unarchive client
Note: Delete endpoint is not implemented. Use archive instead.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| client_name | string | Get specific client by exact name |
**Create Parameters (POST)**:
Important: Creating clients requires an API key with "All Clients" scope (client_id = 0).
^ Parameter ^ Type ^ Required ^ Description ^
| api_key | string | Yes | API authentication key (must be all-client scope) |
| client_name | string | Yes | Client/company name |
| client_type | string | No | Business type/category |
| client_website | string | No | Website URL (https:// prefix auto-removed) |
| client_referral | string | No | Referral source |
| client_rate | decimal | No | Hourly rate |
| client_currency_code | string | No | Currency code (e.g., USD) |
| client_net_terms | integer | No | Payment terms in days |
| client_tax_id_number | string | No | Tax ID/EIN |
| client_abbreviation | string | No | Short code (max 6 chars) |
| client_is_lead | integer | No | Lead flag (0 or 1) |
| client_notes | string | No | Additional notes |
**Update Additional Parameters**:
^ Parameter ^ Type ^ Required ^ Description ^
| client_id | integer | Yes | ID of client to update |
**Archive/Unarchive Parameters**:
^ Parameter ^ Type ^ Required ^ Description ^
| client_id | integer | Yes | ID of client (from API key scope) |
Note: Archiving a client automatically stops all recurring invoices for that client.
----
==== Contacts ''/api/v1/contacts/'' ====
**Purpose**: Individual contact management within client organizations
**Available Endpoints**:
* ''GET /read.php'' - List/get contact information
* ''POST /create.php'' - Create new contact
* ''POST /update.php'' - Update contact details
* ''POST /delete.php'' - Delete contact record
* ''POST /archive.php'' - Archive contact
* ''POST /unarchive.php'' - Unarchive contact
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| contact_id | integer | Get specific contact by ID |
| contact_email | string | Get contact by email address |
| contact_phone_or_mobile | string | Get contact by phone or mobile number |
**Create Parameters (POST)**:
^ Parameter ^ Type ^ Required ^ Description ^
| api_key | string | Yes | API authentication key |
| client_id | integer | Yes* | Required if API key has all-client access |
| contact_name | string | Yes | Full name |
| contact_email | string | Yes | Email address (must be unique per client) |
| contact_title | string | No | Job title |
| contact_department | string | No | Department |
| contact_phone | string | No | Phone number (non-digits stripped) |
| contact_extension | string | No | Phone extension |
| contact_mobile | string | No | Mobile number (non-digits stripped) |
| contact_notes | string | No | Notes |
| contact_primary | integer | No | Primary contact flag (0 or 1) |
| contact_important | integer | No | Important flag (0 or 1) |
| contact_billing | integer | No | Billing contact flag (0 or 1) |
| contact_technical | integer | No | Technical contact flag (0 or 1) |
| contact_location_id | integer | No | Associated location ID |
Note: Setting contact_primary = 1 will remove primary flag from other contacts for that client.
**Update Additional Parameters**:
^ Parameter ^ Type ^ Required ^ Description ^
| contact_id | integer | Yes | ID of contact to update |
**Delete Parameters**:
^ Parameter ^ Type ^ Required ^ Description ^
| contact_id | integer | Yes | ID of contact to delete |
**Archive/Unarchive Parameters**:
^ Parameter ^ Type ^ Required ^ Description ^
| contact_id | integer | Yes | ID of contact to archive/unarchive |
Note: Archiving a contact also archives their associated user account if one exists.
----
==== Credentials ''/api/v1/credentials/'' ====
**Purpose**: Password and login management (encrypted storage)
**Available Endpoints**:
* ''GET /read.php'' - List/get credential information
* ''POST /create.php'' - Create new credential record
* ''POST /update.php'' - Update credential details
Note: Delete endpoint is not implemented.
Important: The ''api_key_decrypt_password'' parameter is required for ALL credential operations.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Required ^ Description ^
| api_key_decrypt_password | string | Yes | Decryption password for the API key |
| credential_id | integer | No | Get specific credential by ID |
**Create Parameters (POST)**:
^ Parameter ^ Type ^ Required ^ Description ^
| api_key | string | Yes | API authentication key |
| api_key_decrypt_password | string | Yes | Decryption password |
| client_id | integer | Yes* | Required if API key has all-client access |
| credential_name | string | Yes | Credential name/label |
| credential_password | string | Yes | Password (will be encrypted) |
| credential_description | string | No | Description |
| credential_uri | string | No | Login URL |
| credential_uri_2 | string | No | Secondary URL |
| credential_username | string | No | Username (will be encrypted) |
| credential_otp_secret | string | No | TOTP/2FA secret |
| credential_note | string | No | Additional notes |
| credential_important | integer | No | Important flag (0 or 1) |
| credential_contact_id | integer | No | Associated contact ID |
| credential_vendor_id | integer | No | Associated vendor ID |
| credential_asset_id | integer | No | Associated asset ID |
| credential_software_id | integer | No | Associated software ID |
**Update Additional Parameters**:
^ Parameter ^ Type ^ Required ^ Description ^
| credential_id | integer | Yes | ID of credential to update |
| api_key_decrypt_password | string | Yes | Decryption password |
Note: Updating the password field automatically updates the password_changed_at timestamp.
----
==== Documents ''/api/v1/documents/'' ====
**Purpose**: Internal documentation and knowledge base articles
**Available Endpoints**:
* ''GET /read.php'' - List/get document information
* ''POST /create.php'' - Create new document
* ''POST /update.php'' - Update document
Note: Delete endpoint is not implemented.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| document_id | integer | Get specific document by ID |
**Create Parameters (POST)**:
^ Parameter ^ Type ^ Required ^ Description ^
| api_key | string | Yes | API authentication key |
| client_id | integer | Yes* | Required if API key has all-client access |
| document_name | string | Yes | Document title |
| document_content | string | Yes | Document content (HTML supported) |
| document_description | string | No | Brief description |
| document_folder_id | integer | No | Folder ID for organization |
**Update Additional Parameters**:
^ Parameter ^ Type ^ Required ^ Description ^
| document_id | integer | Yes | ID of document to update |
----
==== Domains ''/api/v1/domains/'' ====
**Purpose**: Domain name management and renewal tracking
**Available Endpoints**:
* ''GET /read.php'' - List/get domain information
Note: Create, update, and delete endpoints are not implemented.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| domain_id | integer | Get specific domain by ID |
| domain_name | string | Get domain by exact name |
**Response Fields**:
^ Field ^ Type ^ Description ^
| domain_id | integer | Primary key |
| domain_name | string | Domain name |
| domain_description | string | Description |
| domain_expire | date | Expiration date |
| domain_ip | string | IP address(es) |
| domain_name_servers | string | Name servers |
| domain_mail_servers | string | MX records |
| domain_txt | string | TXT records |
| domain_raw_whois | string | Raw WHOIS data |
| domain_notes | string | Notes |
| domain_registrar | integer | Registrar vendor ID |
| domain_webhost | integer | Web host vendor ID |
| domain_dnshost | integer | DNS host vendor ID |
| domain_mailhost | integer | Mail host vendor ID |
| domain_client_id | integer | Client ID |
----
==== Expenses ''/api/v1/expenses/'' ====
**Purpose**: Track business expenses
**Available Endpoints**:
* ''GET /read.php'' - List/get expense information
Note: Create, update, and delete endpoints are not implemented.
Important: Expenses require an API key with "All Clients" scope.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| expense_id | integer | Get specific expense by ID |
----
==== Invoices ''/api/v1/invoices/'' ====
**Purpose**: Access invoice records
**Available Endpoints**:
* ''GET /read.php'' - List/get invoice information
Note: Create, update, and delete endpoints are not implemented.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| invoice_id | integer | Get specific invoice by ID |
----
==== Locations ''/api/v1/locations/'' ====
**Purpose**: Manage client office/site locations
**Available Endpoints**:
* ''GET /read.php'' - List/get location information
* ''POST /create.php'' - Create new location
Note: Update and delete endpoints are not implemented.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| location_id | integer | Get specific location by ID |
**Create Parameters (POST)**:
^ Parameter ^ Type ^ Required ^ Description ^
| api_key | string | Yes | API authentication key |
| client_id | integer | Yes* | Required if API key has all-client access |
| location_name | string | Yes | Location name |
| location_description | string | No | Description |
| location_country | string | No | Country |
| location_address | string | No | Street address |
| location_city | string | No | City |
| location_state | string | No | State/province |
| location_zip | string | No | ZIP/postal code |
| location_hours | string | No | Business hours |
| location_notes | string | No | Notes |
| location_primary | integer | No | Primary location flag (0 or 1) |
Note: Setting location_primary = 1 will remove primary flag from other locations for that client.
----
==== Networks ''/api/v1/networks/'' ====
**Purpose**: Network infrastructure documentation
**Available Endpoints**:
* ''GET /read.php'' - List/get network information
Note: Create, update, and delete endpoints are not implemented.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| network_id | integer | Get specific network by ID |
| network_name | string | Get network by exact name |
----
==== Payments ''/api/v1/payments/'' ====
**Purpose**: Access payment records
**Available Endpoints**:
* ''GET /read.php'' - List/get payment information
Note: Create, update, and delete endpoints are not implemented.
Important: Payments require an API key with "All Clients" scope.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| payment_id | integer | Get specific payment by ID |
| payment_invoice_id | integer | Get all payments for an invoice |
----
==== Products ''/api/v1/products/'' ====
**Purpose**: Access product/service catalog
**Available Endpoints**:
* ''GET /read.php'' - List/get product information
Note: Create, update, and delete endpoints are not implemented.
Important: Products require an API key with "All Clients" scope.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| product_id | integer | Get specific product by ID |
----
==== Quotes ''/api/v1/quotes/'' ====
**Purpose**: Access sales quote records
**Available Endpoints**:
* ''GET /read.php'' - List/get quote information
Note: Create, update, and delete endpoints are not implemented.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| quote_id | integer | Get specific quote by ID |
----
==== Software ''/api/v1/software/'' ====
**Purpose**: Software license and application tracking
**Available Endpoints**:
* ''GET /read.php'' - List/get software information
Note: Create, update, and delete endpoints are not implemented.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| software_id | integer | Get specific software by ID |
| software_name | string | Get by exact name |
| software_type | string | Filter by type |
----
==== Tickets ''/api/v1/tickets/'' ====
**Purpose**: Help desk and issue tracking
**Available Endpoints**:
* ''GET /read.php'' - List/get ticket information
* ''POST /create.php'' - Create new ticket
* ''POST /resolve.php'' - Resolve/close ticket
Note: Update and delete endpoints are not implemented.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| ticket_id | integer | Get specific ticket by ID (includes status information) |
**Create Parameters (POST)**:
^ Parameter ^ Type ^ Required ^ Description ^
| api_key | string | Yes | API authentication key |
| client_id | integer | No | Client ID (defaults to 0 if not provided) |
| ticket_subject | string | Yes | Ticket subject/title |
| ticket_details | string | No | Ticket description |
| ticket_priority | string | No | Priority (Low, Medium, High) - defaults to "Low" |
| ticket_contact_id | integer | No | Contact ID (auto-selects primary contact if not provided) |
| ticket_asset_id | integer | No | Related asset ID |
| ticket_vendor_id | integer | No | Escalation vendor ID |
| ticket_vendor_ticket_id | integer | No | Vendor's ticket number |
| ticket_assigned_to | integer | No | Assigned user ID |
| ticket_billable | integer | No | Billable flag (0 or 1) |
Note: Ticket number is auto-generated based on system settings. Ticket source is set to "API".
**Resolve Parameters (POST)**:
^ Parameter ^ Type ^ Required ^ Description ^
| ticket_id | integer | Yes | ID of ticket to resolve |
Note: Resolving sets status to Resolved and records the resolution timestamp. Also sets first response time if not already set.
**Example - Create Ticket**:
curl -X POST "https://itflow.example.com/api/v1/tickets/create.php" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"client_id": 456,
"ticket_subject": "Printer offline",
"ticket_details": "Office printer not responding to print jobs",
"ticket_priority": "Medium"
}'
----
==== Vendors ''/api/v1/vendors/'' ====
**Purpose**: Manage vendor/supplier records
**Available Endpoints**:
* ''GET /read.php'' - List/get vendor information
Note: Create, update, and delete endpoints are not implemented.
**Read Parameters (GET)**:
^ Parameter ^ Type ^ Description ^
| vendor_id | integer | Get specific vendor by ID |
----
===== Custom API Extensions =====
**Location**: ''/api/v1/custom/''
ITFlow supports custom API endpoints. Place custom PHP files in the ''custom'' directory to extend API functionality.
----
===== Error Handling & Troubleshooting =====
==== HTTP Status Codes ====
^ Code ^ Description ^
| 200 | Success - Request completed successfully |
| 401 | Unauthorized - Invalid or missing API key |
| 405 | Method Not Allowed - Only GET and POST supported |
==== Common Error Messages ====
^ Message ^ Cause ^
| "Authentication failed. API key is invalid or has expired." | Invalid or expired API key |
| "No resource (for this client and company) with the specified parameter(s)." | Record not found or access denied |
| "Auth success but insert query failed..." | Missing required fields or duplicate data |
| "Auth success but update query failed..." | Invalid ID or no matching record |
| "Auth success but delete query failed..." | Invalid ID or client mismatch |
==== Troubleshooting Steps ====
- **API Key Issues**
* Verify key is correct (copy/paste errors common)
* Check key scope (client-specific vs all clients)
* Confirm key hasn't expired
- **Permission Errors**
* Add ''client_id'' parameter for scoped keys
* Verify client_id exists and is accessible
- **Server Errors**
* Check Apache/PHP error logs: ''/var/log/apache2/error.log''
* Verify ITFlow database connectivity
* Check PHP memory limits for large requests
- **Data Issues**
* Validate required fields for POST requests
* Check data types (strings, integers, dates)
* Verify foreign key relationships exist
* Ensure unique constraints aren't violated (e.g., contact email per client)
----
===== Integration Examples =====
==== PowerShell ====
**List All Clients**:
$apiKey = "YOUR-API-KEY"
$baseUrl = "https://itflow.yourdomain.com"
$uri = "$baseUrl/api/v1/clients/read.php?api_key=$apiKey"
Invoke-RestMethod -Uri $uri | ConvertTo-Json
**Create New Asset**:
$uri = "https://itflow.yourdomain.com/api/v1/assets/create.php"
$body = @{
"api_key" = "YOUR-API-KEY"
"asset_name" = "Sample Laptop"
"asset_type" = "Laptop"
"asset_make" = "Dell"
"asset_model" = "Latitude 5520"
"client_id" = "1"
} | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri $uri -Body $body -ContentType "application/json"
==== Python ====
import requests
api_key = "YOUR_API_KEY"
base_url = "https://itflow.yourdomain.com/api/v1/"
# Get all clients
response = requests.get(f"{base_url}clients/read.php?api_key={api_key}")
data = response.json()
print(data)
# Create new ticket
ticket_data = {
"api_key": api_key,
"client_id": 456,
"ticket_subject": "Network issue",
"ticket_details": "Unable to access shared drive",
"ticket_priority": "High"
}
response = requests.post(f"{base_url}tickets/create.php", json=ticket_data)
result = response.json()
print(result)
==== PHP ====
==== cURL ====
# Get all assets for a client
curl "https://itflow.example.com/api/v1/assets/read.php?api_key=YOUR_KEY&limit=10"
# Create a contact
curl -X POST "https://itflow.example.com/api/v1/contacts/create.php" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_KEY",
"client_id": 1,
"contact_name": "John Smith",
"contact_email": "john@example.com",
"contact_phone": "5551234567",
"contact_primary": 1
}'
----
===== API Module Summary =====
^ Module ^ Read ^ Create ^ Update ^ Delete ^ Archive ^ Other ^
| Assets | ✓ | ✓ | ✓ | ✓ | - | - |
| Certificates | ✓ | ✓ | - | - | - | - |
| Clients | ✓ | ✓ | ✓ | - | ✓ | unarchive |
| Contacts | ✓ | ✓ | ✓ | ✓ | ✓ | unarchive |
| Credentials | ✓ | ✓ | ✓ | - | - | - |
| Documents | ✓ | ✓ | ✓ | - | - | - |
| Domains | ✓ | - | - | - | - | - |
| Expenses | ✓ | - | - | - | - | - |
| Invoices | ✓ | - | - | - | - | - |
| Locations | ✓ | ✓ | - | - | - | - |
| Networks | ✓ | - | - | - | - | - |
| Payments | ✓ | - | - | - | - | - |
| Products | ✓ | - | - | - | - | - |
| Quotes | ✓ | - | - | - | - | - |
| Software | ✓ | - | - | - | - | - |
| Tickets | ✓ | ✓ | - | - | - | resolve |
| Vendors | ✓ | - | - | - | - | - |