The haatlabs API
The work that needs servers of its own (Amazon lookups in 23 marketplaces, image search, background removal, AI descriptions and image checks, and jobs that chain them) runs on Haatlabs' servers and is sold through RapidAPI. Your app calls it with one key. What each call does: the API page.
On RapidAPI: coming soon.
Plans
Per month, through RapidAPI. Basic stops at its quota; the paid plans go on and pay for each extra call.
| Plan | Price | Lookups | Cut-outs | AI calls | Pipelines |
|---|---|---|---|---|---|
| Basic | Free | 100 | 50 | 50 | 10 |
| Pro | $19 | 5,000 | 1,000 | 2,000 | 200 |
| Ultra | $79 | 25,000 | 5,000 | 10,000 | 1,000 |
| Mega | $249 | 100,000 | 20,000 | 40,000 | 5,000 |
Each extra call: lookup $0.004, cut-out $0.02, AI call $0.01, pipeline $0.10. Fair use and the Amazon data: the terms.
From your app
pnpm add @haatlabs-core/servicesimport { createHaatlabsApi } from '@haatlabs-core/services';
const api = createHaatlabsApi({ apiKey: process.env.HAATLABS_API_KEY! });
const page = await api.amazon.search({ q: 'desk lamp', market: 'US' });
const cutout = await api.images.removeBackground({ image: bytes }); // or { imageUrl }
const job = await api.jobs.start('find-clean', { query: 'desk lamp', limit: 5 });
const done = await api.jobs.wait(job.jobId);An image goes as its bytes (at most 5 MB) or as a public https URL. Results are signed URLs, readable for 7 days. Every failure is an AppError with its own code (SERVICE_QUOTA_EXCEEDED, SERVICE_RATE_LIMITED, SERVICE_UNAVAILABLE and the others in the package's page), and verifyWebhook checks a job's callback. @haatlabs-core/services/testing has a local stand-in for tests.