AppsinityAPPSINITY
APIs

Error codes

Errors here are sentences, not codes. There is no machine-readable identifier, so the only reliable branching is on the HTTP status, and the only useful debugging is on the message text you were handed.

Open Appsinity Studio

The shape

// every failure, every service
{
  "error": "Invalid session"
}

// payments verification is the one exception, and it adds ok
{ "ok": false, "error": "Invalid Razorpay signature." }

// what is never present
// code, subcode, details, request_id, doc_url, trace, field
Note: The payments Worker is the only service that sets Cache-Control: no-store on errors as well as successes; the Studio API sends no cache headers on an error, so a bad response can be held by an intermediate cache.

Status codes in use

StatusHow oftenMeaning hereYour move
200mostSuccess; ok: true where the handler sets itRead the payload
201rareCreatedNone
400very commonInput missing, malformed or over a ceilingFix the payload
401commonNo token, bad token, or expired tokenSign in again
403commonAuthenticated, not permittedAsk the owner for a role
404occasionalRow, listing or route does not existCheck the identifier
409rareConflicts with an existing recordUse the existing one
500most of the failuresA handler threwRetry once, then report with the body
502payments onlyRazorpay refused or failedReport the upstream description
504gatewayCrossed the sixty-second proxy timeoutThe work may still have finished; poll state
503storageObject storage unavailableBack off and retry the PUT
Watch out: A 500 outnumbers a 404 in this service. That is the honest shape of a young API: unhandled server failures are more likely than a clean not-found.

Authentication and permission

MessageStatusCauseFix
Sign in again first401No bearer header at allSend Authorization: Bearer
Invalid session401Token present, verification failedLog in again
Missing login token.401Presign called without a tokenSign in on Studio
Invalid or expired login token.401Token rejected by both verifiersRe-auth, then retry
Sign in to write a review401Player endpoint, no verifiable tokenSign in on the store
Please sign in to follow creators.401Follow while signed outSign in
You do not own this document403Another account's rowCheck the uid in your token
Only the workspace owner can manage members403Not the ownerAsk the owner to act
Account not found404Reset or verification for an unknown addressCorrect the address
Note: A 401 from the Upload Worker is decided by pattern-matching its own message: token, login or expired become 401 and everything else becomes 400.

Input and account errors

MessageStatusFix
Enter a valid email400The registration address is malformed
Enter a valid email address400The team invite is malformed; note the different wording
Password must be at least 6 characters400Lengthen it
Email or password is incorrect401One message for both halves, by design
An account with this email already exists409Sign in, or reset
Code expired. Please request a new one.400Resend the OTP; ten-minute window
Invalid verification code400Six digits, exactly, from the newest mail
You cannot invite yourself400Invite a different address
App id required400Send the listing identifier on the build route
Missing listing id400Use listingId, appId or gameId
Choose a rating first400Rating must be 1 to 5
Listing not found404The row is absent or not visible
Page not found404A Studio webpage, not the store page
This domain is already connected to another page.409Disconnect it from the other page first
Email not found404No account for that address
Watch out: The two email messages differ by one word between the registration and invitation routes. Do not write a client that matches on them; match on the status.

Upload and storage

MessageWhereFix
Blocked file extension: .exePresignPackage it inside a ZIP
File extension not allowed: .xyzPresignUse an allowed type or the web upload category
Valid fileName is required.PresignThe sanitiser removed everything
Valid file size is required.PresignSend real byte length, above zero
Invalid upload type.PresignOne of the four category names
File is too large for this upload category.Presign5 GiB, or 250 MiB for app-media
App media must be an image or MP4 video.Presignpng, jpg, jpeg, webp or mp4
Game web uploads cannot be APK or AAB files.PresignUse the build category
gameId is required.PresignSend the listing id
Invalid bucket.File infoOnly public is accepted
Object key is required.File infoSend key or objectKey
File info lookup failed (404).File infoThe PUT never completed
MinIO Worker secrets are not configured.WorkerPlatform-side; report it
File too large (X GB). Max 5.00 GB.Studio clientSplit or rebuild
Presign API failed (401).Studio clientToken rejected; sign in again
Presign API failed (400).Studio clientBad payload from the sheet
Direct MinIO PUT failed (503).Studio clientStorage unavailable; back off and retry
Failed to fetchBrowserUsually a 504 on a synchronous call, not a dead backend
Watch out: The last two are the ones that cost people the most time: a 503 means retry, and a Failed to fetch on the signing button commonly means the gateway timed out at sixty seconds while the signer finished the work anyway.

Frequently asked questions

Is there an error code list I can match on?

No. Responses carry one human sentence and an HTTP status. Branch on the status; treat the text as information for a human reader.

Why does the same problem give different wording?

Because each handler writes its own string. There is no shared error catalogue, and several messages differ by a word between routes.

My call returned 500. Is that my fault?

Usually not. A 500 means the handler threw; retry once after a backoff, then report it with the exact endpoint, the payload shape and the message.

Is a request id available for support?

None is returned. Include the timestamp, the endpoint, the listing id and the message body instead — that is what identifies a request here.

Need help?

Developer publishing support: [email protected]
General support: [email protected]
Partnerships: [email protected]