Developer portal

Developer

Manage organizations, projects and games

Execute one strictly validated action. Owners and admins may manage project/game funding and rules; viewers can read. Only owners manage non-owner members. Global invitation is rechecked before organization locks for every mutation. All balances and rewards are TEST ggbucks; 1,000 integer units represent one test dollar. Organization to project to game allocation is transactional. Lifetime project/game ceilings, budgets and spending cannot be exceeded. issuedKey is shown once; store a secret only on your trusted server.

POST/api/developer/v1/console

Authentication

Invited developer session

An invited developer Clerk session issued through https://developers.ggbucks.com with a verified primary email and active immutable subject binding. Game keys do not authorize the console. Organization membership and role are checked separately.

# Illustrative request only. Replace IDs/tokens; events need a current occurredAt.
# Native examples require an already admitted native session/device permit.
curl --fail-with-body --max-time 15 -X POST \
  "https://api.ggbucks.com/api/developer/v1/console" \
  -H "Authorization: Bearer ${GGBUCKS_DEVELOPER_SESSION}" \
  -H "Content-Type: application/json" \
  --data '{"type":"createOrganization","name":"Example Studio","unlimitedFunding":false}'

Illustrative examples; replace placeholders. Use your approved developer portal session. Game keys do not authorize console requests.

Console actions

Send one action per request. Organization roles and server policy determine which actions your session may execute.

addMemberRequest fields

Organization owner only. Add an admin or viewer by Clerk subject. Organization membership does not grant global dashboard access; the member must separately have an active invitation.

{
  "clerkUserId": "user_example_studio_member",
  "organizationId": "11111111-1111-4111-8111-111111111111",
  "role": "viewer",
  "type": "addMember"
}
clerkUserIdstringrequired
  • At least 1 characters
  • Up to 200 characters
organizationIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
role"admin" | "viewer"required
type"addMember"required

Unknown fields are rejected.

allocateGameRequest fields

Owner or admin. Allocate unallocated project TEST funding to a game. Reject oversubscription and allocations above the game ceiling.

{
  "amountGgbucks": 25000,
  "gameId": "11111111-1111-4111-8111-111111111111",
  "type": "allocateGame"
}
amountGgbucksintegerrequired
  • Minimum 0
  • Maximum 1,000,000,000,000
  • Greater than 0
gameIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
type"allocateGame"required

Unknown fields are rejected.

allocateProjectRequest fields

Owner or admin. Transfer available organization TEST funding into a project. Reject oversubscription and allocations above the project ceiling.

{
  "amountGgbucks": 50000,
  "projectId": "11111111-1111-4111-8111-111111111111",
  "type": "allocateProject"
}
amountGgbucksintegerrequired
  • Minimum 0
  • Maximum 1,000,000,000,000
  • Greater than 0
projectIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
type"allocateProject"required

Unknown fields are rejected.

createGameRequest fields

Owner or admin. Create an active game with a platform, lifetime ceiling and UTC daily per-player cap.

{
  "dailyPlayerCapGgbucks": 1000,
  "maxPayoutGgbucks": 50000,
  "name": "Example Puzzle",
  "platform": "unity",
  "projectId": "11111111-1111-4111-8111-111111111111",
  "type": "createGame"
}
dailyPlayerCapGgbucksintegerrequired
  • Minimum 0
  • Maximum 1,000,000,000,000
maxPayoutGgbucksintegerrequired
  • Minimum 0
  • Maximum 1,000,000,000,000
namestringrequired
  • At least 1 characters
  • Up to 100 characters
  • Pattern: ^[^\u0000-\u001f\u007f]*$
platform"ios" | "android" | "web" | "unity" | "unreal" | "other"required
projectIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
type"createGame"required

Unknown fields are rejected.

createOrganizationRequest fields

Create an organization owned by the admitted developer. Unlimited TEST funding requires a separately authorized funding capability; project and game ceilings still apply.

{
  "name": "Example Studio",
  "type": "createOrganization",
  "unlimitedFunding": false
}
namestringrequired
  • At least 1 characters
  • Up to 100 characters
  • Pattern: ^[^\u0000-\u001f\u007f]*$
