Cyl.me API documentation

  • All responses emitted in JSON format
  • API implements HATEOAS
  • In all requests when authorization needed token must be provided
  • Authorization between applications must be implemented using tokens
  • Tokens have different ttl and scope. We have tokens for admins and tokens for users.
Answer type Response
successful answer status: ok response: data
conditionally successful answer

status: ok response: { error: “error description”,

code: “error code” }
unsuccessful response answer status: notOk error: “error description” code: “error code”
All answers are successful except following cases: invalid token, error occurred
internally in API (for example:database error)

Table of error codes

Code Description
1 Token not specified
2 Token invalid
3 User not found
4 Authorization failed
5 Required fields are missing
6 Authorization by token failed
7 Cannot insert new element
8 Access denied
9 Element not found
10 Fields are invalid
11 Duplicated record

Contents

Users

User authorization handled by tokens

User information

/users/{user_id}/

method GET
Auth NO

Parameters

Parameter Type Description
user_id integer User’s ID

Response

Parameter Type Description
id integer User Id
name string Use name
family_name string Family name
about string About yourself
phone string Phone
points_total integer Total amount of points
tasks_total integer Total amount of tasks
votes_total integer Total amount of votes
date timestamp Registration date
birthday timestamp User’s birthday date
sex string male/female
avatar string Link to user avatar
skills array User skills
places array User places
{
  "status": "ok",
  "response":
    {
        "id": 4,
        "name": "Ivan",
        "family_name": "Sidorov"
        "places": [
            {
                "lat": 55.33,
                "lng": 33.3,
                "address": "Moscow, Lenina 1"
            }
        ],
        "skills": [ 1, 6, 18 ]
    }
}

HATEOAS

/points/?user_id={user_id} User’s points
/skills/?user_id={user_id} User’s skills

New user

/users/{user_id}/

method POST
Auth YES

Input user

Parameter Required Type Description
name
string Use name
email
string Email
family_name   string Family name
about   string About yourself
phone   string Phone
birthday   timestamp User’s birthday date
sex   string male/female
avatar   string Link to user avatar
invitation   string Invitation

Parameters

Parameter Type Description
user_id integer User’s ID

Response

Parameter Type Description
id integer Id newly added user

Edit user

/users/{user_id}/

method PUT
Auth YES

Parameters

Parameter Type Description
user_id integer User’s ID

Input vars

Parameter Type Description
Look user-information

Response

Parameter Type Description
result 1

Remove user

/users/{user_id}/

method DELETE
Auth YES

Parameters

Parameter Type Description
user_id integer User’s ID

Response

Parameter Type Description
result 1

User favourite places

Coming soon...

User adds favourite place

Coming soon...

Points

Points list

/points/

Response

Parameter Type Description
points integer Id
Nested in points(look point’s info)

HATEOAS

/point/?page=1..10 Link to next data set

Point’s information

/points/{point_id}/

method GET
Auth NO

Parameters

Parameter Type Description
point_id integer Point’s ID

Response

Parameter Type Description
id integer Id
user_id integer User Id
lat float Latitude
lng float Longitude
address string Address

New point

/points/

method POST
Auth YES

Input vars

Parameter Required Type Description
lat
float Latitude
lng
float Longitude
address
string Address

Response

Parameter Type Description
id integer Id newly added point

Edit point

/points/{point_id}/

method PUT
Auth YES

Input vars

Parameter Type Description
Look point-information input vars

Parameters

Parameter Type Description
point_id integer Point’s ID

Response

Parameter Type Description
result 1

Remove point

/points/{point_id}/

method DELETE
Auth YES

Parameters

Parameter Type Description
point_id integer Point’s ID

Response

Parameter Type Description
result 1

Add comment

/points/{point_id}/comments/

method POST
Auth YES

Parameters

Parameter Type Description
point_id integer Point’s ID

Input vars

Parameter Type Description
user_id integer User Id
comment string Comment

Response

Parameter Type Description
result 1

Add like

/points/{point_id}/likes/

method POST
Auth YES

Parameters

Parameter Type Description
point_id integer Point’s ID

Input vars

Parameter Type Description
user_id integer User Id

Response

Parameter Type Description
result 1

Remove like

/points/{point_id}/likes/

method DELETE
Auth YES

Parameters

Parameter Type Description
point_id integer Point’s ID

Input vars

Parameter Type Description
user_id integer User Id

Add point to favourite

Coming soon...

Point types

Point types list

/pointtypes/

method GET

Response

