Get 50 GB free!Register for a free account and start migrating today — no credit card required.Register now →
GodwitGodwit Sync
HomePricingDownloadsDocs
Customer PortalGet Started
Get Started
Status API

Status Endpoint

JSON endpoint for real-time monitoring of sync progress. Use it for scripting, dashboards, and automation.

Enabling the Endpoint

Pass --status-addr to expose the /status and /metrics HTTP endpoints.

godwit sync --source s3://src --dest s3://dst --status-addr :8080

curl -s localhost:8080/status | jq .

Example Response

{
  "run_id": "abc123",
  "status": "running",
  "source": "s3://my-source",
  "destination": "s3://my-dest",
  "started_at": "2026-02-25T10:00:00Z",
  "finished_at": null,
  "eta_seconds": 1847.3,

  "objects": {
    "total": 1250000,
    "done": 980000,
    "failed": 45,
    "skipped": 8200,
    "excluded": 3100,
    "pending": 245000,
    "running": 13655
  },

  "bytes": {
    "total": 10995116277760,
    "done": 8620171161762,
    "failed": 2097152000,
    "skipped": 52428800000,
    "excluded": 10737418240,
    "pending": 2240962269022,
    "running": 68719476736
  },

  "version_history": {
    "complete": 850000,
    "partial": 320000,
    "fully_skipped": 80000
  },

  "object_lock": {
    "governance": 480000,
    "compliance": 320000,
    "legal_hold": 75000,
    "none": 375000
  },

  "storage_classes": [
    { "name": "STANDARD",             "count": 1050000, "bytes": 9200000000000,  "percent": 84.0 },
    { "name": "INTELLIGENT_TIERING",  "count": 125000,  "bytes": 1200000000000,  "percent": 10.0 },
    { "name": "GLACIER",              "count": 75000,   "bytes": 595116277760,   "percent": 6.0  }
  ],

  "verify": {
    "matched": 975800,
    "mismatched": 3,
    "errors": 12,
    "bytes": 8570000000000
  },

  "errors": ["upload failed on path/to/file.bin: connection reset"]
}

Field Reference

Top Level

FieldTypeDescription
run_idstringUnique identifier for this run
statusstringRun lifecycle state (running, planned, completed, failed)
sourcestringSource URI (e.g. s3://bucket)
destinationstringDestination URI

Object Counts

FieldTypeDescription
objects.totalint64Total objects discovered during planning
objects.doneint64Objects successfully transferred
objects.failedint64Objects that failed to transfer
objects.skippedint64Objects skipped (Glacier, unsupported key)
objects.excludedint64Objects excluded by policy
objects.pendingint64Objects queued but not yet started
objects.runningint64Objects currently being transferred

Byte Counts

FieldTypeDescription
bytes.totalint64Total bytes of all planned objects
bytes.doneint64Bytes successfully written
bytes.failedint64Bytes in failed objects
bytes.skippedint64Bytes in skipped objects
bytes.excludedint64Bytes in excluded objects
bytes.pendingint64Bytes in pending objects
bytes.runningint64Bytes in objects currently transferring

Timing & ETA

FieldTypeDescription
started_atRFC 3339When the run started
finished_atRFC 3339 | nullWhen the run finished (null while running)
eta_secondsfloat64Estimated seconds to completion

Version History

FieldTypeDescription
version_history.completeint64Keys where all versions were successfully transferred
version_history.partialint64Keys with mixed glacier-skipped and copied versions
version_history.fully_skippedint64Keys where all versions were glacier-skipped

Object Lock

FieldTypeDescription
object_lock.governanceint64Versions with GOVERNANCE retention mode
object_lock.complianceint64Versions with COMPLIANCE retention mode
object_lock.legal_holdint64Versions with legal hold enabled
object_lock.noneint64Versions with no Object Lock settings

Verification

FieldTypeDescription
verify.matchedint64Objects whose computed MD5 matched the sidecar checksum
verify.mismatchedint64Objects whose computed MD5 did not match the expected checksum
verify.errorsint64Objects that could not be verified (e.g. missing sidecar, read error)
verify.bytesint64Total bytes verified so far

Storage Classes

FieldTypeDescription
storage_classes[].namestringS3 storage class name (STANDARD, GLACIER, etc.)
storage_classes[].countint64Number of objects in this class
storage_classes[].bytesint64Total bytes in this class
storage_classes[].percentfloat64Percentage of total objects

Run Status Values

ValueMeaning
runningSync is in progress
plannedPlan-only mode completed
completedAll objects transferred successfully
failedOne or more objects failed

Usage Examples

Poll Until Complete

while true; do
  STATUS=$(curl -s localhost:8080/status | jq -r .status)
  if [ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ]; then
    echo "Run finished with status: $STATUS"
    break
  fi
  sleep 5
done

Progress Snapshot

curl -s localhost:8080/status | jq '{
  progress: (.objects.done / .objects.total * 100 | round),
  eta: .eta_seconds,
  failed: .objects.failed
}'
← Prometheus MetricsCLI Reference →

On this page

  • Enabling the Endpoint
  • Example Response
  • Field Reference
    • Top Level
    • Object Counts
    • Byte Counts
    • Timing & ETA
    • Version History
    • Object Lock
    • Verification
    • Storage Classes
  • Run Status Values
  • Usage Examples
    • Poll Until Complete
    • Progress Snapshot
Godwit Sync

Production-grade data migration and synchronization for large object storage. Control, predictability, and safety at scale.

Product

  • Pricing
  • Documentation
  • Changelog

Legal

  • Terms of Service
  • User Agreement
  • Privacy Policy

© 2026 Godwit Sync. All rights reserved.

Version v1.1.5