| 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' |