Complete configuration import¶
POST/
Firewall Management API · Firewall Config Import Export
Complete the configuration import upload by specifying the target firewalls and the uploaded configuration file's metadata.
Parameters¶
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Partner-ID | header | string (uuid) | No | Optional partner ID. |
X-Tenant-ID | header | string (uuid) | No | Optional tenant ID. |
transactionId | path | string (uuid) | Yes | Transaction ID. |
Request body¶
Content type: application/json
Request body fields
firewallIdsarray of string (uuid)requiredIDs of firewalls for configuration import.
Must contain 1–25 items. Items must be unique.
Must contain 1–25 items. Items must be unique.
checksumMd5stringrequiredHex-encoded MD5 checksum of the import file.
fileSizeBytesintegerrequiredFile size, in bytes.
Must be ≥ 1.
Must be ≥ 1.
secureMasterKeystring (password)Secure storage master key. Sensitive information isn't imported if the master key isn't provided.
Must be at most 128 characters long.
Must be at most 128 characters long.
performPartialImportbooleanOptional. When
true (default), partial import is allowed for each firewall. When false, only fully successful import is allowed.Request samples¶
curl -X POST "https://api-<data-region>.central.sophos.com/firewall/v1/firewall-config/firewalls/import/<transactionId>/upload-complete" -H "Authorization: Bearer <access-token>" -H "X-Partner-ID: <partner-id>" -H "X-Tenant-ID: <tenant-id>" -H "Content-Type: application/json" -d "{
\"firewallIds\": [
\"2ba7f8ea-691c-4f03-862e-3cefb1028132\",
\"1c91e7b9-4d4c-4e5d-9b2e-2f7d9c1a8b34\"
],
\"checksumMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",
\"fileSizeBytes\": 2048576
}"
import requests
response = requests.post(
"https://api-<data-region>.central.sophos.com/firewall/v1/firewall-config/firewalls/import/<transactionId>/upload-complete",
headers={
"Authorization": "Bearer <access-token>",
"X-Partner-ID": "<partner-id>",
"X-Tenant-ID": "<tenant-id>",
"Content-Type": "application/json",
},
json={ 'firewallIds': [ '2ba7f8ea-691c-4f03-862e-3cefb1028132',
'1c91e7b9-4d4c-4e5d-9b2e-2f7d9c1a8b34'],
'checksumMd5': 'd41d8cd98f00b204e9800998ecf8427e',
'fileSizeBytes': 2048576},
)
print(response.json())
$headers = @{
"Authorization" = "Bearer <access-token>"
"X-Partner-ID" = "<partner-id>"
"X-Tenant-ID" = "<tenant-id>"
"Content-Type" = "application/json"
}
$body = '{
"firewallIds": [
"2ba7f8ea-691c-4f03-862e-3cefb1028132",
"1c91e7b9-4d4c-4e5d-9b2e-2f7d9c1a8b34"
],
"checksumMd5": "d41d8cd98f00b204e9800998ecf8427e",
"fileSizeBytes": 2048576
}'
Invoke-RestMethod -Method POST -Uri "https://api-<data-region>.central.sophos.com/firewall/v1/firewall-config/firewalls/import/<transactionId>/upload-complete" -Headers $headers -Body $body -ContentType "application/json"
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
req, err := http.NewRequest("POST", "https://api-<data-region>.central.sophos.com/firewall/v1/firewall-config/firewalls/import/<transactionId>/upload-complete", strings.NewReader(`{
"firewallIds": [
"2ba7f8ea-691c-4f03-862e-3cefb1028132",
"1c91e7b9-4d4c-4e5d-9b2e-2f7d9c1a8b34"
],
"checksumMd5": "d41d8cd98f00b204e9800998ecf8427e",
"fileSizeBytes": 2048576
}`))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer <access-token>")
req.Header.Set("X-Partner-ID", "<partner-id>")
req.Header.Set("X-Tenant-ID", "<tenant-id>")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
const response = await fetch("https://api-<data-region>.central.sophos.com/firewall/v1/firewall-config/firewalls/import/<transactionId>/upload-complete", {
method: "POST",
headers: {
"Authorization": "Bearer <access-token>",
"X-Partner-ID": "<partner-id>",
"X-Tenant-ID": "<tenant-id>",
"Content-Type": "application/json",
},
body: JSON.stringify({
"firewallIds": [
"2ba7f8ea-691c-4f03-862e-3cefb1028132",
"1c91e7b9-4d4c-4e5d-9b2e-2f7d9c1a8b34"
],
"checksumMd5": "d41d8cd98f00b204e9800998ecf8427e",
"fileSizeBytes": 2048576
}),
});
const data = await response.json();
console.log(data);
Responses¶
200 — Upload completion accepted.¶
Response fields
idstring (uuid)requiredstatusstringTransaction status.
Must be one of:
Must be one of:
pending, started, finished.resultstringResult status.
Must be one of:
Must be one of:
notAvailable, success, error, partialSuccess.createdAtstring (date-time)finishedAtstring (date-time)expiryAtstring (date-time)responseobjectResponse object received from firewall.
requestobjectTransaction request called.
Show child attributesHide child attributes
methodstringMethod type of request called.
pathstringRequest path.
queryarray of objectShow child attributesHide child attributes
keystringvaluestringErrors¶
| Status | Meaning |
|---|---|
400 | Bad request. |
401 | Authentication required. |
403 | Authorization required. |
404 | Resource not found. |
409 | Conflict. |
500 | Unexpected error. |
All error responses share the same shape — see the error response object.
Response examples¶
200¶
{
"id": "00000000-0000-0000-0000-000000000000",
"status": "pending",
"result": "notAvailable",
"createdAt": "2026-07-28T00:00:00Z",
"finishedAt": "2026-07-28T00:00:00Z",
"expiryAt": "2026-07-28T00:00:00Z",
"response": {},
"request": {
"method": "string",
"path": "string",
"query": [
{
"key": "string",
"value": "string"
}
]
}
}
See the guide for a narrative walkthrough of this API.