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
- Open the TestCrew app and navigate to the profile screen
- Tap the "API Management" section
- Tap "Create new API key"
- Enter a name for the key (e.g., intended use) and create it
- Save the displayed API key in a secure location
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
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"
}
}
Updates profile information.
Request Body
| Parameter | Type | Description |
|---|---|---|
| name | string | Username (1-100 characters) |
| avatar_url | string | Avatar image URL |
App Listings
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) |
Retrieves list of apps you have posted.
Authentication required
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
Retrieves list of tests you are participating in.
Authentication required
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) |
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
Retrieves list of your API keys (key values not included).
Authentication required
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."
}
}
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:
- Up to 60 requests per minute
-
Exceeding rate limits returns
429 Too Many Requests
For API questions or inquiries, please contact eerf0309+testcrew@gmail.com.