type"createOrganization"required
unlimitedFundingbooleanoptional
  • Default: false

Unknown fields are rejected.

createProjectRequest fields

Owner or admin. Create a project with a hard lifetime maximum payout in integer TEST units.

{
  "maxPayoutGgbucks": 100000,
  "name": "Puzzle collection",
  "organizationId": "11111111-1111-4111-8111-111111111111",
  "type": "createProject"
}
maxPayoutGgbucksintegerrequired
  • Minimum 0
  • Maximum 1,000,000,000,000
namestringrequired
  • At least 1 characters
  • Up to 100 characters
  • Pattern: ^[^\u0000-\u001f\u007f]*$
organizationIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
type"createProject"required

Unknown fields are rejected.

createRuleRequest fields

Owner or admin. Define a unique game event type with a fixed positive TEST reward. Event callers cannot choose a payout.

{
  "eventType": "level.completed",
  "gameId": "11111111-1111-4111-8111-111111111111",
  "rewardGgbucks": 100,
  "type": "createRule"
}
eventTypestringrequired
  • Up to 64 characters
  • Pattern: ^[a-z][a-z0-9_.-]{0,63}$
gameIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
rewardGgbucksintegerrequired
  • Minimum 0
  • Maximum 1,000,000,000,000
  • Greater than 0
type"createRule"required

Unknown fields are rejected.

fundOrganizationRequest fields

Owner or admin. Add sandbox TEST funding to a normal organization; no real payment or wallet credit occurs.

{
  "amountGgbucks": 100000,
  "organizationId": "11111111-1111-4111-8111-111111111111",
  "type": "fundOrganization"
}
amountGgbucksintegerrequired
  • Minimum 0
  • Maximum 1,000,000,000,000
  • Greater than 0
organizationIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
type"fundOrganization"required

Unknown fields are rejected.

issueKeyRequest fields

Owner or admin. Issue a public configuration identifier or server secret. issuedKey is returned only on issuance; secrets are stored as hashes and cannot be retrieved later.

{
  "gameId": "11111111-1111-4111-8111-111111111111",
  "kind": "secret",
  "name": "Development server",
  "type": "issueKey"
}
gameIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
kind"public" | "secret"required
namestringrequired
  • At least 1 characters
  • Up to 100 characters
  • Pattern: ^[^\u0000-\u001f\u007f]*$
type"issueKey"required

Unknown fields are rejected.

removeMemberRequest fields

Organization owner only. Remove a non-owner member. The owner cannot be removed.

{
  "memberId": "11111111-1111-4111-8111-111111111111",
  "type": "removeMember"
}
memberIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
type"removeMember"required

Unknown fields are rejected.

revokeKeyRequest fields

Owner or admin. Revoke a game key immediately. Events and linking recheck key state inside their transaction.

{
  "keyId": "11111111-1111-4111-8111-111111111111",
  "type": "revokeKey"
}
keyIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
type"revokeKey"required

Unknown fields are rejected.

updateGameRequest fields

Owner or admin. Pause or activate a game, update its name or caps. A ceiling cannot fall below its allocated budget or prior spending.

{
  "gameId": "11111111-1111-4111-8111-111111111111",
  "status": "paused",
  "type": "updateGame"
}
dailyPlayerCapGgbucksintegeroptional
  • Minimum 0
  • Maximum 1,000,000,000,000
gameIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
maxPayoutGgbucksintegeroptional
  • Minimum 0
  • Maximum 1,000,000,000,000
namestringoptional
  • At least 1 characters
  • Up to 100 characters
  • Pattern: ^[^\u0000-\u001f\u007f]*$
status"active" | "paused"optional
type"updateGame"required

Unknown fields are rejected.

updateMemberRequest fields

Organization owner only. Change an existing non-owner member to admin or viewer.

{
  "memberId": "11111111-1111-4111-8111-111111111111",
  "role": "admin",
  "type": "updateMember"
}
memberIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
role"admin" | "viewer"required
type"updateMember"required

Unknown fields are rejected.

updateProjectRequest fields

