- Add a product line to the appointment's visit
Adds one product line to the visit resolved from appointment_id — the "came for a haircut, bought shampoo, one receipt" case.
Each call appends a single line and never replaces the existing ones, so a client that does not know about lines added elsewhere cannot remove them. Service lines are derived from the appointment itself and cannot be created here. Adding a line increases amount_to_pay_minor and changes the visit ETag. Inventory levels are not checked — the product catalog and inventory are outside this contract. Requires Idempotency-Key; a retry returns the visit as it stood after the first call instead of adding the line twice.
Client-generated unique key for this logical request (UUID recommended). A retry with the same key and body returns the original result; the same key with a different body fails with 409 idempotency_key_reused. Keys are retained at least 24 hours and are scoped to credential, Location, and operation; after expiry the value may be reused for a new logical request.
- Mock serverhttps://developer.alteg.io/_mock/en/b2b-v3/openapi/locations/{location_id}/appointments/{appointment_id}/visit/items
- Preview resource API contract - endpoint surface is not live yethttps://api.alteg.io/api/v3/locations/{location_id}/appointments/{appointment_id}/visit/items
- OAuth2
- RestrictedKey
curl -i -X POST \
'https://developer.alteg.io/_mock/en/b2b-v3/openapi/locations/{location_id}/appointments/{appointment_id}/visit/items' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: string' \
-d '{
"product_id": 4417,
"quantity": 1
}'The updated visit, including the new line.
Requests left in the most constrained policy window that applies to this request.
On 429, seconds until the most constrained policy frees up; it equals Retry-After there. On a successful response it reports the length of that policy's window rather than the time left in the current one, so treat it as the window size, not as a countdown — the counter to pace against is RateLimit-Remaining.
Most constrained policy applied to the request, as <limit>;w=<window in seconds>.
Ways to pay this visit, with applicability resolved against it and identifiers sufficient for createPayment. Only instruments attached to the client appear here; a gift card or membership held by number is found with searchLoyaltyInstrument.
Remaining unpaid amount in integer minor units. 0 means fully paid or free.
- Refund
- null
{ "id": 5001, "object": "visit", "location_id": 4321, "appointment_ids": [ 12345 ], "status": "arrived", "items": [ { … } ], "payments": [ { … } ], "currency": "EUR", "created_at": "2026-07-24T11:30:00Z", "updated_at": "2026-07-24T13:00:00Z", "amount_to_pay_minor": 0, "payment_methods": [ { … } ] }