Skip to content
Start here

Update Threat Signals article read status

client.CloudforceOne.ThreatSignals.Articles.Edit(ctx, articleID, params) (*ThreatSignalArticleEditResponse, error)
PATCH/accounts/{account_id}/cloudforce-one/v2/threat-signals/articles/{article_id}

Marks a Threat Signals article as read or unread.

Security

API Token

The preferred authorization scheme for interacting with the Cloudflare API. Create a token.

Example:Authorization: Bearer Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY
Accepted Permissions (at least one required)
Cloudforce One Write
ParametersExpand Collapse
articleID string

Threat Signals article UUID

formatuuid
params ThreatSignalArticleEditParams
AccountID param.Field[string]

Path param

Read param.Field[bool]

Body param: True to mark the article read, false to mark unread.

ReturnsExpand Collapse
type ThreatSignalArticleEditResponse struct{…}
ID string
formatuuid
BulletPoints ThreatSignalArticleEditResponseBulletPoints
Impact string
WhatHappened string
WhoAffected string
ContentR2Key string
FeedDisplayName string
FeedID string
formatuuid
FetchedAt string
IndicatorExtractionStatus ThreatSignalArticleEditResponseIndicatorExtractionStatus

Progress of the article’s indicator extraction and IOC contextualization run. complete and failed are terminal; unknown means no run has been recorded.

One of the following:
const ThreatSignalArticleEditResponseIndicatorExtractionStatusInProgress ThreatSignalArticleEditResponseIndicatorExtractionStatus = "in_progress"
const ThreatSignalArticleEditResponseIndicatorExtractionStatusComplete ThreatSignalArticleEditResponseIndicatorExtractionStatus = "complete"
const ThreatSignalArticleEditResponseIndicatorExtractionStatusFailed ThreatSignalArticleEditResponseIndicatorExtractionStatus = "failed"
const ThreatSignalArticleEditResponseIndicatorExtractionStatusUnknown ThreatSignalArticleEditResponseIndicatorExtractionStatus = "unknown"
Metadata map[string, unknown]
PublishedAt string
Read bool
ReadAt string
Severity ThreatSignalArticleEditResponseSeverity

Beta. Intrinsic article severity band, from informational to critical, independent of any organisation or Priority Intelligence Requirement. Null when the account has no active Priority Intelligence Requirements, scoring has not completed, or a historic article has not entered an automatic rescore window.

One of the following:
const ThreatSignalArticleEditResponseSeverityInformational ThreatSignalArticleEditResponseSeverity = "informational"
const ThreatSignalArticleEditResponseSeverityLow ThreatSignalArticleEditResponseSeverity = "low"
const ThreatSignalArticleEditResponseSeverityMedium ThreatSignalArticleEditResponseSeverity = "medium"
const ThreatSignalArticleEditResponseSeverityHigh ThreatSignalArticleEditResponseSeverity = "high"
const ThreatSignalArticleEditResponseSeverityCritical ThreatSignalArticleEditResponseSeverity = "critical"
SourceCount float64
Summary string

Persisted enrichment summary. Null until enrichment produces a summary.

SummaryR2Key string
Tags []ThreatSignalArticleEditResponseTag
AppliedBy ThreatSignalArticleEditResponseTagsAppliedBy
One of the following:
const ThreatSignalArticleEditResponseTagsAppliedByAI ThreatSignalArticleEditResponseTagsAppliedBy = "ai"
const ThreatSignalArticleEditResponseTagsAppliedByAnalyst ThreatSignalArticleEditResponseTagsAppliedBy = "analyst"
const ThreatSignalArticleEditResponseTagsAppliedBySystem ThreatSignalArticleEditResponseTagsAppliedBy = "system"
CategoryID string
formatuuid
UUID string
formatuuid
Value string
Title string
SkillVersion stringOptional
TagSkillVersion stringOptional

Update Threat Signals article read status

package main

import (
  "context"
  "fmt"

  "github.com/cloudflare/cloudflare-go"
  "github.com/cloudflare/cloudflare-go/cloudforce_one"
  "github.com/cloudflare/cloudflare-go/option"
)

func main() {
  client := cloudflare.NewClient(
    option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"),
  )
  response, err := client.CloudforceOne.ThreatSignals.Articles.Edit(
    context.TODO(),
    "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    cloudforce_one.ThreatSignalArticleEditParams{
      AccountID: cloudflare.F("account_id"),
      Read: cloudflare.F(true),
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", response.ID)
}
{
  "errors": [
    {
      "message": "message"
    }
  ],
  "result": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "bullet_points": {
      "impact": "impact",
      "what_happened": "what_happened",
      "who_affected": "who_affected"
    },
    "content_r2_key": "content_r2_key",
    "feed_display_name": "feed_display_name",
    "feed_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "fetched_at": "fetched_at",
    "indicator_extraction_status": "in_progress",
    "link": "link",
    "metadata": {
      "foo": "bar"
    },
    "published_at": "published_at",
    "read": true,
    "read_at": "read_at",
    "severity": "informational",
    "source_count": 0,
    "summary": "summary",
    "summary_r2_key": "summary_r2_key",
    "tags": [
      {
        "applied_by": "ai",
        "categoryId": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
        "uuid": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
        "value": "value"
      }
    ],
    "title": "title",
    "skill_version": "skill_version",
    "tag_skill_version": "tag_skill_version"
  },
  "success": true
}
Returns Examples
{
  "errors": [
    {
      "message": "message"
    }
  ],
  "result": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "bullet_points": {
      "impact": "impact",
      "what_happened": "what_happened",
      "who_affected": "who_affected"
    },
    "content_r2_key": "content_r2_key",
    "feed_display_name": "feed_display_name",
    "feed_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "fetched_at": "fetched_at",
    "indicator_extraction_status": "in_progress",
    "link": "link",
    "metadata": {
      "foo": "bar"
    },
    "published_at": "published_at",
    "read": true,
    "read_at": "read_at",
    "severity": "informational",
    "source_count": 0,
    "summary": "summary",
    "summary_r2_key": "summary_r2_key",
    "tags": [
      {
        "applied_by": "ai",
        "categoryId": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
        "uuid": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
        "value": "value"
      }
    ],
    "title": "title",
    "skill_version": "skill_version",
    "tag_skill_version": "tag_skill_version"
  },
  "success": true
}