diff --git a/src/document/__init__.py b/src/document/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/document/admin.py b/src/document/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..799d0189e8e3047bcf10d021a805aa0bae30e07b
--- /dev/null
+++ b/src/document/admin.py
@@ -0,0 +1,5 @@
+from django.contrib import admin
+
+from . import models
+
+admin.site.register(models.Document)
diff --git a/src/document/apps.py b/src/document/apps.py
new file mode 100644
index 0000000000000000000000000000000000000000..fd7bdcbc212e8f61f09df30815616ecc6074ea8a
--- /dev/null
+++ b/src/document/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class DocumentConfig(AppConfig):
+    name = 'document'
diff --git a/src/document/migrations/0001_initial.py b/src/document/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..1982261b5587cc0c2c527977925709598452aeac
--- /dev/null
+++ b/src/document/migrations/0001_initial.py
@@ -0,0 +1,27 @@
+# Generated by Django 2.0.1 on 2018-05-28 15:21
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('account', '0017_auto_20180205_2004'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Document',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('uploaded_at', models.DateTimeField(auto_now_add=True)),
+                ('name', models.CharField(max_length=150)),
+                ('description', models.TextField()),
+                ('file', models.FileField(upload_to='')),
+                ('uploaded_by', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='account.Profile')),
+            ],
+        ),
+    ]
diff --git a/src/document/migrations/__init__.py b/src/document/migrations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/document/models.py b/src/document/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..e2c30e36742be70a2cb4b4f9b429dcde73eab4c5
--- /dev/null
+++ b/src/document/models.py
@@ -0,0 +1,14 @@
+from django.db import models
+
+from account.models import Profile
+
+
+class Document(models.Model):
+    uploaded_by = models.ForeignKey(Profile, on_delete=models.DO_NOTHING)
+    uploaded_at = models.DateTimeField(auto_now_add=True, editable=False)
+    name = models.CharField(max_length=150)
+    description = models.TextField()
+    file = models.FileField()
+
+    def __str__(self):
+        return self.name
diff --git a/src/document/serializers.py b/src/document/serializers.py
new file mode 100644
index 0000000000000000000000000000000000000000..47e0e1cd73d13b5e0bc22bd79aba3535a9e8002e
--- /dev/null
+++ b/src/document/serializers.py
@@ -0,0 +1,13 @@
+from rest_framework import serializers
+
+from common.serializers import CurrentUserProfileDefault
+from . import models
+
+
+class DocumentSerializer(serializers.ModelSerializer):
+    uploaded_at = serializers.DateTimeField(read_only=True)
+    uploaded_by = serializers.HiddenField(default=CurrentUserProfileDefault())
+
+    class Meta:
+        model = models.Document
+        fields = ('uploaded_by', 'uploaded_at', 'name', 'description', 'file')
diff --git a/src/document/tests.py b/src/document/tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/document/urls.py b/src/document/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..1a4dc2be88754f0005a61974d201f0025f3bcbf4
--- /dev/null
+++ b/src/document/urls.py
@@ -0,0 +1,7 @@
+from rest_framework import routers
+from . import views
+
+router = routers.DefaultRouter()
+router.register(r'documents', views.DocumentViewSet, base_name='documents')
+
+urlpatterns = router.urls
diff --git a/src/document/views.py b/src/document/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..70e78a074604bb240aca2930d9325ac31f60d8bc
--- /dev/null
+++ b/src/document/views.py
@@ -0,0 +1,11 @@
+from rest_framework import viewsets
+
+from common import permissions
+from . import models
+from . import serializers
+
+
+class DocumentViewSet(viewsets.ModelViewSet):
+    queryset = models.Document.objects.all()
+    serializer_class = serializers.DocumentSerializer
+    permission_classes = (permissions.IsStaffOrReadOnly, )
diff --git a/src/kszkepzes/settings/base.py b/src/kszkepzes/settings/base.py
index 277106b310ad176aa7268075d2b0a6e099ff2a22..dd73603a60b94e23ef0f7892f885ff713c32de67 100644
--- a/src/kszkepzes/settings/base.py
+++ b/src/kszkepzes/settings/base.py
@@ -47,6 +47,7 @@ INSTALLED_APPS = [
     'account',
     'stats',
     'news',
+    'document',
 ]
 
 MIDDLEWARE = [
diff --git a/src/kszkepzes/urls.py b/src/kszkepzes/urls.py
index 3b249d5dcce89907087234475c1d014328c81e3b..f5e414edc9604b99a6d4118130f32b1e4b25b724 100644
--- a/src/kszkepzes/urls.py
+++ b/src/kszkepzes/urls.py
@@ -11,6 +11,7 @@ urlpatterns = [
     url(r'^api/v1/', include('stats.urls')),
     url(r'^api/v1/', include('account.urls')),
     url(r'^api/v1/', include('news.urls')),
+    url(r'^api/v1/', include('document.urls')),
     url(r'^api/v1/logout/$', auth_views.LogoutView.as_view(), name='logout'),
 ]