Skip to content
Start here

Update Spend Policy

client.Billing.SpendPolicies.Update(ctx, policyID, params) (*SpendPolicyUpdateResponse, error)
PUT/accounts/{account_id}/billing/spend-policies/{policy_id}

Replaces the whole spend policy. Every field is required, as on create; there are no partial updates and PATCH is not supported. The If-Match header must equal the policy’s current version. On success, version goes up by one and the new value is returned in ETag.

Security
API Token

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

Example:Authorization: Bearer Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY
API Email + API Key

The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.

Example:X-Auth-Email: user@example.com

The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.

Example:X-Auth-Key: 144c9defac04969c7bfad8efaa8ea194
ParametersExpand Collapse
policyID string

The unique identifier of the spend policy.

formatuuid
params SpendPolicyUpdateParams
AccountID param.Field[string]

Path param: Represents a Cloudflare resource identifier tag.

maxLength32
Action param.Field[SpendPolicyUpdateParamsAction]

Body param: The action taken when the threshold is reached. notification sends an email to notification_email. usage_block blocks further usage of the product until the end of the billing period. Raising the threshold above the current balance, disabling the policy, or deleting it lifts the block early.

const SpendPolicyUpdateParamsActionNotification SpendPolicyUpdateParamsAction = "notification"
const SpendPolicyUpdateParamsActionUsageBlock SpendPolicyUpdateParamsAction = "usage_block"
Enabled param.Field[bool]

Body param: Whether the policy is evaluated.

Name param.Field[string]

Body param: Display name of the policy. After surrounding whitespace is trimmed, it must be 1 to 200 bytes long. The value is stored as sent, untrimmed.

minLength1
ProductID param.Field[SpendPolicyUpdateParamsProductID]

Body param: The product the policy applies to: workers or durable_objects. Each product’s balance and policies are separate. Both products support notification and usage_block policies on create and update.

const SpendPolicyUpdateParamsProductIDWorkers SpendPolicyUpdateParamsProductID = "workers"
const SpendPolicyUpdateParamsProductIDDurableObjects SpendPolicyUpdateParamsProductID = "durable_objects"
ThresholdCents param.Field[int64]

Body param: The spend threshold for the current billing period, in US cents. Must be greater than zero.

formatint64
minimum1
IfMatch param.Field[string]

Header param: The policy version the change is based on, as returned in ETag. Quoted ("3") and bare (3) values are both accepted. Weak ETags (W/"3") and * are not.

NotificationEmail param.Field[string]Optional

Body param: Email address that receives notifications. Required when action is notification. When set, it must be a bare address (user@example.com); display-name forms such as Name <user@example.com> are rejected.

formatemail
ReturnsExpand Collapse
type SpendPolicyUpdateResponse struct{…}

A spend policy.

ID string

The unique identifier of the spend policy.

formatuuid
AccountID int64

Internal numeric ID of the account that owns the policy. This is not the account tag used in the path.

formatint64
Action SpendPolicyUpdateResponseAction

The action taken when the threshold is reached. notification sends an email to notification_email. usage_block blocks further usage of the product until the end of the billing period. Raising the threshold above the current balance, disabling the policy, or deleting it lifts the block early.

One of the following:
const SpendPolicyUpdateResponseActionNotification SpendPolicyUpdateResponseAction = "notification"
const SpendPolicyUpdateResponseActionUsageBlock SpendPolicyUpdateResponseAction = "usage_block"
Enabled bool

Whether the policy is evaluated.

Name string

Display name of the policy.

NotificationEmail string

Email address that receives notifications. An empty string when none is set.

ProductID SpendPolicyUpdateResponseProductID

The product the policy applies to: workers or durable_objects. Each product’s balance and policies are separate. Both products support notification and usage_block policies on create and update.

One of the following:
const SpendPolicyUpdateResponseProductIDWorkers SpendPolicyUpdateResponseProductID = "workers"
const SpendPolicyUpdateResponseProductIDDurableObjects SpendPolicyUpdateResponseProductID = "durable_objects"
ThresholdCents int64

The spend threshold for the current billing period, in US cents.

formatint64
Version int64

Optimistic-concurrency version. It starts at 1 and goes up by one on every update or delete. This value is also returned in ETag.

formatint64
minimum1
CurrentState SpendPolicyUpdateResponseCurrentStateOptional

Read-only state on list/get responses, evaluated from the latest owning projector snapshot at request time, independently of the API replica. Configuration enabled/version/ETag do not change when a cycle rolls over. Audit history remains unchanged. Missing during a rolling upgrade or on mutation responses; clients must treat missing state as unavailable. Balances are asynchronous estimates, not a synchronous usage read.

BalanceCents int64
formatint64
BillingPeriodEnd Time
formatdate-time
BillingPeriodStart Time
formatdate-time
Enforcement SpendPolicyUpdateResponseCurrentStateEnforcement

Durable desired cap and delivery bookkeeping for this policy, or null if no owned effect exists. Separate from threshold evaluation: pending/leased/retry can lag the new billing period. Succeeded with equal generations means delivery completed, not an EWC readback.