Owner or admin. Update name or hard ceiling. The ceiling cannot fall below allocated budget or prior spending.

{
  "maxPayoutGgbucks": 100000,
  "projectId": "11111111-1111-4111-8111-111111111111",
  "type": "updateProject"
}
maxPayoutGgbucksintegeroptional
  • Minimum 0
  • Maximum 1,000,000,000,000
namestringoptional
  • At least 1 characters
  • Up to 100 characters
  • Pattern: ^[^\u0000-\u001f\u007f]*$
projectIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
type"updateProject"required

Unknown fields are rejected.

updateRuleRequest fields

Owner or admin. Change an existing rule reward or active state. Replayed events keep their original immutable decision.

{
  "active": false,
  "ruleId": "11111111-1111-4111-8111-111111111111",
  "type": "updateRule"
}
activebooleanoptional
rewardGgbucksintegeroptional
  • Minimum 0
  • Maximum 1,000,000,000,000
  • Greater than 0
ruleIdstring · uuidrequired
  • Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
type"updateRule"required

Unknown fields are rejected.

Responses

200Successful sandbox response.

application/json

{
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "mode": "sandbox"
  }
}
dataobjectrequired
  • Unknown fields are rejected
Show nested fields
idstring · uuidrequired
issuedKeystringoptional

Present on issueKey only. Store a returned secret securely on your server; this is its only disclosure.

Show nested fields

Accepted shape 1

string
kind"public" | "secret"optional
mode"sandbox"required

Unknown fields are rejected.

Unknown fields are rejected.

400Invalid request or allocation/cap constraint.

application/json

errorobjectrequired
  • Unknown fields are rejected
Show nested fields
code"AUTH_UNAVAILABLE" | "DEVELOPER_ACCESS_UNAVAILABLE" | "DEVELOPER_INVITATION_REQUIRED" | "EMAIL_VERIFICATION_REQUIRED" | "INVALID_CONTENT_TYPE" | "INVALID_CURSOR" | "INVALID_PLAYER" | "INVALID_PUBLIC_KEY" | "INVALID_RECORD_QUERY" | "INVALID_REQUEST" | "INVALID_SESSION_ORIGIN" | "PAYLOAD_TOO_LARGE" | "PLATFORM_DISABLED" | "PLATFORM_UNAVAILABLE" | "UNAUTHORIZED" | "already_linked" | "conflict" | "event_conflict" | "forbidden" | "game_limit" | "game_paused" | "insufficient_funds" | "invalid_action" | "invalid_event" | "invalid_key" | "invalid_link" | "invalid_metadata" | "invalid_player" | "limit_exceeded" | "link_disabled" | "not_found" | "owner_immutable" | "project_limit" | "retry_later" | "secret_key_required" | "unauthorized" | "unlimited_funding" | "user_unavailable"required
messagestringrequired

Unknown fields are rejected.

Unknown fields are rejected.

401Missing or invalid credential/token.

application/json

errorobjectrequired
  • Unknown fields are rejected
Show nested fields
code"AUTH_UNAVAILABLE" | "DEVELOPER_ACCESS_UNAVAILABLE" | "DEVELOPER_INVITATION_REQUIRED" | "EMAIL_VERIFICATION_REQUIRED" | "INVALID_CONTENT_TYPE" | "INVALID_CURSOR" | "INVALID_PLAYER" | "INVALID_PUBLIC_KEY" | "INVALID_RECORD_QUERY" | "INVALID_REQUEST" | "INVALID_SESSION_ORIGIN" | "PAYLOAD_TOO_LARGE" | "PLATFORM_DISABLED" | "PLATFORM_UNAVAILABLE" | "UNAUTHORIZED" | "already_linked" | "conflict" | "event_conflict" | "forbidden" | "game_limit" | "game_paused" | "insufficient_funds" | "invalid_action" | "invalid_event" | "invalid_key" | "invalid_link" | "invalid_metadata" | "invalid_player" | "limit_exceeded" | "link_disabled" | "not_found" | "owner_immutable" | "project_limit" | "retry_later" | "secret_key_required" | "unauthorized" | "unlimited_funding" | "user_unavailable"required
messagestringrequired

