OpenAPI Specification
47 documented path(s).
{
"openapi": "3.1.0",
"info": {
"title": "KMD Hub Public API",
"version": "v1",
"description": "The apikey-gated Developer Platform surface, the public product catalog, and the customer-token-gated self-service surface. Every response shares one envelope: {success, data, error, meta}."
},
"servers": [
{
"url": "https://hub.kwesimooredigital.com/api/v1",
"description": "v1 (current)"
}
],
"components": {
"securitySchemes": {
"apiKey": {
"type": "http",
"scheme": "bearer",
"description": "A Developer Platform API key, issued to an Application."
},
"customerToken": {
"type": "http",
"scheme": "bearer",
"description": "A customer's personal API token (Sanctum), scoped to one or more of: `licenses.read`, `products.read`, `downloads.read`, `orders.read`, `billing.read`, `support.read`, `activity.read`. Issued from the customer portal at /account/tokens. Grants read-only access to that customer's own data only."
}
}
},
"paths": {
"/products": {
"get": {
"operationId": "api.products.index",
"tags": [
"Products"
],
"parameters": [],
"description": "No API key required.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"description": {
"type": "string"
},
"status": {
"type": "string"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/products/{product}": {
"get": {
"operationId": "api.products.show",
"tags": [
"Products"
],
"parameters": [
{
"name": "product",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"description": "No API key required.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"description": {
"type": "string"
},
"status": {
"type": "string"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/products/{product}/releases": {
"get": {
"operationId": "api.products.releases.index",
"tags": [
"Products"
],
"parameters": [
{
"name": "product",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"description": "No API key required.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"version": {
"type": "string"
},
"channel": {
"type": "string"
},
"changelog": {
"type": "string"
},
"minimum_php_version": {
"type": "string"
},
"minimum_wp_version": {
"type": "string"
},
"published_at": {
"type": "string",
"format": "date-time"
},
"checksum_sha256": {
"type": "string"
},
"filesize_bytes": {
"type": "integer"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/products/{product}/latest-release": {
"get": {
"operationId": "api.products.latest-release",
"tags": [
"Products"
],
"parameters": [
{
"name": "product",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"description": "No API key required.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"version": {
"type": "string"
},
"channel": {
"type": "string"
},
"changelog": {
"type": "string"
},
"minimum_php_version": {
"type": "string"
},
"minimum_wp_version": {
"type": "string"
},
"published_at": {
"type": "string",
"format": "date-time"
},
"checksum_sha256": {
"type": "string"
},
"filesize_bytes": {
"type": "integer"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/products/{product}/download/{release}": {
"get": {
"operationId": "api.products.download",
"tags": [
"Products"
],
"parameters": [
{
"name": "product",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "release",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"description": "No API key required.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object"
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/licenses": {
"get": {
"operationId": "api.licenses.index",
"tags": [
"Licenses"
],
"parameters": [],
"security": [
{
"apiKey": [
"licenses.read"
]
}
],
"description": "Requires the `licenses.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"license_key": {
"type": "string"
},
"product": {
"type": "string"
},
"type": {
"type": "string"
},
"status": {
"type": "string"
},
"max_activations": {
"type": "integer"
},
"activation_count": {
"type": "integer"
},
"expires_at": {
"type": "string",
"nullable": true
},
"support_expires_at": {
"type": "string",
"nullable": true
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/licenses/activate": {
"post": {
"operationId": "api.licenses.activate",
"tags": [
"Licenses"
],
"parameters": [],
"description": "No API key required.",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"license_key",
"product",
"domain",
"site_url"
],
"properties": {
"license_key": {
"type": "string"
},
"product": {
"type": "string"
},
"domain": {
"type": "string",
"maxLength": 255
},
"site_url": {
"type": "string",
"format": "uri",
"maxLength": 255
},
"wordpress_version": {
"type": "string",
"nullable": true,
"maxLength": 20
},
"php_version": {
"type": "string",
"nullable": true,
"maxLength": 20
},
"plugin_version": {
"type": "string",
"nullable": true,
"maxLength": 20
},
"site_name": {
"type": "string",
"nullable": true,
"maxLength": 255
},
"product_secret": {
"type": "string",
"nullable": true
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"domain": {
"type": "string"
},
"site_url": {
"type": "string"
},
"site_name": {
"type": "string",
"nullable": true
},
"wordpress_version": {
"type": "string"
},
"php_version": {
"type": "string"
},
"plugin_version": {
"type": "string"
},
"status": {
"type": "string"
},
"activated_at": {
"type": "string",
"format": "date-time"
},
"last_seen_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/licenses/deactivate": {
"post": {
"operationId": "api.licenses.deactivate",
"tags": [
"Licenses"
],
"parameters": [],
"description": "No API key required.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"domain": {
"type": "string"
},
"deactivated": {
"type": "boolean"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/licenses/validate": {
"post": {
"operationId": "api.licenses.validate",
"tags": [
"Licenses"
],
"parameters": [],
"description": "No API key required.",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"license_key",
"product",
"domain"
],
"properties": {
"license_key": {
"type": "string"
},
"product": {
"type": "string"
},
"domain": {
"type": "string",
"maxLength": 255
},
"plugin_version": {
"type": "string",
"nullable": true,
"maxLength": 20
},
"product_secret": {
"type": "string",
"nullable": true
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"valid": {
"type": "boolean"
},
"code": {
"type": "string",
"nullable": true
},
"message": {
"type": "string",
"nullable": true
},
"type": {
"type": "string"
},
"status": {
"type": "string"
},
"expires_at": {
"type": "string",
"nullable": true
},
"support_expires_at": {
"type": "string",
"nullable": true
},
"support_expired": {
"type": "boolean"
},
"activations_used": {
"type": "integer"
},
"activations_limit": {
"type": "integer"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/licenses/{license}": {
"get": {
"operationId": "api.licenses.show",
"tags": [
"Licenses"
],
"parameters": [
{
"name": "license",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"description": "No API key required.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"license_key": {
"type": "string"
},
"product": {
"type": "string"
},
"type": {
"type": "string"
},
"status": {
"type": "string"
},
"max_activations": {
"type": "integer"
},
"activation_count": {
"type": "integer"
},
"expires_at": {
"type": "string",
"nullable": true
},
"support_expires_at": {
"type": "string",
"nullable": true
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/licenses/{license}/activations": {
"get": {
"operationId": "api.licenses.activations",
"tags": [
"Licenses"
],
"parameters": [
{
"name": "license",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"description": "No API key required.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"domain": {
"type": "string"
},
"site_url": {
"type": "string"
},
"site_name": {
"type": "string",
"nullable": true
},
"wordpress_version": {
"type": "string"
},
"php_version": {
"type": "string"
},
"plugin_version": {
"type": "string"
},
"status": {
"type": "string"
},
"activated_at": {
"type": "string",
"format": "date-time"
},
"last_seen_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customers": {
"get": {
"operationId": "api.customers.index",
"tags": [
"Customers"
],
"parameters": [],
"security": [
{
"apiKey": [
"customers.read"
]
}
],
"description": "Requires the `customers.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"company": {
"type": "string",
"nullable": true
},
"status": {
"type": "string"
},
"licenses_count": {
"type": "integer"
},
"orders_count": {
"type": "integer"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customers/{customer}": {
"get": {
"operationId": "api.customers.show",
"tags": [
"Customers"
],
"parameters": [
{
"name": "customer",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"apiKey": [
"customers.read"
]
}
],
"description": "Requires the `customers.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"company": {
"type": "string",
"nullable": true
},
"status": {
"type": "string"
},
"licenses_count": {
"type": "integer"
},
"orders_count": {
"type": "integer"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customers/{customer}/notifications": {
"get": {
"operationId": "api.customers.notifications.index",
"tags": [
"Customers"
],
"parameters": [
{
"name": "customer",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"apiKey": [
"notifications.read"
]
}
],
"description": "Requires the `notifications.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"type": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"license_key": {
"type": "string"
}
}
},
"read_at": {
"type": "string",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/orders": {
"get": {
"operationId": "api.orders.index",
"tags": [
"Orders"
],
"parameters": [],
"security": [
{
"apiKey": [
"orders.read"
]
}
],
"description": "Requires the `orders.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"order_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"product": {
"type": "string"
},
"price_name": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"currency": {
"type": "string"
},
"subtotal": {
"type": "integer"
},
"discount": {
"type": "integer"
},
"tax": {
"type": "integer"
},
"total": {
"type": "integer"
},
"payment_provider": {
"type": "string"
},
"status": {
"type": "string"
},
"invoice_number": {
"type": "string",
"nullable": true
},
"paid_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/orders/{order}": {
"get": {
"operationId": "api.orders.show",
"tags": [
"Orders"
],
"parameters": [
{
"name": "order",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"apiKey": [
"orders.read"
]
}
],
"description": "Requires the `orders.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"order_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"product": {
"type": "string"
},
"price_name": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"currency": {
"type": "string"
},
"subtotal": {
"type": "integer"
},
"discount": {
"type": "integer"
},
"tax": {
"type": "integer"
},
"total": {
"type": "integer"
},
"payment_provider": {
"type": "string"
},
"status": {
"type": "string"
},
"invoice_number": {
"type": "string",
"nullable": true
},
"paid_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/invoices": {
"get": {
"operationId": "api.invoices.index",
"tags": [
"Invoices"
],
"parameters": [],
"security": [
{
"apiKey": [
"billing.read"
]
}
],
"description": "Requires the `billing.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"invoice_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"product_name": {
"type": "string"
},
"product_version": {
"type": "string"
},
"license_key": {
"type": "string",
"nullable": true
},
"payment_provider": {
"type": "string"
},
"currency": {
"type": "string"
},
"subtotal": {
"type": "integer"
},
"discount": {
"type": "integer"
},
"tax": {
"type": "integer"
},
"total": {
"type": "integer"
},
"issued_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/invoices/{invoice}": {
"get": {
"operationId": "api.invoices.show",
"tags": [
"Invoices"
],
"parameters": [
{
"name": "invoice",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"apiKey": [
"billing.read"
]
}
],
"description": "Requires the `billing.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"invoice_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"product_name": {
"type": "string"
},
"product_version": {
"type": "string"
},
"license_key": {
"type": "string",
"nullable": true
},
"payment_provider": {
"type": "string"
},
"currency": {
"type": "string"
},
"subtotal": {
"type": "integer"
},
"discount": {
"type": "integer"
},
"tax": {
"type": "integer"
},
"total": {
"type": "integer"
},
"issued_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/subscriptions": {
"get": {
"operationId": "api.subscriptions.index",
"tags": [
"Subscriptions"
],
"parameters": [],
"security": [
{
"apiKey": [
"billing.read"
]
}
],
"description": "Requires the `billing.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"product": {
"type": "string"
},
"price_name": {
"type": "string"
},
"status": {
"type": "string"
},
"renews_at": {
"type": "string",
"format": "date-time"
},
"ends_at": {
"type": "string",
"nullable": true
},
"cancelled_at": {
"type": "string",
"nullable": true
},
"trial_ends_at": {
"type": "string",
"nullable": true
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/subscriptions/{subscription}": {
"get": {
"operationId": "api.subscriptions.show",
"tags": [
"Subscriptions"
],
"parameters": [
{
"name": "subscription",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"apiKey": [
"billing.read"
]
}
],
"description": "Requires the `billing.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"product": {
"type": "string"
},
"price_name": {
"type": "string"
},
"status": {
"type": "string"
},
"renews_at": {
"type": "string",
"format": "date-time"
},
"ends_at": {
"type": "string",
"nullable": true
},
"cancelled_at": {
"type": "string",
"nullable": true
},
"trial_ends_at": {
"type": "string",
"nullable": true
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/downloads": {
"get": {
"operationId": "api.downloads.index",
"tags": [
"Downloads"
],
"parameters": [],
"security": [
{
"apiKey": [
"downloads.read"
]
}
],
"description": "Requires the `downloads.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"product": {
"type": "string"
},
"version": {
"type": "string"
},
"downloaded_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/downloads/{download}": {
"get": {
"operationId": "api.downloads.show",
"tags": [
"Downloads"
],
"parameters": [
{
"name": "download",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"apiKey": [
"downloads.read"
]
}
],
"description": "Requires the `downloads.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"product": {
"type": "string"
},
"version": {
"type": "string"
},
"downloaded_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/support/tickets": {
"get": {
"operationId": "api.support.tickets.index",
"tags": [
"Support"
],
"parameters": [],
"security": [
{
"apiKey": [
"support.read"
]
}
],
"description": "Requires the `support.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"ticket_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"subject": {
"type": "string"
},
"category": {
"type": "string"
},
"status": {
"type": "string"
},
"priority": {
"type": "string"
},
"product": {
"type": "string",
"nullable": true
},
"assigned_agent": {
"type": "string",
"nullable": true
},
"messages": {
"type": "string"
},
"first_responded_at": {
"type": "string",
"nullable": true
},
"resolved_at": {
"type": "string",
"nullable": true
},
"closed_at": {
"type": "string",
"nullable": true
},
"last_reply_at": {
"type": "string",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/support/tickets/{ticket}": {
"get": {
"operationId": "api.support.tickets.show",
"tags": [
"Support"
],
"parameters": [
{
"name": "ticket",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"apiKey": [
"support.read"
]
}
],
"description": "Requires the `support.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"ticket_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"subject": {
"type": "string"
},
"category": {
"type": "string"
},
"status": {
"type": "string"
},
"priority": {
"type": "string"
},
"product": {
"type": "string",
"nullable": true
},
"assigned_agent": {
"type": "string",
"nullable": true
},
"messages": {
"type": "string"
},
"first_responded_at": {
"type": "string",
"nullable": true
},
"resolved_at": {
"type": "string",
"nullable": true
},
"closed_at": {
"type": "string",
"nullable": true
},
"last_reply_at": {
"type": "string",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/activity-logs": {
"get": {
"operationId": "api.activity-logs.index",
"tags": [
"Activity Logs"
],
"parameters": [],
"security": [
{
"apiKey": [
"activity.read"
]
}
],
"description": "Requires the `activity.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"action": {
"type": "string"
},
"description": {
"type": "string"
},
"properties": {
"type": "array",
"items": {
"type": "string"
}
},
"subject": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"id": {
"type": "integer"
}
}
},
"causer": {
"type": "string",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/settings": {
"get": {
"operationId": "api.settings.index",
"tags": [
"Settings"
],
"parameters": [],
"security": [
{
"apiKey": [
"settings.read"
]
}
],
"description": "Requires the `settings.read` API key scope.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
},
"type": {
"type": "string"
},
"group": {
"type": "string"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer": {
"get": {
"operationId": "api.customer.show",
"tags": [
"Account"
],
"parameters": [],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"company": {
"type": "string",
"nullable": true
},
"avatar_url": {
"type": "string",
"nullable": true
},
"country": {
"type": "string",
"nullable": true
},
"timezone": {
"type": "string",
"nullable": true
},
"preferred_language": {
"type": "string"
},
"email_verified": {
"type": "boolean"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/licenses": {
"get": {
"operationId": "api.customer.licenses",
"tags": [
"Account"
],
"parameters": [],
"security": [
{
"customerToken": [
"licenses.read"
]
}
],
"description": "Requires a customer token with the `licenses.read` ability.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"license_key": {
"type": "string"
},
"product": {
"type": "string"
},
"type": {
"type": "string"
},
"status": {
"type": "string"
},
"max_activations": {
"type": "integer"
},
"activation_count": {
"type": "integer"
},
"expires_at": {
"type": "string",
"nullable": true
},
"support_expires_at": {
"type": "string",
"nullable": true
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/products": {
"get": {
"operationId": "api.customer.products",
"tags": [
"Account"
],
"parameters": [],
"security": [
{
"customerToken": [
"products.read"
]
}
],
"description": "Requires a customer token with the `products.read` ability.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"description": {
"type": "string"
},
"status": {
"type": "string"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/downloads": {
"get": {
"operationId": "api.customer.downloads",
"tags": [
"Account"
],
"parameters": [],
"security": [
{
"customerToken": [
"downloads.read"
]
}
],
"description": "Requires a customer token with the `downloads.read` ability.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"product": {
"type": "string"
},
"version": {
"type": "string"
},
"downloaded_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/activity": {
"get": {
"operationId": "api.customer.activity",
"tags": [
"Account"
],
"parameters": [],
"security": [
{
"customerToken": [
"activity.read"
]
}
],
"description": "Requires a customer token with the `activity.read` ability.",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"description": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/billing/purchases": {
"get": {
"operationId": "api.customer.billing.purchases",
"tags": [
"Customer Billing"
],
"parameters": [],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product": {
"type": "string"
},
"product_name": {
"type": "string"
},
"latest_order_number": {
"type": "string"
},
"latest_order_total": {
"type": "integer"
},
"currency": {
"type": "string"
},
"purchased_at": {
"type": "string",
"format": "date-time"
},
"license_key": {
"type": "string"
},
"license_status": {
"type": "string"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/billing/orders": {
"get": {
"operationId": "api.customer.billing.orders.index",
"tags": [
"Customer Billing"
],
"parameters": [],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"order_number": {
"type": "string"
},
"product": {
"type": "string"
},
"price_name": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"currency": {
"type": "string"
},
"subtotal": {
"type": "integer"
},
"discount": {
"type": "integer"
},
"tax": {
"type": "integer"
},
"total": {
"type": "integer"
},
"payment_provider": {
"type": "string"
},
"status": {
"type": "string"
},
"invoice_number": {
"type": "string",
"nullable": true
},
"paid_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/billing/orders/{order}": {
"get": {
"operationId": "api.customer.billing.orders.show",
"tags": [
"Customer Billing"
],
"parameters": [
{
"name": "order",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"order_number": {
"type": "string"
},
"product": {
"type": "string"
},
"price_name": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"currency": {
"type": "string"
},
"subtotal": {
"type": "integer"
},
"discount": {
"type": "integer"
},
"tax": {
"type": "integer"
},
"total": {
"type": "integer"
},
"payment_provider": {
"type": "string"
},
"status": {
"type": "string"
},
"invoice_number": {
"type": "string",
"nullable": true
},
"paid_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/billing/invoices": {
"get": {
"operationId": "api.customer.billing.invoices.index",
"tags": [
"Customer Billing"
],
"parameters": [],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"invoice_number": {
"type": "string"
},
"product_name": {
"type": "string"
},
"product_version": {
"type": "string"
},
"license_key": {
"type": "string",
"nullable": true
},
"payment_provider": {
"type": "string"
},
"currency": {
"type": "string"
},
"subtotal": {
"type": "integer"
},
"discount": {
"type": "integer"
},
"tax": {
"type": "integer"
},
"total": {
"type": "integer"
},
"issued_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/billing/invoices/{invoice}": {
"get": {
"operationId": "api.customer.billing.invoices.show",
"tags": [
"Customer Billing"
],
"parameters": [
{
"name": "invoice",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"invoice_number": {
"type": "string"
},
"product_name": {
"type": "string"
},
"product_version": {
"type": "string"
},
"license_key": {
"type": "string",
"nullable": true
},
"payment_provider": {
"type": "string"
},
"currency": {
"type": "string"
},
"subtotal": {
"type": "integer"
},
"discount": {
"type": "integer"
},
"tax": {
"type": "integer"
},
"total": {
"type": "integer"
},
"issued_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/billing/subscriptions": {
"get": {
"operationId": "api.customer.billing.subscriptions.index",
"tags": [
"Customer Billing"
],
"parameters": [],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"product": {
"type": "string"
},
"price_name": {
"type": "string"
},
"status": {
"type": "string"
},
"renews_at": {
"type": "string",
"format": "date-time"
},
"ends_at": {
"type": "string",
"nullable": true
},
"cancelled_at": {
"type": "string",
"nullable": true
},
"trial_ends_at": {
"type": "string",
"nullable": true
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/billing/subscriptions/{subscription}": {
"get": {
"operationId": "api.customer.billing.subscriptions.show",
"tags": [
"Customer Billing"
],
"parameters": [
{
"name": "subscription",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"product": {
"type": "string"
},
"price_name": {
"type": "string"
},
"status": {
"type": "string"
},
"renews_at": {
"type": "string",
"format": "date-time"
},
"ends_at": {
"type": "string",
"nullable": true
},
"cancelled_at": {
"type": "string",
"nullable": true
},
"trial_ends_at": {
"type": "string",
"nullable": true
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/billing/subscriptions/{subscription}/cancel": {
"post": {
"operationId": "api.customer.billing.subscriptions.cancel",
"tags": [
"Customer Billing"
],
"parameters": [
{
"name": "subscription",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"product": {
"type": "string"
},
"price_name": {
"type": "string"
},
"status": {
"type": "string"
},
"renews_at": {
"type": "string",
"format": "date-time"
},
"ends_at": {
"type": "string",
"nullable": true
},
"cancelled_at": {
"type": "string",
"nullable": true
},
"trial_ends_at": {
"type": "string",
"nullable": true
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/billing/checkout/{price}": {
"post": {
"operationId": "api.customer.billing.checkout",
"tags": [
"Customer Billing"
],
"parameters": [
{
"name": "price",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"payment_provider"
],
"properties": {
"payment_provider": {
"type": "string",
"enum": [
"lemon_squeezy",
"paystack"
]
},
"coupon_code": {
"type": "string",
"nullable": true,
"maxLength": 64
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"redirect_url": {
"type": "string"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/billing/payment-verification": {
"post": {
"operationId": "api.customer.billing.payment-verification",
"tags": [
"Customer Billing"
],
"parameters": [],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"reference"
],
"properties": {
"reference": {
"type": "string",
"maxLength": 255
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"successful": {
"type": "boolean"
},
"order": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"order_number": {
"type": "string"
},
"product": {
"type": "string"
},
"price_name": {
"type": "string"
},
"quantity": {
"type": "integer"
},
"currency": {
"type": "string"
},
"subtotal": {
"type": "integer"
},
"discount": {
"type": "integer"
},
"tax": {
"type": "integer"
},
"total": {
"type": "integer"
},
"payment_provider": {
"type": "string"
},
"status": {
"type": "string"
},
"invoice_number": {
"type": "string",
"nullable": true
},
"paid_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/support/search": {
"get": {
"operationId": "api.customer.support.search",
"tags": [
"Customer Support"
],
"parameters": [],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"ticket_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"subject": {
"type": "string"
},
"category": {
"type": "string"
},
"status": {
"type": "string"
},
"priority": {
"type": "string"
},
"product": {
"type": "string",
"nullable": true
},
"assigned_agent": {
"type": "string",
"nullable": true
},
"messages": {
"type": "string"
},
"first_responded_at": {
"type": "string",
"nullable": true
},
"resolved_at": {
"type": "string",
"nullable": true
},
"closed_at": {
"type": "string",
"nullable": true
},
"last_reply_at": {
"type": "string",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/support/tickets": {
"get": {
"operationId": "api.customer.support.tickets.index",
"tags": [
"Customer Support"
],
"parameters": [],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"ticket_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"subject": {
"type": "string"
},
"category": {
"type": "string"
},
"status": {
"type": "string"
},
"priority": {
"type": "string"
},
"product": {
"type": "string",
"nullable": true
},
"assigned_agent": {
"type": "string",
"nullable": true
},
"messages": {
"type": "string"
},
"first_responded_at": {
"type": "string",
"nullable": true
},
"resolved_at": {
"type": "string",
"nullable": true
},
"closed_at": {
"type": "string",
"nullable": true
},
"last_reply_at": {
"type": "string",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
},
"post": {
"operationId": "api.customer.support.tickets.store",
"tags": [
"Customer Support"
],
"parameters": [],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"requestBody": {
"required": true,
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"required": [
"subject",
"category",
"body"
],
"properties": {
"subject": {
"type": "string",
"maxLength": 255
},
"category": {
"type": "string"
},
"priority": {
"type": "string",
"nullable": true,
"enum": [
"low",
"normal",
"high"
]
},
"product_id": {
"type": "integer",
"nullable": true
},
"license_id": {
"type": "integer",
"nullable": true
},
"body": {
"type": "string"
},
"attachments": {
"type": "array",
"nullable": true,
"items": {
"type": "string",
"format": "binary"
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"ticket_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"subject": {
"type": "string"
},
"category": {
"type": "string"
},
"status": {
"type": "string"
},
"priority": {
"type": "string"
},
"product": {
"type": "string",
"nullable": true
},
"assigned_agent": {
"type": "string",
"nullable": true
},
"messages": {
"type": "string"
},
"first_responded_at": {
"type": "string",
"nullable": true
},
"resolved_at": {
"type": "string",
"nullable": true
},
"closed_at": {
"type": "string",
"nullable": true
},
"last_reply_at": {
"type": "string",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/support/tickets/{ticket}": {
"get": {
"operationId": "api.customer.support.tickets.show",
"tags": [
"Customer Support"
],
"parameters": [
{
"name": "ticket",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"ticket_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"subject": {
"type": "string"
},
"category": {
"type": "string"
},
"status": {
"type": "string"
},
"priority": {
"type": "string"
},
"product": {
"type": "string",
"nullable": true
},
"assigned_agent": {
"type": "string",
"nullable": true
},
"messages": {
"type": "string"
},
"first_responded_at": {
"type": "string",
"nullable": true
},
"resolved_at": {
"type": "string",
"nullable": true
},
"closed_at": {
"type": "string",
"nullable": true
},
"last_reply_at": {
"type": "string",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/support/tickets/{ticket}/reply": {
"post": {
"operationId": "api.customer.support.tickets.reply",
"tags": [
"Customer Support"
],
"parameters": [
{
"name": "ticket",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"body"
],
"properties": {
"body": {
"type": "string"
},
"attachments": {
"type": "array",
"nullable": true
},
"attachments.*": {
"type": "string",
"format": "binary"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"author_role": {
"type": "string"
},
"author_name": {
"type": "string"
},
"body": {
"type": "string"
},
"is_edited": {
"type": "boolean"
},
"attachments": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/support/tickets/{ticket}/close": {
"post": {
"operationId": "api.customer.support.tickets.close",
"tags": [
"Customer Support"
],
"parameters": [
{
"name": "ticket",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"ticket_number": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"subject": {
"type": "string"
},
"category": {
"type": "string"
},
"status": {
"type": "string"
},
"priority": {
"type": "string"
},
"product": {
"type": "string",
"nullable": true
},
"assigned_agent": {
"type": "string",
"nullable": true
},
"messages": {
"type": "string"
},
"first_responded_at": {
"type": "string",
"nullable": true
},
"resolved_at": {
"type": "string",
"nullable": true
},
"closed_at": {
"type": "string",
"nullable": true
},
"last_reply_at": {
"type": "string",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
},
"/customer/support/tickets/{ticket}/attachments": {
"post": {
"operationId": "api.customer.support.tickets.attachments.store",
"tags": [
"Customer Support"
],
"parameters": [
{
"name": "ticket",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"security": [
{
"customerToken": []
}
],
"description": "Requires any valid customer token (no specific ability enforced).",
"requestBody": {
"required": true,
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"required": [
"ticket_message_uuid",
"file"
],
"properties": {
"ticket_message_uuid": {
"type": "string",
"description": "The UUID of the ticket message this attachment belongs to."
},
"file": {
"type": "string",
"format": "binary"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"filename": {
"type": "string"
}
}
},
"error": {
"type": [
"object",
"null"
]
},
"meta": {
"type": [
"object",
"null"
]
}
}
}
}
}
}
}
}
}
}
}
openapi: 3.1.0
info:
title: 'KMD Hub Public API'
version: v1
description: 'The apikey-gated Developer Platform surface, the public product catalog, and the customer-token-gated self-service surface. Every response shares one envelope: {success, data, error, meta}.'
servers:
-
url: 'https://hub.kwesimooredigital.com/api/v1'
description: 'v1 (current)'
components:
securitySchemes:
apiKey:
type: http
scheme: bearer
description: 'A Developer Platform API key, issued to an Application.'
customerToken:
type: http
scheme: bearer
description: "A customer's personal API token (Sanctum), scoped to one or more of: `licenses.read`, `products.read`, `downloads.read`, `orders.read`, `billing.read`, `support.read`, `activity.read`. Issued from the customer portal at /account/tokens. Grants read-only access to that customer's own data only."
paths:
/products:
get:
operationId: api.products.index
tags:
- Products
parameters: { }
description: 'No API key required.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, slug: { type: string }, description: { type: string }, status: { type: string } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/products/{product}':
get:
operationId: api.products.show
tags:
- Products
parameters:
-
name: product
in: path
required: true
schema:
type: string
description: 'No API key required.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, slug: { type: string }, description: { type: string }, status: { type: string } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/products/{product}/releases':
get:
operationId: api.products.releases.index
tags:
- Products
parameters:
-
name: product
in: path
required: true
schema:
type: string
description: 'No API key required.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { version: { type: string }, channel: { type: string }, changelog: { type: string }, minimum_php_version: { type: string }, minimum_wp_version: { type: string }, published_at: { type: string, format: date-time }, checksum_sha256: { type: string }, filesize_bytes: { type: integer } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/products/{product}/latest-release':
get:
operationId: api.products.latest-release
tags:
- Products
parameters:
-
name: product
in: path
required: true
schema:
type: string
description: 'No API key required.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { version: { type: string }, channel: { type: string }, changelog: { type: string }, minimum_php_version: { type: string }, minimum_wp_version: { type: string }, published_at: { type: string, format: date-time }, checksum_sha256: { type: string }, filesize_bytes: { type: integer } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/products/{product}/download/{release}':
get:
operationId: api.products.download
tags:
- Products
parameters:
-
name: product
in: path
required: true
schema:
type: string
-
name: release
in: path
required: true
schema:
type: string
description: 'No API key required.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/licenses:
get:
operationId: api.licenses.index
tags:
- Licenses
parameters: { }
security:
-
apiKey:
- licenses.read
description: 'Requires the `licenses.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, license_key: { type: string }, product: { type: string }, type: { type: string }, status: { type: string }, max_activations: { type: integer }, activation_count: { type: integer }, expires_at: { type: string, nullable: true }, support_expires_at: { type: string, nullable: true } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/licenses/activate:
post:
operationId: api.licenses.activate
tags:
- Licenses
parameters: { }
description: 'No API key required.'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- license_key
- product
- domain
- site_url
properties:
license_key:
type: string
product:
type: string
domain:
type: string
maxLength: 255
site_url:
type: string
format: uri
maxLength: 255
wordpress_version:
type: string
nullable: true
maxLength: 20
php_version:
type: string
nullable: true
maxLength: 20
plugin_version:
type: string
nullable: true
maxLength: 20
site_name:
type: string
nullable: true
maxLength: 255
product_secret:
type: string
nullable: true
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, domain: { type: string }, site_url: { type: string }, site_name: { type: string, nullable: true }, wordpress_version: { type: string }, php_version: { type: string }, plugin_version: { type: string }, status: { type: string }, activated_at: { type: string, format: date-time }, last_seen_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/licenses/deactivate:
post:
operationId: api.licenses.deactivate
tags:
- Licenses
parameters: { }
description: 'No API key required.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { domain: { type: string }, deactivated: { type: boolean } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/licenses/validate:
post:
operationId: api.licenses.validate
tags:
- Licenses
parameters: { }
description: 'No API key required.'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- license_key
- product
- domain
properties:
license_key:
type: string
product:
type: string
domain:
type: string
maxLength: 255
plugin_version:
type: string
nullable: true
maxLength: 20
product_secret:
type: string
nullable: true
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { valid: { type: boolean }, code: { type: string, nullable: true }, message: { type: string, nullable: true }, type: { type: string }, status: { type: string }, expires_at: { type: string, nullable: true }, support_expires_at: { type: string, nullable: true }, support_expired: { type: boolean }, activations_used: { type: integer }, activations_limit: { type: integer } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/licenses/{license}':
get:
operationId: api.licenses.show
tags:
- Licenses
parameters:
-
name: license
in: path
required: true
schema:
type: string
description: 'No API key required.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, license_key: { type: string }, product: { type: string }, type: { type: string }, status: { type: string }, max_activations: { type: integer }, activation_count: { type: integer }, expires_at: { type: string, nullable: true }, support_expires_at: { type: string, nullable: true } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/licenses/{license}/activations':
get:
operationId: api.licenses.activations
tags:
- Licenses
parameters:
-
name: license
in: path
required: true
schema:
type: string
description: 'No API key required.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, domain: { type: string }, site_url: { type: string }, site_name: { type: string, nullable: true }, wordpress_version: { type: string }, php_version: { type: string }, plugin_version: { type: string }, status: { type: string }, activated_at: { type: string, format: date-time }, last_seen_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customers:
get:
operationId: api.customers.index
tags:
- Customers
parameters: { }
security:
-
apiKey:
- customers.read
description: 'Requires the `customers.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string }, company: { type: string, nullable: true }, status: { type: string }, licenses_count: { type: integer }, orders_count: { type: integer }, created_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customers/{customer}':
get:
operationId: api.customers.show
tags:
- Customers
parameters:
-
name: customer
in: path
required: true
schema:
type: string
security:
-
apiKey:
- customers.read
description: 'Requires the `customers.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string }, company: { type: string, nullable: true }, status: { type: string }, licenses_count: { type: integer }, orders_count: { type: integer }, created_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customers/{customer}/notifications':
get:
operationId: api.customers.notifications.index
tags:
- Customers
parameters:
-
name: customer
in: path
required: true
schema:
type: string
security:
-
apiKey:
- notifications.read
description: 'Requires the `notifications.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, type: { type: string }, data: { type: object, properties: { license_key: { type: string } } }, read_at: { type: string, nullable: true }, created_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/orders:
get:
operationId: api.orders.index
tags:
- Orders
parameters: { }
security:
-
apiKey:
- orders.read
description: 'Requires the `orders.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, order_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, product: { type: string }, price_name: { type: string }, quantity: { type: integer }, currency: { type: string }, subtotal: { type: integer }, discount: { type: integer }, tax: { type: integer }, total: { type: integer }, payment_provider: { type: string }, status: { type: string }, invoice_number: { type: string, nullable: true }, paid_at: { type: string, format: date-time }, created_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/orders/{order}':
get:
operationId: api.orders.show
tags:
- Orders
parameters:
-
name: order
in: path
required: true
schema:
type: string
security:
-
apiKey:
- orders.read
description: 'Requires the `orders.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, order_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, product: { type: string }, price_name: { type: string }, quantity: { type: integer }, currency: { type: string }, subtotal: { type: integer }, discount: { type: integer }, tax: { type: integer }, total: { type: integer }, payment_provider: { type: string }, status: { type: string }, invoice_number: { type: string, nullable: true }, paid_at: { type: string, format: date-time }, created_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/invoices:
get:
operationId: api.invoices.index
tags:
- Invoices
parameters: { }
security:
-
apiKey:
- billing.read
description: 'Requires the `billing.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, invoice_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, product_name: { type: string }, product_version: { type: string }, license_key: { type: string, nullable: true }, payment_provider: { type: string }, currency: { type: string }, subtotal: { type: integer }, discount: { type: integer }, tax: { type: integer }, total: { type: integer }, issued_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/invoices/{invoice}':
get:
operationId: api.invoices.show
tags:
- Invoices
parameters:
-
name: invoice
in: path
required: true
schema:
type: string
security:
-
apiKey:
- billing.read
description: 'Requires the `billing.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, invoice_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, product_name: { type: string }, product_version: { type: string }, license_key: { type: string, nullable: true }, payment_provider: { type: string }, currency: { type: string }, subtotal: { type: integer }, discount: { type: integer }, tax: { type: integer }, total: { type: integer }, issued_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/subscriptions:
get:
operationId: api.subscriptions.index
tags:
- Subscriptions
parameters: { }
security:
-
apiKey:
- billing.read
description: 'Requires the `billing.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, product: { type: string }, price_name: { type: string }, status: { type: string }, renews_at: { type: string, format: date-time }, ends_at: { type: string, nullable: true }, cancelled_at: { type: string, nullable: true }, trial_ends_at: { type: string, nullable: true } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/subscriptions/{subscription}':
get:
operationId: api.subscriptions.show
tags:
- Subscriptions
parameters:
-
name: subscription
in: path
required: true
schema:
type: string
security:
-
apiKey:
- billing.read
description: 'Requires the `billing.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, product: { type: string }, price_name: { type: string }, status: { type: string }, renews_at: { type: string, format: date-time }, ends_at: { type: string, nullable: true }, cancelled_at: { type: string, nullable: true }, trial_ends_at: { type: string, nullable: true } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/downloads:
get:
operationId: api.downloads.index
tags:
- Downloads
parameters: { }
security:
-
apiKey:
- downloads.read
description: 'Requires the `downloads.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, product: { type: string }, version: { type: string }, downloaded_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/downloads/{download}':
get:
operationId: api.downloads.show
tags:
- Downloads
parameters:
-
name: download
in: path
required: true
schema:
type: string
security:
-
apiKey:
- downloads.read
description: 'Requires the `downloads.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, product: { type: string }, version: { type: string }, downloaded_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/support/tickets:
get:
operationId: api.support.tickets.index
tags:
- Support
parameters: { }
security:
-
apiKey:
- support.read
description: 'Requires the `support.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, ticket_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, subject: { type: string }, category: { type: string }, status: { type: string }, priority: { type: string }, product: { type: string, nullable: true }, assigned_agent: { type: string, nullable: true }, messages: { type: string }, first_responded_at: { type: string, nullable: true }, resolved_at: { type: string, nullable: true }, closed_at: { type: string, nullable: true }, last_reply_at: { type: string, nullable: true }, created_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/support/tickets/{ticket}':
get:
operationId: api.support.tickets.show
tags:
- Support
parameters:
-
name: ticket
in: path
required: true
schema:
type: string
security:
-
apiKey:
- support.read
description: 'Requires the `support.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, ticket_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, subject: { type: string }, category: { type: string }, status: { type: string }, priority: { type: string }, product: { type: string, nullable: true }, assigned_agent: { type: string, nullable: true }, messages: { type: string }, first_responded_at: { type: string, nullable: true }, resolved_at: { type: string, nullable: true }, closed_at: { type: string, nullable: true }, last_reply_at: { type: string, nullable: true }, created_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/activity-logs:
get:
operationId: api.activity-logs.index
tags:
- 'Activity Logs'
parameters: { }
security:
-
apiKey:
- activity.read
description: 'Requires the `activity.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: integer }, action: { type: string }, description: { type: string }, properties: { type: array, items: { type: string } }, subject: { type: object, properties: { type: { type: string }, id: { type: integer } } }, causer: { type: string, nullable: true }, created_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/settings:
get:
operationId: api.settings.index
tags:
- Settings
parameters: { }
security:
-
apiKey:
- settings.read
description: 'Requires the `settings.read` API key scope.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { key: { type: string }, value: { type: string }, type: { type: string }, group: { type: string }, updated_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer:
get:
operationId: api.customer.show
tags:
- Account
parameters: { }
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string }, company: { type: string, nullable: true }, avatar_url: { type: string, nullable: true }, country: { type: string, nullable: true }, timezone: { type: string, nullable: true }, preferred_language: { type: string }, email_verified: { type: boolean }, created_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/licenses:
get:
operationId: api.customer.licenses
tags:
- Account
parameters: { }
security:
-
customerToken:
- licenses.read
description: 'Requires a customer token with the `licenses.read` ability.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, license_key: { type: string }, product: { type: string }, type: { type: string }, status: { type: string }, max_activations: { type: integer }, activation_count: { type: integer }, expires_at: { type: string, nullable: true }, support_expires_at: { type: string, nullable: true } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/products:
get:
operationId: api.customer.products
tags:
- Account
parameters: { }
security:
-
customerToken:
- products.read
description: 'Requires a customer token with the `products.read` ability.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, slug: { type: string }, description: { type: string }, status: { type: string } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/downloads:
get:
operationId: api.customer.downloads
tags:
- Account
parameters: { }
security:
-
customerToken:
- downloads.read
description: 'Requires a customer token with the `downloads.read` ability.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, product: { type: string }, version: { type: string }, downloaded_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/activity:
get:
operationId: api.customer.activity
tags:
- Account
parameters: { }
security:
-
customerToken:
- activity.read
description: 'Requires a customer token with the `activity.read` ability.'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { action: { type: string }, description: { type: string }, created_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/billing/purchases:
get:
operationId: api.customer.billing.purchases
tags:
- 'Customer Billing'
parameters: { }
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { product: { type: string }, product_name: { type: string }, latest_order_number: { type: string }, latest_order_total: { type: integer }, currency: { type: string }, purchased_at: { type: string, format: date-time }, license_key: { type: string }, license_status: { type: string } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/billing/orders:
get:
operationId: api.customer.billing.orders.index
tags:
- 'Customer Billing'
parameters: { }
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, order_number: { type: string }, product: { type: string }, price_name: { type: string }, quantity: { type: integer }, currency: { type: string }, subtotal: { type: integer }, discount: { type: integer }, tax: { type: integer }, total: { type: integer }, payment_provider: { type: string }, status: { type: string }, invoice_number: { type: string, nullable: true }, paid_at: { type: string, format: date-time }, created_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customer/billing/orders/{order}':
get:
operationId: api.customer.billing.orders.show
tags:
- 'Customer Billing'
parameters:
-
name: order
in: path
required: true
schema:
type: string
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, order_number: { type: string }, product: { type: string }, price_name: { type: string }, quantity: { type: integer }, currency: { type: string }, subtotal: { type: integer }, discount: { type: integer }, tax: { type: integer }, total: { type: integer }, payment_provider: { type: string }, status: { type: string }, invoice_number: { type: string, nullable: true }, paid_at: { type: string, format: date-time }, created_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/billing/invoices:
get:
operationId: api.customer.billing.invoices.index
tags:
- 'Customer Billing'
parameters: { }
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, invoice_number: { type: string }, product_name: { type: string }, product_version: { type: string }, license_key: { type: string, nullable: true }, payment_provider: { type: string }, currency: { type: string }, subtotal: { type: integer }, discount: { type: integer }, tax: { type: integer }, total: { type: integer }, issued_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customer/billing/invoices/{invoice}':
get:
operationId: api.customer.billing.invoices.show
tags:
- 'Customer Billing'
parameters:
-
name: invoice
in: path
required: true
schema:
type: string
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, invoice_number: { type: string }, product_name: { type: string }, product_version: { type: string }, license_key: { type: string, nullable: true }, payment_provider: { type: string }, currency: { type: string }, subtotal: { type: integer }, discount: { type: integer }, tax: { type: integer }, total: { type: integer }, issued_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/billing/subscriptions:
get:
operationId: api.customer.billing.subscriptions.index
tags:
- 'Customer Billing'
parameters: { }
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, product: { type: string }, price_name: { type: string }, status: { type: string }, renews_at: { type: string, format: date-time }, ends_at: { type: string, nullable: true }, cancelled_at: { type: string, nullable: true }, trial_ends_at: { type: string, nullable: true } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customer/billing/subscriptions/{subscription}':
get:
operationId: api.customer.billing.subscriptions.show
tags:
- 'Customer Billing'
parameters:
-
name: subscription
in: path
required: true
schema:
type: string
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, product: { type: string }, price_name: { type: string }, status: { type: string }, renews_at: { type: string, format: date-time }, ends_at: { type: string, nullable: true }, cancelled_at: { type: string, nullable: true }, trial_ends_at: { type: string, nullable: true } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customer/billing/subscriptions/{subscription}/cancel':
post:
operationId: api.customer.billing.subscriptions.cancel
tags:
- 'Customer Billing'
parameters:
-
name: subscription
in: path
required: true
schema:
type: string
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, product: { type: string }, price_name: { type: string }, status: { type: string }, renews_at: { type: string, format: date-time }, ends_at: { type: string, nullable: true }, cancelled_at: { type: string, nullable: true }, trial_ends_at: { type: string, nullable: true } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customer/billing/checkout/{price}':
post:
operationId: api.customer.billing.checkout
tags:
- 'Customer Billing'
parameters:
-
name: price
in: path
required: true
schema:
type: string
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- payment_provider
properties:
payment_provider:
type: string
enum: [lemon_squeezy, paystack]
coupon_code:
type: string
nullable: true
maxLength: 64
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { redirect_url: { type: string } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/billing/payment-verification:
post:
operationId: api.customer.billing.payment-verification
tags:
- 'Customer Billing'
parameters: { }
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- reference
properties:
reference:
type: string
maxLength: 255
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { successful: { type: boolean }, order: { type: object, properties: { id: { type: string, format: uuid }, order_number: { type: string }, product: { type: string }, price_name: { type: string }, quantity: { type: integer }, currency: { type: string }, subtotal: { type: integer }, discount: { type: integer }, tax: { type: integer }, total: { type: integer }, payment_provider: { type: string }, status: { type: string }, invoice_number: { type: string, nullable: true }, paid_at: { type: string, format: date-time }, created_at: { type: string, format: date-time } } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/support/search:
get:
operationId: api.customer.support.search
tags:
- 'Customer Support'
parameters: { }
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, ticket_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, subject: { type: string }, category: { type: string }, status: { type: string }, priority: { type: string }, product: { type: string, nullable: true }, assigned_agent: { type: string, nullable: true }, messages: { type: string }, first_responded_at: { type: string, nullable: true }, resolved_at: { type: string, nullable: true }, closed_at: { type: string, nullable: true }, last_reply_at: { type: string, nullable: true }, created_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
/customer/support/tickets:
get:
operationId: api.customer.support.tickets.index
tags:
- 'Customer Support'
parameters: { }
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: array, items: { type: object, properties: { id: { type: string, format: uuid }, ticket_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, subject: { type: string }, category: { type: string }, status: { type: string }, priority: { type: string }, product: { type: string, nullable: true }, assigned_agent: { type: string, nullable: true }, messages: { type: string }, first_responded_at: { type: string, nullable: true }, resolved_at: { type: string, nullable: true }, closed_at: { type: string, nullable: true }, last_reply_at: { type: string, nullable: true }, created_at: { type: string, format: date-time } } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
post:
operationId: api.customer.support.tickets.store
tags:
- 'Customer Support'
parameters: { }
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- subject
- category
- body
properties:
subject:
type: string
maxLength: 255
category:
type: string
priority:
type: string
nullable: true
enum: [low, normal, high]
product_id:
type: integer
nullable: true
license_id:
type: integer
nullable: true
body:
type: string
attachments:
type: array
nullable: true
items: { type: string, format: binary }
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, ticket_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, subject: { type: string }, category: { type: string }, status: { type: string }, priority: { type: string }, product: { type: string, nullable: true }, assigned_agent: { type: string, nullable: true }, messages: { type: string }, first_responded_at: { type: string, nullable: true }, resolved_at: { type: string, nullable: true }, closed_at: { type: string, nullable: true }, last_reply_at: { type: string, nullable: true }, created_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customer/support/tickets/{ticket}':
get:
operationId: api.customer.support.tickets.show
tags:
- 'Customer Support'
parameters:
-
name: ticket
in: path
required: true
schema:
type: string
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, ticket_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, subject: { type: string }, category: { type: string }, status: { type: string }, priority: { type: string }, product: { type: string, nullable: true }, assigned_agent: { type: string, nullable: true }, messages: { type: string }, first_responded_at: { type: string, nullable: true }, resolved_at: { type: string, nullable: true }, closed_at: { type: string, nullable: true }, last_reply_at: { type: string, nullable: true }, created_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customer/support/tickets/{ticket}/reply':
post:
operationId: api.customer.support.tickets.reply
tags:
- 'Customer Support'
parameters:
-
name: ticket
in: path
required: true
schema:
type: string
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- body
properties:
body:
type: string
attachments:
type: array
nullable: true
'attachments.*':
type: string
format: binary
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, author_role: { type: string }, author_name: { type: string }, body: { type: string }, is_edited: { type: boolean }, attachments: { type: string }, created_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customer/support/tickets/{ticket}/close':
post:
operationId: api.customer.support.tickets.close
tags:
- 'Customer Support'
parameters:
-
name: ticket
in: path
required: true
schema:
type: string
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, ticket_number: { type: string }, customer: { type: object, properties: { id: { type: string, format: uuid }, name: { type: string }, email: { type: string } } }, subject: { type: string }, category: { type: string }, status: { type: string }, priority: { type: string }, product: { type: string, nullable: true }, assigned_agent: { type: string, nullable: true }, messages: { type: string }, first_responded_at: { type: string, nullable: true }, resolved_at: { type: string, nullable: true }, closed_at: { type: string, nullable: true }, last_reply_at: { type: string, nullable: true }, created_at: { type: string, format: date-time } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }
'/customer/support/tickets/{ticket}/attachments':
post:
operationId: api.customer.support.tickets.attachments.store
tags:
- 'Customer Support'
parameters:
-
name: ticket
in: path
required: true
schema:
type: string
security:
-
customerToken: { }
description: 'Requires any valid customer token (no specific ability enforced).'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- ticket_message_uuid
- file
properties:
ticket_message_uuid:
type: string
description: 'The UUID of the ticket message this attachment belongs to.'
file:
type: string
format: binary
responses:
200:
description: Success
content:
application/json:
schema:
type: object
properties:
success: { type: boolean }
data: { type: object, properties: { id: { type: string, format: uuid }, filename: { type: string } } }
error: { type: [object, 'null'] }
meta: { type: [object, 'null'] }