Skip to content

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#

Code
https://api.meeship.in/api/v1

Authentication#

Every request that mutates state or returns billable data requires an API key in the Authorization header:

Code
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#

Shell
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=499

Returns within ~2 seconds:

JSON
{
  "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:

Shell
curl -H "Authorization: Bearer meeship_live_<your-token>" \
     https://api.meeship.in/api/v1/jobs/8d7e9b3c-1f4a-4d2e-9f50-aabbccdd1122
JSON
{
  "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:

HeaderMeaning
X-Correlation-IdUnique request ID. Include in support tickets.
X-Credits-RemainingCredits left in your balance after this call.
Retry-AfterSuggested polling interval (5s) on non-terminal GET /jobs/{id} responses; seconds until limit reset on 429.

Errors#

All errors share this shape (the ErrorEnvelope):

JSON
{
  "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:

PackSubmitPolling
Developer2/min20/min
Growth2/min20/min
Scale (Enterprise)NegotiatedNegotiated

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

Reference#