Parameter Type Description
point_types integer Id
Nested in point types
point_type_id integer Point type Id
name string Point type name
{
  "status": "ok",
  "response":
    {
        "point_types": [
            {
                "point_type_id": 1,
                "name": "Идея"
            },
            {
                "point_type_id": 2,
                "name": "Мероприятие"
            },
        ]
    }
}

Tasks

Tasks list

/tasks/

Input vars

Parameter Type Description
skills array  

Response

Parameter Type Description
tasks array  
Nested in tasks(look task-information)

HATEOAS

/tasks/?page=1..10 Link to next page

Task information

/tasks/{task_id}/

method GET
Auth NO

Parameters

Parameter Type Description
task_id integer Task’s ID

Response

Parameter Type Description
id integer Task’s ID
point_id integer Point ID
title string Title
description string Description
votes integer How many votes user ready to pay
required_solvers integer How many solvers required
lat float Latitude
lng float Longitude
address string Address
front_image string Link to front image
solvers_total integer Total amount of solvers
add_date string Insertion date
media array  
skills array  
{
  "status": "ok",
  "response":
  {
    "id": 1,
    "point_id": 10,
    "title": "I need your help",
    "description": "I need someone to conduct poll",
    "lat": 55.42,
    "lng": 33.10,
  }
}

HATEOAS

Show solvers

/tasks/{task_id}/solvers/

method GET
Auth NO

Parameters

Parameter Type Description
task_id integer Task’s ID

Response

Parameter Type Description
solvers array  
Nested in solvers
user_id integer User ID

New task

/tasks/

method POST
Auth YES

Input vars

Parameter Required Type Description
id
integer Task’s ID
point_id
integer Point ID
title
string Title
description
string Description
votes
integer How many votes user ready to pay
required_solvers   integer How many solvers required
lat   float Latitude
lng   float Longitude
address   string Address
front_image   string Link to front image

Edit task

/tasks/{task_id}/

method PUT
Auth YES

Parameters

Parameter Type Description
task_id integer Task’s ID

Input vars

Parameter Type Description
title string Title
description string Description
votes integer How many votes user ready to pay
required_solvers integer How many solvers required
lat float Latitude
lng float Longitude
address string Address
front_image string Link to front image

Response

Parameter Type Description
result 1

Remove task

/tasks/{task_id}/

method DELETE
Auth YES

Parameters

Parameter Type Description
task_id integer Task’s ID

Response

Parameter Type Description
result 1
{
  "status": "ok",
  "response":
  {
    "result": 1,
    "error": null
  }
}

User takes task

Coming soon...

User notifies that task fulfilled

Coming soon...

Task owner approves fulfilled task

Coming soon...

User refuses task

Coming soon...

User closes task

Coming soon...

User can close task as unfinished then task changes status to NEW There are “phase” and “status” for task. We need to discuss how it supposed to work.

News

News list

/news/

method GET

Input vars

Parameter Type Description
tags string Filter news by keyword found in tags
text string Filter news by keyword found in the body

Response

Parameter Type Description
news integer Id
Nested in news(look single-news-information)

Single news information

/news/{news_id}/

method GET

Parameters

Parameter Type Description
news_id integer News ID

Response

Parameter Type Description
id integer News ID
title integer Point Id
brief string News title
text string News text
author author Company or author name
link string Link to original article
tags array Tags(array of strings)
image string Url for main image
pubdate timestamp Publication date

Add news

/news/

method POST
Auth YES

Input vars

Parameter Type Description
Look news’s info response data

Response

Parameter Type Description
id integer Id newly added news

Edit news

/news/{news_id}/

method PUT
Auth YES

Parameters

Parameter Type Description
news_id integer News ID

Input vars

Parameter Type Description
Look single-news-information

Response

Parameter Type Description
result 1

Remove news

/news/{news_id}/

method DELETE
Auth YES

Parameters

Parameter Type Description
news_id integer News ID

Response

Parameter Type Description
result 1

Instant messaging

Messages of user

/messages/{user_id}/

method GET
Auth YES

Parameters

Parameter Type Description
user_id integer User’s ID

Response

Parameter Type Description
messages array
Nested in messages
id integer Message Id
user_id integer Use Id
message string Message
date timestamp Date
read 1 or 0 Is message read

New message

/messages/{user_id}/

method POST
Auth YES

Parameters

Parameter Type Description
user_id integer User’s ID

Input user

Parameter Type Description
message string Message

Response

Parameter Type Description
id integer Id newly added message
error string Not empty if error occurred

User read message

Coming soon...

Skills

