Structured + optional semantic catalog search (ADR 0012 / 0014).
POST
/v1/catalog/search-queriescurl -X POST 'https://api.embodiflow.io/v1/catalog/search-queries' \
-H 'Authorization: Bearer $EMBODIFLOW_PAT' \
-H 'Content-Type: application/json' \
-d '{
"scope": {
"projectId": "00000000-0000-0000-0000-000000000000",
"datasetId": "00000000-0000-0000-0000-000000000000",
"currentVersionOnly": true,
"includeSoftHidden": true
},
"where": {},
"semantic": {
"text": "string",
"limit": 0
},
"pageSize": 0,
"pageToken": "string",
"sortBy": "updatedAt",
"sortOrder": "asc"
}'认证
每个请求都需要携带个人访问令牌(PAT)。
- Authorization: Bearer PAT
请求头参数
- Idempotency-Keystring
Optional idempotency key, at most 255 characters (UUIDv4 recommended). A repeated key returns the first response byte-for-byte, including a 5xx. The same key with a different body, or a second in-flight request, returns 409 IDEMPOTENCY_CONFLICT. Keys are unique per tenant and retained for 24 hours.
请求体
Content-Typeapplication/json
- scopeobject | null
- projectIdstring (uuid) | null
- datasetIdstring (uuid) | null
- currentVersionOnlyboolean | null
- includeSoftHiddenboolean | null
- whereobject | null
- semanticobject | null
- textstring必填
- limitinteger | null
- pageSizeinteger | null
- pageTokenstring | null
- sortBystring | null可选值updatedAtcreatedAtdurationNsqualityStatusindexedAt
- sortOrderstring | null可选值ascdesc
响应
Success
- dataobject必填
- dataarray<CatalogSearchResultItemDto>必填
- metaobject必填
响应示例
{
"data": {
"data": [
{
"datasetVersionId": "string",
"datasetId": "string",
"projectId": "string",
"datasetName": "string",
"sourceType": "string",
"dataSource": "string",
"episodeStatisticsGranularity": "coarse",
"version": 0,
"qualityStatus": "string",
"assetHealth": {
"healthStatus": "failed",
"lastEventAt": "string",
"summary": "string",
"qualityStatus": "string"
},
"operationFacts": {
"contractVersion": "embodiflow-recording-operation-facts/v1",
"observedAt": "string",
"processing": {
"upload": {},
"workflow": {},
"quality": {}
},
"health": {
"status": "unknown",
"primaryBlockerCode": "string",
"openRepairCount": 0,
"observedAt": "string"
},
"playback": {
"reasonCode": "string"
},
"lastMeaningfulActivityAt": "string"
},
"recordingStatus": {
"lifecycle": "failed",
"quality": "warn",
"qualityCheckId": "string",
"qualityVerdict": "warning",
"stepId": "string",
"stepWaitReason": "string",
"noProgressSince": "string",
"failure": {
"code": "string",
"reason": "string",
"stepId": "string",
"stepName": "string",
"stepAlgorithm": {},
"stepRunId": "string",
"runId": "string",
"stepErrorCode": "string"
},
"runId": "string",
"processingRefused": {
"code": "string"
}
},
"durationNs": 0,
"cameraCount": 0,
"jointDimension": 0,
"topicCount": 0,
"featureCount": 0,
"fps": 0,
"semanticScore": 0,
"matchedEpisodes": [
{
"sampleKey": "string",
"episodeIndex": 0,
"semanticScore": 0,
"summaryPreview": "string"
}
],
"matchedSignals": [
{
"id": "string",
"signalKind": "string",
"name": "string",
"normalizedName": "string",
"signalType": "string",
"dimension": 0,
"frequencyHz": 0
}
],
"matchedPredicates": [
{
"kind": "field",
"summary": "string"
}
],
"updatedAt": "string"
}
],
"meta": {
"pageSize": 0,
"elapsedMs": 0,
"indexStatus": "missing"
}
}
}服务器https://api.embodiflow.io/v1https://api.embodiflow.dev/v1