FortWatchFortWatchDocs
Menu

Add an asset

POSThttps://api.fortwatch.ai/app/assets
Scope assets:writeOperation ID createAsset

Adds a domain, subdomain, IP address or bucket to a project and checks that it answers. Nothing is scanned until its ownership is proven (see Verify ownership). Past the plan's included assets the answer asks for a paid slot, which an API key or OAuth app cannot buy: add that asset in the dashboard.

Request body

JSON, required.

FieldTypeDescription
projectIdrequiredinteger
namestring | null
typerequiredstring
valuerequiredstring
bucketProviderstring | null
acceptExtraChargeboolean

Example request

curl -X POST "https://api.fortwatch.ai/app/assets" \
  -H "Authorization: Bearer $FORTWATCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "projectId": 42,
  "name": "Production",
  "type": "string",
  "value": "app.example.com",
  "bucketProvider": "string",
  "acceptExtraCharge": true
}'

Response 201

Created.

FieldTypeDescription
idrequirednumber
projectIdrequirednumber
namerequiredstring | null
typerequiredstring
valuerequiredstring
statusrequiredstring
canonicalUrlrequiredstring | null
resolvedIprequiredstring | null
cdnProviderrequiredstring | null
bucketProviderrequiredstring | null
lastCheckedAtrequiredstring (date-time) | null
failReasonrequiredstring | null
skippedRedirectHostrequiredstring | null
disabledScannerTypesrequiredstring[]
portScanModerequiredstring
nucleiMinSeverityrequiredstring
ownershipVerifiedAtrequiredstring (date-time) | null
ownershipTokenrequiredstring
ownershipMethodrequiredstring | null
createdAtrequiredstring (date-time)
updatedAtrequiredstring (date-time)
projectrequiredobject
idrequirednumber
namerequiredstring
colorrequiredstring
json
{
  "id": 42,
  "projectId": 42,
  "name": "Production",
  "type": "string",
  "value": "app.example.com",
  "status": "string",
  "canonicalUrl": "string",
  "resolvedIp": "string",
  "cdnProvider": "string",
  "bucketProvider": "string",
  "lastCheckedAt": "2026-10-16T12:00:00.000Z",
  "failReason": "string",
  "skippedRedirectHost": "string",
  "disabledScannerTypes": [
    "string"
  ],
  "portScanMode": "string",
  "nucleiMinSeverity": "string",
  "ownershipVerifiedAt": "2026-10-16T12:00:00.000Z",
  "ownershipToken": "string",
  "ownershipMethod": "string",
  "createdAt": "2026-10-16T12:00:00.000Z",
  "updatedAt": "2026-10-16T12:00:00.000Z",
  "project": {
    "id": 42,
    "name": "Production",
    "color": "string"
  }
}

Errors

400The request is not valid: a field is missing or has the wrong shape (the message names it).
401No valid credentials: the API key or access token is missing, revoked or expired (INVALID_API_KEY, INVALID_TOKEN).
403Not allowed: the key or token lacks this scope (SCOPE_REQUIRED), the route is dashboard-only (SESSION_REQUIRED), or a plan limit applies.
429Too many requests (RATE_LIMITED): wait the seconds Retry-After gives.