|
|
openapi: 3.0.3 |
|
|
info: |
|
|
title: BackgroundFX Pro API |
|
|
description: | |
|
|
AI-powered background removal and replacement API. |
|
|
|
|
|
|
|
|
All API requests require authentication using Bearer tokens. |
|
|
|
|
|
|
|
|
- Free tier: 100 requests/hour |
|
|
- Pro tier: 1000 requests/hour |
|
|
- Enterprise: Unlimited |
|
|
|
|
|
|
|
|
- Images: 50MB max |
|
|
- Videos: 500MB max |
|
|
- Batch: 100 files max |
|
|
version: 1.0.0 |
|
|
contact: |
|
|
email: api@backgroundfx.pro |
|
|
url: https://backgroundfx.pro |
|
|
license: |
|
|
name: MIT |
|
|
url: https://opensource.org/licenses/MIT |
|
|
|
|
|
servers: |
|
|
- url: https://api.backgroundfx.pro/v1 |
|
|
description: Production server |
|
|
- url: https://staging-api.backgroundfx.pro/v1 |
|
|
description: Staging server |
|
|
- url: http://localhost:8000/v1 |
|
|
description: Local development |
|
|
|
|
|
security: |
|
|
- BearerAuth: [] |
|
|
|
|
|
tags: |
|
|
- name: Authentication |
|
|
description: User authentication and authorization |
|
|
- name: Processing |
|
|
description: Image and video processing operations |
|
|
- name: Projects |
|
|
description: Project management |
|
|
- name: Backgrounds |
|
|
description: Background library and generation |
|
|
- name: Users |
|
|
description: User profile and settings |
|
|
- name: Webhooks |
|
|
description: Webhook management |
|
|
|
|
|
paths: |
|
|
/auth/login: |
|
|
post: |
|
|
tags: [Authentication] |
|
|
summary: User login |
|
|
security: [] |
|
|
requestBody: |
|
|
required: true |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
type: object |
|
|
required: [email, password] |
|
|
properties: |
|
|
email: |
|
|
type: string |
|
|
format: email |
|
|
password: |
|
|
type: string |
|
|
minLength: 8 |
|
|
responses: |
|
|
200: |
|
|
description: Successful login |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/AuthResponse' |
|
|
401: |
|
|
$ref: '#/components/responses/Unauthorized' |
|
|
|
|
|
/auth/register: |
|
|
post: |
|
|
tags: [Authentication] |
|
|
summary: Register new user |
|
|
security: [] |
|
|
requestBody: |
|
|
required: true |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
type: object |
|
|
required: [email, password, name] |
|
|
properties: |
|
|
email: |
|
|
type: string |
|
|
format: email |
|
|
password: |
|
|
type: string |
|
|
minLength: 8 |
|
|
name: |
|
|
type: string |
|
|
minLength: 2 |
|
|
responses: |
|
|
201: |
|
|
description: User created successfully |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/AuthResponse' |
|
|
400: |
|
|
$ref: '#/components/responses/BadRequest' |
|
|
|
|
|
/process/remove-background: |
|
|
post: |
|
|
tags: [Processing] |
|
|
summary: Remove background from image |
|
|
requestBody: |
|
|
required: true |
|
|
content: |
|
|
multipart/form-data: |
|
|
schema: |
|
|
type: object |
|
|
required: [file] |
|
|
properties: |
|
|
file: |
|
|
type: string |
|
|
format: binary |
|
|
description: Image file (PNG, JPG, WebP) |
|
|
model: |
|
|
type: string |
|
|
enum: [rembg, u2net, deeplab, custom] |
|
|
default: rembg |
|
|
quality: |
|
|
type: string |
|
|
enum: [low, medium, high, ultra] |
|
|
default: high |
|
|
return_mask: |
|
|
type: boolean |
|
|
default: false |
|
|
edge_refinement: |
|
|
type: number |
|
|
minimum: 0 |
|
|
maximum: 100 |
|
|
default: 50 |
|
|
responses: |
|
|
200: |
|
|
description: Background removed successfully |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/ProcessingResult' |
|
|
400: |
|
|
$ref: '#/components/responses/BadRequest' |
|
|
413: |
|
|
$ref: '#/components/responses/PayloadTooLarge' |
|
|
|
|
|
/process/batch: |
|
|
post: |
|
|
tags: [Processing] |
|
|
summary: Process multiple files |
|
|
requestBody: |
|
|
required: true |
|
|
content: |
|
|
multipart/form-data: |
|
|
schema: |
|
|
type: object |
|
|
required: [files] |
|
|
properties: |
|
|
files: |
|
|
type: array |
|
|
items: |
|
|
type: string |
|
|
format: binary |
|
|
maxItems: 100 |
|
|
options: |
|
|
type: string |
|
|
description: JSON string of processing options |
|
|
responses: |
|
|
202: |
|
|
description: Batch job created |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/BatchJob' |
|
|
|
|
|
/process/jobs/{jobId}: |
|
|
get: |
|
|
tags: [Processing] |
|
|
summary: Get batch job status |
|
|
parameters: |
|
|
- name: jobId |
|
|
in: path |
|
|
required: true |
|
|
schema: |
|
|
type: string |
|
|
format: uuid |
|
|
responses: |
|
|
200: |
|
|
description: Job status retrieved |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/BatchJob' |
|
|
404: |
|
|
$ref: '#/components/responses/NotFound' |
|
|
|
|
|
/process/replace-background: |
|
|
post: |
|
|
tags: [Processing] |
|
|
summary: Replace image background |
|
|
requestBody: |
|
|
required: true |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
type: object |
|
|
required: [image_id, background_id] |
|
|
properties: |
|
|
image_id: |
|
|
type: string |
|
|
background_id: |
|
|
type: string |
|
|
blend_mode: |
|
|
type: string |
|
|
enum: [normal, multiply, screen, overlay] |
|
|
default: normal |
|
|
responses: |
|
|
200: |
|
|
description: Background replaced successfully |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/ProcessingResult' |
|
|
|
|
|
/backgrounds: |
|
|
get: |
|
|
tags: [Backgrounds] |
|
|
summary: List available backgrounds |
|
|
parameters: |
|
|
- name: category |
|
|
in: query |
|
|
schema: |
|
|
type: string |
|
|
enum: [solid, gradient, pattern, nature, abstract, custom] |
|
|
- name: page |
|
|
in: query |
|
|
schema: |
|
|
type: integer |
|
|
default: 1 |
|
|
- name: limit |
|
|
in: query |
|
|
schema: |
|
|
type: integer |
|
|
default: 20 |
|
|
maximum: 100 |
|
|
responses: |
|
|
200: |
|
|
description: List of backgrounds |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
type: object |
|
|
properties: |
|
|
items: |
|
|
type: array |
|
|
items: |
|
|
$ref: '#/components/schemas/Background' |
|
|
total: |
|
|
type: integer |
|
|
page: |
|
|
type: integer |
|
|
pages: |
|
|
type: integer |
|
|
|
|
|
/backgrounds/generate: |
|
|
post: |
|
|
tags: [Backgrounds] |
|
|
summary: Generate AI background |
|
|
requestBody: |
|
|
required: true |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
type: object |
|
|
required: [prompt] |
|
|
properties: |
|
|
prompt: |
|
|
type: string |
|
|
minLength: 3 |
|
|
maxLength: 500 |
|
|
style: |
|
|
type: string |
|
|
enum: [realistic, artistic, abstract, gradient] |
|
|
default: realistic |
|
|
width: |
|
|
type: integer |
|
|
default: 1920 |
|
|
height: |
|
|
type: integer |
|
|
default: 1080 |
|
|
responses: |
|
|
201: |
|
|
description: Background generated |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/Background' |
|
|
|
|
|
/projects: |
|
|
get: |
|
|
tags: [Projects] |
|
|
summary: List user projects |
|
|
parameters: |
|
|
- $ref: '#/components/parameters/PageParam' |
|
|
- $ref: '#/components/parameters/LimitParam' |
|
|
- name: search |
|
|
in: query |
|
|
schema: |
|
|
type: string |
|
|
responses: |
|
|
200: |
|
|
description: List of projects |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
type: object |
|
|
properties: |
|
|
items: |
|
|
type: array |
|
|
items: |
|
|
$ref: '#/components/schemas/Project' |
|
|
total: |
|
|
type: integer |
|
|
|
|
|
post: |
|
|
tags: [Projects] |
|
|
summary: Create new project |
|
|
requestBody: |
|
|
required: true |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
type: object |
|
|
required: [name, type] |
|
|
properties: |
|
|
name: |
|
|
type: string |
|
|
type: |
|
|
type: string |
|
|
enum: [image, video, batch] |
|
|
description: |
|
|
type: string |
|
|
responses: |
|
|
201: |
|
|
description: Project created |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/Project' |
|
|
|
|
|
/webhooks: |
|
|
post: |
|
|
tags: [Webhooks] |
|
|
summary: Register webhook |
|
|
requestBody: |
|
|
required: true |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
type: object |
|
|
required: [url, events] |
|
|
properties: |
|
|
url: |
|
|
type: string |
|
|
format: uri |
|
|
events: |
|
|
type: array |
|
|
items: |
|
|
type: string |
|
|
enum: [job.completed, job.failed, project.created] |
|
|
secret: |
|
|
type: string |
|
|
responses: |
|
|
201: |
|
|
description: Webhook registered |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/Webhook' |
|
|
|
|
|
components: |
|
|
securitySchemes: |
|
|
BearerAuth: |
|
|
type: http |
|
|
scheme: bearer |
|
|
bearerFormat: JWT |
|
|
|
|
|
parameters: |
|
|
PageParam: |
|
|
name: page |
|
|
in: query |
|
|
schema: |
|
|
type: integer |
|
|
default: 1 |
|
|
minimum: 1 |
|
|
|
|
|
LimitParam: |
|
|
name: limit |
|
|
in: query |
|
|
schema: |
|
|
type: integer |
|
|
default: 20 |
|
|
minimum: 1 |
|
|
maximum: 100 |
|
|
|
|
|
schemas: |
|
|
AuthResponse: |
|
|
type: object |
|
|
properties: |
|
|
token: |
|
|
type: string |
|
|
refresh_token: |
|
|
type: string |
|
|
user: |
|
|
$ref: '#/components/schemas/User' |
|
|
|
|
|
User: |
|
|
type: object |
|
|
properties: |
|
|
id: |
|
|
type: string |
|
|
format: uuid |
|
|
email: |
|
|
type: string |
|
|
format: email |
|
|
name: |
|
|
type: string |
|
|
plan: |
|
|
type: string |
|
|
enum: [free, pro, enterprise] |
|
|
created_at: |
|
|
type: string |
|
|
format: date-time |
|
|
|
|
|
ProcessingResult: |
|
|
type: object |
|
|
properties: |
|
|
id: |
|
|
type: string |
|
|
format: uuid |
|
|
image: |
|
|
type: string |
|
|
format: uri |
|
|
mask: |
|
|
type: string |
|
|
format: uri |
|
|
metadata: |
|
|
type: object |
|
|
properties: |
|
|
width: |
|
|
type: integer |
|
|
height: |
|
|
type: integer |
|
|
format: |
|
|
type: string |
|
|
processing_time: |
|
|
type: number |
|
|
|
|
|
BatchJob: |
|
|
type: object |
|
|
properties: |
|
|
id: |
|
|
type: string |
|
|
format: uuid |
|
|
status: |
|
|
type: string |
|
|
enum: [pending, processing, completed, failed] |
|
|
progress: |
|
|
type: number |
|
|
minimum: 0 |
|
|
maximum: 100 |
|
|
total_files: |
|
|
type: integer |
|
|
processed_files: |
|
|
type: integer |
|
|
results: |
|
|
type: array |
|
|
items: |
|
|
$ref: '#/components/schemas/ProcessingResult' |
|
|
created_at: |
|
|
type: string |
|
|
format: date-time |
|
|
|
|
|
Background: |
|
|
type: object |
|
|
properties: |
|
|
id: |
|
|
type: string |
|
|
url: |
|
|
type: string |
|
|
format: uri |
|
|
thumbnail: |
|
|
type: string |
|
|
format: uri |
|
|
category: |
|
|
type: string |
|
|
tags: |
|
|
type: array |
|
|
items: |
|
|
type: string |
|
|
|
|
|
Project: |
|
|
type: object |
|
|
properties: |
|
|
id: |
|
|
type: string |
|
|
format: uuid |
|
|
name: |
|
|
type: string |
|
|
type: |
|
|
type: string |
|
|
enum: [image, video, batch] |
|
|
status: |
|
|
type: string |
|
|
enum: [draft, processing, completed] |
|
|
files_count: |
|
|
type: integer |
|
|
created_at: |
|
|
type: string |
|
|
format: date-time |
|
|
|
|
|
Webhook: |
|
|
type: object |
|
|
properties: |
|
|
id: |
|
|
type: string |
|
|
format: uuid |
|
|
url: |
|
|
type: string |
|
|
format: uri |
|
|
events: |
|
|
type: array |
|
|
items: |
|
|
type: string |
|
|
active: |
|
|
type: boolean |
|
|
created_at: |
|
|
type: string |
|
|
format: date-time |
|
|
|
|
|
Error: |
|
|
type: object |
|
|
properties: |
|
|
error: |
|
|
type: string |
|
|
message: |
|
|
type: string |
|
|
details: |
|
|
type: object |
|
|
|
|
|
responses: |
|
|
BadRequest: |
|
|
description: Bad request |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/Error' |
|
|
|
|
|
Unauthorized: |
|
|
description: Unauthorized |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/Error' |
|
|
|
|
|
NotFound: |
|
|
description: Resource not found |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/Error' |
|
|
|
|
|
PayloadTooLarge: |
|
|
description: File too large |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/Error' |
|
|
|
|
|
RateLimitExceeded: |
|
|
description: Rate limit exceeded |
|
|
content: |
|
|
application/json: |
|
|
schema: |
|
|
$ref: '#/components/schemas/Error' |