Back to Home

API Documentation

Automate app listings and test management using the TestCrew API

Overview

The TestCrew API is designed as a RESTful API and exchanges data in JSON format. You can automate app listing management, test status checking, and user information retrieval from external sources.

Base URL

https://testcrew-api.eerf0309.workers.dev/api

Response Format

All API responses are returned in the following format:

{
  "success": true,
  "data": {
    // Response data
  }
}

Error response:

{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "Error message"
  }
}

Authentication

TestCrew API supports two authentication methods:

1. API Key Authentication (Recommended)

For external API calls, we recommend using API key authentication. Include X-API-Key in the request header.

curl -X GET "https://testcrew-api.eerf0309.workers.dev/api/users/me" \
  -H "X-API-Key: tc_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

2. JWT Authentication

For API calls from within the app, use the JWT token obtained at login. Include Authorization in the request header.

curl -X GET "https://testcrew-api.eerf0309.workers.dev/api/users/me" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

Obtaining API Keys

API keys can be created from the settings screen within the TestCrew app.

API Key Creation Steps

  1. Open the TestCrew app and navigate to the profile screen
  2. Tap the "API Management" section
  3. Tap "Create new API key"
  4. Enter a name for the key (e.g., intended use) and create it
  5. Save the displayed API key in a secure location
Important

API keys are only displayed once at creation. If lost, create a new key and delete the old one. Keep API keys secure and do not expose them to third parties.

Endpoints

Users

GET /users/me

Retrieves the authenticated user's profile information.

Response Example

{
  "success": true,
  "data": {
    "id": "uuid",
    "email": "user@example.com",
    "name": "Username",
    "avatar": "https://...",
    "credits": 24,
    "isPremium": false,
    "premiumExpiresAt": null,
    "discordId": "123456789",
    "createdAt": "2026-01-01T00:00:00.000Z"
  }
}
PUT /users/me

Updates profile information.

Request Body

Parameter Type Description
name string Username (1-100 characters)
avatar_url string Avatar image URL

App Listings

GET /apps

Retrieves list of apps seeking testers. Available without authentication, but authenticated requests include mutual testing status.

Query Parameters

Parameter Type Description
filter string One of all, new, premium (default: all)
limit number Number of results (default: 20)
GET /apps/my

Retrieves list of apps you have posted.

Authentication required

POST /apps

Posts a new app. Consumes 20 credits.

Authentication required

Request Body

Parameter Type Description
appName * string App name (1-100 characters)
appIcon * string App icon URL
description * string App description (10-1000 characters)
platform * string One of ios, android, both
playStoreUrl string Google Play Store URL
targetTesters * number Number of testers to recruit (3-12)
testingInstructions string Testing instructions (max 2000 characters)

Tests

GET /tests/my

Retrieves list of tests you are participating in.

Authentication required

POST /tests/start

Starts testing an app.

Authentication required

Request Body

Parameter Type Description
appListingId * string (UUID) ID of the app to test
isFeedbackTest boolean Participate as a feedback test (default: false)
POST /tests/:testId/complete

Completes a test and submits feedback. Credits are awarded.

Authentication required

Request Body

Parameter Type Description
feedback * string Feedback comment (10-2000 characters)
rating number Rating (1-5)

API Key Management

GET /users/api-keys

Retrieves list of your API keys (key values not included).

Authentication required

POST /users/api-keys

Creates a new API key.

Authentication required

Request Body

Parameter Type Description
name * string API key name (1-50 characters)

Response Example

{
  "success": true,
  "data": {
    "message": "API key created successfully",
    "apiKey": {
      "id": "uuid",
      "name": "My API Key",
      "key": "tc_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "createdAt": "2026-01-25T00:00:00.000Z"
    },
    "warning": "This is the only time the API key will be shown."
  }
}
DELETE /users/api-keys/:id

Deletes an API key.

Authentication required

Error Handling

The API returns errors using a combination of HTTP status codes and error codes.

Common HTTP Status Codes

Code Description
200 Success
201 Created
400 Bad Request (validation errors, etc.)
401 Unauthorized (invalid or expired token)
403 Forbidden (no access permission)
404 Not Found
500 Internal Server Error

Common Error Codes

Code Description
INVALID_CREDENTIALS Invalid email or password
EMAIL_NOT_VERIFIED Email address not verified
INSUFFICIENT_CREDITS Insufficient credits
ALREADY_TESTING Already testing this app
CANNOT_TEST_OWN_APP Cannot test your own app
APP_FULL Tester slots filled

Rate Limits

To ensure API stability, the following rate limits apply:

Support

For API questions or inquiries, please contact eerf0309+testcrew@gmail.com.