{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
Inventory
Create or update an asset
Creates a CUSTOM or INFORMATION asset. It appears in Secfix like an asset added in the app. Set the owner with ownerId or ownerEmail.
To link the asset to a record in your own system, send externalSource and externalAssetId. If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201.
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
A unique key, up to 256 characters, that makes the request safe to retry. Use a new UUID for each distinct request. If you send the same key again, you get the first response back, for at least 24 hours after the first request completes. Only successful (2xx) responses are stored. If the first request is still running, you get 409 idempotency_in_progress: wait the number of seconds in Retry-After, then retry. See Idempotency.
Maximum string length: 256
Example:
"b0f8e5a2-3c1d-4e6f-8a9b-0c1d2e3f4a5b"
Body
application/json
Creates one CUSTOM or INFORMATION asset. It appears in Secfix like an asset added in the app. Send externalSource and externalAssetId to link it to a record in your system: a later create with the same pair in the same category updates this asset instead of adding another, and changes only the fields you send.
Serial number or asset ID, shown in Secfix as ID/Serial No. Up to 255 characters. Free text and not unique: to identify the asset in your system, use externalSource and externalAssetId.
The asset's id in your system. Up to 255 characters; leading and trailing spaces are removed. Must be unique per workspace, category and externalSource among assets that haven't been deleted. Matched exactly. Send it with externalSource. You can't change it later.
A name you choose for the system the asset comes from, such as servicenow. Up to 255 characters; leading and trailing spaces are removed. Matched exactly, so send the same value every time. Send it with externalAssetId.
Audit status, as shown in the Secfix app: COMPLETE when every field the category needs for an audit is set, otherwise INCOMPLETE. Left out when Secfix hasn't computed it yet. Read-only.
Serial number or asset ID, shown in Secfix as ID/Serial No.: the provider's resource id for cloud assets, the serial number for computers, and free text for CUSTOM and INFORMATION assets. Not unique.
Owner's employee id: the owner the Secfix app shows. The owner can be someone GET /v1/employees doesn't list, such as a service account or a person excluded from compliance, so looking them up there can return 404.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Secfix Developers (Staging)","description":"Staging documentation for the Secfix Public API — includes the staging environment. For production docs, see developer.secfix.com.","colors":{"primary":"#762EEA","light":"#A47CF3","dark":"#5B21B6"},"logo":{"light":"https://mintcdn.com/developer-staging-secfix/Q-9vTGgOSlO8yeFU/logo/light.svg?fit=max\u0026auto=format\u0026n=Q-9vTGgOSlO8yeFU\u0026q=85\u0026s=b6e2ca2f07e816208bdf37e60752ad07","dark":"https://mintcdn.com/developer-staging-secfix/Q-9vTGgOSlO8yeFU/logo/dark.svg?fit=max\u0026auto=format\u0026n=Q-9vTGgOSlO8yeFU\u0026q=85\u0026s=5c7e166ab0ada2db7f0f73e1b98e31d1"},"favicon":"https://mintcdn.com/developer-staging-secfix/wXpLA7sRWupSLgpu/favicon.svg?fit=max\u0026auto=format\u0026n=wXpLA7sRWupSLgpu\u0026q=85\u0026s=16e9bb91916a31f20ccae9e1dee085ec","navbar":{"links":[{"href":"mailto:support@secfix.com","label":"Support"}],"primary":{"type":"button","label":"Open Secfix","href":"https://app.secfix.com"}},"footer":{"socials":{"website":"https://secfix.com","linkedin":"https://www.linkedin.com/company/secfix"}},"banner":{"content":"🚧 Staging documentation — includes the staging environment. Production docs live at [developer.secfix.com](https://developer.secfix.com).","dismissible":true},"contextual":{"options":["copy","view"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Support","icon":"envelope","href":"mailto:support@secfix.com"},{"anchor":"Secfix.com","icon":"globe","href":"https://secfix.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"developer-staging-secfix","hasAudioNarration":false,"actualSubdomain":"developer-staging-secfix","customDomains":["developer-staging.secfix.com"],"gitSource":{"type":"gitlab","owner":"secfix/core","repo":"secfix-developers-docs","deployBranch":"staging","contentDirectory":"staging","isPrivate":true,"projectId":81651564,"mountPath":"","label":"","_id":"6adb56a2fef607a661886cb7"},"entitlements":{},"buildId":"6aeb4c849649d32714d386ca","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API reference","count":18},{"language":"default","tag":"Endpoints","count":17},{"language":"default","tag":"Documentation","count":14},{"language":"default","tag":"Inventory","count":9},{"language":"default","tag":"Core concepts","count":6},{"language":"default","tag":"Guides","count":5},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Changelog","count":2},{"language":"default","tag":"Computers","count":2},{"language":"default","tag":"Employees","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/inventory/create-or-update-an-asset","slug":"/api-reference/inventory/create-or-update-an-asset","pageMetadata":{"title":"Create or update an asset","description":"Creates a `CUSTOM` or `INFORMATION` asset. It appears in Secfix like an asset added in the app. Set the owner with `ownerId` or `ownerEmail`.\n\nTo link the asset to a record in your own system, send `externalSource` and `externalAssetId`. If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201.\n\nRequires the `all:write` scope.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/inventory/assets","href":"/api-reference/inventory/create-or-update-an-asset","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Creates a \", _jsx(_components.code, {\n children: \"CUSTOM\"\n }), \" or \", _jsx(_components.code, {\n children: \"INFORMATION\"\n }), \" asset. It appears in Secfix like an asset added in the app. Set the owner with \", _jsx(_components.code, {\n children: \"ownerId\"\n }), \" or \", _jsx(_components.code, {\n children: \"ownerEmail\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"To link the asset to a record in your own system, send \", _jsx(_components.code, {\n children: \"externalSource\"\n }), \" and \", _jsx(_components.code, {\n children: \"externalAssetId\"\n }), \". If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Requires the \", _jsx(_components.code, {\n children: \"all:write\"\n }), \" scope.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create or update an asset","description":"Creates a `CUSTOM` or `INFORMATION` asset. It appears in Secfix like an asset added in the app. Set the owner with `ownerId` or `ownerEmail`.\n\nTo link the asset to a record in your own system, send `externalSource` and `externalAssetId`. If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201.\n\nRequires the `all:write` scope.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/inventory/assets","href":"/api-reference/inventory/create-or-update-an-asset","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Inventory"],"summary":"Create or update an asset","description":"Creates a `CUSTOM` or `INFORMATION` asset. It appears in Secfix like an asset added in the app. Set the owner with `ownerId` or `ownerEmail`.\n\nTo link the asset to a record in your own system, send `externalSource` and `externalAssetId`. If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201.\n\nRequires the `all:write` scope.","operationId":"createAsset","parameters":["2cc69474-b3cf-44f1-8aac-8ab90e9be92f"],"requestBody":"79e45868-fb5d-4fb3-83cc-1834e4537f42","responses":{"200":"d3d0647c-e7e3-439c-ad44-c0185563ec89","201":"3508184f-44ba-43fc-bde1-43e8f8399eb6","400":"c5ca3918-b84b-4da2-b8c5-5681fca6a0ef","401":"b6e7c23b-2aee-45ff-95d8-0bc37e7e3fd9","403":"723791b1-0d72-4b97-8316-f8a0410e3003","405":"b0e57580-b983-4e82-b076-0ea6b72c5d64","409":"6dcc327b-c1e8-4934-b7b2-f39e025dae4f","413":"4fc03db5-0ec3-4e54-a43e-086f3e8aa2b1","415":"1383c2ea-fbb9-4b7a-b9bb-2a509f21187e","429":"a56edb84-f12f-48ac-b80f-79e58860e403","500":"080cc672-fe43-4bba-abfe-c0589eba7b20"},"method":"post","type":"path","servers":["4f2cec6e-2289-49a2-8248-1dc79040f3ad","790bd194-79b5-4d3d-b43a-ec342482981e"],"security":["a0177fc0-042b-4625-a1c4-9a855bdea4a9"],"path":"/v1/inventory/assets","baseUrlOptions":["https://api.secfix.com","https://api-staging.secfix.com"],"title":"Create or update an asset","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"2cc69474-b3cf-44f1-8aac-8ab90e9be92f":{"name":"Idempotency-Key","in":"header","description":"A unique key, up to 256 characters, that makes the request safe to retry. Use a new UUID for each distinct request. If you send the same key again, you get the first response back, for at least 24 hours after the first request completes. Only successful (2xx) responses are stored. If the first request is still running, you get `409 idempotency_in_progress`: wait the number of seconds in `Retry-After`, then retry. See [Idempotency](/idempotency).","required":true,"schema":{"maxLength":256,"type":"string","example":"b0f8e5a2-3c1d-4e6f-8a9b-0c1d2e3f4a5b","isRequired":true,"description":"A unique key, up to 256 characters, that makes the request safe to retry. Use a new UUID for each distinct request. If you send the same key again, you get the first response back, for at least 24 hours after the first request completes. Only successful (2xx) responses are stored. If the first request is still running, you get `409 idempotency_in_progress`: wait the number of seconds in `Retry-After`, then retry. See [Idempotency](/idempotency).","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"application/json":{"schema":{"required":["categoryKey","name"],"type":"object","properties":{"categoryKey":{"type":"string","description":"Category to create the asset in: `CUSTOM` or `INFORMATION`, in any letter case.","example":"CUSTOM","enum":["CUSTOM","INFORMATION"],"isRequired":true,"uniqueKey":"categoryKey","typeLabel":"enum\u003cstring>"},"name":{"maxLength":255,"minLength":0,"type":"string","description":"Asset name, 1-255 characters. Leading and trailing spaces are removed.","example":"Office badge printer","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"classification":{"type":"string","description":"Data classification, in any letter case. Defaults to `INTERNAL`.","example":"CONFIDENTIAL","enum":["RESTRICTED","CONFIDENTIAL","INTERNAL","PUBLIC","UNKNOWN"],"uniqueKey":"classification","typeLabel":"enum\u003cstring>"},"customIdentifier":{"maxLength":255,"minLength":0,"type":"string","description":"Serial number or asset ID, shown in Secfix as **ID/Serial No.** Up to 255 characters. Free text and not unique: to identify the asset in your system, use `externalSource` and `externalAssetId`.","example":"SN-48213","uniqueKey":"customIdentifier","typeLabel":"string"},"dataStored":{"type":"object","properties":{"containsPatientData":{"type":"boolean","description":"Whether the asset stores patient data.","example":false,"uniqueKey":"dataStored.containsPatientData","typeLabel":"boolean"},"containsUserData":{"type":"boolean","description":"Whether the asset stores user data.","example":true,"uniqueKey":"dataStored.containsUserData","typeLabel":"boolean"},"userDataInfo":{"maxLength":500,"minLength":0,"type":"string","description":"What kind of user data the asset stores, up to 500 characters.","example":"Customer names and email addresses.","uniqueKey":"dataStored.userDataInfo","typeLabel":"string"}},"description":"What data the asset stores. On create, fields you leave out stay unset.","uniqueKey":"dataStored","typeLabel":"object"},"description":{"maxLength":500,"minLength":0,"type":"string","description":"Asset description, up to 500 characters.","example":"Printer in the front office.","uniqueKey":"description","typeLabel":"string"},"externalAssetId":{"maxLength":255,"minLength":0,"type":"string","description":"The asset's id in your system. Up to 255 characters; leading and trailing spaces are removed. Must be unique per workspace, category and `externalSource` among assets that haven't been deleted. Matched exactly. Send it with `externalSource`. You can't change it later.","example":"CI-1042","uniqueKey":"externalAssetId","typeLabel":"string"},"externalSource":{"maxLength":255,"minLength":0,"type":"string","description":"A name you choose for the system the asset comes from, such as `servicenow`. Up to 255 characters; leading and trailing spaces are removed. Matched exactly, so send the same value every time. Send it with `externalAssetId`.","example":"servicenow-cmdb","uniqueKey":"externalSource","typeLabel":"string"},"ownerEmail":{"maxLength":320,"minLength":0,"type":"string","description":"Owner's email address, case-insensitive. Send `ownerId` or `ownerEmail`, not both.","example":"alex@example.com","uniqueKey":"ownerEmail","typeLabel":"string"},"ownerId":{"type":"string","description":"Owner's employee `id`. Send `ownerId` or `ownerEmail`, not both. An asset without an owner shows as incomplete.","format":"uuid","example":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d","uniqueKey":"ownerId","typeLabel":"string\u003cuuid>"}},"description":"Creates one `CUSTOM` or `INFORMATION` asset. It appears in Secfix like an asset added in the app. Send `externalSource` and `externalAssetId` to link it to a record in your system: a later create with the same pair in the same category updates this asset instead of adding another, and changes only the fields you send.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"categoryKey":"CUSTOM","name":"Office badge printer","classification":"CONFIDENTIAL","customIdentifier":"SN-48213","dataStored":{"containsPatientData":false,"containsUserData":true,"userDataInfo":"Customer names and email addresses."},"description":"Printer in the front office.","externalAssetId":"CI-1042","externalSource":"servicenow-cmdb","ownerEmail":"alex@example.com","ownerId":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"d3d0647c-e7e3-439c-ad44-c0185563ec89":{"description":"An asset with the same `externalSource` and `externalAssetId` already existed and was updated.","headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current rate-limit window.","style":"simple","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","style":"simple","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the rate-limit window resets.","style":"simple","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","description":"Cloud account id. `CLOUD` assets only.","example":"123456789012","uniqueKey":"accountId","typeLabel":"string"},"auditStatus":{"type":"string","description":"Audit status, as shown in the Secfix app: `COMPLETE` when every field the category needs for an audit is set, otherwise `INCOMPLETE`. Left out when Secfix hasn't computed it yet. Read-only.","readOnly":true,"example":"INCOMPLETE","enum":["COMPLETE","INCOMPLETE"],"uniqueKey":"auditStatus","typeLabel":"enum\u003cstring>"},"categoryKey":{"type":"string","description":"The asset's category key. For cloud assets it's the sub-type, such as `CLOUD_QUEUE`.","example":"CLOUD","enum":["CLOUD","COMPUTER","CUSTOM","INFORMATION","EMPLOYEE"],"uniqueKey":"categoryKey","typeLabel":"enum\u003cstring>"},"classification":{"type":"string","description":"Data classification.","example":"CONFIDENTIAL","uniqueKey":"classification","typeLabel":"string"},"createdAt":{"type":"string","description":"When the asset was created (UTC).","format":"date-time","example":"2026-01-15T09:30:00.000Z","uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"customIdentifier":{"type":"string","description":"Serial number or asset ID, shown in Secfix as **ID/Serial No.**: the provider's resource id for cloud assets, the serial number for computers, and free text for `CUSTOM` and `INFORMATION` assets. Not unique.","example":"i-0abc123def456","uniqueKey":"customIdentifier","typeLabel":"string"},"dataStored":{"type":"object","properties":{"containsPatientData":{"type":"boolean","description":"Whether the asset contains patient data.","example":false,"uniqueKey":"dataStored.containsPatientData","typeLabel":"boolean"},"containsUserData":{"type":"boolean","description":"Whether the asset contains user data.","example":true,"uniqueKey":"dataStored.containsUserData","typeLabel":"boolean"},"userDataInfo":{"type":"string","description":"What kind of user data the asset contains.","example":"Customer contact records","uniqueKey":"dataStored.userDataInfo","typeLabel":"string"}},"description":"What data a `CUSTOM` or `INFORMATION` asset stores. Set it with `dataStored` on create or update.","uniqueKey":"dataStored","typeLabel":"object"},"description":{"type":"string","description":"Asset description.","example":"Primary production web server.","uniqueKey":"description","typeLabel":"string"},"email":{"type":"string","description":"Employee's email address. Personal data. `EMPLOYEE` assets only.","example":"jane.doe@example.com","uniqueKey":"email","typeLabel":"string"},"externalAssetId":{"type":"string","description":"The asset's id in your system, as sent on create. Left out for other assets.","example":"CI-1042","uniqueKey":"externalAssetId","typeLabel":"string"},"externalSource":{"type":"string","description":"The system the asset comes from, as sent on create. Only set on `CUSTOM` and `INFORMATION` assets created through the API.","example":"servicenow-cmdb","uniqueKey":"externalSource","typeLabel":"string"},"id":{"type":"string","description":"The asset's id (UUID).","format":"uuid","example":"3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"id","typeLabel":"string\u003cuuid>"},"lastCheckedAt":{"type":"string","description":"When the asset was last checked for compliance (UTC). Left out for assets that aren't checked.","format":"date-time","example":"2026-06-30T02:00:00.000Z","uniqueKey":"lastCheckedAt","typeLabel":"string\u003cdate-time>"},"name":{"type":"string","description":"Asset name.","example":"prod-web-01","uniqueKey":"name","typeLabel":"string"},"osVersion":{"type":"string","description":"Operating system and version. `COMPUTER` assets only.","example":"macOS 14.5","uniqueKey":"osVersion","typeLabel":"string"},"ownerId":{"type":"string","description":"Owner's employee `id`: the owner the Secfix app shows. The owner can be someone `GET /v1/employees` doesn't list, such as a service account or a person excluded from compliance, so looking them up there can return 404.","format":"uuid","example":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d","uniqueKey":"ownerId","typeLabel":"string\u003cuuid>"},"ownerSource":{"type":"string","description":"Where the owner assignment comes from.","example":"MANUAL","uniqueKey":"ownerSource","typeLabel":"string"},"ownerStatus":{"type":"string","description":"`COMPLETE` when the asset has an owner, otherwise `INCOMPLETE`. Set for every category. This isn't the audit status; see `auditStatus`. Read-only.","readOnly":true,"example":"COMPLETE","enum":["COMPLETE","INCOMPLETE"],"uniqueKey":"ownerStatus","typeLabel":"enum\u003cstring>"},"region":{"type":"string","description":"Cloud region or location. `CLOUD` assets only.","example":"eu-central-1","uniqueKey":"region","typeLabel":"string"},"serialNumber":{"type":"string","description":"Hardware serial number. `COMPUTER` assets only.","example":"C02XY1234ABC","uniqueKey":"serialNumber","typeLabel":"string"},"tags":{"type":"array","description":"Tags on the asset.","items":{"type":"object","properties":{"key":{"maxLength":1000,"minLength":0,"type":"string","description":"Tag key. On writes, it must be a tag key that exists in your workspace.","example":"environment","uniqueKey":"tags.items.[INDEX].key","typeLabel":"string"},"readOnly":{"type":"boolean","description":"`true` for tags managed by Secfix, such as `SecfixOwner`. You can't change those through the API. Ignored on writes.","readOnly":true,"example":false,"uniqueKey":"tags.items.[INDEX].readOnly","typeLabel":"boolean"},"value":{"maxLength":255,"minLength":0,"type":"string","description":"Tag value.","example":"production","uniqueKey":"tags.items.[INDEX].value","typeLabel":"string"}},"description":"A tag on an asset. On writes, `key` must be a tag key in your workspace that you can edit.","uniqueKey":"tags.items.[INDEX]","typeLabel":"object"},"uniqueKey":"tags","typeLabel":"object[]"},"type":{"type":"string","description":"Asset type within its category.","example":"SERVER","uniqueKey":"type","typeLabel":"string"}},"description":"An inventory asset. Fields marked with a category are only set for assets in that category. For `EMPLOYEE` assets, `id` is the employee's `id`.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"accountId":"123456789012","auditStatus":"INCOMPLETE","categoryKey":"CLOUD","classification":"CONFIDENTIAL","createdAt":"2026-01-15T09:30:00.000Z","customIdentifier":"i-0abc123def456","dataStored":{"containsPatientData":false,"containsUserData":true,"userDataInfo":"Customer contact records"},"description":"Primary production web server.","email":"jane.doe@example.com","externalAssetId":"CI-1042","externalSource":"servicenow-cmdb","id":"3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","lastCheckedAt":"2026-06-30T02:00:00.000Z","name":"prod-web-01","osVersion":"macOS 14.5","ownerId":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d","ownerSource":"MANUAL","ownerStatus":"COMPLETE","region":"eu-central-1","serialNumber":"C02XY1234ABC","tags":[{"key":"environment","readOnly":false,"value":"production"}],"type":"SERVER"}}},"exampleType":"generated"}},"exampleType":"generated"},"3508184f-44ba-43fc-bde1-43e8f8399eb6":{"description":"Asset created.","headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current rate-limit window.","style":"simple","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","style":"simple","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the rate-limit window resets.","style":"simple","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","description":"Cloud account id. `CLOUD` assets only.","example":"123456789012","uniqueKey":"accountId","typeLabel":"string"},"auditStatus":{"type":"string","description":"Audit status, as shown in the Secfix app: `COMPLETE` when every field the category needs for an audit is set, otherwise `INCOMPLETE`. Left out when Secfix hasn't computed it yet. Read-only.","readOnly":true,"example":"INCOMPLETE","enum":["COMPLETE","INCOMPLETE"],"uniqueKey":"auditStatus","typeLabel":"enum\u003cstring>"},"categoryKey":{"type":"string","description":"The asset's category key. For cloud assets it's the sub-type, such as `CLOUD_QUEUE`.","example":"CLOUD","enum":["CLOUD","COMPUTER","CUSTOM","INFORMATION","EMPLOYEE"],"uniqueKey":"categoryKey","typeLabel":"enum\u003cstring>"},"classification":{"type":"string","description":"Data classification.","example":"CONFIDENTIAL","uniqueKey":"classification","typeLabel":"string"},"createdAt":{"type":"string","description":"When the asset was created (UTC).","format":"date-time","example":"2026-01-15T09:30:00.000Z","uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"customIdentifier":{"type":"string","description":"Serial number or asset ID, shown in Secfix as **ID/Serial No.**: the provider's resource id for cloud assets, the serial number for computers, and free text for `CUSTOM` and `INFORMATION` assets. Not unique.","example":"i-0abc123def456","uniqueKey":"customIdentifier","typeLabel":"string"},"dataStored":{"type":"object","properties":{"containsPatientData":{"type":"boolean","description":"Whether the asset contains patient data.","example":false,"uniqueKey":"dataStored.containsPatientData","typeLabel":"boolean"},"containsUserData":{"type":"boolean","description":"Whether the asset contains user data.","example":true,"uniqueKey":"dataStored.containsUserData","typeLabel":"boolean"},"userDataInfo":{"type":"string","description":"What kind of user data the asset contains.","example":"Customer contact records","uniqueKey":"dataStored.userDataInfo","typeLabel":"string"}},"description":"What data a `CUSTOM` or `INFORMATION` asset stores. Set it with `dataStored` on create or update.","uniqueKey":"dataStored","typeLabel":"object"},"description":{"type":"string","description":"Asset description.","example":"Primary production web server.","uniqueKey":"description","typeLabel":"string"},"email":{"type":"string","description":"Employee's email address. Personal data. `EMPLOYEE` assets only.","example":"jane.doe@example.com","uniqueKey":"email","typeLabel":"string"},"externalAssetId":{"type":"string","description":"The asset's id in your system, as sent on create. Left out for other assets.","example":"CI-1042","uniqueKey":"externalAssetId","typeLabel":"string"},"externalSource":{"type":"string","description":"The system the asset comes from, as sent on create. Only set on `CUSTOM` and `INFORMATION` assets created through the API.","example":"servicenow-cmdb","uniqueKey":"externalSource","typeLabel":"string"},"id":{"type":"string","description":"The asset's id (UUID).","format":"uuid","example":"3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"id","typeLabel":"string\u003cuuid>"},"lastCheckedAt":{"type":"string","description":"When the asset was last checked for compliance (UTC). Left out for assets that aren't checked.","format":"date-time","example":"2026-06-30T02:00:00.000Z","uniqueKey":"lastCheckedAt","typeLabel":"string\u003cdate-time>"},"name":{"type":"string","description":"Asset name.","example":"prod-web-01","uniqueKey":"name","typeLabel":"string"},"osVersion":{"type":"string","description":"Operating system and version. `COMPUTER` assets only.","example":"macOS 14.5","uniqueKey":"osVersion","typeLabel":"string"},"ownerId":{"type":"string","description":"Owner's employee `id`: the owner the Secfix app shows. The owner can be someone `GET /v1/employees` doesn't list, such as a service account or a person excluded from compliance, so looking them up there can return 404.","format":"uuid","example":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d","uniqueKey":"ownerId","typeLabel":"string\u003cuuid>"},"ownerSource":{"type":"string","description":"Where the owner assignment comes from.","example":"MANUAL","uniqueKey":"ownerSource","typeLabel":"string"},"ownerStatus":{"type":"string","description":"`COMPLETE` when the asset has an owner, otherwise `INCOMPLETE`. Set for every category. This isn't the audit status; see `auditStatus`. Read-only.","readOnly":true,"example":"COMPLETE","enum":["COMPLETE","INCOMPLETE"],"uniqueKey":"ownerStatus","typeLabel":"enum\u003cstring>"},"region":{"type":"string","description":"Cloud region or location. `CLOUD` assets only.","example":"eu-central-1","uniqueKey":"region","typeLabel":"string"},"serialNumber":{"type":"string","description":"Hardware serial number. `COMPUTER` assets only.","example":"C02XY1234ABC","uniqueKey":"serialNumber","typeLabel":"string"},"tags":{"type":"array","description":"Tags on the asset.","items":{"type":"object","properties":{"key":{"maxLength":1000,"minLength":0,"type":"string","description":"Tag key. On writes, it must be a tag key that exists in your workspace.","example":"environment","uniqueKey":"tags.items.[INDEX].key","typeLabel":"string"},"readOnly":{"type":"boolean","description":"`true` for tags managed by Secfix, such as `SecfixOwner`. You can't change those through the API. Ignored on writes.","readOnly":true,"example":false,"uniqueKey":"tags.items.[INDEX].readOnly","typeLabel":"boolean"},"value":{"maxLength":255,"minLength":0,"type":"string","description":"Tag value.","example":"production","uniqueKey":"tags.items.[INDEX].value","typeLabel":"string"}},"description":"A tag on an asset. On writes, `key` must be a tag key in your workspace that you can edit.","uniqueKey":"tags.items.[INDEX]","typeLabel":"object"},"uniqueKey":"tags","typeLabel":"object[]"},"type":{"type":"string","description":"Asset type within its category.","example":"SERVER","uniqueKey":"type","typeLabel":"string"}},"description":"An inventory asset. Fields marked with a category are only set for assets in that category. For `EMPLOYEE` assets, `id` is the employee's `id`.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"accountId":"123456789012","auditStatus":"INCOMPLETE","categoryKey":"CLOUD","classification":"CONFIDENTIAL","createdAt":"2026-01-15T09:30:00.000Z","customIdentifier":"i-0abc123def456","dataStored":{"containsPatientData":false,"containsUserData":true,"userDataInfo":"Customer contact records"},"description":"Primary production web server.","email":"jane.doe@example.com","externalAssetId":"CI-1042","externalSource":"servicenow-cmdb","id":"3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","lastCheckedAt":"2026-06-30T02:00:00.000Z","name":"prod-web-01","osVersion":"macOS 14.5","ownerId":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d","ownerSource":"MANUAL","ownerStatus":"COMPLETE","region":"eu-central-1","serialNumber":"C02XY1234ABC","tags":[{"key":"environment","readOnly":false,"value":"production"}],"type":"SERVER"}}},"exampleType":"generated"}},"exampleType":"generated"},"c5ca3918-b84b-4da2-b8c5-5681fca6a0ef":{"description":"The request body is invalid, or the `Idempotency-Key` header is missing or longer than 256 characters. Code: `validation_failed` or `malformed_request`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"b6e7c23b-2aee-45ff-95d8-0bc37e7e3fd9":{"description":"The access token is missing, invalid or replaced by a newer one. Code: `unauthorized` or `token_superseded`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"723791b1-0d72-4b97-8316-f8a0410e3003":{"description":"The access token doesn't have the scope this endpoint needs, or the category can't be created through the API. Code: `scope_required` or `resource_not_writable`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"b0e57580-b983-4e82-b076-0ea6b72c5d64":{"description":"This path doesn't support the HTTP method. The `Allow` header lists the methods it supports. Code: `method_not_allowed`.","headers":{"Allow":{"description":"Comma-separated list of the HTTP methods this path supports.","style":"simple","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"6dcc327b-c1e8-4934-b7b2-f39e025dae4f":{"description":"The `Idempotency-Key` was already used with a different body (`idempotency_conflict`), the first request with this key is still running (`idempotency_in_progress`), or another request created an asset with the same `externalSource` and `externalAssetId` at the same moment (`write_conflict`). For `idempotency_in_progress` and `write_conflict`, retry after `Retry-After`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Sent with `idempotency_in_progress` and `write_conflict`.","style":"simple","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"4fc03db5-0ec3-4e54-a43e-086f3e8aa2b1":{"description":"The request body is too large. Code: `payload_too_large`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"1383c2ea-fbb9-4b7a-b9bb-2a509f21187e":{"description":"Send the request body as `application/json`. Code: `unsupported_media_type`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"a56edb84-f12f-48ac-b80f-79e58860e403":{"description":"Too many requests. Wait the number of seconds in `Retry-After`, then retry. Code: `rate_limited`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","style":"simple","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"080cc672-fe43-4bba-abfe-c0589eba7b20":{"description":"Unexpected server error. Code: `internal_error`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"a0177fc0-042b-4625-a1c4-9a855bdea4a9":{"bearerAuth":{"type":"http","description":"Access token from `POST /oauth/token`.","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"4f2cec6e-2289-49a2-8248-1dc79040f3ad":{"url":"https://api.secfix.com","description":"Production"},"790bd194-79b5-4d3d-b43a-ec342482981e":{"url":"https://api-staging.secfix.com","description":"Staging"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","description":"Access token from `POST /oauth/token`.","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Access token from `POST /oauth/token`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"developer-staging-secfix","siteName":"Secfix Developers (Staging)","title":"Create or update an asset - Secfix Developers (Staging)","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T15:17:32.744Z","originalFileLocation":"api-reference/inventory/create-or-update-an-asset.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Creates a CUSTOM or INFORMATION asset. It appears in Secfix like an asset added in the app. Set the owner with ownerId or ownerEmail. To link the asset to a record in your own system, send externalSource and externalAssetId. If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201. Requires the all:write scope.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Secfix Developers (Staging)\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create or update an asset - Secfix Developers (Staging)\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a CUSTOM or INFORMATION asset. It appears in Secfix like an asset added in the app. Set the owner with ownerId or ownerEmail. To link the asset to a record in your own system, send externalSource and externalAssetId. If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201. Requires the all:write scope.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Secfix Developers (Staging)\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer-staging.secfix.com/api-reference/inventory/create-or-update-an-asset\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://developer-staging-secfix.mintlify.site/_mintlify/api/og/v2?division=Inventory\u0026amp;title=Create+or+update+an+asset\u0026amp;description=Creates+a+%60CUSTOM%60+or+%60INFORMATION%60+asset.+It+appears+in+Secfix+like+an+asset+added+in+the+app.+Set+the+owner+with+%60ownerId%60+or+%60ownerEmail%60.%0A%0ATo+link+the+asset\u0026amp;theme=d051878f67505cd781ea0506\u0026amp;signature=0312b94338266b07d88ec571b700512aa1d5d84a761dc0f71fd5b51649282aaa\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create or update an asset - Secfix Developers (Staging)\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a CUSTOM or INFORMATION asset. It appears in Secfix like an asset added in the app. Set the owner with ownerId or ownerEmail. To link the asset to a record in your own system, send externalSource and externalAssetId. If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201. Requires the all:write scope.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://developer-staging-secfix.mintlify.site/_mintlify/api/og/v2?division=Inventory\u0026amp;title=Create+or+update+an+asset\u0026amp;description=Creates+a+%60CUSTOM%60+or+%60INFORMATION%60+asset.+It+appears+in+Secfix+like+an+asset+added+in+the+app.+Set+the+owner+with+%60ownerId%60+or+%60ownerEmail%60.%0A%0ATo+link+the+asset\u0026amp;theme=d051878f67505cd781ea0506\u0026amp;signature=0312b94338266b07d88ec571b700512aa1d5d84a761dc0f71fd5b51649282aaa\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Secfix Developers (Staging)\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#762EEA\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer-staging.secfix.com/api-reference/inventory/create-or-update-an-asset\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/inventory/create-or-update-an-asset.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developer-staging.secfix.com/#organization\",\"name\":\"Secfix Developers (Staging)\",\"url\":\"https://developer-staging.secfix.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/developer-staging-secfix/Q-9vTGgOSlO8yeFU/logo/light.svg?fit=max\u0026auto=format\u0026n=Q-9vTGgOSlO8yeFU\u0026q=85\u0026s=b6e2ca2f07e816208bdf37e60752ad07\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developer-staging.secfix.com#website\",\"name\":\"Secfix Developers (Staging)\",\"url\":\"https://developer-staging.secfix.com\",\"publisher\":{\"@id\":\"https://developer-staging.secfix.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer-staging.secfix.com/api-reference/inventory/create-or-update-an-asset#webpage\",\"url\":\"https://developer-staging.secfix.com/api-reference/inventory/create-or-update-an-asset\",\"name\":\"Create or update an asset\",\"description\":\"Creates a CUSTOM or INFORMATION asset. It appears in Secfix like an asset added in the app. Set the owner with ownerId or ownerEmail. To link the asset to a record in your own system, send externalSource and externalAssetId. If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201. Requires the all:write scope.\",\"dateModified\":\"2026-11-04T15:17:32.744Z\",\"isPartOf\":{\"@id\":\"https://developer-staging.secfix.com#website\"},\"breadcrumb\":{\"@id\":\"https://developer-staging.secfix.com/api-reference/inventory/create-or-update-an-asset#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer-staging.secfix.com/api-reference/inventory/create-or-update-an-asset#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://developer-staging.secfix.com/api-reference/oauth/get-an-access-token\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Inventory\",\"item\":\"https://developer-staging.secfix.com/api-reference/inventory/list-assets\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create or update an asset\",\"item\":\"https://developer-staging.secfix.com/api-reference/inventory/create-or-update-an-asset\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer-staging.secfix.com/api-reference/inventory/create-or-update-an-asset#apireference\",\"headline\":\"Create or update an asset\",\"name\":\"Create or update an asset\",\"description\":\"Creates a CUSTOM or INFORMATION asset. It appears in Secfix like an asset added in the app. Set the owner with ownerId or ownerEmail. To link the asset to a record in your own system, send externalSource and externalAssetId. If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201. Requires the all:write scope.\",\"url\":\"https://developer-staging.secfix.com/api-reference/inventory/create-or-update-an-asset\",\"mainEntityOfPage\":{\"@id\":\"https://developer-staging.secfix.com/api-reference/inventory/create-or-update-an-asset#webpage\"},\"dateModified\":\"2026-11-04T15:17:32.744Z\",\"publisher\":{\"@id\":\"https://developer-staging.secfix.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developer-staging.secfix.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Secfix Developers (Staging)\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Secfix Developers (Staging)","nav":{"global":{"anchors":[{"anchor":"Support","icon":"envelope","href":"mailto:support@secfix.com"},{"anchor":"Secfix.com","icon":"globe","href":"https://secfix.com"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"Overview","href":"/api-reference/overview"}]},{"group":"Endpoints","pages":[{"group":"OAuth","pages":[{"title":"Get an access token","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /oauth/token","href":"/api-reference/oauth/get-an-access-token"}]},{"group":"Computers","pages":[{"title":"List computers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/computers","href":"/api-reference/computers/list-computers"},{"title":"Get a computer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/computers/{id}","href":"/api-reference/computers/get-a-computer"}]},{"group":"Employees","pages":[{"title":"List employees","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/employees","href":"/api-reference/employees/list-employees"},{"title":"Get an employee","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/employees/{id}","href":"/api-reference/employees/get-an-employee"}]},{"group":"Groups","pages":[{"title":"List groups","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/groups","href":"/api-reference/groups/list-groups"},{"title":"Get a group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/groups/{id}","href":"/api-reference/groups/get-a-group"}]},{"group":"Health","pages":[{"title":"Check API health","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/health","href":"/api-reference/health/check-api-health"}]},{"group":"Inventory","pages":[{"title":"List assets","description":"Returns assets from every inventory category. Assets hidden in the Secfix app and deleted assets aren't returned. Filters combine with AND. Requires the `all:read` scope.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/inventory/assets","href":"/api-reference/inventory/list-assets"},{"title":"Create or update an asset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/inventory/assets","href":"/api-reference/inventory/create-or-update-an-asset"},{"title":"Create assets in a batch","description":"Creates up to 100 `CUSTOM` or `INFORMATION` assets in one request. Each record is validated and saved on its own, so one invalid record doesn't stop the others. The response is 200 with one result per record, in request order.\n\nA record whose `externalSource` and `externalAssetId` match an existing asset in its category updates that asset instead: its `action` is `UPDATED`, and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected.\n\nA batch counts as one write request for rate limiting. Requires the `all:write` scope.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/inventory/assets/batch-create","href":"/api-reference/inventory/create-assets-in-a-batch"},{"title":"Delete assets in a batch","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/inventory/assets/batch-delete","href":"/api-reference/inventory/delete-assets-in-a-batch"},{"title":"Update assets in a batch","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/inventory/assets/batch-update","href":"/api-reference/inventory/update-assets-in-a-batch"},{"title":"Get an asset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/inventory/assets/{id}","href":"/api-reference/inventory/get-an-asset"},{"title":"Delete an asset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/inventory/assets/{id}","href":"/api-reference/inventory/delete-an-asset"},{"title":"Update an asset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/inventory/assets/{id}","href":"/api-reference/inventory/update-an-asset"},{"title":"List asset categories","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/inventory/categories","href":"/api-reference/inventory/list-asset-categories"}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Create or update an asset - Secfix Developers (Staging)","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-Cj6eAYhz.js","dist-CdrJecqK.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-D-TRO5q5.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","AssistantPageLink-CHlcWBLM.js"]}