Skip to main content

Understanding Bulk API Counts

What bulk API counts are, how they are calculated, and which brainCloud operations trigger them.

Written by Jason Liang
Updated today

What are Bulk API Counts?

Bulk API counts are a billing and analytics metric used to represent the true resource cost of expensive or bulk-nature server operations. Unlike standard API calls, which are always counted as 1, bulk operations touch many records, involve heavy server processing, or are multiplied by the number of players or records involved. Rather than counting these as a single API call, brainCloud assigns a weighted numeric count to reflect their actual resource consumption.

Bulk API counts are tracked daily per app and contribute to your app's overall usage reporting alongside standard API counts.

How They Are Tracked

Bulk API counts flow through the service operation, which triggers a bulk count publication.

Configurable Properties

The following bulk API count values are configurable per app:

Property

Default Value

Description

globalPropertyUpdateBulkAPICount

10,000

Charged per create or update of a global app property

roomServerGameliftPerPlayerLaunchBulkApiCount

50

Charged per player in the lobby when a GameLift room server becomes ready

roomServerEdgeGapPerPlayerLaunchBulkApiCount

50

Charged per player in the lobby when an EdgeGap room server becomes ready

customEntitiesDoCountBulkOps

10 ms

Every N milliseconds of execution time for a Custom Entity GET_PAGE with doCount=true equals 1 bulk op

Operations That Trigger Bulk API Counts

Global App Properties

  • Create Property — charges 10,000 bulk ops

  • Update Property — charges 10,000 bulk ops

This high charge reflects the server-wide impact of global property changes, which can affect all players of an app.

Tournaments

  • Post Score — charges 10 bulk ops

  • Post Score with Results View — charges 10 bulk ops

  • Get Division Info — charges 10 bulk ops

  • Group Division Reassessment — charges 10 bulk ops

  • Tournament Results Processing (background job) — charges 10 × total scores processed

Friends

  • Add Friends From Platform — charges 10 bulk ops

  • Facebook Limited Login Friend Sync — charges 10 bulk ops

Authentication

  • Auto-claim tournament rewards at login — charges 5 bulk ops

Events

  • Send Event to Multiple Profiles — charges (number of recipients − 1) bulk ops. The first recipient is free; each additional recipient adds 1 bulk op.

Custom Entities

  • GET_PAGE with doCount=true — charges bulk ops proportional to execution time: elapsed milliseconds ÷ threshold (default 10 ms). A query taking 50 ms would charge 5 bulk ops.

  • Delete Multiple — charges 1 bulk op per deleted entity

App Store / Promotions

  • Refresh Automated Promotions — charges 10 bulk ops

Multiplayer Room Servers

  • GameLift Room Server Ready — charges member count × 50 bulk ops (configurable)

  • EdgeGap Room Server Ready — charges member count × 50 bulk ops (configurable)

For example, a 4-player lobby launching a GameLift server charges 4 × 50 = 200 bulk ops.

Admin Operations

  • Delete All Users — charges 1 bulk op per deleted user

  • Delete Tester Users — charges 1 bulk op per deleted user

  • Delete Non-Tester Users — charges 1 bulk op per deleted user

  • User Purge (background purge utility) — charges +1 bulk op per purged user

Summary Table

Operation

Bulk Op Count Charged

Global Property create/update

10,000 (configurable)

Tournament post score / get division info / reassessment

10

Tournament results processing job

10 × scores processed

Friend platform sync / FB Limited Login sync

10

Auto-claim tournament rewards at login

5

Send event to multiple profiles

recipients − 1

Custom Entity GET_PAGE with doCount=true

elapsed ms ÷ 10

Custom Entity deleteMultiple

count deleted

App Store refresh promotions

10

GameLift / EdgeGap room server ready

member count × 50 (configurable)

Event side channel check (per request)

0 by default (configurable)

Admin bulk user deletion / purge

1 per deleted user

Did this answer your question?