When to use on-demand inventory
Use this for COMPLEX (unique unit) inventory when you generate keys or accounts in your own system at purchase time. Local stock is always preferred; the endpoint fills only the shortfall.
- Works with INSTANT auto-delivery only when every unit is actually assigned.
- Configure an offer-level default, or override per pricing option.
- HTTPS only. Optional HMAC signing: verify X-RMT-Signature (same scheme as outbound webhooks).
Payment-safe failures
If your endpoint times out or returns invalid data, the order stays PAID. The buyer is charged; you see an error on the order and can retry reserve or attach keys manually.
Request contract
After payment, RMT POSTs one reserve.item call per missing unit with order, offer, option, field schema, and quantity 1. Optional request template JSON is merged with {{placeholders}}.
Canonical POST body (truncated)
{
"id": "rsv_…",
"type": "reserve.item",
"order": { "uid": "…", "reference": "…", "url": "…" },
"offer": { "url": "…", "title": "…", "pageUrl": "…" },
"option": { "id": 1, "name": "Standard" },
"fields": [{ "id": 10, "name": "License", "type": "text", "required": true }],
"quantity": 1
}Response and field mapping
Return 2xx JSON. Map paths like $.license onto Item fields, or return { "entries": [{ "fieldId": 10, "value": "KEY-…" }] }.
Convenience response
{
"entries": [
{ "name": "License", "value": "AAAA-BBBB-CCCC" }
]
}- License-only: map one text field from $.license or $.key.
- Account: map email and password fields from $.email and $.password.
- Missing required fields after mapping counts as failure.
Test, verify signatures, and retry
Use Test in the offer editor (sends dryRun: true). If you set a signing secret, verify HMAC-SHA256 of timestamp.body against X-RMT-Signature. On the order page, retry the endpoint after fixing yours. Never log secrets or full keys in emails.
- 1Save HTTPS URL, field mapping, and optional signing secret on the offer Items step.
- 2Run Test and confirm mapped previews.
- 3On failure, open the order, retry reserve, or create/assign a key manually.
Do not call reserve before payment
RMT only calls your endpoint after payment succeeds, so abandoned checkouts do not burn licenses.