{"auth":{"derive":[{"from":"dom","name":"access_token","regex":"'ACCESS_TOKEN'\\s*:\\s*'([^']+)'","selector":"script:not([src])"}]},"description":"Free appointment slots for one jameda doctor and address over 7 days, grouped by day, with the booking link for each slot and the next free slot if the week is full. Takes doctor_id and address_id from jameda.de/search-doctors (online_booking must be true). Uses jameda's anonymous page token; no login.","effect":"read","id":"jameda.de/get-slots","keywords":["jameda","arzt","ärztin","arztsuche","facharzt","hausarzt","hautarzt","zahnarzt","termin","arzttermin","bewertung","doctor","find a doctor","appointment","medical","freie termine","slots","verfügbarkeit"],"output":{"schema":{"properties":{"days":{"items":{"properties":{"date":{"format":"date","type":"string"},"first_booking_url":{"format":"uri","type":"string"},"times":{"description":"HH:mm, Europe/Berlin","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"array"},"next_available":{"description":"Next free slot after the window (ISO), when the window has none","type":["string","null"]},"slots":{"description":"First 30 slots with booking links","items":{"properties":{"booking_url":{"format":"uri","type":"string"},"start":{"type":"string"}},"type":"object"},"type":"array"},"total":{"description":"Free slots in the 7-day window","type":"integer"}},"required":["total","days"],"type":"object"},"value":"{total: length(steps.slots.slots), days: items(group_by(steps.slots.slots, &split(start, 'T')[0]))[*].{date: [0], times: [1][*].join(':', split(split(start, 'T')[1], ':')[:2]), first_booking_url: [1][0].booking_url}, next_available: steps.slots.next_after, slots: steps.slots.slots[:30]}"},"params":{"additionalProperties":false,"properties":{"address_id":{"pattern":"^[0-9]+$","type":"string"},"address_service_id":{"description":"Visit type id from the doctor's services, optional","type":"string"},"doctor_id":{"pattern":"^[0-9]+$","type":"string"},"insurance":{"description":"1 = gesetzlich (statutory), 2 = privat (private); inferred from the site","enum":["1","2"],"type":"string"},"start_date":{"description":"First day YYYY-MM-DD; the window is 7 days","pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"}},"required":["doctor_id","address_id","start_date"],"type":"object"},"provenance":{"method":"browser-inspect","notes":"spikes/jameda.md. The slots API needs the anonymous bearer that every jameda page embeds in an inline script (ZLApp.APICredentials.ACCESS_TOKEN, ~13 h); derived with regex from the tab, never output. 404 = this address has no online calendar; 401 = token missing or expired (reload the tab). The +01:00 offset is hard-coded (CET): it must change to +02:00 for dates in summer time (late March to late October).","recorded_at":"2026-11-07T12:10:00+01:00","recorded_by":"C4"},"requires_login":false,"schema":"https://wield.run/schema/recipe/v1.json","site":{"country":"DE","id":"jameda.de","language":"de","login_url":"https://www.jameda.de/anmelden","name":"jameda","origin":"https://www.jameda.de","origins":["https://www.jameda.de"]},"steps":[{"expect":{"content_type":"json","status":[200]},"extract":{"json":{"next_after":"_embedded.nearest_slot_after_date.start || `null`","slots":"_items[?booked != `true`].{start: start, booking_url: booking_url}"}},"id":"slots","request":{"headers":{"Accept":"application/json","Authorization":"Bearer {{vars.access_token}}"},"method":"GET","query":{"end":"{{params.start_date | add_days:6}}T23:59:59+01:00","filters[address_service_id]":"{{params.address_service_id}}","filters[insurance_provider_id]":"{{params.insurance}}","includingSaasOnlyCalendar":"false","start":"{{params.start_date}}T00:00:00+01:00","with[]":["address.nearest_slot_after_end","links.book.patient"]},"url":"/api/v3/doctors/{{params.doctor_id}}/addresses/{{params.address_id}}/slots"}}],"task":"Get free online appointment slots for a doctor on jameda","tos":{"notes":"jameda's terms forbid automated retrieval of profile data. One user-initiated search page at a time from the user's own browser. Health-related searches are sensitive: results stay on the user's device.","reviewed":false},"verify":{"checks":["output.total > `0` || output.next_available != `null`","length(output.days) <= `7`","output.total == `0` || starts_with(output.slots[0].booking_url, 'https://www.jameda.de/booking/')"],"example_params":{"address_id":"314278","doctor_id":"288098","start_date":"2026-11-09"},"max_ms":4000},"version":1}