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.
User API key (Bearer scp_u_...). Create in Platform > API Keys.
In: header
Path Parameters
Service ID
uuidRequest Body
application/json
Ports and IP addresses this service is reachable on.
The host this entity belongs to.
uuidHuman-facing name for the service.
The network this entity belongs to.
uuidPosition of this service in the host's service list (for ordering)
int32Which known software this service is, if identified.
Will be automatically set to Manual for creation through API
Tags assigned to this entity.
The container runtime service hosting this container — see the note on
HostBase::virtualization_service_id.
uuidResponse Body
application/json
application/json
application/json
curl -X PUT "https://app.scanopy.net/api/v1/services/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{ "bindings": [ { "created_at": "2026-08-03T19:06:30.671553Z", "first_discovery_id": null, "id": "01e6884f-c3ad-4148-9317-8ff2e14eea4d", "ip_address_id": "550e8400-e29b-41d4-a716-446655440005", "last_discovery_id": null, "last_seen_at": "2026-08-03T19:06:30.671553Z", "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.671553Z", "valid_from": "2026-08-03T19:06:30.671553Z", "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 }'{
"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
}
}{
"meta": {
"api_version": 1,
"server_version": "0.17.8"
},
"success": true,
"code": "string",
"error": "string",
"params": {
"property1": null,
"property2": null
}
}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.
Delete Service
Next Page