Queek docs
Merchant endpoint reference

Files

GET
/files

Requires scope merchant-media-read.

Lists original images uploaded by this app installation, newest first, with cursor pagination (limit + starting_after). Each image has the same id, url and variants shape as product images. Only this installation’s uploads are visible.

Authorization

merchantKey
X-Client-Key<token>

The store's private API key (sk_live_…, sk_test_… on a dev store) from Dashboard → Settings → API keys. It is bound to one store and carries the scopes the merchant granted; each operation names the scope it needs. Server-side only — never ship it to a browser or an app bundle.

In: header

Query Parameters

limit?|
Range1 <= value <= 100
starting_after?string|null

Header Parameters

X-Client-Key*string

A private API key (sk_live_…, sk_test_… on a dev store) minted under Dashboard → Settings → API keys. The key is bound to ONE store, so no vendor header or vendor_id is sent; its scopes decide which operations it may call. pk_ public keys never reach this API. Keep it on your server.

X-Request-Id?string

Your own correlation id (8–128 chars, ^[A-Za-z0-9_.:-]+$). Echoed back on the response and on every log line of the request; one is generated when you omit it.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/files?limit=10" \  -H "X-Client-Key: {{merchantKey}}"
{  "data": [    {      "id": 88214,      "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack.jpg",      "thumbnail_url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-thumb.webp",      "variants": {        "thumb": {          "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-thumb.webp",          "w": null,          "h": null        },        "card": {          "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-card.webp",          "w": 480,          "h": 480        },        "card2x": {          "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-card2x.webp",          "w": 800,          "h": 800        },        "view": {          "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-view.webp",          "w": 1200,          "h": 1200        },        "wa": {          "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-wa.jpg",          "w": 1080,          "h": 1080        },        "original": {          "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack.jpg",          "w": 1200,          "h": 1200        }      },      "mime_type": "image/jpeg",      "size": 0,      "width": 1200,      "height": 1200,      "created_at": null    }  ],  "has_more": true,  "next_cursor": "eyJpZCI6ODgyMTQsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0"}
POST
/files

Requires scope merchant-media-create.

Uploads one JPEG, PNG or WebP image as multipart/form-data using the file field. The image is added to the store media library and belongs to this app installation. Reuse its id with media_id on products/{product}/images. A same-byte retry without an Idempotency-Key returns the existing image.

Authorization

merchantKey
X-Client-Key<token>

The store's private API key (sk_live_…, sk_test_… on a dev store) from Dashboard → Settings → API keys. It is bound to one store and carries the scopes the merchant granted; each operation names the scope it needs. Server-side only — never ship it to a browser or an app bundle.

In: header

Header Parameters

X-Client-Key*string

A private API key (sk_live_…, sk_test_… on a dev store) minted under Dashboard → Settings → API keys. The key is bound to ONE store, so no vendor header or vendor_id is sent; its scopes decide which operations it may call. pk_ public keys never reach this API. Keep it on your server.

X-Request-Id?string

Your own correlation id (8–128 chars, ^[A-Za-z0-9_.:-]+$). Echoed back on the response and on every log line of the request; one is generated when you omit it.

Idempotency-Key?string

Retry-safe write key. The same key with the same body replays the stored response for 24h with Idempotent-Replayed: true; with a different body it is 409 idempotency_key_reuse; while the first call is still running it is 409 idempotency_key_in_progress.

Request Body

multipart/form-data

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/files" \  -H "X-Client-Key: {{merchantKey}}" \  -F file="(binary image)"
{  "status": "success",  "message": "Image already uploaded",  "data": {    "id": 88214,    "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack.jpg",    "thumbnail_url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-thumb.webp",    "variants": {      "thumb": {        "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-thumb.webp",        "w": null,        "h": null      },      "card": {        "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-card.webp",        "w": 480,        "h": 480      },      "card2x": {        "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-card2x.webp",        "w": 800,        "h": 800      },      "view": {        "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-view.webp",        "w": 1200,        "h": 1200      },      "wa": {        "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack-wa.jpg",        "w": 1080,        "h": 1080      },      "original": {        "url": "https://media.usequeek.com/uploads/stores/1095/jollof-rice-party-pack.jpg",        "w": 1200,        "h": 1200      }    },    "mime_type": "image/jpeg",    "size": 0,    "width": 1200,    "height": 1200,    "created_at": null  }}