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.
/api/developer/v1/consoleAuthentication
Invited developer sessionAn 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.
addMemberallocateGameallocateProjectcreateGamecreateOrganizationcreateProjectcreateRulefundOrganizationissueKeyremoveMemberrevokeKeyupdateGameupdateMemberupdateProjectupdateRuleaddMemberRequest 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"requiredtype"addMember"requiredUnknown 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"requiredUnknown 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"requiredUnknown 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"requiredprojectIdstring · 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"requiredUnknown 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"requiredunlimitedFundingbooleanoptional- 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"requiredUnknown 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"requiredUnknown 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"requiredUnknown 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"requirednamestringrequired- At least 1 characters
- Up to 100 characters
- Pattern: ^[^\u0000-\u001f\u007f]*$
type"issueKey"requiredUnknown 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"requiredUnknown 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"requiredUnknown 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"optionaltype"updateGame"requiredUnknown 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"requiredtype"updateMember"requiredUnknown 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"requiredUnknown 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"
}activebooleanoptionalrewardGgbucksintegeroptional- 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"requiredUnknown 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 · uuidrequiredissuedKeystringoptionalPresent on issueKey only. Store a returned secret securely on your server; this is its only disclosure.
Show nested fields
Accepted shape 1
stringkind"public" | "secret"optionalmode"sandbox"requiredUnknown 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"requiredmessagestringrequiredUnknown 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"requiredmessagestringrequiredUnknown 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"requiredmessagestringrequiredUnknown 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"requiredmessagestringrequiredUnknown 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"requiredmessagestringrequiredUnknown 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"requiredmessagestringrequiredUnknown 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"requiredmessagestringrequiredUnknown 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"requiredmessagestringrequiredUnknown fields are rejected.
Unknown fields are rejected.