{ "swagger": "2.0", "info": { "description": "Our HTTP [REST API](https:\/\/en.wikipedia.org\/wiki\/Representational_state_transfer) allows you to manage vital details of your account and services in client portal. [JSON](http:\/\/www.json.org\/) is used for all API returns.", "version": "4.202507025", "title": "PIO Hosting GmbH User API" }, "host": "cp.pio.hosting", "basePath": "\/api", "tags": [ { "name": "Clientarea" }, { "name": "Billing" }, { "name": "Services" }, { "name": "Cart" } ], "schemes": [ "https" ], "paths": { "\/login": { "post": { "tags": [ "Clientarea" ], "summary": "Login", "description": "Generate new authorization token", "operationId": "getToken", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "username", "type": "string", "in": "query", "description": "Your acount email address " }, { "name": "password", "type": "string", "in": "query", "description": "Account password " } ], "responses": { "200": { "description": "`Success`" } } } }, "\/logout": { "post": { "tags": [ "Clientarea" ], "summary": "Logout", "description": "Invalidate authorization token", "operationId": "dropToken", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [], "responses": { "200": { "description": "`Success`" } } } }, "\/token": { "post": { "tags": [ "Clientarea" ], "summary": "Refresh Token", "description": "Generate new authorization token using refresh token", "operationId": "refreshToken", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "refresh_token", "type": "string", "in": "query", "description": "Refresh token previously obtained from `POST \/login`" } ], "responses": { "200": { "description": "`Success`" } } } }, "\/revoke": { "post": { "tags": [ "Clientarea" ], "summary": "Revoke Token", "description": "Invalidate authorization and refresh token.\nPass refresh token or call this method with valid access token", "operationId": "revokeToken", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "refresh_token", "type": "string", "in": "query" } ], "responses": { "200": { "description": "`Success`" } } } }, "\/balance": { "get": { "tags": [ "Billing" ], "summary": "Account balance", "description": "Get current account balance(unpaid invoices total), account credit", "operationId": "getBalance", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [], "responses": { "200": { "description": "```json\n\r{\n {\n \"success\": true,\n \"details\": {\n \"currency\": \"USD\",\n \"acc_balance\": \"123456.55\",\n \"acc_credit\": \"0.00\"\n }\n }\n}" } } } }, "\/invoice": { "get": { "tags": [ "Billing" ], "summary": "List Invoices", "description": "List all invoices under my account", "operationId": "getInvoices", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [], "responses": { "200": { "description": "```json\n\r{\n \"invoices\": [\n {\n \"id\": \"308976\",\n \"date\": \"2016-12-30\",\n \"dateorig\": \"2016-12-30\",\n \"duedate\": \"2017-01-06\",\n \"paybefore\": \"2017-01-06\",\n \"total\": \"19.65\",\n \"datepaid\": \"2016-12-30 12:40:47\",\n \"status\": \"Paid\",\n \"merge_id\": null,\n \"number\": \"2016\\\/12\\\/1\",\n \"currency\": \"USD\"\n }\n ]\n}" } } } }, "\/invoice\/{id}": { "get": { "tags": [ "Billing" ], "summary": "Invoice Details", "description": "Get invoice details", "operationId": "getInvoiceDetails", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "id", "type": "string", "in": "path", "required": true } ], "responses": { "200": { "description": "```json\n\r{\n \"invoice\": {\n \"id\": \"308976\",\n \"status\": \"Paid\",\n \"date\": \"2016-12-30\",\n \"duedate\": \"2017-01-06\",\n \"paybefore\": \"2017-01-06\",\n \"datepaid\": \"2016-12-30 12:40:47\",\n \"subtotal\": 16.24,\n \"credit\": 0,\n \"tax\": 3.41,\n \"taxrate\": 21,\n \"tax2\": 0,\n \"taxrate2\": 0,\n \"taxexempt\": \"0\",\n \"total\": 19.65,\n \"rate\": 1,\n \"rate2\": 0,\n \"rate3\": 1,\n \"notes\": \"\",\n \"items\": [\n {\n \"id\": \"12305\",\n \"invoice_id\": \"308976\",\n \"type\": \"Other\",\n \"item_id\": \"0\",\n \"description\": \"Example Service\",\n \"amount\": \"15.00\",\n \"taxed\": \"1\",\n \"qty\": \"1.00\",\n \"linetotal\": \"15.00\"\n },\n {\n \"id\": \"12309\",\n \"invoice_id\": \"308976\",\n \"type\": \"Other\",\n \"item_id\": \"-2\",\n \"description\": \"PayPal Payment Fee\",\n \"amount\": \"1.24\",\n \"taxed\": \"1\",\n \"qty\": \"1.00\",\n \"linetotal\": \"1.24\"\n }\n ],\n \"client\": {\n \"id\": \"26\",\n \"email\": \"api@example.com\",\n \"firstname\": \"Joe\",\n \"lastname\": \"Doe\",\n \"companyname\": \"\",\n \"address1\": \"Pretty View Lane\",\n \"address2\": \"3194\",\n \"city\": \"Santa Rosa\",\n \"state\": \"California\",\n \"postcode\": \"95401\",\n \"country\": \"US\",\n \"phonenumber\": \"+1.24123123\"\n },\n \"number\": \"2016\\\/12\\\/1\",\n \"currency\": \"USD\"\n }\n}" } } } }, "\/invoice\/{id}\/credit": { "post": { "tags": [ "Billing" ], "summary": "Apply credit", "description": "Apply account credit to invoice", "operationId": "applyCreditToInvoice", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "amount", "type": "number", "in": "query", "description": "Optional credit amount, when no value is specified maximum amount to fully pay the invoice will be used" }, { "name": "id", "type": "string", "in": "path", "required": true } ], "responses": { "200": { "description": "`Success`" } } } }, "\/service": { "get": { "tags": [ "Services" ], "summary": "List services", "description": "List all services under your account", "operationId": "service", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [], "responses": { "200": { "description": "```json\n\r{\n \"services\": [\n {\n \"id\": \"301\",\n \"domain\": \"examplename.com\",\n \"total\": \"9.99\",\n \"status\": \"Pending\",\n \"billingcycle\": \"Monthly\",\n \"next_due\": \"2017-12-30\",\n \"category\": \"Hosting\",\n \"category_url\": \"hosting\",\n \"name\": \"Starter Hosting\"\n }\n ]\n}" } } } }, "\/service\/{id}": { "get": { "tags": [ "Services" ], "summary": "Service details", "description": "Return details for service `@id`", "operationId": "serviceDetails", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "id", "type": "integer", "in": "path", "description": "Service id", "required": true } ], "responses": { "200": { "description": "```json\n\r{\n \"service\": {\n \"id\": \"301\",\n \"date_created\": \"2016-12-30\",\n \"domain\": \"examplename.com\",\n \"firstpayment\": \"9.99\",\n \"total\": \"9.99\",\n \"billingcycle\": \"Monthly\",\n \"next_due\": \"2017-12-30\",\n \"next_invoice\": \"2017-01-27\",\n \"status\": \"Active\",\n \"label\": \"\",\n \"username\": \"examplen\",\n \"password\": \"pdtzc\",\n \"name\": \"Starter Hosting\"\n }\n}" } } } }, "\/service\/{id}\/methods": { "get": { "tags": [ "Services" ], "summary": "List service methods", "description": "List methods available for service", "operationId": "serviceMethods", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "id", "type": "string", "in": "path", "required": true } ], "responses": { "200": { "description": "```json\n\r{\n \"methods\": [\n {\n \"name\": \"Upgrade Request\",\n \"method\": \"POST\",\n \"route\": \"\\\/service\\\/@id\\\/upgrade\"\n },\n {\n \"name\": \"Upgrade Options\",\n \"method\": \"GET\",\n \"route\": \"\\\/service\\\/@id\\\/upgrade\"\n },\n {\n \"name\": \"Change service label\",\n \"method\": \"POST\",\n \"route\": \"\\\/service\\\/@id\\\/label\"\n },\n {\n \"name\": \"Service label\",\n \"method\": \"GET\",\n \"route\": \"\\\/service\\\/@id\\\/label\"\n },\n {\n \"name\": \"Cancel Service\",\n \"method\": \"POST\",\n \"route\": \"\\\/service\\\/@id\\\/cancel\"\n }\n ]\n}" } } } }, "\/service\/{id}\/upgrade": { "get": { "tags": [ "Services" ], "summary": "Upgrade Options", "description": "List upgrade options", "operationId": "upgrade", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "id", "type": "string", "in": "path", "required": true } ], "responses": { "200": { "description": "```json\n\r{\n \"resources\": [\n {\n \"id\": 1557,\n \"name\": \"Bandwidth\",\n \"type\": \"select\",\n \"items\": [\n {\n \"id\": \"9953\",\n \"name\": \"100 GB\",\n \"price\": 1,\n \"setup_price\": 0,\n \"selected\": true\n },\n {\n \"id\": \"10103\",\n \"name\": \"500 GB\",\n \"price\": 5,\n \"setup_price\": 0,\n \"selected\": false\n },\n {\n \"id\": \"10104\",\n \"name\": \"1 TB\",\n \"price\": 10,\n \"setup_price\": 0,\n \"selected\": false\n }\n ]\n }\n ],\n \"package\": []\n}" } } }, "post": { "tags": [ "Services" ], "summary": "Upgrade Request", "description": "Estimate or request upgrade\n\n```json\n\/\/ Format of ''resources'' paremeter\n{\n \"resource_id\" : \"qty_value\", \/\/ sliders & qty fields\n \"resource_id\" : \"item_id\", \/\/ dropdown & radio fields\n \"resource_id\" : {\n \"item_id\": \"qty_value\" \/\/ dropdown with qty field\n }\n}\n```", "operationId": "upgrade_test", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "id", "type": "integer", "in": "path", "description": "Service id", "required": true }, { "name": "resources", "type": "array", "in": "query", "description": "array with resource values", "items": { "type": "string" } }, { "name": "package", "type": "integer", "in": "query", "description": "New package id, optonal when upgrading resources" }, { "name": "cycle", "type": "string", "in": "query", "description": "New billing cycle, optonal when upgrading resources" }, { "name": "send", "type": "boolean", "in": "query", "description": "Set to true when you want to send your upgrade request" } ], "responses": { "200": { "description": "`Success`" } } } }, "\/service\/{id}\/cancel": { "post": { "tags": [ "Services" ], "summary": "Cancel Service", "description": "Request service cancellation", "operationId": "service_cancel", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "id", "type": "integer", "in": "path", "description": "Service id", "required": true }, { "name": "immediate", "type": "string", "in": "query", "description": "set to false<\/code> to terminate service at the end of billing date, true<\/code> - terminate immediately" }, { "name": "reason", "type": "string", "in": "query", "description": "Reason for this request" } ], "responses": { "200": { "description": "`Success`" } } } }, "\/service\/{id}\/label": { "get": { "tags": [ "Services" ], "summary": "Service label", "description": "Show current service label", "operationId": "service_get_label", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "id", "type": "integer", "in": "path", "description": "Service id", "required": true } ], "responses": { "200": { "description": "```json\n\r{\n \"label\": \"example\"\n}" } } }, "post": { "tags": [ "Services" ], "summary": "Change service label", "description": "Set new custom label to identify this service", "operationId": "service_set_label", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "id", "type": "integer", "in": "path", "description": "Service id", "required": true }, { "name": "label", "type": "string", "in": "query", "description": "New label" } ], "responses": { "200": { "description": "`Success`" } } } }, "\/category": { "get": { "tags": [ "Cart" ], "summary": "List product categories", "description": "Return a list of product categories.", "operationId": "cart_categories", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [], "responses": { "200": { "description": "```json\n\r{\n \"categories\": [\n {\n \"id\": \"10\",\n \"name\": \"Hosting\",\n \"description\": \"\",\n \"slug\": \"hosting\"\n },\n {\n \"id\": \"6\",\n \"name\": \"Domains\",\n \"description\": \"\",\n \"slug\": \"domains\"\n },\n {\n \"id\": \"16\",\n \"name\": \"Dedicated\",\n \"description\": \"\",\n \"slug\": \"dedicated\"\n }\n ]\n}" } } } }, "\/category\/{category_id}\/product": { "get": { "tags": [ "Cart" ], "summary": "List products in category", "description": "Return a list of product available for purchase under requested category", "operationId": "cart_products", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "category_id", "type": "integer", "in": "path", "description": "Category ID", "required": true } ], "responses": { "200": { "description": "```json\n\r{\n \"products\": [\n {\n \"id\": \"333\",\n \"type\": \"1\",\n \"name\": \"Starter Hosting\",\n \"stock\": false,\n \"paytype\": \"Regular\",\n \"description\": \"Disk:10GB
Memory:2GB
MySql:10 DB
Email:100 Users
\",\n \"qty\": \"0\",\n \"tags\": [\n\n ],\n \"periods\": [\n {\n \"title\": \"m\",\n \"value\": \"m\",\n \"price\": 9.99,\n \"setup\": 0,\n \"selected\": true\n },\n {\n \"title\": \"a\",\n \"value\": \"a\",\n \"price\": 109.89,\n \"setup\": 0,\n \"selected\": false\n },\n {\n \"title\": \"b\",\n \"value\": \"b\",\n \"price\": 199.8,\n \"setup\": 0,\n \"selected\": false\n },\n {\n \"title\": \"t\",\n \"value\": \"t\",\n \"price\": 299.7,\n \"setup\": 0,\n \"selected\": false\n }\n ]\n },\n (...)\n ]\n}" } } } }, "\/order\/{product_id}": { "get": { "tags": [ "Cart" ], "summary": "Get product configuration details", "description": "Return product details with form configuration, addons and subproducts if available.", "operationId": "cart_product", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "product_id", "type": "integer", "in": "path", "description": "Product ID", "required": true } ], "responses": { "200": { "description": "```json\n\r{\n \"product\": {\n \"id\": \"333\",\n \"category_name\": \"Hosting\",\n \"category_id\": \"49\",\n \"name\": \"Starter Hosting\",\n \"price\": 9.99,\n \"recurring\": \"m\",\n \"setup\": 0,\n \"config\": {\n \"product\": [\n {\n \"type\": \"select\",\n \"title\": \"pickcycle\",\n \"id\": \"cycle\",\n \"name\": \"cycle\",\n \"items\": [\n {\n \"title\": \"m\",\n \"value\": \"m\",\n \"price\": 9.99,\n \"setup\": 0,\n \"selected\": true\n },\n {\n \"title\": \"a\",\n \"value\": \"a\",\n \"price\": 109.89,\n \"setup\": 0,\n \"selected\": false\n },\n {\n \"title\": \"b\",\n \"value\": \"b\",\n \"price\": 199.8,\n \"setup\": 0,\n \"selected\": false\n },\n {\n \"title\": \"t\",\n \"value\": \"t\",\n \"price\": 299.7,\n \"setup\": 0,\n \"selected\": false\n }\n ],\n \"value\": \"m\",\n \"price\": 9.99,\n \"setup\": 0\n },\n {\n \"type\": \"input\",\n \"title\": \"domain\",\n \"id\": \"domain\",\n \"name\": \"domain\",\n \"value\": null\n }\n ],\n \"forms\": [\n {\n \"type\": \"select\",\n \"title\": \"Disk Size\",\n \"id\": \"1618\",\n \"firstItemId\": 10330,\n \"description\": \"\",\n \"name\": \"custom[1618]\",\n \"required\": false,\n \"multiple\": false,\n \"config\": {\n \"conditionals\": []\n },\n \"value\": [],\n \"textvalue\": [],\n \"price\": 0,\n \"recurring_price\": 0,\n \"setup\": 0,\n \"prorata_date\": null,\n \"items\": [\n {\n \"title\": \"512MB\",\n \"value\": 1,\n \"id\": 10330,\n \"price\": 0,\n \"setup\": 0,\n \"selected\": false\n },\n {\n \"title\": \"1GB\",\n \"value\": 1,\n \"id\": 10331,\n \"price\": 0,\n \"setup\": 0,\n \"selected\": false\n },\n {\n \"title\": \"2GB\",\n \"value\": 1,\n \"id\": 10332,\n \"price\": 0,\n \"setup\": 0,\n \"selected\": false\n }\n ]\n },\n (...)\n ],\n \"addons\": [\n {\n \"type\": \"subitem\",\n \"title\": \"Cpanel2: Add Extra IP\",\n \"id\": \"31\",\n \"value\": null,\n \"description\": \"Automatically adds IP address to account\",\n \"config\": [\n {\n \"type\": \"checkbox\",\n \"title\": \"add\",\n \"name\": \"addon[31]\",\n \"checked\": false\n },\n {\n \"type\": \"select\",\n \"title\": \"billingcycle\",\n \"name\": \"addon_cycles[31]\",\n \"items\": [\n {\n \"title\": \"m\",\n \"value\": \"m\",\n \"price\": 5,\n \"setup\": 0,\n \"selected\": true\n },\n {\n \"title\": \"q\",\n \"value\": \"q\",\n \"price\": 20,\n \"setup\": 0,\n \"selected\": false\n },\n {\n \"title\": \"a\",\n \"value\": \"a\",\n \"price\": 50,\n \"setup\": 0,\n \"selected\": false\n }\n ]\n }\n ],\n \"price\": 0,\n \"recurring_price\": 0,\n \"setup\": 0,\n \"prorata_date\": null\n },\n (...)\n ],\n \"subproducts\": []\n },\n \"recurring_price\": 9.99,\n \"prorata_date\": null\n }\n}" } } }, "post": { "tags": [ "Cart" ], "summary": "Order new service", "description": "Create and submit new order for selected product.\n\nTo get available cycle and configuration options lookup product details\nusing `GET \/order\/@product_id`", "operationId": "cart_order", "consumes": [ "application\/json" ], "produces": [ "application\/json" ], "parameters": [ { "name": "product_id", "type": "integer", "in": "path", "description": "Product ID ", "required": true }, { "name": "domain", "type": "string", "in": "query", "description": "Domain name, ie. example.com, may be optional" }, { "name": "cycle", "type": "string", "in": "query", "description": "Billing period symbol" }, { "name": "pay_method", "type": "integer", "in": "query", "description": "Payment method ID" }, { "name": "custom", "type": "array", "in": "query", "description": "Additional options data available for sop products", "items": { "type": "string" } }, { "name": "promocode", "type": "string", "in": "query", "description": "Promotion code" } ], "responses": { "200": { "description": "`Success`" } } } } }, "securityDefinitions": { "http": { "type": "basic" } }, "definitions": { "Clientarea": { "type": "object", "properties": { "username": { "type": "string", "description": "Your acount email address " }, "password": { "type": "string", "description": "Account password " }, "refresh_token": { "type": "string" } } }, "Billing": { "type": "object", "properties": { "amount": { "type": "number", "description": "Optional credit amount, when no value is specified maximum amount to fully pay the invoice will be used" } } }, "Services": { "type": "object", "properties": { "id": { "type": "integer", "description": "Service id" }, "resources": { "type": "array", "items": { "type": "string" }, "description": "array with resource values" }, "package": { "type": "integer", "description": "New package id, optonal when upgrading resources" }, "cycle": { "type": "string", "description": "New billing cycle, optonal when upgrading resources" }, "send": { "type": "boolean", "description": "Set to true when you want to send your upgrade request" }, "immediate": { "type": "string", "description": "set to false<\/code> to terminate service at the end of billing date, true<\/code> - terminate immediately" }, "reason": { "type": "string", "description": "Reason for this request" }, "label": { "type": "string", "description": "New label" } } }, "Cart": { "type": "object", "properties": { "category_id": { "type": "integer", "description": "Category ID" }, "product_id": { "type": "integer", "description": "Product ID " }, "domain": { "type": "string", "description": "Domain name, ie. example.com, may be optional" }, "cycle": { "type": "string", "description": "Billing period symbol" }, "pay_method": { "type": "integer", "description": "Payment method ID" }, "custom": { "type": "array", "items": { "type": "string" }, "description": "Additional options data available for sop products" }, "promocode": { "type": "string", "description": "Promotion code" } } } }, "externalDocs": { "description": "Find out more about UserAPI", "url": "https:\/\/cp.pio.hosting\/?cmd=userapi" } }