MeeShip Public API
Submit a product image + a category. Get back a ranked list of shipping-optimized variants with the exact shipping cost Meesho will charge for each.
This is the same image-optimization engine that powers our in-product flow, exposed as a stateless B2B API for marketplace sellers and platform integrators.
Base URL#
https://api.meeship.in/api/v1Authentication#
Every request that mutates state or returns billable data requires an API key in the Authorization header:
Authorization: Bearer meeship_live_<your-token>Generate a key from your developer dashboard at https://meeship.in/dashboard/api. The plaintext is shown once at creation time — only the SHA-256 hash is stored on our side. If you lose it, revoke and create a new one.
Public endpoints#
GET /api/v1/categories does not require a key — the catalogue is publicly searchable so the docs picker and your build pipelines work without secrets in the loop.
A complete first call#
curl -X POST https://api.meeship.in/api/v1/optimizations \
-H "Authorization: Bearer meeship_live_<your-token>" \
-H "Idempotency-Key: my-product-sku-12345" \
-F image=@./product.jpg \
-F category=womens-kurtis \
-F selling_price_inr=499Returns within ~2 seconds:
{
"job_id": "8d7e9b3c-1f4a-4d2e-9f50-aabbccdd1122",
"status": "queued",
"status_url": "https://api.meeship.in/api/v1/jobs/8d7e...",
"submitted_at": "2026-05-26T11:42:03Z",
"category": { "slug": "womens-kurtis" }
}Poll status_url until status: complete:
curl -H "Authorization: Bearer meeship_live_<your-token>" \
https://api.meeship.in/api/v1/jobs/8d7e9b3c-1f4a-4d2e-9f50-aabbccdd1122{
"job_id": "8d7e...",
"status": "complete",
"credits_charged": 1,
"result": {
"baseline_shipping_charges_inr": 82,
"variants": [
{ "rank": 1, "image_url": "https://.../v.jpg", "shipping_charges_inr": 55 }
]
}
}> \u26a0\ufe0f Each `image_url` expires 24 hours after job completion. Download > the bytes within that window and store them in your own system if you > need them longer. See > optimizations \u00a7 image URL expiry for > details.
Response headers#
Every successful response includes:
| Header | Meaning |
|---|---|
X-Correlation-Id | Unique request ID. Include in support tickets. |
X-Credits-Remaining | Credits left in your balance after this call. |
Retry-After | Suggested polling interval (5s) on non-terminal GET /jobs/{id} responses; seconds until limit reset on 429. |
Errors#
All errors share this shape (the ErrorEnvelope):
{
"error": {
"code": "invalid_category",
"message": "Unknown category 'women-kurti'. Use GET /api/v1/categories to browse.",
"correlation_id": "0192a8d4-...",
"docs_url": "https://meeship.in/for-integrations/docs/errors",
"suggestions": ["womens-kurtis", "mens-kurtis"]
}
}See errors for the full code table.
Rate limits#
Limits are per subscription, sliding 60-second window:
| Pack | Submit | Polling |
|---|---|---|
| Developer | 2/min | 20/min |
| Growth | 2/min | 20/min |
| Scale (Enterprise) | Negotiated | Negotiated |
These are dev-stage defaults sized for the image-generation cost per call; higher caps are available on request.
Trial credits are sales-granted on request — email meeship.seller@gmail.com.
Unauthenticated GET /categories is rate-limited per source-IP (default 60/min — generous enough for any reasonable docs picker).
Idempotency#
POST /optimizations accepts an Idempotency-Key header (any client-chosen string, max 255 chars). Repeated submits with the same key within 24 hours return the same `job_id` without enqueueing a new job or charging an extra credit. Recommended pattern: use your internal SKU/UUID.
What costs credits?#
Exactly one thing: a job that reaches status: complete. Credits are not charged for:
- Submit calls that return
4xx - Submit calls that return
5xx - Jobs that end in
failed(upstream/Meesho errors) - Polling
GET /jobs/{id} - Listing categories
- Reading usage