diff --git a/smash/web/api_urls.py b/smash/web/api_urls.py
index 6d8aaccbd47fe0e59ba944584825cc8a16166024..11678a460f993510bb7765c697d5cfc65dbf6ad9 100644
--- a/smash/web/api_urls.py
+++ b/smash/web/api_urls.py
@@ -57,6 +57,13 @@ urlpatterns = [
     # workers
     url(r'^workers/(?P<worker_role>[A-z]+)/$', worker.get_workers, name='web.api.workers'),
 
+    url(r'^workers/add_availability/(?P<worker_id>\d+)/(?P<weekday>[0-9])/(?P<start_hour>\d{2}:\d{2})/(?P<end_hour>\d{2}:\d{2})/$', 
+        worker.add_worker_availability, name='web.api.workers.add_availability'),
+
+    url(r'^workers/add_extra_availability/(?P<worker_id>\d+)/(?P<start_str_date>\d{4}-\d{2}-\d{2}-\d{2}-\d{2})/(?P<end_str_date>\d{4}-\d{2}-\d{2}-\d{2}-\d{2})/$', 
+        worker.add_worker_extra_availability, name='web.api.workers.add_extra_availability'),
+
+
     # daily planning data
     url(r'^daily_planning/workers/$', worker.workers_for_daily_planning, name='web.api.workers.daily_planning'),
     url(r'^daily_planning/workers/availabilities$', worker.availabilities,
diff --git a/smash/web/api_views/worker.py b/smash/web/api_views/worker.py
index dd87beccf1351f016ffd5a45039d7ade62be42be..5410642249c13ef16c52397446130610ca199882 100644
--- a/smash/web/api_views/worker.py
+++ b/smash/web/api_views/worker.py
@@ -7,7 +7,8 @@ from django.utils import timezone
 from django.shortcuts import get_object_or_404
 from web.models.constants import GLOBAL_STUDY_ID
 from web.api_views.daily_planning import get_workers_for_daily_planning, get_availabilities
-from ..models import Worker
+from ..models import Worker, Availability, Holiday
+from web.models.constants import AVAILABILITY_EXTRA
 
 logger = logging.getLogger(__name__)
 
@@ -95,6 +96,43 @@ def serialize_worker(worker):
     }
     return result
 
+def add_worker_availability(request, worker_id, weekday, start_hour, end_hour):
+    
+    if worker_id is None or weekday is None or start_hour is None or end_hour is None:
+        context = {
+            'status': '400', 'reason': 'Either worker_id, weekday, start_hour, end_hour or all of them are invalid.' 
+        }
+        response = HttpResponse(json.dumps(context), content_type='application/json')
+        response.status_code = 400
+        return response
+
+    worker = get_object_or_404(Worker, id=int(worker_id))
+
+    availability, _ = Availability.objects.update_or_create(person=worker, day_number=weekday, 
+        defaults={'available_from': start_hour, 'available_till': end_hour})
+    availability.save()
+
+    return JsonResponse({}, status=200) 
+
+def add_worker_extra_availability(request, worker_id, start_str_date, end_str_date):
+
+    if start_str_date is None or end_str_date is None or worker_id is None:
+        context = {
+            'status': '400', 'reason': 'Either start_date, end_str_date, worker_id or all of them are invalid.' 
+        }
+        response = HttpResponse(json.dumps(context), content_type='application/json')
+        response.status_code = 400
+        return response
+
+    start_date = datetime.datetime.strptime(start_str_date, "%Y-%m-%d-%H-%M").replace(tzinfo=timezone.now().tzinfo)
+    end_date   = datetime.datetime.strptime(end_str_date, "%Y-%m-%d-%H-%M").replace(tzinfo=timezone.now().tzinfo)
+    worker     = get_object_or_404(Worker, id=int(worker_id))
+
+    extra_availability, _ = Holiday.objects.update_or_create(person=worker, datetime_start=start_date, datetime_end=end_date, kind=AVAILABILITY_EXTRA)
+    extra_availability.save()
+
+    return JsonResponse({}, status=200)
+
 def get_worker_availability(request):
     start_str_date = request.GET.get("start_date")
     end_str_date = request.GET.get("end_date")