Unknown fields are rejected.

Unknown fields are rejected.

403Admission or organization permission denied.

application/json

errorobjectrequired
  • Unknown fields are rejected
Show nested fields
code"AUTH_UNAVAILABLE" | "DEVELOPER_ACCESS_UNAVAILABLE" | "DEVELOPER_INVITATION_REQUIRED" | "EMAIL_VERIFICATION_REQUIRED" | "INVALID_CONTENT_TYPE" | "INVALID_CURSOR" | "INVALID_PLAYER" | "INVALID_PUBLIC_KEY" | "INVALID_RECORD_QUERY" | "INVALID_REQUEST" | "INVALID_SESSION_ORIGIN" | "PAYLOAD_TOO_LARGE" | "PLATFORM_DISABLED" | "PLATFORM_UNAVAILABLE" | "UNAUTHORIZED" | "already_linked" | "conflict" | "event_conflict" | "forbidden" | "game_limit" | "game_paused" | "insufficient_funds" | "invalid_action" | "invalid_event" | "invalid_key" | "invalid_link" | "invalid_metadata" | "invalid_player" | "limit_exceeded" | "link_disabled" | "not_found" | "owner_immutable" | "project_limit" | "retry_later" | "secret_key_required" | "unauthorized" | "unlimited_funding" | "user_unavailable"required
messagestringrequired

Unknown fields are rejected.

Unknown fields are rejected.

404Scoped resource not found.

application/json

errorobjectrequired
  • Unknown fields are rejected
Show nested fields
code"AUTH_UNAVAILABLE" | "DEVELOPER_ACCESS_UNAVAILABLE" | "DEVELOPER_INVITATION_REQUIRED" | "EMAIL_VERIFICATION_REQUIRED" | "INVALID_CONTENT_TYPE" | "INVALID_CURSOR" | "INVALID_PLAYER" | "INVALID_PUBLIC_KEY" | "INVALID_RECORD_QUERY" | "INVALID_REQUEST" | "INVALID_SESSION_ORIGIN" | "PAYLOAD_TOO_LARGE" | "PLATFORM_DISABLED" | "PLATFORM_UNAVAILABLE" | "UNAUTHORIZED" | "already_linked" | "conflict" | "event_conflict" | "forbidden" | "game_limit" | "game_paused" | "insufficient_funds" | "invalid_action" | "invalid_event" | "invalid_key" | "invalid_link" | "invalid_metadata" | "invalid_player" | "limit_exceeded" | "link_disabled" | "not_found" | "owner_immutable" | "project_limit" | "retry_later" | "secret_key_required" | "unauthorized" | "unlimited_funding" | "user_unavailable"required
messagestringrequired

Unknown fields are rejected.

Unknown fields are rejected.

409Replay conflict, expired link or incompatible resource state.

application/json

errorobjectrequired
  • Unknown fields are rejected
Show nested fields
code"AUTH_UNAVAILABLE" | "DEVELOPER_ACCESS_UNAVAILABLE" | "DEVELOPER_INVITATION_REQUIRED" | "EMAIL_VERIFICATION_REQUIRED" | "INVALID_CONTENT_TYPE" | "INVALID_CURSOR" | "INVALID_PLAYER" | "INVALID_PUBLIC_KEY" | "INVALID_RECORD_QUERY" | "INVALID_REQUEST" | "INVALID_SESSION_ORIGIN" | "PAYLOAD_TOO_LARGE" | "PLATFORM_DISABLED" | "PLATFORM_UNAVAILABLE" | "UNAUTHORIZED" | "already_linked" | "conflict" | "event_conflict" | "forbidden" | "game_limit" | "game_paused" | "insufficient_funds" | "invalid_action" | "invalid_event" | "invalid_key" | "invalid_link" | "invalid_metadata" | "invalid_player" | "limit_exceeded" | "link_disabled" | "not_found" | "owner_immutable" | "project_limit" | "retry_later" | "secret_key_required" | "unauthorized" | "unlimited_funding" | "user_unavailable"required
messagestringrequired

Unknown fields are rejected.

Unknown fields are rejected.