AppliedGeneration int64
formatint64
DeliveryStatus SpendPolicyUpdateResponseCurrentStateEnforcementDeliveryStatus
One of the following:
const SpendPolicyUpdateResponseCurrentStateEnforcementDeliveryStatusPending SpendPolicyUpdateResponseCurrentStateEnforcementDeliveryStatus = "pending"
const SpendPolicyUpdateResponseCurrentStateEnforcementDeliveryStatusLeased SpendPolicyUpdateResponseCurrentStateEnforcementDeliveryStatus = "leased"
const SpendPolicyUpdateResponseCurrentStateEnforcementDeliveryStatusRetry SpendPolicyUpdateResponseCurrentStateEnforcementDeliveryStatus = "retry"
const SpendPolicyUpdateResponseCurrentStateEnforcementDeliveryStatusSucceeded SpendPolicyUpdateResponseCurrentStateEnforcementDeliveryStatus = "succeeded"
DesiredGeneration int64
formatint64
DesiredState SpendPolicyUpdateResponseCurrentStateEnforcementDesiredState
One of the following:
const SpendPolicyUpdateResponseCurrentStateEnforcementDesiredStateActive SpendPolicyUpdateResponseCurrentStateEnforcementDesiredState = "active"
const SpendPolicyUpdateResponseCurrentStateEnforcementDesiredStateInactive SpendPolicyUpdateResponseCurrentStateEnforcementDesiredState = "inactive"
ExpiresAt Time
formatdate-time
EvaluatedAt Time

Evaluation time; not the timestamp of the latest usage event.

formatdate-time
Status SpendPolicyUpdateResponseCurrentStateStatus

Threshold evaluation, not proof of an edge cap. No current active period yields no_current_period for enabled policies; failed aggregate reads yield unavailable for enabled policies. Disabled policies report disabled. Neither no_current_period nor unavailable implies a zero balance or below-limit state. Operators may disable current-state reads, in which case current_state is omitted.

One of the following:
const SpendPolicyUpdateResponseCurrentStateStatusDisabled SpendPolicyUpdateResponseCurrentStateStatus = "disabled"
const SpendPolicyUpdateResponseCurrentStateStatusNoCurrentPeriod SpendPolicyUpdateResponseCurrentStateStatus = "no_current_period"
const SpendPolicyUpdateResponseCurrentStateStatusUnavailable SpendPolicyUpdateResponseCurrentStateStatus = "unavailable"
const SpendPolicyUpdateResponseCurrentStateStatusBelowLimit SpendPolicyUpdateResponseCurrentStateStatus = "below_limit"
const SpendPolicyUpdateResponseCurrentStateStatusLimitReached SpendPolicyUpdateResponseCurrentStateStatus = "limit_reached"

Update Spend Policy

package main

import (
  "context"
  "fmt"

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

func main() {
  client := cloudflare.NewClient(
    option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"),
  )
  spendPolicy, err := client.Billing.SpendPolicies.Update(
    context.TODO(),
    "6f1c2b8e-3d4a-4f5b-9c6d-7e8f9a0b1c2d",
    billing.SpendPolicyUpdateParams{
      AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
      Action: cloudflare.F(billing.SpendPolicyUpdateParamsActionNotification),
      Enabled: cloudflare.F(true),
      Name: cloudflare.F("Workers cap"),
      ProductID: cloudflare.F(billing.SpendPolicyUpdateParamsProductIDWorkers),
      ThresholdCents: cloudflare.F(int64(100)),
      IfMatch: cloudflare.F(`"3"`),
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", spendPolicy.ID)
}
{
  "errors": [
    {
      "message": "message",
      "code": 0
    }
  ],
  "messages": [
    {
      "message": "message",
      "code": 0
    }
  ],
  "result": {
    "id": "6f1c2b8e-3d4a-4f5b-9c6d-7e8f9a0b1c2d",
    "account_id": 1234567,
    "action": "notification",
    "enabled": true,
    "name": "Workers cap",
    "notification_email": "billing@example.com",
    "product_id": "workers",
    "threshold_cents": 100,
    "version": 1,
    "current_state": {
      "balance_cents": 0,
      "billing_period_end": "2019-12-27T18:11:19.117Z",
      "billing_period_start": "2019-12-27T18:11:19.117Z",
      "enforcement": {
        "applied_generation": 0,
        "delivery_status": "pending",
        "desired_generation": 0,
        "desired_state": "active",
        "expires_at": "2019-12-27T18:11:19.117Z"
      },
      "evaluated_at": "2019-12-27T18:11:19.117Z",
      "status": "disabled"
    }
  },
  "success": true
}
Returns Examples
{
  "errors": [
    {
      "message": "message",
      "code": 0
    }
  ],
  "messages": [
    {
      "message": "message",
      "code": 0
    }
  ],
  "result": {
    "id": "6f1c2b8e-3d4a-4f5b-9c6d-7e8f9a0b1c2d",
    "account_id": 1234567,
    "action": "notification",
    "enabled": true,
    "name": "Workers cap",
    "notification_email": "billing@example.com",
    "product_id": "workers",
    "threshold_cents": 100,
    "version": 1,
    "current_state": {
      "balance_cents": 0,
      "billing_period_end": "2019-12-27T18:11:19.117Z",
      "billing_period_start": "2019-12-27T18:11:19.117Z",
      "enforcement": {
        "applied_generation": 0,
        "delivery_status": "pending",
        "desired_generation": 0,
        "desired_state": "active",
        "expires_at": "2019-12-27T18:11:19.117Z"
      },
      "evaluated_at": "2019-12-27T18:11:19.117Z",
      "status": "disabled"
    }
  },
  "success": true
}