Skills list

/skills/

method GET
Auth NO

Input vars

Parameter Type Description
user_id integer Filter skills by user

Response

Parameter Type Description
skills array  
Nested in skills
skill_id integer Skill Id
name string Skill name
{
  "status": "ok",
  "response":
    {
        "skills": [
            {
                "skill_id": 1,
                "name": "Дизайн"
            },
            {
                "skill_id": 2,
                "parent_id": 1
                "name": "Дизайн сайтов"
            },
            {
                "skill_id": 3,
                "parent_id": 1
                "name": "Логотипы"
            },
        ]
    }
}

Categories

Categories list

/categories/

method GET

Response

Parameter Type Description
categories array  
Nested in categories
category_id integer Category Id
name string Category name
{
  "status": "ok",
  "response":
    {
        "categories": [
            {
                "category_id": 1,
                "name": "Настольные игры"
            },
            {
                "category_id": 2,
                "name": "Немецкий язык"
            },
        ]
    }
}

Tokens

Get new token

/token/

method GET
Auth NO

Input vars

Parameter Type Description
soc_id string If user trying to authorize via social network network soc_id must be provided
login string Login or email
password string Password

Response

Parameter Type Description
token string Token
ttl timestamp Date to token invalidation
{
  "status": "ok",
  "response":
    {
        "token": "sf6df5s7dfcsd6f5cs6d5fc6s5df6s5cdfs6f5",
        "ttl": 1443780969
    }
}

Invalidate token

Logging out user

/token/invalidate/

method GET
Auth YES

Input vars

Parameter Type Description
user_id integer User Id

Response

Parameter Type Description
result 1 or 0
error string Not empty if error occurred

Invitations

User’s invitations

/invitations/

method GET
Auth YES

Input vars

Parameter Type Description
user_id integer User’s ID

Response

Parameter Type Description
invitations array
Nested in invitations
id integer Invitation Id
user_id integer User Id
code string Invitation code
used 1 or 0 Was invitation used
{
  "status": "ok",
  "response":
    {
        "invitations": [
            {
                "id": 1,
                "user_id": 4,
                "code": "234y234t2udg2u3y4dg23u4vd234yg",
                "used": 1
            },
            {
                "id": 2,
                "user_id": 5,
                "code": "ertetetertertert44g23u4vd234yg",
                "used": 0
            }
        ]
    }
}

Votes

List of all votes

/votes/

method GET
Auth YES

Input vars

Parameter Type Description
user_id integer User’s ID

Response

Parameter Type Description
votes array
Nested in votes
user_id integer User’s ID
votes_total integer Total amount of votes
expire_date timestamp Next expiration date
expire_votes integer How many votes expire

User gives votes to point

Coming soon...

User gives votes to user

Coming soon...

Mabius ideas

List of ideas

/projects/mabius/ideas/

Input vars

Parameter Type Description
     

Response

Parameter Type Description
points integer Id
Nested in points(look point’s info)

Project’s information

/projects/mabius/ideas/{idea_id}/

method GET
Auth NO

Response

Parameter Type Description
idea_id integer Id
name integer User Id
brief string Title
description string Description
point_entity object Object with entity info
preview object Object with preview image info
comments_count integer Total amount of comments
website string Website
votes_count integer Total amount of votes
created_at string Insertion date

Point’s comments

/projects/mabius/ideas/{idea_id}/comments/

method GET
Auth NO

Response

Parameter Type Description
comments array  
Nested in comments
user_id integer User Id
comment string Comment
date timestamp Insertion date

Scopes

Scopes list

/scopes/

method GET
Auth NO

Response

Parameter Type Description
scopes array  
Nested in scopes
scope_id integer Scope Id
name string Scope name
{
  "status": "ok",
  "response":
    {
        "scopes": [
            {
                "scope_id": 1,
                "name": "Город"
            },
            {
                "scope_id": 2,
                "name": "Страна"
            },
        ]
    }
}

Storage

This endpoint provides you the way to upload images on cyl.me project

/storage/image

method GET
Auth YES

Input vars

Parameter Type Description
file string Image

Response

Parameter Type Description
id integer Image ID
preview string Relative path to image

Subscriber

Subscriber

/subscriber/

method POST
Auth NO

Input vars

Parameter Type Description
email* string Email
name string User’s name
project string Project where email taken from(default: mabius)

Response

Parameter Type Description
id integer Id
email string E-mail
{
  "status": "ok",
  "response":
    {
        "id": 1,
        "email": "email@example.com"
    }
}

Indices and tables