413JSON body exceeds 16,384 UTF-8 bytes.

application/json

errorobjectrequired
  • Unknown fields are rejected
Show nested fields
code"AUTH_UNAVAILABLE" | "DEVELOPER_ACCESS_UNAVAILABLE" | "DEVELOPER_INVITATION_REQUIRED" | "EMAIL_VERIFICATION_REQUIRED" | "INVALID_CONTENT_TYPE" | "INVALID_CURSOR" | "INVALID_PLAYER" | "INVALID_PUBLIC_KEY" | "INVALID_RECORD_QUERY" | "INVALID_REQUEST" | "INVALID_SESSION_ORIGIN" | "PAYLOAD_TOO_LARGE" | "PLATFORM_DISABLED" | "PLATFORM_UNAVAILABLE" | "UNAUTHORIZED" | "already_linked" | "conflict" | "event_conflict" | "forbidden" | "game_limit" | "game_paused" | "insufficient_funds" | "invalid_action" | "invalid_event" | "invalid_key" | "invalid_link" | "invalid_metadata" | "invalid_player" | "limit_exceeded" | "link_disabled" | "not_found" | "owner_immutable" | "project_limit" | "retry_later" | "secret_key_required" | "unauthorized" | "unlimited_funding" | "user_unavailable"required
messagestringrequired

Unknown fields are rejected.

Unknown fields are rejected.

415Content-Type must be application/json.

application/json

errorobjectrequired
  • Unknown fields are rejected
Show nested fields
code"AUTH_UNAVAILABLE" | "DEVELOPER_ACCESS_UNAVAILABLE" | "DEVELOPER_INVITATION_REQUIRED" | "EMAIL_VERIFICATION_REQUIRED" | "INVALID_CONTENT_TYPE" | "INVALID_CURSOR" | "INVALID_PLAYER" | "INVALID_PUBLIC_KEY" | "INVALID_RECORD_QUERY" | "INVALID_REQUEST" | "INVALID_SESSION_ORIGIN" | "PAYLOAD_TOO_LARGE" | "PLATFORM_DISABLED" | "PLATFORM_UNAVAILABLE" | "UNAUTHORIZED" | "already_linked" | "conflict" | "event_conflict" | "forbidden" | "game_limit" | "game_paused" | "insufficient_funds" | "invalid_action" | "invalid_event" | "invalid_key" | "invalid_link" | "invalid_metadata" | "invalid_player" | "limit_exceeded" | "link_disabled" | "not_found" | "owner_immutable" | "project_limit" | "retry_later" | "secret_key_required" | "unauthorized" | "unlimited_funding" | "user_unavailable"required
messagestringrequired

Unknown fields are rejected.

Unknown fields are rejected.

503Platform disabled or admission/database dependency temporarily unavailable; no successful mutation is implied.

application/json

errorobjectrequired
  • Unknown fields are rejected
Show nested fields
code"AUTH_UNAVAILABLE" | "DEVELOPER_ACCESS_UNAVAILABLE" | "DEVELOPER_INVITATION_REQUIRED" | "EMAIL_VERIFICATION_REQUIRED" | "INVALID_CONTENT_TYPE" | "INVALID_CURSOR" | "INVALID_PLAYER" | "INVALID_PUBLIC_KEY" | "INVALID_RECORD_QUERY" | "INVALID_REQUEST" | "INVALID_SESSION_ORIGIN" | "PAYLOAD_TOO_LARGE" | "PLATFORM_DISABLED" | "PLATFORM_UNAVAILABLE" | "UNAUTHORIZED" | "already_linked" | "conflict" | "event_conflict" | "forbidden" | "game_limit" | "game_paused" | "insufficient_funds" | "invalid_action" | "invalid_event" | "invalid_key" | "invalid_link" | "invalid_metadata" | "invalid_player" | "limit_exceeded" | "link_disabled" | "not_found" | "owner_immutable" | "project_limit" | "retry_later" | "secret_key_required" | "unauthorized" | "unlimited_funding" | "user_unavailable"required
messagestringrequired

Unknown fields are rejected.

Unknown fields are rejected.