Partner API
Connect your store's own system to MezuSafe — verify mezuzot, manage inventory, and record sales programmatically.
Base URL
https://mezusafe-backend.jourist.cloud
Authentication
Public endpoints need no authentication. Store endpoints require your API key in the X-Api-Key header — generate one from Account Settings → Settings → API Key. Shown once at creation time, so store it securely.
Public Endpoints
No authentication required. Rate-limited by IP address.
/api/v1/public/check-mezuzah
Check a Mezuzah
Upload a photo of a mezuzah to check whether it is already registered, and get back its certification details if so. This is the same check used by the "Check Your Mezuzah" tool on the MezuSafe website.
image
filePhoto of the mezuzah scroll
{"msg":"No matches found.","status":"not_found"}
{"msg":"You uploaded invalid image!","status":"invalid"}
/api/v1/public/compare-mezuzot
Compare Two Mezuzot
Upload two mezuzah photos to check whether they are photos of the same physical scroll.
image1
fileFirst photo
image2
fileSecond photo
{"msg":"please select correct images","status":"invalid"}
/api/v1/public/scan-qrcode/{code}
Resolve a Scanned QR Code
Resolve the short code printed on a mezuzah QR sticker to its current status. Use this if you scan the QR code from your own app instead of a browser.
{"status":"not_found"}
{"status":"already_sold","uuid":"k7Qz9pXsN3vT2m"}
Store Endpoints
Require your API key in the X-Api-Key header. Generate one from Account Settings → Settings → API Key. Rate-limited per key.
/api/v1/store/register-mezuzah
Register a New Mezuzah
Register a new mezuzah scroll into your inventory (received from a Sofer, not yet sold). Only available to agent accounts — this matches the same permission the dashboard "Add Mezuzah" screen already enforces.
mezuzah
filePhoto of the scroll
sofer
stringThe scribe's user uuid
megiah
stringThe examiner's user uuid
writtendate
stringYYYY-MM-DD
examinateddate
stringYYYY-MM-DD
font
stringScript font used
size
stringScroll size
note
stringOptional note
owner_uuid
stringSet immediately if already sold to a known buyer (consumes a credit)
{"msg":"Only an agent account may register a new mezuzah."}
{"msg":"Mezuzah already exists.","status":"duplicate"}
{"msg":"You have no credits left.","status":"no_credits"}
/api/v1/store/inventory
List Your Inventory
List mezuzot currently owned by your store — i.e. received but not yet sold.
page
string0-indexed page number
per_page
stringResults per page
/api/v1/store/mezuzah/{uuid}
Get Mezuzah Status
Status/details of one mezuzah — only works for a uuid your store currently owns.
{"msg":"This mezuzah does not belong to your store."}
{"msg":"mezuzah not found."}
/api/v1/store/mezuzah-certificate/{uuid}
Get the Certificate
Fetch the certificate PDF/PNG URLs for a mezuzah, e.g. to print or email at the point of sale.
/api/v1/store/sell-mezuzah/{uuid}
Record a Sale
Record a sale to a customer at checkout. Send `to_uuid` for a buyer who already has a MezuSafe account, or the buyer's details for one who doesn't — either way this consumes one credit, exactly like selling from the dashboard.
{"msg":"Owner have no credits left.","status":"no_credits"}
{"msg":"mezuzah not found."}
/api/v1/store/sales-history
Your Sales History
Your store's own past sales, for reconciling against your own order records.
page
string0-indexed page number
per_page
stringResults per page
/api/v1/store/credits
Check Your Credit Balance
Remaining credit balance — check this before a sale to avoid a no_credits error.
/api/v1/store/sofers-megiahs
List Sofers & Megiahs
Directory of confirmed sofers and megiahs — useful for picking the sofer/megiah uuid to pass into Register a New Mezuzah.
page
string0-indexed page number
per_page
stringResults per page (max 100)
role
stringOptional — 'sofer' or 'megiah'. Omit to get both.
/api/v1/store/sofers-megiahs/lookup
Look Up a Sofer or Megiah
Fetch a single sofer/megiah by exact email or username (case-insensitive). Provide one, not both.
Exact email match (case-insensitive)
username
stringExact username match — only used if 'email' is omitted
{"msg":"Provide an email or username query parameter."}
{"msg":"No sofer/megiah found."}
