Authentication

Token can be obtained from the ActiveCollab interface, or programmatically, using /issue-token command. To demonstrate, lets create a new user account with a known password:

Response: HTTP 200, application/json (Hide)
POST /users

Payload:

1
2
3
4
5
{
    "type": "Member",
    "email": "member@activecollab.com",
    "password": "Easy to remember, hard to guess"
}

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
    "single": {
        "id": 2,
        "class": "Member",
        "url_path": "\/users\/2",
        "is_archived": false,
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "created_on": 1430163964,
        "created_by_id": 1,
        "updated_on": 1430163964,
        "updated_by_id": 1,
        "language_id": 0,
        "first_name": "Member",
        "last_name": null,
        "display_name": "member",
        "short_display_name": "member",
        "email": "member@activecollab.com",
        "additional_email_addresses": [],
        "is_pending_activation": false,
        "avatar_url": "http:\/\/feather.dev\/proxy.php?proxy=avatar&module=system&v=current&b=DEV&user_id=2&size=--SIZE--&timestamp=1430163964",
        "custom_permissions": [],
        "company_id": 0,
        "title": null,
        "phone": null,
        "im_type": null,
        "im_handle": null,
        "note": null
    }
}

Now, lets issue a token:

Response: HTTP 200, application/json (Hide)
POST /issue-token

Payload:

1
2
3
4
5
6
{
    "username": "member@activecollab.com",
    "password": "Easy to remember, hard to guess",
    "client_name": "My Awesome App",
    "client_vendor": "ACME Inc"
}

Response:

1
2
3
4
{
    "is_ok": true,
    "token": "2-6zmW8dnKpHqPLwVk2f3LMrTfVxAiJU1DibofeCPt"
}

That's it, we just got a token that we can store and reuse to authenticate this user in future requests. In case of error, ActiveCollab will return error dump:

Response: HTTP 500, application/json (Hide)
POST /issue-token

Payload:

1
2
3
4
5
6
{
    "username": "member@activecollab.com",
    "password": "Invalid Password",
    "client_name": "My Awesome App",
    "client_vendor": "ACME Inc"
}

Response:

1
2
3
4
5
6
7
8
9
{
    "type": "ApiSubscriptionError",
    "message": "Invalid password",
    "file": "\/var\/www\/angie.back\/frameworks\/authentication\/models\/api_subscriptions\/FwApiSubscriptions.class.php",
    "line": 101,
    "trace": "#0 \/var\/www\/angie.back\/frameworks\/authentication\/controllers\/FwUserSessionController.class.php(71): FwApiSubscriptions::subscribe('member@activeco...', 'Invalid Passwor...', 'My Awesome App', 'ACME Inc', false)\n#1 \/var\/www\/angie.back\/src\/Angie\/Controller.php(42): FwUserSessionController->issue_token(Object(Owner))\n#2 \/var\/www\/angie.back\/classes\/application\/AngieApplicationAdapter.class.php(243): Angie\\Controller->executeAction('issue_token')\n#3 \/var\/www\/angie.back\/classes\/application\/AngieApplication.class.php(839): AngieApplicationAdapter->handleHttpRequest('issue-token', '')\n#4 \/var\/www\/activecollab.back\/instance\/public\/api.php(19): AngieApplication::handleHttpRequest()\n#5 {main}",
    "previous": null,
    "code": 3
}
Response: HTTP 500, application/json (Hide)
POST /issue-token

Payload:

1
2
3
4
5
6
{
    "username": "unknown-user@activecollab.com",
    "password": "Easy to remember, hard to guess",
    "client_name": "My Awesome App",
    "client_vendor": "ACME Inc"
}

Response:

1
2
3
4
5
6
7
8
9
{
    "type": "ApiSubscriptionError",
    "message": "User does not exist",
    "file": "\/var\/www\/angie.back\/frameworks\/authentication\/models\/api_subscriptions\/FwApiSubscriptions.class.php",
    "line": 104,
    "trace": "#0 \/var\/www\/angie.back\/frameworks\/authentication\/controllers\/FwUserSessionController.class.php(71): FwApiSubscriptions::subscribe('unknown-user@ac...', 'Easy to remembe...', 'My Awesome App', 'ACME Inc', false)\n#1 \/var\/www\/angie.back\/src\/Angie\/Controller.php(42): FwUserSessionController->issue_token(Object(Owner))\n#2 \/var\/www\/angie.back\/classes\/application\/AngieApplicationAdapter.class.php(243): Angie\\Controller->executeAction('issue_token')\n#3 \/var\/www\/angie.back\/classes\/application\/AngieApplication.class.php(839): AngieApplicationAdapter->handleHttpRequest('issue-token', '')\n#4 \/var\/www\/activecollab.back\/instance\/public\/api.php(19): AngieApplication::handleHttpRequest()\n#5 {main}",
    "previous": null,
    "code": 2
}
Response: HTTP 200, application/json (Hide)
PUT /move-to-archive/user/2

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
    "single": {
        "id": 2,
        "class": "Member",
        "url_path": "\/users\/2",
        "is_archived": true,
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "created_on": 1430163964,
        "created_by_id": 1,
        "updated_on": 1430163965,
        "updated_by_id": 1,
        "language_id": 0,
        "first_name": "Member",
        "last_name": null,
        "display_name": "member",
        "short_display_name": "member",
        "email": "member@activecollab.com",
        "additional_email_addresses": [],
        "is_pending_activation": false,
        "avatar_url": "http:\/\/feather.dev\/proxy.php?proxy=avatar&module=system&v=current&b=DEV&user_id=2&size=--SIZE--&timestamp=1430163965",
        "custom_permissions": [],
        "company_id": 0,
        "title": null,
        "phone": null,
        "im_type": null,
        "im_handle": null,
        "note": null
    }
}
Response: HTTP 500, application/json (Hide)
POST /issue-token

Payload:

1
2
3
4
5
6
{
    "username": "member@activecollab.com",
    "password": "Easy to remember, hard to guess",
    "client_name": "My Awesome App",
    "client_vendor": "ACME Inc"
}

Response:

1
2
3
4
5
6
7
8
9
{
    "type": "ApiSubscriptionError",
    "message": "User does not exist",
    "file": "\/var\/www\/angie.back\/frameworks\/authentication\/models\/api_subscriptions\/FwApiSubscriptions.class.php",
    "line": 104,
    "trace": "#0 \/var\/www\/angie.back\/frameworks\/authentication\/controllers\/FwUserSessionController.class.php(71): FwApiSubscriptions::subscribe('member@activeco...', 'Easy to remembe...', 'My Awesome App', 'ACME Inc', false)\n#1 \/var\/www\/angie.back\/src\/Angie\/Controller.php(42): FwUserSessionController->issue_token(Object(Owner))\n#2 \/var\/www\/angie.back\/classes\/application\/AngieApplicationAdapter.class.php(243): Angie\\Controller->executeAction('issue_token')\n#3 \/var\/www\/angie.back\/classes\/application\/AngieApplication.class.php(839): AngieApplicationAdapter->handleHttpRequest('issue-token', '')\n#4 \/var\/www\/activecollab.back\/instance\/public\/api.php(19): AngieApplication::handleHttpRequest()\n#5 {main}",
    "previous": null,
    "code": 2
}

Following error codes are provided:

  • 0 - Operation failed (general error),
  • 1 - Information about client application is not set,
  • 2 - User does not exist or not active,
  • 3 - Password is not valid,
  • 4 - Issue token not allowed for the user.