Save a reward draft with a JPEG, PNG or WebP image; never publishes
Needs no recent sign-in: saving a private draft never loses work. Image base64 decodes to at most 2 MiB and 24 million pixels. The server strips metadata and re-encodes a static WebP. Keep the same id on initial-create retry. Submitted and published offers cannot be edited (duplicate into a new draft instead). Branches are required: send outletIds, or allOutlets: true for every branch of the approved listing (409 reward_partner_listing_required until the listing is approved). Fields left out keep the saved draft's value; a new voucher defaults to anyone on MedBuk+, Collect by 7 days after claims close, no stock limit and 7 days of validity. Validation errors are 400 with the form field in `field`.
Authorization
bearer In: header
Path Parameters
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuid^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidRequest Body
application/json
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
application/json
curl -X PUT "https://example.com/v1/partner/tenants/497f6eca-6276-4993-bfeb-53cbbbba6f08/reward-offers/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "expectedVersion": 0, "definition": { "kind": "product", "title": "string", "summary": "string", "rules": "string", "deliveryKind": "physical_gift", "startsAt": "2019-08-24T14:15:22Z", "endsAt": "2019-08-24T14:15:22Z", "timezone": "string" } }'{ "kind": "product", "eligibility": "signup", "signupWithinDays": 30, "usesPerMember": 1, "usesPeriod": "total", "benefit": { "type": "free" }, "exclusions": "", "outletIds": [], "catalogItemId": null, "pointsCost": 0, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0", "merchantName": "string", "title": "string", "status": "draft", "version": -9007199254740991, "updatedAt": "2019-08-24T14:15:22Z", "stockTotal": -9007199254740991, "startsAt": "2019-08-24T14:15:22Z", "endsAt": "2019-08-24T14:15:22Z", "reviewNote": "string", "submittedAt": null, "outlets": [], "allOutlets": false, "claimedCount": 0, "redeemedCount": 0, "heldUnredeemedCount": 0, "claimsStoppedAt": null, "definition": { "kind": "product", "eligibility": "signup", "signupWithinDays": 30, "usesPerMember": 1, "usesPeriod": "total", "benefit": { "type": "free" }, "exclusions": "", "outletIds": [], "catalogItemId": null, "partnerFunded": true, "pointsCost": 0, "title": "string", "summary": "string", "rules": "string", "deliveryKind": "physical_gift", "startsAt": "2019-08-24T14:15:22Z", "endsAt": "2019-08-24T14:15:22Z", "redeemBy": "2019-08-24T14:15:22Z", "timezone": "string", "stockTotal": 1, "reservationTtlSeconds": 60 }, "imageDataUrl": "string"}Merchant owner: read your offer and private image GET
Previous Page
Merchant owner: stop new claims on a live voucher POST
Owner only; needs a recent sign-in; audited. Ends new claims now. Members who already hold the voucher keep it and can still redeem it until its own expiry; its content, terms, price and eligibility never change. The response's heldUnredeemedCount is the number of vouchers still held. 409 reward_claims_already_stopped when claims already ended.