Platform & API
A platform built to be automated and extended
Everything the admin panel does, the REST API does too. And when you need to change how the core behaves, event hooks let you step in without editing a line of it.
The REST API
Run the whole operation over one API
The admin surface and the API share the same permission map, so anything a staff member can do, a token can do. Clients get a scoped surface of their own.
# Create a client straight from your own signup flow
curl -X POST https://yourdomain.com/api/v1/clients \
-H "Authorization: Bearer $WISECP_TOKEN" \
-d '{
"first_name": "Ada",
"last_name": "Lovelace",
"email": "[email protected]",
"country": "GB"
}'
# 201 Created
{ "status": "success", "data": { "id": 4821, "state": "active" } }
// Create a client straight from your own signup flow
$api = new WisecpClient(getenv('WISECP_TOKEN'));
$client = $api->clients->create([
'first_name' => 'Ada',
'last_name' => 'Lovelace',
'email' => '[email protected]',
'country' => 'GB',
]);
echo $client->id; // 4821
// Create a client straight from your own signup flow
const api = new WisecpClient(process.env.WISECP_TOKEN);
const client = await api.clients.create({
firstName: 'Ada',
lastName: 'Lovelace',
email: '[email protected]',
country: 'GB',
});
console.log(client.id); // 4821
# List the signed-in client's unpaid invoices
curl https://yourdomain.com/api/v1/client/invoices?status=unpaid \
-H "Authorization: Bearer $CLIENT_TOKEN"
# 200 OK
{
"status": "success",
"data": [
{ "id": 90233, "total": "42.00", "due": "2026-08-01" }
]
}
// List the signed-in client's unpaid invoices
$api = new WisecpClient(getenv('CLIENT_TOKEN'));
$invoices = $api->client->invoices->all([
'status' => 'unpaid',
]);
foreach ($invoices as $invoice) {
echo $invoice->total;
}
// List the signed-in client's unpaid invoices
const api = new WisecpClient(process.env.CLIENT_TOKEN);
const invoices = await api.client.invoices.all({
status: 'unpaid',
});
invoices.forEach(i => console.log(i.total));
Event Hooks
Change how the core behaves, without touching core
Every request travels a path through the platform. At each stage a hook can catch it, reshape its data, inject into the interface, or stop it outright, all from your own code.
Actions
React to an event: send, log, sync or trigger your own workflow.
UI Injections
Add fields, panels and buttons into the admin and client screens.
Filters
Reshape a value before the core uses it, from prices to payloads.
Gates
Veto an action outright: block an order, invoice, login or suspension.
Registers
Register your own product type, route or scheduled cron job.
Modules
Connect anything with a module
Nine documented module types cover the systems you plug into, from control panels to payment gateways. Each ships with a starter skeleton, so you begin from working code.
Servers
Hosting and server control panels, with create, suspend, SSO and usage stats.
Payments
Payment gateways in four models: merchant, subscription, third-party and tokenized.
Registrars
Domain registrars over a contract of forty-plus functions.
Products
Custom product types with their own provisioning lifecycle.
Addons
Add-ons that attach to any product or service.
SMS
SMS gateways for notifications and verification codes.
Mail providers for transactional and bulk delivery.
Authentication
Social and single sign-on providers.
Mail Piping
Turn inbound email into support tickets automatically.
Architecture
A lean core, tuned for speed
The v5 core runs on a light custom framework, with the API on its own fast path, so a modern stack stays quick under load.
Lightweight core
A custom MVC core (coremio), built for throughput.
API fast path
API requests skip the MVC layer through a lean kernel.
Modern runtime
Runs on PHP 8.2 and newer, current and supported.
OpenAPI 3.1
Docs generated from the code, checked for drift at build time.
Start Building
Everything you need to build
The API reference, hook catalog and module guides all live in the developer docs, with starter templates to fork.