Bản kê
Liệt kê byte dữ liệu, bằng chứng và ngữ cảnh được xuất.
Khởi tạo chuyển giao, truy vấn kết quả và xác nhận đúng transfer; xuất xong không tự đổi trách nhiệm hoặc xóa nguồn.
Liệt kê byte dữ liệu, bằng chứng và ngữ cảnh được xuất.
Đối soát thành phần, băm và khả năng kiểm chứng độc lập.
Ghi nhận điều kiện và điểm chuyển trách nhiệm.
MÔ PHỎNG CỤC BỘ · Hợp đồng mục tiêu · Không gửi yêu cầu mạng
/v1/archives/{archiveId}/transfers| Thuộc tính | Giá trị |
|---|---|
| Chủ sở hữu kỹ thuật | Dịch vụ lưu trữ |
| Quyền ứng dụng | transfers:write |
| HTTP | 202 |
| Xử lý lời gọi | Tác vụ bất đồng bộ: xem schema Job và trạng thái tài nguyên kết quả. |
| Sự kiện | TransferStarted |
Giữ nguồn đến khi bên nhận kiểm chứng và xác nhận.
curl --fail-with-body --request POST \
"${BASE_URL%/}/v1/archives/${ARCHIVE_ID}/transfers" \
--header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header "X-Correlation-ID: ${CORRELATION_ID}" \
--header "Idempotency-Key: ${IDEMPOTENCY_KEY}" \
--header "Content-Type: application/json" \
--data-binary "@${REQUEST_FILE}"{
"exportId": "exp-test-001",
"destinationProfileId": "destination-test-001",
"approvalId": "approval-test-002"
}{
"jobId": "job-transfer-001",
"state": "QUEUED",
"resourceId": "trf-test-001",
"correlationId": "corr-test-001",
"pollAfterSeconds": 2
}{
"type": "object",
"properties": {
"exportId": {
"type": "string"
},
"destinationProfileId": {
"type": "string"
},
"approvalId": {
"type": "string"
}
},
"required": [
"exportId",
"destinationProfileId",
"approvalId"
],
"additionalProperties": false,
"examples": [
{
"exportId": "exp-test-001",
"destinationProfileId": "destination-test-001",
"approvalId": "approval-test-002"
}
]
}{
"type": "https://example.invalid/problems/transfer-not-acknowledged",
"title": "Transfer Not Acknowledged",
"code": "TRANSFER_NOT_ACKNOWLEDGED",
"detail": "Recipient verification has not been acknowledged.",
"correlationId": "corr-test-001",
"requestId": "req-test-001",
"retryable": false,
"service": "Archive Service",
"timestamp": "2026-10-15T05:00:01Z",
"errors": [],
"status": 409,
"instance": "urn:ltans:request:req-test-001"
}/v1/transfers/{transferId}| Thuộc tính | Giá trị |
|---|---|
| Chủ sở hữu kỹ thuật | Dịch vụ lưu trữ |
| Quyền ứng dụng | transfers:read |
| HTTP | 200 |
| Xử lý lời gọi | Xác thực/quyền → xử lý HTTP; đây không phải enum trạng thái tài nguyên. |
| Sự kiện | Nhật ký hoặc sự kiện nội bộ |
Giữ nguồn đến khi bên nhận kiểm chứng và xác nhận.
curl --fail-with-body --request GET \
"${BASE_URL%/}/v1/transfers/${TRANSFER_ID}" \
--header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header "X-Correlation-ID: ${CORRELATION_ID}"{
"transferId": "trf-test-001",
"archiveId": "arc-test-001",
"exportId": "exp-test-001",
"recipientId": "recipient-test-001",
"state": "AWAITING_ACKNOWLEDGEMENT",
"scope": "Complete manifest inventory for exp-test-001; cryptographic verification outside this synthetic example",
"jobId": "job-transfer-001",
"packageDigest": {
"algorithm": "SHA-256",
"value": "5c34a84b064c4aa79bbc8f49cadeea9c55cfc9df10d655e9bc6f7a6af248e1c1"
}
}{
"type": "object",
"properties": {
"transferId": {
"type": "string",
"pattern": "^trf-"
},
"archiveId": {
"type": "string",
"pattern": "^arc-"
},
"exportId": {
"type": "string",
"pattern": "^exp-"
},
"recipientId": {
"type": "string"
},
"scope": {
"type": "string",
"minLength": 1
},
"state": {
"type": "string",
"enum": [
"QUEUED",
"TRANSFERRING",
"AWAITING_ACKNOWLEDGEMENT",
"ACKNOWLEDGED",
"REJECTED",
"FAILED"
]
},
"jobId": {
"type": "string"
},
"packageDigest": {
"$ref": "#/components/schemas/Digest"
},
"acknowledgementId": {
"type": "string"
},
"acceptedAt": {
"type": "string",
"format": "date-time"
}
},
"required": [
"transferId",
"archiveId",
"exportId",
"recipientId",
"scope",
"state",
"jobId",
"packageDigest"
],
"additionalProperties": false,
"examples": [
{
"transferId": "trf-test-001",
"archiveId": "arc-test-001",
"exportId": "exp-test-001",
"recipientId": "recipient-test-001",
"state": "AWAITING_ACKNOWLEDGEMENT",
"scope": "Complete manifest inventory for exp-test-001; cryptographic verification outside this synthetic example",
"jobId": "job-transfer-001",
"packageDigest": {
"algorithm": "SHA-256",
"value": "5c34a84b064c4aa79bbc8f49cadeea9c55cfc9df10d655e9bc6f7a6af248e1c1"
}
}
],
"allOf": [
{
"if": {
"properties": {
"state": {
"const": "ACKNOWLEDGED"
}
},
"required": [
"state"
]
},
"then": {
"required": [
"acknowledgementId",
"acceptedAt"
]
}
}
]
}{
"type": "https://example.invalid/problems/transfer-not-acknowledged",
"title": "Transfer Not Acknowledged",
"code": "TRANSFER_NOT_ACKNOWLEDGED",
"detail": "Recipient verification has not been acknowledged.",
"correlationId": "corr-test-001",
"requestId": "req-test-001",
"retryable": false,
"service": "Archive Service",
"timestamp": "2026-10-15T05:00:01Z",
"errors": [],
"status": 409,
"instance": "urn:ltans:request:req-test-001"
}/v1/transfers/{transferId}/acknowledgementsBên nhận xác nhận đúng transferId, exportId, recipientId, digest và scope. Backend phải đối chiếu danh tính phiên với bên nhận, từ chối sai phạm vi và giữ statement có audit.
| Thuộc tính | Giá trị |
|---|---|
| Chủ sở hữu kỹ thuật | Dịch vụ lưu trữ |
| Quyền ứng dụng | transfers:acknowledge |
| HTTP | 201 |
| Xử lý lời gọi | Xác thực/quyền → xử lý HTTP; đây không phải enum trạng thái tài nguyên. |
| Sự kiện | TransferCompleted |
Giữ nguồn đến khi bên nhận kiểm chứng và xác nhận.
curl --fail-with-body --request POST \
"${BASE_URL%/}/v1/transfers/${TRANSFER_ID}/acknowledgements" \
--header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header "X-Correlation-ID: ${CORRELATION_ID}" \
--header "Idempotency-Key: ${IDEMPOTENCY_KEY}" \
--header "Content-Type: application/json" \
--data-binary "@${REQUEST_FILE}"{
"transferId": "trf-test-001",
"exportId": "exp-test-001",
"recipientId": "recipient-test-001",
"packageDigest": {
"algorithm": "SHA-256",
"value": "5c34a84b064c4aa79bbc8f49cadeea9c55cfc9df10d655e9bc6f7a6af248e1c1"
},
"verificationReportReference": "urn:ltans:synthetic:recipient-report-001",
"scope": "Complete manifest inventory for exp-test-001; cryptographic verification outside this synthetic example",
"acceptedAt": "2026-10-15T09:00:00Z"
}{
"transferId": "trf-test-001",
"archiveId": "arc-test-001",
"exportId": "exp-test-001",
"recipientId": "recipient-test-001",
"state": "ACKNOWLEDGED",
"scope": "Complete manifest inventory for exp-test-001; cryptographic verification outside this synthetic example",
"jobId": "job-transfer-001",
"packageDigest": {
"algorithm": "SHA-256",
"value": "5c34a84b064c4aa79bbc8f49cadeea9c55cfc9df10d655e9bc6f7a6af248e1c1"
},
"acknowledgementId": "ack-test-001",
"acceptedAt": "2026-10-15T09:00:00Z"
}{
"type": "object",
"properties": {
"transferId": {
"type": "string",
"pattern": "^trf-"
},
"exportId": {
"type": "string",
"pattern": "^exp-"
},
"recipientId": {
"type": "string"
},
"packageDigest": {
"$ref": "#/components/schemas/Digest"
},
"verificationReportReference": {
"type": "string",
"format": "uri-reference"
},
"scope": {
"type": "string",
"minLength": 1
},
"acceptedAt": {
"type": "string",
"format": "date-time"
}
},
"required": [
"transferId",
"exportId",
"recipientId",
"packageDigest",
"verificationReportReference",
"scope",
"acceptedAt"
],
"additionalProperties": false,
"examples": [
{
"transferId": "trf-test-001",
"exportId": "exp-test-001",
"recipientId": "recipient-test-001",
"packageDigest": {
"algorithm": "SHA-256",
"value": "5c34a84b064c4aa79bbc8f49cadeea9c55cfc9df10d655e9bc6f7a6af248e1c1"
},
"verificationReportReference": "urn:ltans:synthetic:recipient-report-001",
"scope": "Complete manifest inventory for exp-test-001; cryptographic verification outside this synthetic example",
"acceptedAt": "2026-10-15T09:00:00Z"
}
],
"description": "Recipient statement for the exact transfer/package/scope. Server must bind authenticated recipient and path transferId, compare exportId and packageDigest, authorize scope, and preserve the statement. Digest alone is not an acknowledgement or proof of cryptographic verification."
}{
"type": "https://example.invalid/problems/transfer-not-acknowledged",
"title": "Transfer Not Acknowledged",
"code": "TRANSFER_NOT_ACKNOWLEDGED",
"detail": "Recipient verification has not been acknowledged.",
"correlationId": "corr-test-001",
"requestId": "req-test-001",
"retryable": false,
"service": "Archive Service",
"timestamp": "2026-10-15T05:00:01Z",
"errors": [],
"status": 409,
"instance": "urn:ltans:request:req-test-001"
}