Download OpenAPI specification:
Manage you hosting and services from a simple and effective API.
Please see the "General API FAQ" for information on authentication. In one sentence: use "HTTP Basic Authentication" for authentication, with "api" as the username and your secret API key as the password. That's it.
Manage API keys and their role-based permissions. API keys use HTTP Basic Authentication with username api and the generated key as password.
List all API keys for the authenticated user. API keys authenticate requests with HTTP Basic Authentication using username api and the key value as password.
curl --request GET \ --url 'https://www.lima-city.de/usercp/api_keys' \ --user 'api:YOUR_API_KEY'
{- "api_keys": [
- {
- "id": 12345,
- "api_key": "7b1f4a0a1c3e4f6d8a9b0c1d2e3f4a5b",
- "name": "Deployment key",
- "roles": [
- "websites.admin",
- "databases.reader"
], - "created_at": "2026-06-01T10:00:00.000+02:00",
- "last_used_at": "2026-06-01T12:30:00.000+02:00"
}
]
}Create a new API key with one or more role-based permissions. At least one role is required.
required | object | ||||
| |||||
{- "api_key": {
- "name": "Deployment key",
- "roles": [
- "websites.admin",
- "databases.reader"
]
}
}{- "status": "ok",
- "object": {
- "id": 12345
}
}List all role names that can be assigned to API keys.
curl --request GET \ --url 'https://www.lima-city.de/usercp/api_keys/roles' \ --user 'api:YOUR_API_KEY'
{- "roles": [
- {
- "name": "websites.admin"
}
]
}Show one API key owned by the authenticated user.
| id required | integer Example: 12345 API key ID |
curl --request GET \ --url 'https://www.lima-city.de/usercp/api_keys/12345' \ --user 'api:YOUR_API_KEY'
{- "api_key": {
- "id": 12345,
- "api_key": "7b1f4a0a1c3e4f6d8a9b0c1d2e3f4a5b",
- "name": "Deployment key",
- "roles": [
- "websites.admin",
- "databases.reader"
], - "created_at": "2026-06-01T10:00:00.000+02:00",
- "last_used_at": "2026-06-01T12:30:00.000+02:00"
}
}Replace API key name and role assignment.
| id required | integer Example: 12345 API key ID |
required | object | ||||
| |||||
{- "api_key": {
- "name": "Deployment key",
- "roles": [
- "websites.admin",
- "databases.reader"
]
}
}{- "status": "ok"
}Update API key name and role assignment.
| id required | integer Example: 12345 API key ID |
required | object | ||||
| |||||
{- "api_key": {
- "name": "Deployment key",
- "roles": [
- "websites.admin",
- "databases.reader"
]
}
}{- "status": "ok"
}Delete an API key owned by the authenticated user.
| id required | integer Example: 12345 API key ID |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/api_keys/12345' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Request and manage payouts of confirmed affiliate commissions. Affiliates can withdraw their earnings via account balance transfers (minimum 1 EUR) or SEPA bank transfers (minimum 10 EUR). This API supports recurring payout requests and provides payout history with tracking codes.
Retrieve a paginated list of your requested affiliate payouts.
Payout Information: Each payout requests withdrawal of confirmed commissions. Payouts can be sent via:
Each payout receives a unique code for reference in transfer documentation.
Payout Status: Payouts are created when requested and records persist with their destination and amount. Actual payment processing depends on the destination method.
Response: Returns list ordered by newest first, paginated (25 per page).
Authorization: Requires valid user authentication and accepted affiliate ToS.
| page | integer Example: page=1 Page number for pagination (1-indexed). Defaults to 1. Each page contains up to 25 payouts. |
curl --request GET \ --url 'https://www.lima-city.de/usercp/affiliate_payouts?page=1' \ --user 'api:YOUR_API_KEY'
{- "payouts": [
- {
- "id": 12345,
- "user_id": 98765,
- "code": "ABC12XYZ",
- "destination": "sepa",
- "amount": "125.75",
- "iban": "DE12500105170648489890",
- "account_holder": "Max Mustermann",
- "bic": "SOLADEST",
- "created_at": "2024-10-26T14:30:00Z",
- "updated_at": "2024-10-26T14:30:00Z"
}
], - "pagination": {
- "limit_value": 25,
- "total_pages": 10,
- "current_page": 1,
- "next_page": 2,
- "prev_page": null,
- "first_page": true,
- "last_page": false
}
}Create and request a new payout of your confirmed affiliate commissions.
Payout Requirements:
For account transfers (destination: 'account'):
For SEPA transfers (destination: 'sepa'):
Amount Constraints:
Validation Rules:
Error Messages (German):
Concurrency Control: Only one payout request can be processed per user at a time (60-second mutual exclusion lock).
Response: Returns status 'ok' on successful creation. Payout record is immediately persisted.
Authorization: Requires valid user authentication and accepted affiliate ToS.
required | object Nested affiliate_payout object matching params.require(:affiliate_payout) | ||||||||
| |||||||||
{- "affiliate_payout": {
- "amount": "50.00",
- "destination": "sepa",
- "iban": "DE12500105170648489890",
- "account_holder": "Max Mustermann"
}
}{- "status": "ok"
}Track affiliate commissions earned from customer referrals and manage the affiliate program. Earn 10% commission on referred customer invoices that are paid. Monitor commission status through their lifecycle (created, confirmed, rejected) and access marketing materials for promotion.
Retrieve a paginated list of affiliate commissions earned through customer referrals.
Commission System Overview: When you refer customers to lima-city using your affiliate link, you earn a 10% commission on their invoices. Commissions go through these states:
This endpoint returns commissions in both open (uncconfirmed) and confirmed states. Confirmed commissions can be requested for payout.
Affiliate ToS Requirement: You must have accepted the affiliate terms of service to access this endpoint. If not accepted, use the POST accept_tos endpoint first.
Response Structure:
new_commissions: Commissions in 'created' state (pending confirmation)commissions: All commissions (paginated) in all states, newest firstpagination: Standard pagination metadataAuthorization: Requires valid user authentication and accepted affiliate ToS.
| page | integer Example: page=1 Page number for pagination (1-indexed). Defaults to 1. Each page contains up to 25 commissions. |
curl --request GET \ --url 'https://www.lima-city.de/usercp/commissions?page=1' \ --user 'api:YOUR_API_KEY'
{- "commissions": [
- {
- "id": 54321,
- "user_id": 12345,
- "invoice_id": 98765,
- "amount": "45.50",
- "state": "confirmed",
- "created_at": "2024-10-26T14:30:00Z",
- "updated_at": "2024-11-25T14:30:00Z"
}
], - "pagination": {
- "limit_value": 25,
- "total_pages": 10,
- "current_page": 1,
- "next_page": 2,
- "prev_page": null,
- "first_page": true,
- "last_page": false
}
}Retrieve promotional materials and marketing media for affiliate program (banners, links, assets).
Authorization: Requires valid user authentication and accepted affiliate ToS.
curl --request GET \ --url 'https://www.lima-city.de/usercp/commissions/media' \ --user 'api:YOUR_API_KEY'
{ }Retrieve current promotion information and partner details for affiliate program.
Authorization: Requires valid user authentication and accepted affiliate ToS.
curl --request GET \ --url 'https://www.lima-city.de/usercp/commissions/promotions' \ --user 'api:YOUR_API_KEY'
{ }Accept the affiliate program terms of service to enable access to affiliate commissions and payouts.
Requirements: Accepting the ToS is required before you can:
Once accepted, you can immediately start earning commissions on referred customer invoices.
Authorization: Requires valid user authentication.
curl --request POST \ --url 'https://www.lima-city.de/usercp/commissions/accept_tos' \ --user 'api:YOUR_API_KEY'
{- "success": true
}Manage scheduled background tasks for hosted services. Create, monitor, and modify cron jobs for automated tasks like backups, maintenance routines, and periodic data processing on your web space.
List all scheduled cronjobs for the authenticated user. Returns an array of all configured cron jobs including their schedule, type, and status.
Authorization Requirements:
Cronjob Limits:
curl --request GET \ --url 'https://www.lima-city.de/usercp/cronjobs' \ --user 'api:YOUR_API_KEY'
{- "cronjobs": [
- {
- "id": 12345,
- "user_id": 9876,
- "active": true,
- "cronjob_type": "url",
- "exec_times": "0 2 * * *",
- "description": "Daily backup process",
- "created_at": "2025-10-15T10:30:00Z",
- "updated_at": "2025-10-15T10:30:00Z"
}
]
}Create a new scheduled cronjob. Cronjobs can execute shell commands or call HTTP/HTTPS URLs at specified intervals.
Authorization Requirements:
Cronjob Types:
url: Calls an HTTP/HTTPS URL at scheduled timesshell: Executes a shell command at scheduled timesValidation Rules:
cronjob_type: Required, must be either 'url' or 'shell'command_or_url: Required, must be a valid HTTP/HTTPS URL if type is 'url'exec_times: Required, must be a valid cron expression (5 fields: minute hour day month weekday)description: Optional, free text descriptionCron Expression Format: Standard cron format with 5 fields:
Examples:
0 2 * * * - Every day at 2:00 AM*/15 * * * * - Every 15 minutes0 0 * * 0 - Every Sunday at midnightLimits:
Error Messages:
Cronjob creation parameters
required | object Cronjob creation parameters | ||||||||
| |||||||||
{- "cronjob": {
- "cronjob_type": "url",
- "exec_times": "0 2 * * *",
- "description": "Daily backup process"
}
}{- "status": "ok",
- "object": {
- "id": 12345
}
}Show details of a specific cronjob including its configuration and recent execution history.
The response includes:
Authorization Requirements:
| id required | integer Example: 12345 Unique identifier of the cronjob to retrieve |
| page | integer >= 1 Default: 1 Page number for pagination of cronjob runs (default: 1) |
curl --request GET \ --url 'https://www.lima-city.de/usercp/cronjobs/12345?page=1' \ --user 'api:YOUR_API_KEY'
{- "cronjob": {
- "id": 12345,
- "user_id": 9876,
- "active": true,
- "cronjob_type": "url",
- "exec_times": "0 2 * * *",
- "description": "Daily backup process",
- "created_at": "2025-10-15T10:30:00Z",
- "updated_at": "2025-10-15T10:30:00Z"
}, - "cronjob_runs": [
- {
- "id": 54321,
- "cronjob_id": 12345,
- "start_time": "2025-10-25T02:00:00Z",
- "total_time": 1523,
- "response_code": 200,
- "total_bytes": 2048,
- "status_log": "Successfully processed 150 items"
}
], - "pagination": {
- "limit_value": 25,
- "total_pages": 10,
- "current_page": 1,
- "next_page": 2,
- "prev_page": null,
- "first_page": true,
- "last_page": false
}
}Update an existing cronjob's configuration. Can modify the schedule, type, command/URL, or description.
Authorization Requirements:
Validation Rules:
cronjob_type: Must be either 'url' or 'shell' if providedcommand_or_url: Must be a valid HTTP/HTTPS URL if type is 'url'exec_times: Must be a valid cron expression if providedError Messages:
| id required | integer Example: 12345 Unique identifier of the cronjob to update |
Cronjob update parameters
required | object Cronjob update parameters | ||||||||
| |||||||||
{- "cronjob": {
- "cronjob_type": "url",
- "exec_times": "0 2 * * *",
- "description": "Daily backup process"
}
}{- "status": "ok"
}Permanently delete a cronjob. The cronjob will no longer be executed and all associated execution history will be removed.
Authorization Requirements:
Warning: This action is permanent and cannot be undone. All execution history (cronjob_runs) will also be deleted.
| id required | integer Example: 12345 Unique identifier of the cronjob to delete |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/cronjobs/12345' \ --user 'api:YOUR_API_KEY'
{- "success": true
}Retrieve the full execution log for a specific cronjob run. Returns the complete output/status log from when the cronjob was executed.
Authorization Requirements:
Response Format:
| id required | integer Example: 12345 Unique identifier of the cronjob |
| run_id required | integer Example: 54321 Unique identifier of the specific cronjob run to retrieve |
curl --request GET \ --url 'https://www.lima-city.de/usercp/cronjobs/12345/runs/54321' \ --user 'api:YOUR_API_KEY'
Create, list, restore, and download backups of your MySQL and PostgreSQL databases. Automated backup scheduling and point-in-time recovery capabilities with download support for archival and migration purposes.
List all automatic database backups for the authenticated user with pagination support.
Important Notes:
Requirements:
Data Retention:
| page | integer >= 1 Default: 1 Page number for pagination (default: 1) |
curl --request GET \ --url 'https://www.lima-city.de/usercp/database_backups?page=1' \ --user 'api:YOUR_API_KEY'
{- "database_backups": [
- {
- "id": 54321,
- "user_id": 9876,
- "database_name": "db_9876_myapp",
- "database_id": 12345,
- "state": "complete",
- "started_at": "2025-10-20T02:15:00Z",
- "completed_at": "2025-10-20T02:18:30Z",
- "finished_at": "2025-10-20T02:18:30Z",
- "filesize": 1048576,
- "storage_filename": "backup_20251020_021500_db_9876_myapp.sql.gz",
- "created_at": "2025-10-20T02:15:00Z",
- "updated_at": "2025-10-20T02:18:30Z",
- "password": "string",
- "job_id": "string",
- "auto_backup": true,
- "successful": true
}
], - "restore_count": 0,
- "pagination": {
- "limit_value": 25,
- "total_pages": 10,
- "current_page": 1,
- "next_page": 2,
- "prev_page": null,
- "first_page": true,
- "last_page": false
}
}Show details of a specific database backup including download URL and metadata.
Important Notes:
Requirements:
| id required | integer Example: 54321 Unique identifier of the database backup |
curl --request GET \ --url 'https://www.lima-city.de/usercp/database_backups/54321' \ --user 'api:YOUR_API_KEY'
{- "id": 54321,
- "user_id": 9876,
- "database_name": "db_9876_myapp",
- "database_id": 12345,
- "state": "complete",
- "started_at": "2025-10-20T02:15:00Z",
- "completed_at": "2025-10-20T02:18:30Z",
- "finished_at": "2025-10-20T02:18:30Z",
- "filesize": 1048576,
- "storage_filename": "backup_20251020_021500_db_9876_myapp.sql.gz",
- "created_at": "2025-10-20T02:15:00Z",
- "updated_at": "2025-10-20T02:18:30Z",
- "password": "string",
- "job_id": "string",
- "auto_backup": true,
- "successful": true
}Initiate a download of a database backup as a compressed archive. This creates a restore request in waiting state and queues a background job to create the downloadable archive.
Process Flow:
restore_idGET /restores/{restore_id} until state is successrestore.target.download_url while restore.target.downloadable is trueImportant Notes:
successRequirements:
| id required | integer Example: 54321 Unique identifier of the database backup to download |
curl --request POST \ --url 'https://www.lima-city.de/usercp/database_backups/54321/download' \ --user 'api:YOUR_API_KEY'
{- "restore_id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
- "url": "/usercp/restores/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4"
}Restore a database backup to an existing operational database. This overwrites the target database with the backup data.
Process Flow:
Important Notes:
Validation Rules:
Error Messages:
| id required | integer Example: 54321 Unique identifier of the database backup to restore |
Restore parameters
required | object Nested restore parameters matching controller params.require(:restore) | ||||
| |||||
{- "restore": {
- "target_database_name": "db_9876_myapp",
- "confirmation": true
}
}{- "status": "ok",
- "object": {
- "restore_id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4"
}
}Create and manage database user accounts with granular access permissions. Support for both simple (full database access) and complex (specific tables/operations) permission models. Password management and access control for MySQL and PostgreSQL databases.
List all database users (MySQL users) with their access permissions.
curl --request GET \ --url 'https://www.lima-city.de/usercp/database_users' \ --user 'api:YOUR_API_KEY'
[- {
- "id": 54321,
- "username": "USER9876",
- "host": "localhost",
- "simple_access": "admin",
- "comment": "string"
}
]Create a new database user (MySQL user) with specified access permissions to databases.
Database user creation parameters
| suffix required | string Username suffix (combined with USER_ID to form username) | ||||
| hostname required | string Enum: "localhost" "%" Hostname restriction for the user | ||||
| password required | string <password> MySQL password (must be secure, cannot contain username or user ID) | ||||
| access required | string Enum: "simple" "complex" Access mode - 'simple' for predefined access levels or 'complex' for database-specific grants | ||||
| simple_access | string Enum: "admin" "readonly" "readwrite" "usage" Access level when using simple mode (required if access='simple') | ||||
Array of objects Array of database grants (required if access='complex') | |||||
Array
| |||||
| comment | string or null Optional comment for the database user | ||||
{- "suffix": "app",
- "hostname": "localhost",
- "password": "pa$$word",
- "access": "simple",
- "simple_access": "admin",
- "grants": [
- {
- "database": {
- "id": 12345
}, - "privileges": [
- "Select",
- "Insert",
- "Update",
- "Delete"
]
}
], - "comment": "string"
}{- "id": 54321
}Show details of a specific database user including username, access type, and permissions.
| id required | integer Example: 12345 Unique identifier of the database user to retrieve |
curl --request GET \ --url 'https://www.lima-city.de/usercp/database_users/12345' \ --user 'api:YOUR_API_KEY'
{- "id": 54321,
- "username": "USER9876",
- "host": "localhost",
- "simple_access": "admin",
- "comment": "string"
}Update database user access permissions and hostname.
| id required | integer Example: 12345 Unique identifier of the database user to update |
Database user update parameters
| hostname required | string Enum: "localhost" "%" Hostname restriction for the user | ||||
| access required | string Enum: "simple" "complex" Access mode | ||||
| simple_access | string Enum: "admin" "readonly" "readwrite" "usage" Access level when using simple mode (required if access='simple') | ||||
Array of objects Array of database grants (required if access='complex') | |||||
Array
| |||||
{- "hostname": "localhost",
- "access": "simple",
- "simple_access": "admin",
- "grants": [
- {
- "database": {
- "id": 12345
}, - "privileges": [
- "Select",
- "Insert",
- "Update",
- "Delete"
]
}
]
}{- "status": "ok"
}Delete a database user (MySQL user). This removes all permissions and the user from the MySQL server.
| id required | integer Example: 12345 Unique identifier of the database user to delete |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/database_users/12345' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Update the password for a database user. Password must not contain username or user ID and must be different from login password.
| id required | integer Example: 12345 Unique identifier of the database user |
New password
| password required | string <password> New password (must be secure, cannot contain username or user ID) |
{- "password": "pa$$word"
}{- "status": "ok"
}Show all database grants (permissions) for a database user including the databases and specific privileges.
| id required | integer Example: 12345 Unique identifier of the database user |
curl --request GET \ --url 'https://www.lima-city.de/usercp/database_users/12345/grants' \ --user 'api:YOUR_API_KEY'
{- "id": 54321,
- "username": "USER9876",
- "host": "localhost",
- "simple_access": "admin",
- "comment": "string",
- "grants": [
- {
- "id": 99999,
- "database_id": 12345,
- "privileges": "Select,Insert,Update,Delete"
}
]
}Create, manage, and monitor MySQL and PostgreSQL databases. Full lifecycle management including creation, deletion, sizing, and performance monitoring with integrated user and backup management.
List all MySQL databases for the authenticated user with pagination support and usage information.
| page | integer >= 1 Default: 1 Page number for pagination (default: 1) |
curl --request GET \ --url 'https://www.lima-city.de/usercp/databases?page=1' \ --user 'api:YOUR_API_KEY'
{- "databases": [
- {
- "id": 12345,
- "name": "db_9876_myapp",
- "state": "operational",
- "created": 1532363041,
- "collation": "utf8mb4_general_ci",
- "comment": "Production database",
- "access_disabled_at": "2019-08-24T14:15:22Z"
}
], - "pagination": {
- "limit_value": 25,
- "total_pages": 10,
- "current_page": 1,
- "next_page": 2,
- "prev_page": null,
- "first_page": true,
- "last_page": false
}
}Create a new MySQL database. Optionally creates a database user with specified permissions at the same time.
Database creation parameters
| collation | string Character set collation (optional, defaults to utf8mb4_general_ci) | ||||||||
| comment | string Optional comment for the database (max 128 characters) | ||||||||
| create_user | boolean Whether to create a database user at the same time | ||||||||
object Database user parameters (required if create_user is true) | |||||||||
| |||||||||
{- "collation": "utf8mb4_general_ci",
- "comment": "Production database",
- "create_user": false,
- "database_user": {
- "suffix": "app",
- "hostname": "localhost",
- "password": "pa$$word",
- "simple_access": "admin"
}
}{- "id": 12345
}Show details of a specific MySQL database including name, state, collation, and comment.
| id required | integer Example: 12345 Unique identifier of the database to retrieve |
curl --request GET \ --url 'https://www.lima-city.de/usercp/databases/12345' \ --user 'api:YOUR_API_KEY'
{- "id": 12345,
- "name": "db_9876_myapp",
- "state": "operational",
- "created": 1532363041,
- "collation": "utf8mb4_general_ci",
- "comment": "Production database",
- "access_disabled_at": "2019-08-24T14:15:22Z"
}Update database settings (currently only comment field can be updated).
| id required | integer Example: 12345 Unique identifier of the database to update |
Database update parameters
| comment required | string Updated comment for the database (max 128 characters) |
{- "comment": "Updated production database"
}{- "status": "ok"
}Delete a MySQL database. The database must be in operational state to be deleted.
| id required | integer Example: 12345 Unique identifier of the database to delete |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/databases/12345' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Delete all data from a MySQL database while keeping the database structure and users intact.
| id required | integer Example: 12345 Unique identifier of the database to purge |
curl --request POST \ --url 'https://www.lima-city.de/usercp/databases/12345/purge' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Get usage statistics for all databases including storage information.
curl --request GET \ --url 'https://www.lima-city.de/usercp/databases/usage' \ --user 'api:YOUR_API_KEY'
{- "total_usage": "156 MB",
- "databases": [
- {
- "name": "db_9876_myapp",
- "usage": "50 MB"
}
]
}Create and manage FTP and SFTP user accounts for secure file transfer. Set directory restrictions, manage permissions, and control access to your web space with support for password authentication and modern SFTP protocols.
List all FTP accounts for the authenticated user.
FTP accounts provide FTP/FTPS access to the user's webspace. Each account has an auto-generated username and can be restricted to a specific directory within the user's home directory.
Account Limits:
Validation Error: If limit is reached: 'Du kannst maximal X FTP-Accounts erstellen (Freespace-Account)' or '(Premium-Account)' (You can create a maximum of X FTP accounts)
curl --request GET \ --url 'https://www.lima-city.de/usercp/ftp_accounts' \ --user 'api:YOUR_API_KEY'
{- "ftp_accounts": [
- {
- "id": 12345,
- "username": "ftp_abc12def",
- "directory": "/html",
- "comment": "Main website FTP access",
- "force_tls": 1,
- "created_at": "2025-10-15T10:30:00Z",
- "updated_at": "2025-10-15T10:30:00Z"
}
]
}Create a new FTP account with an auto-generated username.
The username is automatically generated in the format 'ftp_XXXXXXXX' where X is a random lowercase alphanumeric character.
Password Requirements:
Directory Validation:
Account Limits:
Validation Rules:
Error Messages:
FTP account creation parameters
required | object FTP account creation parameters matching controller params.require(:ftp_account) | ||||||
| |||||||
{- "ftp_account": {
- "password": "SecurePass123_FTP",
- "directory": "/html",
- "comment": "Main website FTP access"
}
}{- "id": 12345
}Show details of a specific FTP account including username, directory, comment, TLS settings, and timestamps.
| id required | integer Example: 12345 Unique identifier of the FTP account to retrieve |
curl --request GET \ --url 'https://www.lima-city.de/usercp/ftp_accounts/12345' \ --user 'api:YOUR_API_KEY'
{- "id": 12345,
- "username": "ftp_abc12def",
- "directory": "/html",
- "comment": "Main website FTP access",
- "force_tls": 1,
- "created_at": "2025-10-15T10:30:00Z",
- "updated_at": "2025-10-15T10:30:00Z"
}Delete an FTP account permanently. This action cannot be undone.
Warning: This will immediately revoke FTP access for this account. Any active FTP sessions using this account will be terminated.
| id required | integer Example: 12345 Unique identifier of the FTP account to delete |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/ftp_accounts/12345' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Update the password for an FTP account.
Password Requirements:
Validation Rules:
Error Messages:
| id required | integer Example: 12345 Unique identifier of the FTP account to update |
Password update parameters
required | object | ||
| |||
{- "ftp_account": {
- "password": "NewSecurePass456_FTP"
}
}{- "status": "ok"
}Update the root directory for an FTP account.
The directory path is relative to the user's home directory and restricts FTP access to that directory and its subdirectories.
Directory Validation:
Validation Rules:
Error Messages:
| id required | integer Example: 12345 Unique identifier of the FTP account to update |
Directory update parameters
required | object | ||
| |||
{- "ftp_account": {
- "directory": "/html/subdomain"
}
}{- "status": "ok"
}Update the comment/description for an FTP account.
Validation Rules:
| id required | integer Example: 12345 Unique identifier of the FTP account to update |
Comment update parameters
required | object | ||
| |||
{- "ftp_account": {
- "comment": "Updated website FTP access"
}
}{- "status": "ok"
}Update whether TLS encryption is required for this FTP account.
TLS Settings:
Security Recommendation: It is strongly recommended to keep TLS required (enabled) for security. Plain FTP transmits credentials and data unencrypted.
Validation Rules:
| id required | integer Example: 12345 Unique identifier of the FTP account to update |
TLS requirement update parameters
required | object | ||
| |||
{- "ftp_account": {
- "force_tls": true
}
}{- "status": "ok"
}Download a pre-configured FileZilla XML configuration file for this FTP account.
This endpoint returns an XML file that can be imported into FileZilla FTP client to automatically configure connection settings including hostname, username, and directory. The password is not included in the configuration file.
File Format: XML file with Content-Disposition header set to 'attachment; filename=FileZilla_lima-city_{username}.xml'
TLS Configuration: The configuration will set up FileZilla to use explicit FTP over TLS (FTPS) for secure connections.
| id required | integer Example: 12345 Unique identifier of the FTP account |
curl --request GET \ --url 'https://www.lima-city.de/usercp/ftp_accounts/12345/filezilla_config.xml' \ --user 'api:YOUR_API_KEY'
Manage domain and SSL certificate registrations. Actions include ordering new handles, checking availability, renewing registrations, and managing handle configurations and contact information.
List all contact handles (WHOIS contacts) for the authenticated user. Returns only non-deleted handles.
Handles are used for domain registration, transfers, and billing purposes. They contain personal or organizational contact information that appears in WHOIS records.
Authorization Requirements:
curl --request GET \ --url 'https://www.lima-city.de/usercp/handles' \ --user 'api:YOUR_API_KEY'
{- "handles": [
- {
- "id": 12345,
- "role_type": "PERS",
- "organisation": "Acme Corporation",
- "firstname": "Max",
- "lastname": "Mustermann",
- "street": "Musterstraße",
- "house_number": "42",
- "postal": "12345",
- "city": "Berlin",
- "country": "DE",
- "email": "max.mustermann@example.com",
- "phone": "+49 172 4856546",
- "fax": "+49 30 12485785",
- "external_id": "LIMA12345",
- "deleted_at": "2024-10-25T15:30:00+02:00"
}
]
}Create a new contact handle (WHOIS contact) for domain registration and billing.
Important Restrictions: The following fields CANNOT be changed after creation:
role_type (PERS or ORG)organisationfirstnamelastnameAll other fields can be updated later using the update endpoint.
Validation Rules:
Error Messages:
Authorization Requirements:
Handle creation parameters
required | object Handle creation parameters | ||||||||||||||||||||||||
| |||||||||||||||||||||||||
{- "handle": {
- "role_type": "PERS",
- "organisation": "Acme Corporation",
- "firstname": "Max",
- "lastname": "Mustermann",
- "street": "Musterstraße",
- "house_number": "42",
- "postal": "12345",
- "city": "Berlin",
- "country": "DE",
- "email": "max.mustermann@example.com",
- "phone": "+49 172 4856546",
- "fax": "+49 30 12485785"
}
}{- "status": "ok",
- "object": {
- "id": 12345
}
}Show details of a specific contact handle.
Authorization Requirements:
| id required | integer Example: 12345 Unique identifier of the handle to retrieve |
curl --request GET \ --url 'https://www.lima-city.de/usercp/handles/12345' \ --user 'api:YOUR_API_KEY'
{- "id": 12345,
- "role_type": "PERS",
- "organisation": "Acme Corporation",
- "firstname": "Max",
- "lastname": "Mustermann",
- "street": "Musterstraße",
- "house_number": "42",
- "postal": "12345",
- "city": "Berlin",
- "country": "DE",
- "email": "max.mustermann@example.com",
- "phone": "+49 172 4856546",
- "fax": "+49 30 12485785",
- "external_id": "LIMA12345",
- "deleted_at": "2024-10-25T15:30:00+02:00"
}Update an existing contact handle. Only updatable fields can be changed.
Important Restrictions: The following fields CANNOT be updated after creation:
role_type (PERS or ORG)organisationfirstnamelastnameThese fields are readonly to maintain consistency with domain registry systems.
Updatable Fields:
streethouse_numberpostalcitycountryemailphonefaxValidation Rules:
Error Messages:
Registry Synchronization: If the handle is registered with a domain registry, the update will be synchronized with the registry.
Authorization Requirements:
| id required | integer Example: 12345 Unique identifier of the handle to update |
Handle update parameters. Only updatable fields should be included
required | object Handle update parameters. Note: role_type, organisation, firstname, and lastname cannot be updated after creation | ||||||||||||||||
| |||||||||||||||||
{- "handle": {
- "street": "Musterstraße",
- "house_number": "42",
- "postal": "12345",
- "city": "Berlin",
- "country": "DE",
- "email": "max.mustermann@example.com",
- "phone": "+49 172 4856546",
- "fax": "+49 30 12485785"
}
}{- "status": "ok"
}Update an existing contact handle. Only updatable fields can be changed.
Important Restrictions: The following fields CANNOT be updated after creation:
role_type (PERS or ORG)organisationfirstnamelastnameThese fields are readonly to maintain consistency with domain registry systems.
Updatable Fields:
streethouse_numberpostalcitycountryemailphonefaxValidation Rules:
Error Messages:
Registry Synchronization: If the handle is registered with a domain registry, the update will be synchronized with the registry.
Authorization Requirements:
| id required | integer Example: 12345 Unique identifier of the handle to update |
Handle update parameters. Only updatable fields should be included
required | object Handle update parameters. Note: role_type, organisation, firstname, and lastname cannot be updated after creation | ||||||||||||||||
| |||||||||||||||||
{- "handle": {
- "street": "Musterstraße",
- "house_number": "42",
- "postal": "12345",
- "city": "Berlin",
- "country": "DE",
- "email": "max.mustermann@example.com",
- "phone": "+49 172 4856546",
- "fax": "+49 30 12485785"
}
}{- "status": "ok"
}Soft delete a contact handle. The handle is marked as deleted but may be retained in the database for historical records.
Deletion Behavior:
Handle is NOT deletable if:
Side Effects:
Error Messages:
Authorization Requirements:
| id required | integer Example: 12345 Unique identifier of the handle to delete |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/handles/12345' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Set this handle as the user's default billing handle. The default billing handle is used automatically for new orders and subscriptions.
Authorization Requirements:
| id required | integer Example: 12345 Unique identifier of the handle to set as default |
curl --request POST \ --url 'https://www.lima-city.de/usercp/handles/12345/default' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Access server logs including PHP error logs, web server access logs, and error logs. Monitor application behavior, debug issues, and audit server activities with searchable log retrieval.
Retrieve PHP runtime error logs with optional filtering capabilities. Shows errors, warnings, notices, and other PHP-related issues from your applications.
Data Retention:
Validation Rules:
script: Maximum 500 characterslevel: Must be one of the valid PHP error levelsmessage: Maximum 500 characters for filterfrom_time and to_time: Cannot be older than 1 dayError Messages:
| script | string <= 500 characters Example: script=/html/index.php Filter by script path (partial match). Maximum 500 characters. |
| level | string Enum: "deprecated" "notice" "info" "warning" "error" "fatal_error" "parse_error" Example: level=error Filter by PHP error severity level |
| message | string <= 500 characters Example: message=undefined function Filter by error message content (case-insensitive partial match). Maximum 500 characters. |
| from_time | string <date-time> Example: from_time=2024-10-25T14:00:00+02:00 Filter logs from this time onwards (ISO 8601 format). Cannot be older than 1 day. Defaults to 1 day ago if not specified. |
| to_time | string <date-time> Example: to_time=2024-10-25T15:00:00+02:00 Filter logs up to this time (ISO 8601 format). Cannot be older than 1 day. |
curl --request GET \ --url 'https://www.lima-city.de/usercp/php_error_log?script=%2Fhtml%2Findex.php&level=error&message=undefined+function&from_time=2024-10-25T14%3A00%3A00%2B02%3A00&to_time=2024-10-25T15%3A00%3A00%2B02%3A00' \ --user 'api:YOUR_API_KEY'
{- "logs": [
- {
- "id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
- "time": "2018-07-23T22:04:01+02:00",
- "message": "Uncaught Error: Call to undefined function throw_error()",
- "level": "fatal_error",
- "backtrace": [
- "#0 {main}"
], - "script": "/home/webpages/lima-city/lordoflima/html/foo.php",
- "script_line": "137"
}
]
}Retrieve Apache/nginx access logs showing HTTP requests made to your websites with optional filtering.
Data Retention:
Validation Rules:
hostname: Maximum 100 characters, alphanumeric with dots, hyphens, and underscores onlyip: Maximum 45 characters (supports IPv6), hexadecimal, dots, and colons onlyrequest_path: Maximum 500 characters, must start with '/'status: Must be a valid 3-digit HTTP status code (100-599)from_time and to_time: Cannot be older than 7 daysError Messages:
| hostname | string <= 100 characters ^[a-zA-Z0-9\.\-_]+$ Example: hostname=example.lima-city.de Filter by hostname/domain (partial match). Maximum 100 characters, alphanumeric with dots, hyphens, underscores. |
| ip | string <= 45 characters Example: ip=192.168 Filter by client IP address (partial match, supports IPv4 and IPv6). Maximum 45 characters. |
| request_path | string <= 500 characters ^/ Example: request_path=/api/users Filter by request path (partial match). Must start with '/'. Maximum 500 characters. |
| status | integer [ 100 .. 599 ] Example: status=404 Filter by HTTP status code (exact match). Must be a valid 3-digit status code. |
| from_time | string <date-time> Example: from_time=2024-10-25T14:00:00+02:00 Filter logs from this time onwards (ISO 8601 format). Cannot be older than 7 days. Defaults to 1 hour ago if not specified. |
| to_time | string <date-time> Example: to_time=2024-10-25T15:00:00+02:00 Filter logs up to this time (ISO 8601 format). Cannot be older than 7 days. |
curl --request GET \ --url 'https://www.lima-city.de/usercp/access_logs?hostname=example.lima-city.de&ip=192.168&request_path=%2Fapi%2Fusers&status=404&from_time=2024-10-25T14%3A00%3A00%2B02%3A00&to_time=2024-10-25T15%3A00%3A00%2B02%3A00' \ --user 'api:YOUR_API_KEY'
{- "logs": [
- {
- "id": "b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7",
- "time": "2024-10-25T14:32:15+02:00",
- "remote_addr": "192.168.1.100",
- "request": "GET /index.php?page=home HTTP/1.1",
- "status": 200,
- "bytes_sent": 4523,
- "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
- "host": "example.lima-city.de",
- "request_time": 0.045,
- "content_type": "text/html; charset=UTF-8",
- "ssl": true,
- "blocked": false
}
]
}Retrieve Apache/nginx server error logs showing server-level errors and warnings with optional filtering.
Data Retention:
Validation Rules:
hostname: Maximum 100 characters, alphanumeric with dots, hyphens, and underscores onlyclient_ip: Maximum 45 characters (supports IPv6), hexadecimal, dots, and colons onlylog_level: Must be one of the valid Apache/nginx log levelsmodule: Maximum 50 characters, alphanumeric with underscores and hyphens onlyfrom_time and to_time: Cannot be older than 7 daysError Messages:
| hostname | string <= 100 characters ^[a-zA-Z0-9\.\-_]+$ Example: hostname=example.lima-city.de Filter by hostname/domain (partial match). Maximum 100 characters, alphanumeric with dots, hyphens, underscores. |
| client_ip | string <= 45 characters Example: client_ip=192.168 Filter by client IP address (partial match, supports IPv4 and IPv6). Maximum 45 characters. |
| log_level | string Enum: "emergency" "alert" "critical" "error" "warning" "notice" "info" "debug" Example: log_level=error Filter by Apache/nginx error severity level (exact match, case-insensitive) |
| module | string <= 50 characters ^[a-zA-Z0-9_\-]+$ Example: module=core Filter by Apache/nginx module name (partial match). Maximum 50 characters. |
| from_time | string <date-time> Example: from_time=2024-10-25T14:00:00+02:00 Filter logs from this time onwards (ISO 8601 format). Cannot be older than 7 days. Defaults to 1 hour ago if not specified. |
| to_time | string <date-time> Example: to_time=2024-10-25T15:00:00+02:00 Filter logs up to this time (ISO 8601 format). Cannot be older than 7 days. |
curl --request GET \ --url 'https://www.lima-city.de/usercp/error_logs?hostname=example.lima-city.de&client_ip=192.168&log_level=error&module=core&from_time=2024-10-25T14%3A00%3A00%2B02%3A00&to_time=2024-10-25T15%3A00%3A00%2B02%3A00' \ --user 'api:YOUR_API_KEY'
{- "logs": [
- {
- "id": "c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8",
- "time": "2024-10-25T14:32:15+02:00",
- "hostname": "example.lima-city.de",
- "log_level": "error",
- "module": "core",
- "process_id": 12345,
- "client_ip": "192.168.1.100",
- "error_code": "AH01630",
- "message": "client denied by server configuration: /home/webpages/lima-city/user/html/restricted.php",
- "request_id": "XyZ12345AbC67890"
}
]
}Manage Memcached caching services for performance optimization. Enable/disable Memcached, monitor cache statistics, and clear cache to improve application response times.
curl --request GET \ --url 'https://www.lima-city.de/usercp/memcached' \ --user 'api:YOUR_API_KEY'
{- "available": true,
- "enabled": true,
- "current_size": "128",
- "socket": "/usr/share/lima/php-deinbenutzername/memcached.sock",
- "stats": {
- "accepting_conns": "1",
- "auth_cmds": "0",
- "auth_errors": "0",
- "bytes": "49425",
- "bytes_read": "70860861",
- "bytes_written": "503830913",
- "cas_badval": "0",
- "cas_hits": "0",
- "cas_misses": "0",
- "cmd_flush": "0",
- "cmd_get": "489598",
- "cmd_set": "22085",
- "cmd_touch": "0",
- "conn_yields": "0",
- "connection_structures": "11",
- "crawler_items_checked": "57534",
- "crawler_reclaimed": "3239",
- "curr_connections": "4",
- "curr_items": "69",
- "decr_hits": "0",
- "decr_misses": "0",
- "delete_hits": "0",
- "delete_misses": "0",
- "direct_reclaims": "0",
- "evicted_active": "0",
- "evicted_unfetched": "0",
- "evictions": "0",
- "expired_unfetched": "2103",
- "get_expired": "5759",
- "get_flushed": "0",
- "get_hits": "467435",
- "get_misses": "22163",
- "hash_bytes": "524288",
- "hash_is_expanding": "0",
- "hash_power_level": "16",
- "incr_hits": "0",
- "incr_misses": "0",
- "libevent": "2.1.8-stable",
- "limit_maxbytes": "134217728",
- "listen_disabled_num": "0",
- "log_watcher_sent": "0",
- "log_watcher_skipped": "0",
- "log_worker_dropped": "0",
- "log_worker_written": "0",
- "lru_bumps_dropped": "0",
- "lru_crawler_running": "0",
- "lru_crawler_starts": "228164",
- "lru_maintainer_juggles": "36441728",
- "lrutail_reflocked": "14787",
- "malloc_fails": "0",
- "max_connections": "1024",
- "moves_to_cold": "172602",
- "moves_to_warm": "165288",
- "moves_within_lru": "95184",
- "pid": "13",
- "pointer_size": "64",
- "reclaimed": "13018",
- "rejected_connections": "0",
- "reserved_fds": "20",
- "rusage_system": "511.768000",
- "rusage_user": "584.428000",
- "slab_global_page_pool": "0",
- "slab_reassign_busy_deletes": "0",
- "slab_reassign_busy_items": "0",
- "slab_reassign_chunk_rescues": "0",
- "slab_reassign_evictions_nomem": "0",
- "slab_reassign_inline_reclaim": "0",
- "slab_reassign_rescues": "0",
- "slab_reassign_running": "0",
- "slabs_moved": "0",
- "threads": "4",
- "time": "1532460789",
- "time_in_listen_disabled_us": "0",
- "total_connections": "6573",
- "total_items": "22085",
- "touch_hits": "0",
- "touch_misses": "0",
- "uptime": "3117429",
- "version": "1.5.6 Ubuntu"
}
}Restore websites and databases from backups. Monitor restore operations, check restoration status, and manage recovery from specific backup snapshots for disaster recovery and migration scenarios.
List all restore requests (both database and webspace backups) for the authenticated user with pagination support.
Restore Types:
Restore States:
waiting - Restore request is queued and waiting to startrunning - Restore is currently in progresssuccess - Restore completed successfullyfailure - Restore failedDownload Availability:
downloadable field indicates current availabilityRequirements:
Response Structure:
| page | integer >= 1 Default: 1 Page number for pagination (default: 1) |
curl --request GET \ --url 'https://www.lima-city.de/usercp/restores?page=1' \ --user 'api:YOUR_API_KEY'
{- "restores": [
- {
- "restorable": {
- "type": "DatabaseBackup",
- "database": "db_9876_myapp",
- "finished_at": "2025-10-24T03:00:00Z"
}, - "id": 78901,
- "created_at": "2025-10-24T14:30:00Z",
- "state": "success",
- "success": true,
- "progress": {
- "percent": 100,
- "files_restored": 100,
- "files_total": 100,
- "bytes_restored": 1048576,
- "bytes_total": 1048576
}, - "target": {
- "database": "db_9876_target"
}
}
], - "pagination": {
- "limit_value": 25,
- "total_pages": 1,
- "current_page": 1,
- "next_page": null,
- "prev_page": null,
- "first_page": true,
- "last_page": true
}
}Show details of a specific restore request including progress, state, and target information. The path parameter is the public restore_id string returned by backup restore/download endpoints, not the numeric database ID shown in restore lists.
Use Cases:
Progress Tracking:
progress object provides detailed progress informationpercent field shows completion percentage (0-100)files_restored and bytes_restored track progress at file and byte levelTarget Information:
target.database contains target database nametarget.webspace is truetarget.download_url contains URL (if still downloadable)target.downloadable indicates if download is still available (5-day limit)Requirements:
| id required | string Example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 Public restore_id returned by backup restore/download endpoints |
curl --request GET \ --url 'https://www.lima-city.de/usercp/restores/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4' \ --user 'api:YOUR_API_KEY'
{- "restore": {
- "restorable": {
- "type": "DatabaseBackup",
- "database": "db_9876_myapp",
- "finished_at": "2025-10-24T03:00:00Z"
}, - "id": 78901,
- "created_at": "2025-10-24T14:30:00Z",
- "state": "success",
- "success": true,
- "progress": {
- "percent": 100,
- "files_restored": 100,
- "files_total": 100,
- "bytes_restored": 1048576,
- "bytes_total": 1048576
}, - "target": {
- "database": "db_9876_target"
}
}
}Manage SSH public keys for secure shell access to hosting accounts. Add, list, and revoke SSH keys with automatic fingerprint generation. Support for RSA, DSA, Ed25519, and ECDSA key types for Git, SFTP, and terminal access.
List all SSH public keys registered for the authenticated user.
SSH keys provide secure authentication for:
Each key is identified by its MD5 and SHA256 fingerprints, which are automatically calculated when the key is added.
Use Cases:
Key Features:
curl --request GET \ --url 'https://www.lima-city.de/usercp/ssh_keys' \ --user 'api:YOUR_API_KEY'
[- {
- "id": 145612,
- "name": "Work Laptop",
- "comment": "lordoflima@d0d2eb64bdce",
- "text_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDWtLYGThmO7QtLhyHBv+ppzhJDYsFRu4kkYR2LRn6CI lordoflima@d0d2eb64bdce",
- "fingerprint": "ff:1e:bf:cb:3e:49:f0:a6:76:9b:61:54:da:c2:71:d2",
- "sha256_fingerprint": "nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8",
- "friendly_name": "Work Laptop",
- "ssh_enabled": true,
- "created_at": "2024-03-15T10:30:00Z",
- "updated_at": "2024-03-15T10:30:00Z"
}
]Register a new SSH public key for the authenticated user.
The SSH key must be a valid OpenSSH-format public key. The system will automatically parse and validate the key, extract the comment if present, and calculate both MD5 and SHA256 fingerprints.
Supported Key Types:
ssh-rsa - RSA keys (legacy but widely supported)ssh-dss - DSA keys (legacy)ssh-ed25519 - Ed25519 keys (recommended, modern and secure)ecdsa-sha2-nistp256 - ECDSA keys with NIST P-256 curveecdsa-sha2-nistp384 - ECDSA keys with NIST P-384 curveecdsa-sha2-nistp521 - ECDSA keys with NIST P-521 curve-cert-v01@openssh.com suffixKey Format: The text_key field must contain the complete public key in OpenSSH format:
<key-type> <base64-key-data> [optional-comment]
Example valid keys:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDWtLYGThmO7QtLhyHBv+ppzhJDYsFRu4kkYR2LRn6CI user@hostname
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQBWOR21b8gm37ss3ljwEcbd2Z3Hd2ZoKvSR2hOr7Xr7o...
Validation Rules:
Automatic Processing:
Error Messages:
Security Notes:
SSH key creation parameters. The request must be nested under 'ssh_key' to match Rails controller structure.
required | object SSH key parameters | ||||
| |||||
{- "ssh_key": {
- "name": "Work Laptop",
- "text_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDWtLYGThmO7QtLhyHBv+ppzhJDYsFRu4kkYR2LRn6CI lordoflima@d0d2eb64bdce"
}
}{- "id": 145612
}Remove an SSH public key from the authenticated user's account.
This action immediately revokes the key's ability to authenticate. Any systems or services using this key will no longer be able to connect.
Warning: This operation is permanent and cannot be undone. If you need the key again, you will have to re-add it.
Impact:
Use Cases:
| id required | integer Example: 145612 Unique identifier of the SSH key to delete |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/ssh_keys/145612' \ --user 'api:YOUR_API_KEY'
{- "success": true
}Manage website hosting, SSL certificates, and web server configuration. Create, update, delete, and monitor websites with support for SSL/TLS, document root configuration, and web space management.
List all configured websites (virtual hosts) for the authenticated user, including WordPress installations, registered domains, and recently expired domains.
This endpoint provides a comprehensive view of all hosting configurations including subdomains, external domains, and free lima-city subdomains.
Authorization Requirements:
Response includes:
curl --request GET \ --url 'https://www.lima-city.de/usercp/websites' \ --user 'api:YOUR_API_KEY'
{- "websites": [
- {
- "id": 12345,
- "hostname": "example.com",
- "path": "htdocs",
- "force_ssl": true,
- "active": true,
- "created": "2023-07-23T14:30:00+02:00",
- "overplugged": false,
- "wildcard": false
}
], - "wordpress_installations": [
- { }
], - "domains": {
- "property1": { },
- "property2": { }
}, - "recently_expired_domains": {
- "property1": { },
- "property2": { }
}
}Update the configuration of an existing website. You can change the document root path or configure the website as a redirect.
Important Notes:
Validation Rules:
Error Messages:
| id required | integer Example: 12345 Unique identifier of the website to update |
Website update parameters
required | object | ||||||||
| |||||||||
{- "website": {
- "content_strategy": "redirect",
- "path": "htdocs/newpath",
- "redirect_status": "302",
}
}{- "status": "ok"
}Delete a website configuration and its associated resources.
Important Warnings:
Authorization Requirements:
| id required | integer Example: 12345 Unique identifier of the website to delete |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/websites/12345' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Set a boolean flag on a website configuration.
Available Flags:
Important Notes:
Authorization Requirements:
| id required | integer Example: 12345 Unique identifier of the website |
Flag to set
| flag required | string Value: "force_ssl" Flag name to set |
| state required | string Enum: "on" "off" New state for the flag |
{- "flag": "force_ssl",
- "state": "on"
}{- "status": "ok"
}Get a list of available domains under which you can create subdomains.
Only domains that are:
will be included in the response.
Authorization Requirements:
curl --request GET \ --url 'https://www.lima-city.de/usercp/websites/subdomain/new' \ --user 'api:YOUR_API_KEY'
{- "domains": [
- [
- "example.com",
- "example.com"
], - [
- "xn--exmple-cua.com",
- "exämple.com"
]
]
}Create a new subdomain under one of your registered domains. First call GET /websites/subdomain/new to list usable parent domains, then send the selected domain in usercp_create_subdomain_form.domain.
Content Strategy Options:
install: Prepare for software installationsame_path: Use the same document root as another website (content_path)path: Specify a custom document root path (path)redirect: Configure as HTTP redirect (redirect_status and redirect_url)Validation Rules:
Error Messages:
Successful Response:
Returns 201 Created with status: ok and the newly created website ID in object.id.
Authorization Requirements:
Subdomain creation parameters
required | object | ||||||||||||||
| |||||||||||||||
{- "usercp_create_subdomain_form": {
- "subdomain": "blog",
- "domain": "example.com",
- "content_strategy": "path",
- "path": "htdocs/blog"
}
}{- "status": "ok",
- "object": {
- "id": 12345
}
}Connect an external domain (not registered through lima-city) to your hosting account.
Prerequisites:
POST /websites/external-domain/check to verify the current DNS requirements before connecting the domain.Hostname Processing:
Content Strategy Options:
install: Prepare for software installationsame_path: Use same document root as another websitepath: Specify a custom document root pathredirect: Configure as HTTP redirectValidation Rules:
Error Messages:
Authorization Requirements:
External domain connection parameters
required | object | ||||||||||||||||
| |||||||||||||||||
{- "website": {
- "hostname": "external-site.com",
- "use_ipv6": true,
- "use_email": true,
- "content_strategy": "path",
- "path": "htdocs",
- "content_path": "htdocs",
- "redirect_status": "301",
}
}{- "id": 12345
}Check if an external domain's DNS records are correctly configured to work with lima-city hosting.
The response shows whether the configured DNS records satisfy the current requirements for website hosting, optional IPv6 support, and optional email reception.
Error Messages:
Authorization Requirements:
Domain to check
required | object | ||||||
| |||||||
{- "website": {
- "hostname": "external-site.com",
- "use_ipv6": true,
- "use_email": true
}
}Get available options for creating a free lima-city subdomain.
Returns:
[display_name, domain] pairscontent_strategy: same_pathFree Subdomain Suffixes:
The current suffix list is returned by this endpoint. Examples include lima.zone, lima-city.rocks, webspace.rocks, 4lima.de, and de.cool.
Vanity domains are marked with a ¹ indicator in the display name.
Authorization Requirements:
curl --request GET \ --url 'https://www.lima-city.de/usercp/websites/lima-subdomain/new' \ --user 'api:YOUR_API_KEY'
{- "data": {
- "subdomains": [
- [
- "4lima.de ¹",
- "4lima.de"
], - [
- "lima.zone ¹",
- "lima.zone"
], - [
- "lima-city.rocks ¹",
- "lima-city.rocks"
], - [
- "de.cool ¹",
- "de.cool"
]
], - "vhosts": {
- "existing.lima-city.de": "htdocs"
}
}
}Create a free subdomain on one of lima-city's vanity domains. First call GET /websites/lima-subdomain/new to get the currently available suffixes, then send the chosen value in usercp_create_free_subdomain_interaction.domain.
Subdomain Limits:
Reserved Prefixes: The following prefixes cannot be used:
Validation Rules:
Error Messages:
Content Strategy Options:
install: Prepare for software installationsame_path: Use same document root as another website (content_path)path: Specify a custom document root path (path)redirect: Configure as HTTP redirect (redirect_status and redirect_url)Successful Response:
Returns 201 Created with status: ok and the newly created website ID in object.id.
Authorization Requirements:
Free subdomain creation parameters
required | object | ||||||||||||||
| |||||||||||||||
{- "usercp_create_free_subdomain_interaction": {
- "prefix": "myapp",
- "domain": "lima.zone",
- "content_strategy": "install"
}
}{- "status": "ok",
- "object": {
- "id": 12345
}
}Check if a free subdomain prefix is valid and available before creating it.
This endpoint performs validation without actually creating the subdomain, allowing users to check availability in real-time.
Validation Checks:
Authorization Requirements:
| prefix required | string Example: prefix=myapp Subdomain prefix to validate |
| domain required | string Enum: "4lima.de" "12hp.de" "2ix.de" "lima-city.at" "4lima.at" "12hp.at" "2ix.at" "lima-city.ch" "4lima.ch" "12hp.ch" "2ix.ch" "1337.pictures" "clan.rip" "lima-city.rocks" "webspace.rocks" "lima.zone" "de.cool" Example: domain=lima.zone Free subdomain suffix |
curl --request GET \ --url 'https://www.lima-city.de/usercp/websites/lima-subdomain/status?prefix=myapp&domain=lima.zone' \ --user 'api:YOUR_API_KEY'
{- "valid": true,
- "errors": {
- "prefix": [
- "ist bereits belegt"
]
}
}Retrieve traffic statistics for all websites on the account for the last 90 days.
Statistics Include:
Response Details:
Response Formats:
CSV Column Headers:
Authorization Requirements:
| Accept | string Default: application/json Enum: "application/json" "text/csv" "text/html" Response format (application/json for JSON, text/csv for CSV download) |
curl --request GET \ --url 'https://www.lima-city.de/usercp/websites/statistics' \ --user 'api:YOUR_API_KEY'
{- "stats": [
- {
- "vhost_id": 12345,
- "date": "2023-07-23",
- "page_views": 150,
- "robot_page_views": 25,
- "requests": 543,
- "robot_requests": 87,
- "total_bytes": 52428800,
- "robot_bytes": 5242880
}
], - "vhosts": [
- {
- "id": 12345,
- "name": "example.com"
}
]
}Create, list, restore, and download backups of your website files and content. Full file backup management with point-in-time recovery, directory-level restoration, and download support for archival purposes.
List all automatic webspace backups for the authenticated user with pagination support.
Important Notes:
Requirements:
Data Retention:
| page | integer >= 1 Default: 1 Page number for pagination (default: 1) |
curl --request GET \ --url 'https://www.lima-city.de/usercp/webspace_backups?page=1' \ --user 'api:YOUR_API_KEY'
{- "webspace_backups": [
- {
- "id": 54321,
- "user_id": 9876,
- "username": "USER9876",
- "state": "success",
- "password": null,
- "storage_filename": "backup_20251020_021530_user9876",
- "filesize": 52428800,
- "started_at": "2025-10-20T02:15:00Z",
- "finished_at": "2025-10-20T02:45:30Z",
- "created_at": "2025-10-20T02:15:00Z",
- "updated_at": "2025-10-20T02:45:30Z",
- "listing_state": "completed",
- "timestamp": "2025-10-20T02:15:30Z",
- "source_server": "sh01",
- "silo": "group1",
- "successful": true,
- "public_backup": false,
- "bup_backup": false,
- "restic_backup": true
}
], - "restore_count": 2,
- "pagination": {
- "limit_value": 25,
- "total_pages": 10,
- "current_page": 1,
- "next_page": 2,
- "prev_page": null,
- "first_page": true,
- "last_page": false
}
}Show details of a specific webspace backup. Currently returns a simple status confirmation.
Important Notes:
Requirements:
| id required | integer Example: 54321 Unique identifier of the webspace backup |
curl --request GET \ --url 'https://www.lima-city.de/usercp/webspace_backups/54321' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Retrieve the file and folder structure within a webspace backup. This endpoint enables browsing backup contents to select specific files/folders for restore.
Important Notes:
Usage:
Requirements:
| id required | integer Example: 54321 Unique identifier of the webspace backup |
| folder | string Default: "#" Example: folder=default-website Folder path to browse within the backup. Use '#' for root directory, or a relative path like 'default-website/wp-content' for subdirectories |
curl --request GET \ --url 'https://www.lima-city.de/usercp/webspace_backups/54321/content?folder=%23' \ --user 'api:YOUR_API_KEY'
[- {
- "id": "default-website",
- "text": "default-website",
- "type": "directory",
- "size": 0,
- "mtime": "2025-10-20T14:30:00Z"
}, - {
- "id": "logs",
- "text": "logs",
- "type": "directory",
- "size": 0,
- "mtime": "2025-10-20T14:25:00Z"
}, - {
- "id": ".htaccess",
- "text": ".htaccess",
- "type": "file",
- "size": 512,
- "mtime": "2025-10-15T10:00:00Z"
}
]Restore selected files and folders from a webspace backup either to a ZIP archive for download or directly back to webspace. For customers who want to download backups, use this endpoint with restore.target: download.
Process Flow for Downloads:
GET /webspace_backups/{id}/content?folder=#POST /webspace_backups/{id}/restore with restore.target: download and restore.path_listobject.restore_idGET /restores/{restore_id} until state is successrestore.target.download_url while restore.target.downloadable is trueTarget Types:
success.Important Notes:
object.restore_id to track progress at /restores/{restore_id}/theuser/)id values returned from the /content endpointwebspace target, files are restored to their original locations (overwrites existing)download target, a ZIP archive is created containing the requested files/foldersValidation Rules:
download or webspaceError Messages:
Requirements:
| id required | integer Example: 54321 Unique identifier of the webspace backup to restore from |
Restore parameters specifying target type and file/folder paths
required | object Nested restore parameters matching controller params.require(:restore) structure | ||||
| |||||
{- "restore": {
- "target": "download",
- "path_list": [
- "default-website"
]
}
}{- "status": "ok",
- "object": {
- "restore_id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4"
}
}Retrieve a list of all domains owned by the authenticated user.
This endpoint returns both active and deleted domains with specific filtering:
Domains are sorted alphabetically by domain name (sld) and TLD.
Domain States:
registered: Domain is active and fully registeredbackorder_pending: Domain registration requested but not yet completedin_transfer: Domain transfer is in progressdeleted: Domain has been deleted (shown for 30 days after deletion)Authorization: Requires valid API key or user authentication.
object Example: com=&de= Filter domains by TLD (top-level domain). Provide TLD as key in the query parameters. |
curl --request GET \ --url 'https://www.lima-city.de/usercp/domains?tld_filter=%7B%22com%22%3D%3E%22%22%2C+%22de%22%3D%3E%22%22%7D' \ --user 'api:YOUR_API_KEY'
{- "domains": [
- {
- "id": 12345,
- "sld": "example",
- "tld": "com",
- "fqdn": "example.com",
- "unicode_fqdn": "münchen.de",
- "bill_status": "paid",
- "mode": "CREATE",
- "status": "<status>OK</status>",
- "registered": true,
- "ordered": "2023-01-15T10:30:00Z",
- "requested": "2023-01-14T15:20:00Z",
- "deleted": null,
- "expire_date": "2025-01-15",
- "periods": 1,
- "auto_renew": false,
- "auto_renew_mode": null,
- "renewable": true,
- "manageable": true,
- "custom_nameservers": null,
- "dns_mode": "auto",
- "order_error": null,
- "need_auth_info": false,
- "in_transfer": false,
- "backorder_pending": false,
- "restorable": false,
- "restorable_until": null,
- "expiring_soon": false
}
]
}Initiate domain verification by sending a 6-digit verification code via SMS to a European phone number.
Verification Process:
Phone Number Requirements:
Rate Limits:
Validation Rules:
Error Messages:
Authorization: Requires valid user authentication.
required | object Step 1 verification parameters | ||
| |||
{- "usercp_domain_verification_step1": {
- "phone": "+49 176 12345678"
}
}{- "phone": "+49 176 12345678"
}Complete the domain verification process by submitting the 6-digit code received via SMS.
Code Validation:
After Successful Verification:
Error Messages:
Authorization: Requires valid user authentication and active session with phone number from step 1.
required | object Step 2 verification parameters | ||
| |||
{- "usercp_domain_verification_step2": {
- "code": "123456"
}
}{- "status": "ok"
}Retrieve detailed information about a specific domain.
Domain Identification:
Returned Information:
Authorization: Requires valid API key or user authentication. User must own the domain.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name (e.g., 'example.com') |
curl --request GET \ --url 'https://www.lima-city.de/usercp/domains/example.com' \ --user 'api:YOUR_API_KEY'
{- "domain": {
- "id": 12345,
- "sld": "example",
- "tld": "com",
- "fqdn": "example.com",
- "unicode_fqdn": "münchen.de",
- "bill_status": "paid",
- "mode": "CREATE",
- "status": "<status>OK</status>",
- "registered": true,
- "ordered": "2023-01-15T10:30:00Z",
- "requested": "2023-01-14T15:20:00Z",
- "deleted": null,
- "expire_date": "2025-01-15",
- "periods": 1,
- "auto_renew": false,
- "auto_renew_mode": null,
- "renewable": true,
- "manageable": true,
- "custom_nameservers": null,
- "dns_mode": "auto",
- "order_error": null,
- "need_auth_info": false,
- "in_transfer": false,
- "backorder_pending": false,
- "restorable": false,
- "restorable_until": null,
- "expiring_soon": false
}
}Mark an inclusive premium domain for automatic expiration (auto-expire).
Important Notes:
Use Case: Users with premium hosting subscriptions that include free domains can use this endpoint to let those domains expire when canceling or downgrading their subscription.
Authorization: Requires valid user authentication. User must own the domain.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/domains/example.com' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Retrieve DKIM (DomainKeys Identified Mail) keys configured for the domain.
DKIM Overview:
Key Information Returned:
Authorization: Requires valid user authentication. User must own the domain.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
curl --request GET \ --url 'https://www.lima-city.de/usercp/domains/example.com/dkim_keys' \ --user 'api:YOUR_API_KEY'
{- "dkim_keys": [
- {
- "id": 54321,
- "domain_name": "example.com",
- "selector": "default",
- "public_key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...",
- "created_at": "2023-01-15T10:30:00Z",
- "dns_record": "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
}
]
}Request the authorization code (auth code/EPP code) for transferring the domain to another registrar.
Security Requirements:
Process:
Important Notes:
Validation Rules:
Error Messages:
Authorization: Requires valid user authentication with 2FA verification. User must own the domain.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
required | object Auth info request parameters | ||||
| |||||
{- "request": {
- "password": "mySecurePassword123",
- "feedback": "Transferring domain to another provider"
}
}{- "status": "ok"
}Restart a domain transfer that encountered an error or is stuck in pending state.
Use Cases:
Process:
Requirements:
Authorization: Requires valid user authentication. User must own the domain.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
curl --request POST \ --url 'https://www.lima-city.de/usercp/domains/example.com/restart_transfer' \ --user 'api:YOUR_API_KEY'
{- "result": "ok"
}Update the DNS server (nameserver) configuration for a domain.
DNS Modes:
auto: Use lima-city nameservers (ns1.lima-city.de, ns2.lima-city.de, ns3.lima-city.de)custom: Use external nameservers (must provide at least 2 valid nameservers)Switching to Auto Mode:
Switching to Custom Mode:
Nameserver Validation:
DNSSEC Key Validation:
Error Messages:
Authorization: Requires valid user authentication. User must own the domain and DNS must not be blocked.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
required | object DNS server configuration parameters | ||||||||||||||||||||||||
| |||||||||||||||||||||||||
{- "dns_server": {
- "dns_mode": "custom",
- "nameserver1": "ns1.example.com",
- "nameserver2": "ns2.example.com",
- "nameserver3": "ns3.example.com",
- "nameserver4": null,
- "nameserver5": null,
- "dnssec_keys": [
- {
- "flags": 257,
- "protocol": 3,
- "algorithm": 13,
- "public_key": "AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU="
}
]
}
}{- "status": "ok"
}Update the authorization code (auth code/EPP code) for a pending domain transfer.
Purpose: Provide or correct the auth code needed to complete a domain transfer from another registrar.
Requirements:
After Update:
Validation Rules:
Error Messages:
Authorization: Requires valid user authentication. User must own the domain.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
| auth_info required | string Authorization code (auth code/EPP code) provided by the previous registrar. Required for domain transfers. Must not be empty. |
{- "auth_info": "Xyz789Abc!123"
}{- "status": "ok"
}Add a renewal order for this domain to the shopping cart.
Important Notes:
Renewability Requirements:
ordered and registeredordered and not deletedResponse Behavior:
Authorization: Requires valid user authentication. User must own the domain.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
curl --request GET \ --url 'https://www.lima-city.de/usercp/domains/example.com/renew' \ --user 'api:YOUR_API_KEY'
Enable or disable automatic renewal for a single domain.
Important Requirements:
Auto-Renewal Behavior:
Response Statuses:
ok: Operation successfulpayment_method_required: Cannot enable auto-renew without payment method (HTTP 403)Authorization: Requires valid user authentication. User must own the domain.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
| enabled required | boolean Whether to enable (true) or disable (false) automatic renewal. Enabling auto-renew requires a default payment method to be set on the account. |
{- "enabled": true
}{- "status": "ok"
}Change the payment method used for automatic renewals of this domain. This is a web endpoint referenced in routes but implementation details suggest it updates the domain's payment_method_id.
Use Case: User wants to use a different payment method for this specific domain's renewals.
Authorization: Requires valid user authentication. User must own the domain.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
| payment_method_id | integer ID of the payment method to use for this domain |
{- "payment_method_id": 12345
}Change the billing contact handle associated with this domain. This is a web endpoint referenced in routes.
Use Case: User wants to use a different billing contact for this domain (e.g., company billing info instead of personal).
Authorization: Requires valid user authentication. User must own the domain.
| id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
| billing_handle_id | integer ID of the handle to use as billing contact |
{- "billing_handle_id": 67890
}Create an order to restore a deleted domain that was previously backordered (registered through lima-city).
Requirements:
Process:
Restore Pricing: Restoration typically costs more than regular renewal due to registrar redemption fees.
Authorization: Requires valid user authentication. User must own the domain.
| id required | integer Example: 12345 Domain ID (integer) |
curl --request POST \ --url 'https://www.lima-city.de/usercp/domains/12345/restore' \ --user 'api:YOUR_API_KEY'
{- "status": "ok",
- "order_id": 67890
}Retrieve all DNS records configured for a domain.
Requirements:
Returned Records:
Record Information:
Domain Identification:
Authorization: Requires valid API key or user authentication. User must own the domain. DNS must not be blocked.
| domain_id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
curl --request GET \ --url 'https://www.lima-city.de/usercp/domains/example.com/records' \ --user 'api:YOUR_API_KEY'
{- "records": [
- {
- "id": 98765,
- "name": "www.example.com",
- "type": "A",
- "content": "192.0.2.1",
- "ttl": 3600,
- "priority": 10,
- "subdomain": "www"
}
]
}Create a new DNS resource record for the domain.
Requirements:
Record Types Supported:
Name Input Shortcuts:
Validation Rules:
After Creation:
Error Messages:
Authorization: Requires valid API key or user authentication. User must own the domain. DNS must not be blocked.
| domain_id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
required | object (DnsRecordInput) DNS record input parameters | ||||||||||
| |||||||||||
{- "nameserver_record": {
- "name": "www",
- "type": "A",
- "content": "192.0.2.1",
- "ttl": 3600,
- "priority": 10
}
}{- "record": {
- "id": 98765,
- "name": "www.example.com",
- "type": "A",
- "content": "192.0.2.1",
- "ttl": 3600,
- "priority": 10,
- "subdomain": "www"
}
}Reset the DNS zone to default configuration, removing all custom records and recreating standard records.
Warning: This operation is destructive and cannot be undone!
Process:
Use Cases:
Requirements:
Authorization: Requires valid user authentication. User must own the domain. DNS must not be blocked.
| domain_id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
curl --request POST \ --url 'https://www.lima-city.de/usercp/domains/example.com/records/reset_dns' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Retrieve details of a specific DNS record.
Requirements:
Authorization: Requires valid API key or user authentication. User must own the domain. DNS must not be blocked.
| domain_id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
| id required | integer Example: 98765 DNS record ID |
curl --request GET \ --url 'https://www.lima-city.de/usercp/domains/example.com/records/98765' \ --user 'api:YOUR_API_KEY'
{- "record": {
- "id": 98765,
- "name": "www.example.com",
- "type": "A",
- "content": "192.0.2.1",
- "ttl": 3600,
- "priority": 10,
- "subdomain": "www"
}
}Update an existing DNS resource record.
Requirements:
Updatable Fields:
Important Notes:
Same Validation as Creation:
Authorization: Requires valid API key or user authentication. User must own the domain. DNS must not be blocked.
| domain_id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
| id required | integer Example: 98765 DNS record ID |
required | object (DnsRecordInput) DNS record input parameters | ||||||||||
| |||||||||||
{- "nameserver_record": {
- "name": "www",
- "type": "A",
- "content": "192.0.2.1",
- "ttl": 3600,
- "priority": 10
}
}{- "record": {
- "id": 98765,
- "name": "www.example.com",
- "type": "A",
- "content": "192.0.2.1",
- "ttl": 3600,
- "priority": 10,
- "subdomain": "www"
}
}Delete an existing DNS resource record.
Requirements:
Important Notes:
Authorization: Requires valid API key or user authentication. User must own the domain. DNS must not be blocked.
| domain_id required | string Example: example.com Domain ID (integer) or fully qualified domain name |
| id required | integer Example: 98765 DNS record ID |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/domains/example.com/records/98765' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Retrieves comprehensive overview of the user's email service including all email addresses (mailboxes and aliases), storage quota usage, and currently running mailbox import operations.
Access Requirements:
Response Data:
curl --request GET \ --url 'https://www.lima-city.de/usercp/email' \ --user 'api:YOUR_API_KEY'
{- "email_available": true,
- "usage_kb": 512000,
- "limit_kb": 2048000,
- "usage_percent": 25,
- "email_addresses": [
- {
- "id": 123,
- "type": "mailbox",
- "email": "info@example.com",
- "local_part": "info",
- "domain": "example.com",
- "access_denied": false,
- "destinations": [
- "foobar@gmail.com"
]
}
], - "running_imports": [
- {
- "id": 12345,
- "mailbox_id": 67890,
- "state": "running",
- "messages_imported": 150,
- "messages_total": 500
}
]
}Returns a list of all domains that have email services activated for the current user. This includes both external domains (with proper MX records) and lima-city hosted domains.
Domain Types:
Access Requirements:
Domain Format:
curl --request GET \ --url 'https://www.lima-city.de/usercp/email_domains' \ --user 'api:YOUR_API_KEY'
{- "email_available": true,
- "email_domains": [
- {
- "ascii_fqdn": "xn--example-95a.de",
- "unicode_fqdn": "exämple.de"
}
]
}Verifies the configuration status of email services for a specific domain. This endpoint can be used to confirm that email services are properly configured and operational.
Status Information:
Domain Format:
| domain_fqdn required | string Example: example.com Fully qualified domain name (e.g., 'example.com' or 'exämple.de') |
curl --request GET \ --url 'https://www.lima-city.de/usercp/email_domains/example.com/status' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Enables email hosting services for an external domain by creating the necessary mail transport configuration. This operation requires proper DNS configuration and premium subscription.
Prerequisites:
DNS Requirements:
Validation Rules:
Success Response:
Error Messages:
| domain_fqdn required | string Example: example.com Fully qualified domain name to activate email services for (e.g., 'example.com') |
curl --request POST \ --url 'https://www.lima-city.de/usercp/email/example.com/activate' \ --user 'api:YOUR_API_KEY'
{- "error": "Ungültige Domain-Konfiguration für example.com."
}mailbox object
required | object (mailboxes_mailbox) | ||||||||
| |||||||||
{- "mailbox": {
- "login": "info",
- "domain": "example.com",
- "password": "pa$$word",
- "greylisting": false
}
}{- "status": "ok"
}curl --request GET \ --url 'https://www.lima-city.de/usercp/mailboxes/example' \ --user 'api:YOUR_API_KEY'
{- "id": 123,
- "type": "mailbox",
- "email": "info@example.com",
- "local_part": "info",
- "domain": "example.com",
- "access_denied": false,
- "destinations": [
- "foobar@gmail.com"
]
}| mailboxId required | string |
The new mailbox settings
required | object (mailboxesmailboxId_mailbox) | ||||||
| |||||||
{- "mailbox": {
- "greylisting": true,
- "relaxed_helo": false,
- "password_api_enabled": true
}
}{- "id": 123,
- "type": "mailbox",
- "email": "info@example.com",
- "local_part": "info",
- "domain": "example.com",
- "access_denied": false,
- "destinations": [
- "foobar@gmail.com"
]
}| mailboxId required | string |
The new mailbox password
required | object (mailboxesmailboxIdpassword_mailbox) | ||
| |||
{- "mailbox": {
- "password": "pa$$word"
}
}{- "status": "ok"
}alias object
required | object (aliases_alias) | ||||||||||
| |||||||||||
{- "alias": {
- "local_part": "info",
- "domain": "example.com",
- "type": "internal",
- "mailbox": "1234",
- "email_address": "foobardst@example.com"
}
}{- "status": "ok"
}List PHP mails sent from your applications with pagination support. Shows email delivery status, sending limits, and delivery statistics.
Sending States:
active: Mail sending is enabledpaused: Mail sending is temporarily pausedblocked: Mail sending is blocked (limit = 0 or account restricted)| page | integer >= 1 Default: 1 Page number for pagination (default: 1) |
| filter | string Value: "failed" Filter mails by delivery status. Use 'failed' to show only emails with delivery failures. |
curl --request GET \ --url 'https://www.lima-city.de/usercp/php_mails?page=1&filter=failed' \ --user 'api:YOUR_API_KEY'
{- "sending_state": "active",
- "sent_today": 15,
- "sent_yesterday": 23,
- "queued_mails": 3,
- "current_limit": 500,
- "max_limit": 500,
- "delivery_percentage": 95.5,
- "emails": [
- {
- "id": 12345,
- "state": "delivered",
- "queued_at": "23.07.2018 22:04",
- "delivered_at": "23.07.2018 22:06",
- "subject": "Test Email Subject",
- "from": "sender@example.com",
- "to": "recipient@example.com",
- "smtp_status": {
- "relay": "smtp.gmail.com",
- "code": "250",
- "message": "OK"
}
}
], - "pagination": {
- "limit_value": 25,
- "total_pages": 10,
- "current_page": 1,
- "next_page": 2,
- "prev_page": null,
- "first_page": true,
- "last_page": false
}
}Retrieves the complete email body for a single PHP mail message. The response contains the raw email including headers (From, To, Subject, etc.) and the message body in plain text format.
| id required | integer Example: 12345 Unique identifier of the PHP mail message to retrieve |
curl --request GET \ --url 'https://www.lima-city.de/usercp/php_mails/12345' \ --user 'api:YOUR_API_KEY'
Deletes all unsent (queued but not yet delivered) emails from the user's queue. Delivered or failed emails are not affected.
Note: This operation cannot be undone. Only emails with state: 'queued' or state: 'created' will be deleted.
curl --request POST \ --url 'https://www.lima-city.de/usercp/php_mails/empty_queue' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Shows the current PHP mail sending limit for the authenticated user. The limit represents the maximum number of emails that can be sent per day.
curl --request GET \ --url 'https://www.lima-city.de/usercp/php_mails/limit' \ --user 'api:YOUR_API_KEY'
{- "limit": 100
}Updates the user's PHP mail sending limit.
Validation Rules:
Error Responses:
limit over contract maximum: "ist über dem vertraglich erlaubten Limit von X"The new mail limit value
required | object | ||
| |||
{- "phpmail_limit": {
- "limit": 150
}
}{- "status": "ok"
}List available php versions and see the account default
curl --request GET \ --url 'https://www.lima-city.de/usercp/php_version' \ --user 'api:YOUR_API_KEY'
[- {
- "name": "7.1",
- "major": 7,
- "minor": 1,
- "label": "PHP 7.1 (empfohlen)",
- "active": false
}
]Retrieves all WordPress installations in the user's webspace. Each installation includes configuration details, associated domains, and staging environment status if applicable.
The system automatically detects WordPress installations by scanning for wp-config.php files and extracts configuration data.
curl --request GET \ --url 'https://www.lima-city.de/usercp/wordpress' \ --user 'api:YOUR_API_KEY'
[- {
- "id": 12345,
- "path": "mein-wordpress",
- "link_id": "12345",
- "wordpress": {
- "software": "wordpress",
- "version": "6.4.2",
- "config_exists": true,
- "config": {
- "table_prefix": "wp_",
- "debug": false,
- "disable_wp_cron": true,
- "cache": true,
- "db_name": "db_12345_mysite",
- "db_user": "USER12345",
- "db_host": "localhost"
}, - "staging": { }
},
}
]Retrieves detailed information about a specific WordPress installation including configuration, associated domains, and staging environment status.
| id required | integer Example: 12345 WordPress installation ID (numeric database ID) |
curl --request GET \ --url 'https://www.lima-city.de/usercp/wordpress/12345' \ --user 'api:YOUR_API_KEY'
{- "id": 12345,
- "path": "mein-wordpress",
- "link_id": "12345",
- "wordpress": {
- "software": "wordpress",
- "version": "6.4.2",
- "config_exists": true,
- "config": {
- "table_prefix": "wp_",
- "debug": false,
- "disable_wp_cron": true,
- "cache": true,
- "db_name": "db_12345_mysite",
- "db_user": "USER12345",
- "db_host": "localhost"
}, - "staging": { }
},
}Retrieves comprehensive information about all installed plugins and themes, including their versions, activation status, and available updates. Also includes WordPress core update information.
Component Status:
active: Component is currently activeinactive: Component is installed but not activeUpdate Status:
none: No update availableavailable: Update is available (update_version field will be present)| id required | integer Example: 12345 WordPress installation ID |
curl --request GET \ --url 'https://www.lima-city.de/usercp/wordpress/12345/components' \ --user 'api:YOUR_API_KEY'
{- "components": {
- "plugins": [
- {
- "name": "akismet",
- "status": "active",
- "update": "none",
- "version": "4.0.8",
- "title": "Akismet Anti-Spam"
}
], - "themes": [
- {
- "name": "twentytwentyfour",
- "status": "active",
- "update": "none",
- "version": "1.0.1",
- "update_version": "1.0.2",
- "title": "Twenty Twenty-Four"
}
], - "core": {
- "version": "6.4.2",
- "update_version": "6.4.3"
}
}
}Queues a WP-CLI task to update specified WordPress components. Only one type of component (plugins, themes, or languages) can be updated per request.
Process:
/wordpress_tasks/{task_id} to check status and resultsValidation Rules:
Error Messages:
action_name: "muss ausgefüllt werden" (must be filled in) - action_name is missing| id required | integer Example: 12345 WordPress installation ID |
Components to update (only one type per request)
| plugins | Array of strings Array of plugin slugs to perform action on |
| themes | Array of strings Array of theme slugs to perform action on |
| languages | Array of strings Array of language codes to perform action on |
{- "plugins": [
- "akismet",
- "wordpress-seo"
]
}{- "status": "ok",
- "object": {
- "task_id": "a1b2c3d4e5"
}
}Queues a WP-CLI task to activate specified plugins or themes. For themes, only one can be active at a time (activating a theme deactivates the current one).
Process:
/wordpress_tasks/{task_id} to check status and resultsValidation Rules:
Error Messages:
action_name: "muss ausgefüllt werden" (must be filled in) - action_name is missing| id required | integer Example: 12345 WordPress installation ID |
Components to activate
| plugins | Array of strings Array of plugin slugs to perform action on |
| themes | Array of strings Array of theme slugs to perform action on |
| languages | Array of strings Array of language codes to perform action on |
{- "plugins": [
- "akismet",
- "wordpress-seo"
], - "themes": [
- "twentytwentyfour"
], - "languages": [
- "de_DE",
- "fr_FR"
]
}{- "status": "ok",
- "object": {
- "task_id": "a1b2c3d4e5"
}
}Queues a WP-CLI task to deactivate specified plugins. Note: Themes cannot be deactivated, only switched to another theme using the activate action.
Process:
/wordpress_tasks/{task_id} to check status and resultsValidation Rules:
Error Messages:
action_name: "muss ausgefüllt werden" (must be filled in) - action_name is missing| id required | integer Example: 12345 WordPress installation ID |
Plugins to deactivate
| plugins | Array of strings Array of plugin slugs to perform action on |
| themes | Array of strings Array of theme slugs to perform action on |
| languages | Array of strings Array of language codes to perform action on |
{- "plugins": [
- "akismet",
- "wordpress-seo"
], - "themes": [
- "twentytwentyfour"
], - "languages": [
- "de_DE",
- "fr_FR"
]
}{- "status": "ok",
- "object": {
- "task_id": "a1b2c3d4e5"
}
}Queues a WP-CLI task to uninstall (delete) specified plugins or themes. This is a destructive operation that removes the component files and data.
Warning: Uninstalling a plugin will:
Process:
/wordpress_tasks/{task_id} to check status and resultsValidation Rules:
Error Messages:
action_name: "muss ausgefüllt werden" (must be filled in) - action_name is missing| id required | integer Example: 12345 WordPress installation ID |
Components to uninstall
| plugins | Array of strings Array of plugin slugs to perform action on |
| themes | Array of strings Array of theme slugs to perform action on |
| languages | Array of strings Array of language codes to perform action on |
{- "plugins": [
- "akismet",
- "wordpress-seo"
], - "themes": [
- "twentytwentyfour"
], - "languages": [
- "de_DE",
- "fr_FR"
]
}{- "status": "ok",
- "object": {
- "task_id": "a1b2c3d4e5"
}
}Queues a WP-CLI task to update WordPress core to the latest available version. This updates the WordPress installation files while preserving themes, plugins, and content.
Process:
/wordpress_tasks/{task_id} to check status and resultsImportant: Always backup before updating WordPress core.
| id required | integer Example: 12345 WordPress installation ID |
curl --request POST \ --url 'https://www.lima-city.de/usercp/wordpress/12345/update' \ --user 'api:YOUR_API_KEY'
{- "status": "ok",
- "object": {
- "task_id": "a1b2c3d4e5"
}
}Creates a single sign-on (SSO) link to log into the WordPress admin panel without a password. This installs the 'WP CLI Login Command Server' plugin if not already present and generates a temporary admin login URL.
| id required | integer Example: 12345 WordPress installation ID |
curl --request POST \ --url 'https://www.lima-city.de/usercp/wordpress/12345/sso_link' \ --user 'api:YOUR_API_KEY'
{ }Retrieves a list of files flagged as malicious or containing security vulnerabilities in this WordPress installation. These files have been detected by security scans.
Note: This endpoint returns HTML/view data rather than JSON API format.
| id required | integer Example: 12345 WordPress installation ID |
curl --request GET \ --url 'https://www.lima-city.de/usercp/wordpress/12345/issues' \ --user 'api:YOUR_API_KEY'
Uploads a WordPress backup archive (Duplicator .zip or All-in-One WP Migration .wpress) for import. The archive is validated and metadata is extracted.
Supported Formats:
Process:
/wordpress/import/{id} endpoints to configure and start importValidation:
Error Messages:
"Das Archiv ist ungültig" (The archive is invalid) - Archive format not recognized or corrupted| file required | string <binary> WordPress backup archive (.zip or .wpress) |
curl --request POST \ --url 'https://www.lima-city.de/usercp/wordpress/upload' \ --user 'api:YOUR_API_KEY'
{- "status": "success",
- "id": 12345,
- "message": "Das Archiv ist ungültig"
}Retrieves details about an uploaded WordPress import including extracted metadata, processing state, and configuration options.
Import States:
uploaded: Archive uploaded and validated, ready to configurerunning: Import is currently in progresssuccessful: Import completed successfullyfailed: Import failed (check logs for details)Note: This endpoint returns HTML/view data for the import configuration form rather than JSON API format.
| importId required | integer Example: 12345 Import record ID from upload response |
curl --request GET \ --url 'https://www.lima-city.de/usercp/wordpress/import/12345' \ --user 'api:YOUR_API_KEY'
Configures and starts the WordPress import process. The uploaded archive is imported into the selected website directory and connected to the selected website.
Process:
Validation Rules:
directory: Required, must not exist unless overwrite_existing_installation is '1'vhost_id: Required, must exist, must not be wildcard domainError Messages:
vhost_id: "existiert nicht" (does not exist) - Website not foundvhost_id: "Haupt-Domain darf keine Wildcard-Domain sein" (Main domain must not be wildcard)overwrite_existing_installation: "das Verzeichnis existiert bereits, bitte bestätige das Überschreiben des Verzeichnis" (directory exists, please confirm overwrite)| importId required | integer Example: 12345 Import record ID from upload response |
| directory required | string Target directory for WordPress installation. Will be normalized using Pathname.cleanpath |
| vhost_id required | integer Virtual host ID to associate with this installation. Must not be a wildcard domain |
| create_cronjob | string Enum: "0" "1" Whether to create a system cron job for wp-cron.php (recommended). Use '1' to enable |
| install_core_updates | string Enum: "0" "1" Whether to install WordPress core updates after import. Use '1' to enable |
| use_memcached_object_cache | string Enum: "0" "1" Whether to enable Memcached object caching. Use '1' to enable |
| overwrite_existing_installation | string Enum: "0" "1" Whether to overwrite if directory already exists. Use '1' to confirm overwrite |
{- "directory": "my-imported-site",
- "vhost_id": 54321,
- "create_cronjob": "1",
- "install_core_updates": "1",
- "use_memcached_object_cache": "1",
- "overwrite_existing_installation": "0"
}{- "status": "ok"
}Retrieves the status and results of a WordPress CLI task. Tasks are created by various WordPress operations (updates, activations, etc.) and execute asynchronously.
Task Statuses:
created: Task has been queued but not yet startedrunning: Task is currently executingrefreshing: Task is refreshing cached datasuccess: Task completed successfullyfailed: Task failed (check output for error details)Note: This endpoint returns HTML/view data rather than JSON API format.
| taskId required | string Example: a1b2c3d4e5 Task ID from task creation response (10 character alphanumeric) |
curl --request GET \ --url 'https://www.lima-city.de/usercp/wordpress_tasks/a1b2c3d4e5' \ --user 'api:YOUR_API_KEY'
WordPress staging API. Create and drop staging copies of your WordPress installation and go live if you are happy with the changes.
Retrieves information about the staging environment for this WordPress installation. Returns staging details if a staging environment exists, or null if no staging has been created.
Staging Environment: A staging environment is a complete copy of your WordPress installation in a separate directory with its own database. It allows you to safely test changes before deploying to production.
Staging Workflow:
POST /wordpress/{id}/start_stagingPOST /wordpress/{id}/go_live, ORPOST /wordpress/{id}/drop_staging| id required | integer Example: 12345 WordPress installation ID |
curl --request GET \ --url 'https://www.lima-city.de/usercp/wordpress/12345/staging' \ --user 'api:YOUR_API_KEY'
{- "staging": { }
}Creates a complete copy of the WordPress installation for safe testing. The process copies the site's files and database contents, then configures a separate staging environment.
What Happens:
Staging Hostname Generation: The staging hostname is generated automatically from the original website hostname.
Validation Rules:
Error Messages:
base: "kann keine verbundene Webseite finden" (cannot find connected website)base: "kann keinen freien Staging-Hostnamen finden" (cannot find free staging hostname)base: "hat keine Konfiguration" (has no configuration)base: "ist bereits mit einer Staging-Umgebung verbunden" (already connected to staging environment)base: "die Datenbank-Konfiguration ist ungültig" (database configuration is invalid)| id required | integer Example: 12345 WordPress installation ID |
Staging configuration options
object | |||
| |||
{- "staging": {
- "update": "1"
}
}{- "status": "ok"
}Replaces the production WordPress installation with the staging version. This is a destructive operation that swaps the staging and production environments.
Warning: This operation is destructive and cannot be undone. Always backup before going live.
After Go-Live:
Validation Rules:
Error Messages:
base: "hat keine aktive Staging-Umgebung" (has no active staging environment)base: "die Staging-Datenbank ist ungültig" (staging database is invalid)base: "der Live-Pfad (path) ist ungültig" (live path is invalid)base: "der Staging-Pfad (path) ist ungültig" (staging path is invalid)| id required | integer Example: 12345 WordPress installation ID |
curl --request POST \ --url 'https://www.lima-city.de/usercp/wordpress/12345/go_live' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Permanently deletes the staging environment. This is a destructive operation that cannot be undone.
Warning: This operation permanently deletes the staging copy and its data.
Validation Rules:
Error Messages:
base: "hat keine aktive Staging-Umgebung" (has no active staging environment)base: "die Staging-Datenbank ist ungültig" (staging database is invalid)base: "der Live-Pfad (path) ist ungültig" (live path is invalid)base: "der Staging-Pfad (path) ist ungültig" (staging path is invalid)| id required | integer Example: 12345 WordPress installation ID |
curl --request POST \ --url 'https://www.lima-city.de/usercp/wordpress/12345/drop_staging' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Manage virtual machines (Cloud VPS and vServer). Control power state, manage resources, create snapshots, and monitor performance.
Retrieve the status and configuration of the user's cloud account. Returns cloud account information including verification requirements if the account exists, or an empty object if cloud services have not been activated.
Cloud Account Overview: lima-city's cloud services allow users to create and manage virtual machines (VPS), with flexible billing options and resource limits. Users must activate cloud services before they can create cloud resources.
Response Details:
cloud_account: {}Verification Requirements:
Depending on account state and payment method, additional verification may be required. Check sms_verification_required, payment_required, and payment_method_verification_required in the response before creating cloud resources.
Resource Limits: When cloud services are activated, default limits are set:
Authorization Requirements:
curl --request GET \ --url 'https://www.lima-city.de/usercp/cloud_account' \ --user 'api:YOUR_API_KEY'
{- "cloud_account": {
- "id": 12345,
- "enabled": true,
- "sms_verification_required": false,
- "payment_required": false,
- "payment_method_verification_required": false
}
}Activate lima-city cloud services for the authenticated user. This creates a cloud account and sets initial resource limits, enabling the user to create virtual machines and other cloud resources.
Activation Process: When activating cloud services, the user must:
Billing Modes:
Prepaid (payment_method: 'prepaid'):
Credit Card (payment_method: 'credit_card'):
payment_required flag)Direct Debit (payment_method: 'direct_debit'):
payment_method_verification_required flag)Resource Limits: Upon activation, the following default limits are set:
Reactivation: If the user previously had cloud services and is reactivating:
Validation Rules:
payment_method: Required, must be 'prepaid', 'credit_card', or 'direct_debit'payment_method_id: Required unless payment_method is 'prepaid'billing_handle_id: Optional, must be valid user handle if providedtos_accepted: Required, must be trueError Messages:
Authorization Requirements:
Cloud account activation parameters
required | object Cloud account activation parameters | ||||||||
| |||||||||
{- "cloud_account": {
- "payment_method": "prepaid",
- "tos_accepted": true
}
}{- "status": "ok"
}List all placement groups owned by the user with their current capacity and status.
What are Placement Groups?
Placement groups enable VM anti-affinity - ensuring that virtual machines in the same group are placed on different physical hypervisors. This provides high availability and fault tolerance by preventing multiple VMs from being affected by a single hardware failure.
Use Cases:
Features:
Capacity Management:
full field indicates if the group has reached capacityremaining field shows how many more VMs can be addedAuthorization:
curl --request GET \ --url 'https://www.lima-city.de/usercp/placement_groups' \ --user 'api:YOUR_API_KEY'
{- "placement_groups": [
- {
- "id": 12345,
- "name": "Production Web Servers",
- "max_size": 5,
- "current_size": 2,
- "full": false,
- "remaining": 3
}, - {
- "id": 12346,
- "name": "Database Cluster",
- "max_size": 5,
- "current_size": 5,
- "full": true,
- "remaining": 0
}, - {
- "id": 12347,
- "name": "API Backends",
- "max_size": 5,
- "current_size": 1,
- "full": false,
- "remaining": 4
}
]
}List all virtual machines (Cloud VPS and vServer) owned by the user with current status information.
Features:
Authorization:
curl --request GET \ --url 'https://www.lima-city.de/usercp/virtual_machines' \ --user 'api:YOUR_API_KEY'
{- "virtual_machines": [
- {
- "id": "vm8x7y9z",
- "type": "cloud-vps",
- "hostname": "myserver.example.com",
- "vcores": 4,
- "memory_gb": 8,
- "ssd_storage_gb": 160,
- "os": "Ubuntu 22.04",
- "included_snapshots": 2,
- "used_snapshots": 1,
- "backup": true,
- "ip_addresses": [
- {
- "address": "185.23.45.67",
- "version": 4,
- "gateway": "185.23.45.1",
- "netmask": "255.255.255.0"
}
], - "traffic": {
- "net_external_in": 5368709120,
- "net_external_out": 10737418240,
- "net_internal_in": 1073741824,
- "net_internal_out": 2147483648,
- "limit": 10995116277760,
- "prorated_limit": 5497558138880
}, - "status": "running",
- "uptime": 86400,
- "cpu_percent": 15.5,
- "host_key_ids": [
- "256bit ECDSA (SHA256): AbCdEfG1234567890"
], - "restore_progress": 45.5,
- "provisioned_before_s": 120,
- "contract": {
- "model_name": "Medium",
- "created_at": "2023-01-15T10:30:00Z",
- "price_per_month": 9.99,
- "next_renewal_price": 29.97,
- "traffic_per_month_gb": 10000,
- "billing_cycle": 3,
- "contract_period": 1,
- "paid_through_date": "2023-04-15",
- "next_renewal_date": "2023-04-16",
- "next_cancellation_date": "2023-04-30",
- "cancelled_at": null,
- "cancellation_received_date": null
}
}
]
}Create a new virtual machine (Cloud VPS or vServer) from an OS template, ISO, or snapshot.
VM Creation Methods:
Process:
Resource Requirements:
Validation Rules:
Error Messages:
Authorization:
required | object Virtual machine creation parameters. Either template_id (for image/iso) or snapshot_id (for snapshot) is required based on template_type | ||||||||||||||||||||
| |||||||||||||||||||||
{- "usercp_create_vm": {
- "hostname": "myserver.example.com",
- "virtual_machine_model_id": 12345,
- "template_type": "image",
- "template_id": 54321,
- "snapshot_id": 67890,
- "ip_assignment": "dual-stack",
- "ssh_key_ids": [
- 111,
- 222
], - "set_root_password": "1",
- "root_password": "MySecurePassword123!",
- "placement_group_id": 88888
}
}{- "virtual_machine": {
- "id": "vm8x7y9z"
}
}Get detailed information about a specific virtual machine including real-time status.
Operational VMs:
Non-Operational VMs:
Always Included:
| id required | string Example: vm8x7y9z Virtual machine UID |
curl --request GET \ --url 'https://www.lima-city.de/usercp/virtual_machines/vm8x7y9z' \ --user 'api:YOUR_API_KEY'
{- "virtual_machine": {
- "id": "vm8x7y9z",
- "type": "cloud-vps",
- "hostname": "myserver.example.com",
- "vcores": 4,
- "memory_gb": 8,
- "ssd_storage_gb": 160,
- "os": "Ubuntu 22.04",
- "included_snapshots": 2,
- "used_snapshots": 1,
- "backup": true,
- "ip_addresses": [
- {
- "address": "185.23.45.67",
- "version": 4,
- "gateway": "185.23.45.1",
- "netmask": "255.255.255.0"
}
], - "traffic": {
- "net_external_in": 5368709120,
- "net_external_out": 10737418240,
- "net_internal_in": 1073741824,
- "net_internal_out": 2147483648,
- "limit": 10995116277760,
- "prorated_limit": 5497558138880
}, - "status": "running",
- "uptime": 86400,
- "cpu_percent": 15.5,
- "host_key_ids": [
- "256bit ECDSA (SHA256): AbCdEfG1234567890"
], - "restore_progress": 45.5,
- "provisioned_before_s": 120,
- "contract": {
- "model_name": "Medium",
- "created_at": "2023-01-15T10:30:00Z",
- "price_per_month": 9.99,
- "next_renewal_price": 29.97,
- "traffic_per_month_gb": 10000,
- "billing_cycle": 3,
- "contract_period": 1,
- "paid_through_date": "2023-04-15",
- "next_renewal_date": "2023-04-16",
- "next_cancellation_date": "2023-04-30",
- "cancelled_at": null,
- "cancellation_received_date": null
}
}
}Update virtual machine hostname and/or automatic backup setting.
Hostname Update:
Backup Setting:
Note: Both parameters are optional. Provide only the settings you want to update.
| id required | string Example: vm8x7y9z Virtual machine UID |
| hostname | string New hostname for the VM. Updates reverse DNS automatically |
| backup | boolean Enable or disable automatic backups |
{- "hostname": "newname.example.com",
- "backup": true
}{- "status": "ok"
}Permanently destroy a Cloud VPS virtual machine. This action is irreversible.
WARNING: This is a destructive operation that permanently deletes the VM and all its data.
Process:
Snapshots:
Restrictions:
Authorization:
| id required | string Example: vm8x7y9z Virtual machine UID |
required | object | ||
| |||
{- "destroy_vm": {
- "destroy_snapshots": "0"
}
}{- "status": "Ok"
}Power on a stopped virtual machine.
Requirements:
Process:
Note: This is a hard power-on, equivalent to pressing the power button on a physical machine.
| id required | string Example: vm8x7y9z Virtual machine UID |
curl --request POST \ --url 'https://www.lima-city.de/usercp/virtual_machines/vm8x7y9z/start' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Immediately power off a running virtual machine without graceful shutdown.
WARNING: This is equivalent to pulling the power cord. Data loss may occur if applications are writing to disk.
Requirements:
Process:
Recommendation: Use the shutdown endpoint for graceful shutdown when possible.
| id required | string Example: vm8x7y9z Virtual machine UID |
curl --request POST \ --url 'https://www.lima-city.de/usercp/virtual_machines/vm8x7y9z/stop' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Gracefully shutdown a running virtual machine via ACPI signal.
Process:
Requirements:
Timeout: If guest OS doesn't respond within timeout period, VM may need to be stopped manually.
Note: This is the recommended way to stop a VM to prevent data corruption.
| id required | string Example: vm8x7y9z Virtual machine UID |
curl --request POST \ --url 'https://www.lima-city.de/usercp/virtual_machines/vm8x7y9z/shutdown' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Immediately reset a running virtual machine without graceful shutdown.
WARNING: This is equivalent to pressing the reset button on a physical machine. Data loss may occur.
Requirements:
Process:
Use Cases:
Recommendation: Use shutdown followed by start for graceful reboot when possible.
| id required | string Example: vm8x7y9z Virtual machine UID |
curl --request POST \ --url 'https://www.lima-city.de/usercp/virtual_machines/vm8x7y9z/reset' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}Rebuild the VM's disk from a fresh OS image template. This reinstalls the operating system.
WARNING: This is a destructive operation that erases all data on the VM's disk.
Process:
Requirements:
SSH Keys:
Validation Rules:
Error Messages:
| id required | string Example: vm8x7y9z Virtual machine UID |
| template_id required | integer ID of the image template to rebuild from |
| ssh_key_ids required | Array of integers Array of SSH key IDs to install. German error: 'muss eine Liste von gültigen SSH-Key-IDs sein' (must be a list of valid SSH key IDs) |
{- "template_id": 54322,
- "ssh_key_ids": [
- 111,
- 222
]
}{- "status": "ok"
}Upgrade VM to a different package with more CPU, RAM, and optionally disk space.
Supported Changes:
Restrictions:
Process:
Validation Rules:
Error Messages:
Billing:
Authorization:
| id required | string Example: vm8x7y9z Virtual machine UID |
required | object Resize VM to a different package. Disk can only grow, not shrink. German error: 'hat zu wenig Speicherplatz' (has too little storage) | ||||
| |||||
{- "usercp_resize_virtual_machine": {
- "virtual_machine_model_id": 12346,
- "resize_disk": "1"
}
}{- "status": "ok"
}Mount a different ISO file in the VM's virtual CD-ROM drive.
Use Cases:
Process:
Requirements:
Boot Order:
Validation:
Error Messages:
| id required | string Example: vm8x7y9z Virtual machine UID |
required | object Change the mounted ISO file. German error: 'ist nicht gültig' (is not valid) | ||
| |||
{- "usercp_cloud_change_iso": {
- "template_id": 54323
}
}{- "status": "ok"
}Change the root user password using QEMU guest agent.
Requirements:
How It Works:
Guest Agent:
Password Requirements:
Security Note: This method is more secure than using VNC console as credentials are not transmitted over VNC protocol.
| id required | string Example: vm8x7y9z Virtual machine UID |
| password required | string New root password. Must meet password strength requirements |
{- "password": "NewSecurePassword456!"
}{- "status": "ok"
}Restore the VM's disk from a previously created snapshot.
WARNING: This is a destructive operation that replaces current disk data with snapshot data.
Process:
Requirements:
Validation Rules:
Error Messages:
Note: VM will be stopped during restore if it's running.
| id required | string Example: vm8x7y9z Virtual machine UID |
| snapshot_id required | integer ID of the snapshot to restore from |
{- "snapshot_id": 67891
}{- "status": "ok"
}Get cancellation date information for a vServer contract.
Response Information:
Contract Period:
Authorization:
| id required | string Example: vs8x7y9z Virtual machine UID (must be vServer type) |
curl --request GET \ --url 'https://www.lima-city.de/usercp/virtual_machines/vs8x7y9z/cancel' \ --user 'api:YOUR_API_KEY'
{- "next_cancellation_date": "2023-04-30",
- "cancelled_at": null,
- "cancellation_received_date": null
}Submit cancellation request for a vServer contract.
Process:
Requirements:
Timeline:
Validation:
Note: Cancellation cannot be undone. VM will be destroyed on the effective date.
| id required | string Example: vs8x7y9z Virtual machine UID (must be vServer type) |
| password required | string User's account password for confirmation |
{- "password": "MyAccountPassword"
}{- "status": "ok"
}Get time-series performance metrics for the virtual machine.
Metrics Included:
Time Ranges:
Data Points:
Use Cases:
| id required | string Example: vm8x7y9z Virtual machine UID |
| timeframe | string Example: timeframe=1d Time range for metrics (e.g., '1h', '6h', '1d', '1w', '1m') |
curl --request GET \ --url 'https://www.lima-city.de/usercp/virtual_machines/vm8x7y9z/graph?timeframe=1d' \ --user 'api:YOUR_API_KEY'
{- "graph": [
- {
- "time": "2023-06-15T14:30:00Z",
- "cpu": 35.5,
- "memory_used": 2147483648,
- "bytes_out": 1073741824,
- "bytes_in": 536870912,
- "disk_read": 268435456,
- "disk_write": 134217728
}
]
}List all snapshots for a specific virtual machine.
Snapshot States:
Filtering:
Ordering: Snapshots are returned in descending order by ID (newest first)
Pagination: Supports pagination via page parameter
| id required | string Example: vm8x7y9z Virtual machine UID |
| filter | string Value: "completed" Filter snapshots by state ('completed' shows only usable snapshots) |
| page | integer Default: 1 Page number for pagination |
curl --request GET \ --url 'https://www.lima-city.de/usercp/virtual_machines/vm8x7y9z/snapshots?filter=completed&page=1' \ --user 'api:YOUR_API_KEY'
[- {
- "id": 67890,
- "name": "Snapshot 2023-06-15T10:30:00Z",
- "state": "completed",
- "size": 10737418240,
}
]Create a new snapshot of the virtual machine's current disk state.
Process:
Requirements:
Snapshot Limits:
Naming:
Validation:
Use Cases:
| id required | string Example: vm8x7y9z Virtual machine UID |
| name | string Optional custom name for the snapshot |
{- "name": "Before upgrade"
}{- "status": "ok",
- "id": 67891
}Delete a virtual machine snapshot.
Process:
Requirements:
Billing:
Note: Deletion is permanent and cannot be undone. Ensure you don't need the snapshot before deleting.
| id required | string Example: vm8x7y9z Virtual machine UID |
| snapshot_id required | integer Example: 67890 Snapshot ID |
curl --request DELETE \ --url 'https://www.lima-city.de/usercp/virtual_machines/vm8x7y9z/snapshots/67890' \ --user 'api:YOUR_API_KEY'
{- "status": "ok"
}