Create a new service
Creates a service with optional bindings to ip_addresses or ports.
The id, created_at, updated_at, and source fields are generated server-side.
Bindings are specified without service_id or network_id - these are assigned automatically.
Binding Validation Rules
- Cross-host validation: All bindings must reference ports/interfaces that belong to the service's host. Bindings referencing entities from other hosts will be rejected.
- Deduplication: Duplicate bindings in the same request are automatically deduplicated.
- All-interfaces precedence: If a port binding with
ip_address_id: null(all ip_addresses) is included, any specific-interface bindings for the same port are automatically removed. - Conflict detection: Interface bindings conflict with port bindings on the same interface. A port binding on all ip_addresses conflicts with any interface binding.
User API key (Bearer scp_u_...). Create in Platform > API Keys.
In: header
Request Body
application/json
The host this entity belongs to.
uuidHuman-facing name for the service.
The network this entity belongs to.
uuidWhich known software this service is, if identified.
Tags assigned to this entity.
Bindings to create with the service.
service_id and network_id are assigned by the server.
The container runtime service hosting this container, if any.
uuidResponse Body
application/json
application/json
curl -X POST "https://app.scanopy.net/api/v1/services" \ -H "Content-Type: application/json" \ -d '{ "host_id": "eb4e20fc-2b4a-4d0c-811f-48abcf12b89b", "name": "string", "network_id": "d6797cf4-42b9-4cad-8591-9dd91c3f0fc3", "service_definition": "string", "tags": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ] }'{
"meta": {
"api_version": 1,
"server_version": "0.17.8"
},
"success": true,
"data": {
"bindings": [
{
"created_at": "2026-08-03T19:06:30.684192Z",
"first_discovery_id": null,
"id": "ab533aaa-463d-4042-b9d3-fbcb5f51cf99",
"ip_address_id": "550e8400-e29b-41d4-a716-446655440005",
"last_discovery_id": null,
"last_seen_at": "2026-08-03T19:06:30.684192Z",
"lineage_id": null,
"network_id": "550e8400-e29b-41d4-a716-446655440002",
"port_id": "550e8400-e29b-41d4-a716-446655440006",
"service_id": "550e8400-e29b-41d4-a716-446655440007",
"type": "Port",
"updated_at": "2026-08-03T19:06:30.684192Z",
"valid_from": "2026-08-03T19:06:30.684192Z",
"valid_to": null
}
],
"created_at": "2026-01-15T10:30:00Z",
"first_discovery_id": null,
"host_id": "550e8400-e29b-41d4-a716-446655440003",
"id": "550e8400-e29b-41d4-a716-446655440007",
"last_discovery_id": null,
"last_seen_at": "2026-01-15T10:30:00Z",
"lineage_id": null,
"name": "nginx",
"network_id": "550e8400-e29b-41d4-a716-446655440002",
"position": 0,
"service_definition": "Tasmota",
"source": {
"type": "Manual"
},
"tags": [],
"updated_at": "2026-01-15T10:30:00Z",
"valid_from": "2026-01-15T10:30:00Z",
"valid_to": null,
"virtualization_metadata": null,
"virtualization_service_id": null
},
"error": "string"
}{
"meta": {
"api_version": 1,
"server_version": "0.17.8"
},
"success": true,
"code": "string",
"error": "string",
"params": {
"property1": null,
"property2": null
}
}Bulk delete Services
Previous Page
Update a service
Updates an existing service. All binding validation rules from service creation apply here as well. ## Binding Validation Rules - **Cross-host validation**: All bindings must reference ports/interfaces that belong to the service's host. Bindings referencing entities from other hosts will be rejected. - **Deduplication**: Duplicate bindings are automatically deduplicated. - **All-interfaces precedence**: If a port binding with `ip_address_id: null` (all ip_addresses) is included, any specific-interface bindings for the same port are automatically removed. - **Conflict detection**: Interface bindings conflict with port bindings on the same interface.