Skip to content

Complete configuration import

POST/firewall-config/firewalls/import/{transactionId}/upload-complete

Firewall Management API · Firewall Config Import Export

Complete the configuration import upload by specifying the target firewalls and the uploaded configuration file's metadata.

Required permissionfwcm.firewall.api.config:write

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)required
IDs of firewalls for configuration import.
Must contain 1–25 items. Items must be unique.
checksumMd5stringrequired
Hex-encoded MD5 checksum of the import file.
fileSizeBytesintegerrequired
File size, in bytes.
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.
performPartialImportboolean
Optional. 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)required
statusstring
Transaction status.
Must be one of: pending, started, finished.
resultstring
Result status.
Must be one of: notAvailable, success, error, partialSuccess.
createdAtstring (date-time)
finishedAtstring (date-time)
expiryAtstring (date-time)
responseobject
Response object received from firewall.
requestobject
Transaction request called.
Show child attributesHide child attributes
methodstring
Method type of request called.
pathstring
Request path.
queryarray of object
Show child attributesHide child attributes
keystring
valuestring

Errors

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.