Skip to content

List sync history for OCI registry

GET
/api/v1/registries/oci/{id}/sync-history
curl --request GET \
--url 'http://localhost:3000/api/v1/registries/oci/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/sync-history?limit=example&offset=example' \
--header 'X-API-Key: <X-API-Key>'

Returns the 30-day sync history for a tenant OCI registry (newest first). Each entry captures status, counters, errors, duration, and trigger source.

id
required
string format: uuid

OCI registry UUID

limit
required
string
offset
required
string
x-organization-id
string format: uuid

UUID of the organization (tenant) the request acts in. It selects the tenant and grants nothing: the server checks membership or an open tenant switch. Not needed for global operations. A malformed value returns 400. API keys are fixed to their own organization; another organization returns 403. The x-organization-source header grants nothing.

Sync history returned successfully

Media typeapplication/json
object
data
required
Array<object>
object
id
required
string
registryId
required
string
scope
required
string
Allowed values: tenant global
organizationId
required
object
status
required
string
Allowed values: success partial failed
repositoriesFound
required
number
applicationsFound
required
number
applicationsImported
required
number
applicationsUpdated
required
number
errors
required
Array<string>
syncDurationMs
required
number
perRepository
required

Per-repository sync breakdown (FM-672)

Array<object>
object
repository
required
string
tagCount
required
number
found
required
number
imported
required
number
updated
required
number
errors
required
Array<string>
rejections

Tags that were not imported because they do not conform to the Margo registry spec (FM-1713). Absent when nothing was rejected.

Array<object>
object
tag
required
string
code
required

Stable code: NON_SPEC_ARTIFACT_TYPE, NON_EMPTY_CONFIG, RESOURCE_MEDIA_TYPE_MISMATCH, MISSING_DESCRIPTION_LAYER, REMOVED_DISCOVERY_STRATEGY or TAG_VERSION_MISMATCH.

string
reason
required
string
triggeredBy
required

User id (uuid) for manual runs, “scheduler” for cron, null when unknown

object
createdAt
required
string
total
required
number
hasMore
required
boolean
nextCursor
string
nullable
Example
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"registryId": "550e8400-e29b-41d4-a716-446655440000",
"scope": "tenant",
"organizationId": "550e8400-e29b-41d4-a716-446655440000",
"status": "success",
"repositoriesFound": 10,
"applicationsFound": 5,
"applicationsImported": 2,
"applicationsUpdated": 3,
"errors": [],
"syncDurationMs": 1234,
"perRepository": [
{
"repository": "library/nginx",
"tagCount": 12,
"found": 3,
"imported": 1,
"updated": 2,
"errors": [],
"rejections": [
{
"tag": "1.0.0",
"code": "NON_SPEC_ARTIFACT_TYPE",
"reason": "OCI manifest has no artifactType; Margo rc2 requires \"application/vnd.margo.app.v1+json\"."
}
]
}
],
"triggeredBy": "scheduler",
"createdAt": "2026-06-08T12:34:56.000Z"
}
],
"total": 42,
"hasMore": false
}

Unauthorized

Forbidden

OCI registry not found

Application service unavailable