Integrate AI-powered flooring visualization into your applications with our comprehensive REST API. Create stunning floor transformations programmatically with just a few API calls.
xxThe Epoxy API allows you to integrate AI-powered flooring visualization into your applications. We offer two types of API access: Third-party API for external integrations and User API for registered users.
https://www.andymarkovits.com/api/v1
For external applications and integrations
For registered Epoxy users
Authentication methods vary by API type. Choose the appropriate method for your use case.
For external integrations and third-party applications
curl https://www.andymarkovits.com/api/v1/generations \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json"
Get your API key from the dashboard → API Keys section
For registered Epoxy users and applications
curl https://www.andymarkovits.com/api/v1/generations \
-H "Authorization: Bearer YOUR_SANCTUM_TOKEN" \
-H "Content-Type: application/json"
Get your token from /api/auth/login or dashboard
Get started with a simple generation request. Choose the API type that fits your needs.
curl -X POST https://www.andymarkovits.com/api/v1/generations \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input_method": "url",
"flooring_type": "hardwood",
"texture_name": "TUXEDO",
"image_url": "https://example.com/room.jpg",
"custom_prompt": "Modern hardwood flooring"
}'
curl https://www.andymarkovits.com/api/v1/generations/GENERATION_UUID \
-H "X-API-Key: YOUR_API_KEY"
curl -X POST https://www.andymarkovits.com/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"password"}'
curl -X POST https://www.andymarkovits.com/api/v1/generations \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"input_method": "upload",
"flooring_type": "tile",
"texture_name": "CALIFORNIA GRAY",
"image_file": "@room.jpg"
}'
curl https://www.andymarkovits.com/api/v1/generations/GENERATION_ID/poll \
-H "Authorization: Bearer YOUR_TOKEN"
API rate limits vary by authentication method to ensure fair usage and prevent abuse.
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please try again later.",
"details": {
"retry_after": 60,
"limit": 10,
"remaining": 0,
"reset_time": "2025-10-30T15:35:00Z"
}
}
}
https://www.andymarkovits.com/api/v1/api/v1/auth/register
Register new user
| Header | Value | Required |
|---|---|---|
Authorization |
Bearer YOUR_TOKEN | Yes |
Content-Type |
application/json | Yes |
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/auth/login
Login user
| Header | Value | Required |
|---|---|---|
Authorization |
Bearer YOUR_TOKEN | Yes |
Content-Type |
application/json | Yes |
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/auth/logout
Logout user
| Header | Value | Required |
|---|---|---|
Authorization |
Bearer YOUR_TOKEN | Yes |
Content-Type |
application/json | Yes |
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/auth/refresh
Refresh token
| Header | Value | Required |
|---|---|---|
Authorization |
Bearer YOUR_TOKEN | Yes |
Content-Type |
application/json | Yes |
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/auth/me
Get authenticated user
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/generations
Create new generation
| Header | Value | Required |
|---|---|---|
Authorization |
Bearer YOUR_TOKEN | Yes |
Content-Type |
application/json | Yes |
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/generations
List all generations
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/generations/{id}
Get single generation
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/generations/{id}
Delete generation
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/generations/{id}/status
Check generation status
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/generations/{id}/poll
Poll generation status
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/credits/balance
Get credit balance
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/credits/transactions
Get credit transactions
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/credits/pricing
Get credit pricing
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/user/profile
Get user profile
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/user/profile
Update user profile
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/user/password
Change password
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/user/account
Delete account
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
https://www.andymarkovits.com/api/v1/api/v1/user/stats
Get user statistics
{
"success": true,
"data": "Response data varies by endpoint",
"message": "Operation completed successfully"
}
Step-by-step guide to test the Epoxy API endpoints.
Visit your dashboard → API Keys section to create and manage your API keys.
# Using URL input (easiest for testing)
curl -X POST https://www.andymarkovits.com/api/v1/generations \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input_method": "url",
"flooring_type": "hardwood",
"texture_name": "TUXEDO",
"image_url": "https://example.com/room-image.jpg"
}'
# Replace UUID with the one from step 2
curl https://www.andymarkovits.com/api/v1/generations/YOUR_GENERATION_UUID \
-H "X-API-Key: YOUR_API_KEY"
Keep calling this endpoint every 5-10 seconds until status becomes "completed".
Once completed, the response will include:
generated_image - Full HD resultoriginal_image - Your uploaded imageUse these texture names in your requests:
TUXEDO - Light Tuxedo FlakeHAZZELNUT - Gold Hazelnut FlakeCALIFORNIA GRAY - California Gray Flakehardwood - Natural hardwoodtile - Ceramic/porcelain tilecarpet - Plush carpetmarble - Luxury marbleThe API uses standard HTTP status codes and returns detailed error messages in JSON format.
| Code | Description | Common Causes |
|---|---|---|
200 |
Success | Request completed successfully |
201 |
Created | Generation created successfully |
400 |
Bad Request | Missing required parameters, invalid input |
401 |
Unauthorized | Invalid API key or token |
402 |
Payment Required | Insufficient credits |
404 |
Not Found | Generation or resource not found |
422 |
Unprocessable Entity | Validation failed |
429 |
Too Many Requests | Rate limit exceeded |
500 |
Internal Server Error | Server-side error |
{
"success": false,
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "You do not have enough credits to perform this action",
"details": {
"required": 50,
"available": 25,
"needed": 25
}
}
}
| Error Code | Description | HTTP Status |
|---|---|---|
INSUFFICIENT_CREDITS |
Not enough credits for the operation | 402 |
GENERATION_NOT_FOUND |
The requested generation doesn't exist | 404 |
VALIDATION_FAILED |
Input validation failed | 422 |
INVALID_API_KEY |
API key is invalid or inactive | 401 |
RATE_LIMIT_EXCEEDED |
Too many requests in time period | 429 |
SERVER_ERROR |
Unexpected server error | 500 |
Receive real-time notifications when generations complete or fail.
| Event | Description | Trigger |
|---|---|---|
generation.completed |
Generation finished successfully | When AI processing completes |
generation.failed |
Generation failed | When processing encounters an error |
{
"event": "generation.completed",
"timestamp": "2025-10-30T15:32:15Z",
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": "completed",
"created_at": "2025-10-30T15:30:00Z",
"processed_at": "2025-10-30T15:32:15Z",
"original_image": "https://www.andymarkovits.com/assets/generations/originals/550e8400-e29b-41d4-a716-446655440000.jpg",
"generated_image": "https://www.andymarkovits.com/assets/generations/hd/550e8400-e29b-41d4-a716-446655440000.jpg",
"flooring_type": "hardwood",
"texture_name": "TUXEDO"
}
}
X-Webhook-Signature header for verificationOfficial SDKs and libraries to accelerate your integration.
Need help? We're here for you.
24/7 support for Pro & Enterprise
Report issues & contribute