> ## Documentation Index
> Fetch the complete documentation index at: https://tyk.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Portal Developers

<Warning>
  **Attention:**

  You’ve reached a page related to the *Tyk Classic Portal*. If you were searching for *API documentation of the new Tyk
  Developer Portal* please use the latest
  [Postman collection](/5.8/product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api) page.

  <br />

  <br />

  **Future deprecation of Tyk Classic Portal**

  This product is no longer actively developed as it
  has been superseded by the new [Tyk Developer Portal](/5.8/portal/overview/intro).

  <br />

  Please note that the Tyk Classic Portal now has limited support and maintenance. Please contact us at
  [support@tyk.io](<mailto:support@tyk.io?subject=Tyk classic developer portal>)if you have any questions.
</Warning>

### List Developers

| **Property** | **Description**          |
| :----------- | :----------------------- |
| Resource URL | `/api/portal/developers` |
| Method       | GET                      |
| Type         | None                     |
| Body         | None                     |
| Param        | None                     |

#### Sample Request

```{.copyWrapper} theme={null}
GET /api/portal/developers HTTP/1.1
Host: localhost
authorization:7a7b140f-2480-4d5a-4e78-24049e3ba7f8
```

#### Sample Response

```
{
  "Data": [
    {
      "_id": "554c733a30c55e4b16000002",
      "keys": {
        "<key-id>": ["<policy-id>"]
      },
      "date_created": "2015-05-08T04:26:34.287-04:00",
      "email": "test@test.com",
      "fields": {
        "Name": "Mondgo Brtian",
        "custom1": "Test",
        "custom2": "Test"
      },
      "inactive": false,
      "org_id": "53ac07777cbb8c2d53000002"
    },
    {
      "_id": "5555ec63a8b6b60001000001",
      "keys": {},
      "date_created": "2015-05-15T08:53:54.873-04:00",
      "email": "foo@bar.com",
      "fields": {
        "Name": "Tes",
        "custom1": "",
        "custom2": ""
      },
      "inactive": false,
      "org_id": "53ac07777cbb8c2d53000002"
    },
    ...
  ],
  "Pages": 1
}
```

### Retrieve a developer object by ID

| **Property** | **Description**               |
| :----------- | :---------------------------- |
| Resource URL | `/api/portal/developers/{id}` |
| Method       | GET                           |
| Type         | None                          |
| Body         | Developer Object              |
| Param        | None                          |

#### Sample Request

```{.copyWrapper} theme={null}
GET /api/portal/developers/5e397e714ea461ef1d474efa HTTP/1.1
Host: localhost
authorization:7a7b140f-2480-4d5a-4e78-24049e3ba7f8
```

#### Sample Response

```
{
  "id": "5e397e714ea461ef1d474efa",
  "email": "blip@blop.com",
  "date_created": "2020-02-04T16:23:44.936+02:00",
  "inactive": false,
  "org_id": "5a79019d4ea461cdd0c77480",
  "keys": {},
  "subscriptions": {},
  "fields": {},
  "nonce": "",
  "sso_key": "",
  "oauth_clients": {
    "5e397e804ea461ef1d474efb": [
      {
        "client_id": "bf27562a806d4ee1976c11b69e154a88",
        "secret": "NzNiY2M0NWYtNmIwMi00ZjE4LWJhODMtNTc3YzlhMmQyY2I3",
        "redirect_uri": "http://my_redirect_url",
        "app_description": "My App",
        "use_case": "My use case",
        "date_created": "2020-02-04T16:24:21.939+02:00"
      }
    ]
  },
  "password_max_days": 0,
  "password_updated": "2020-02-04T16:23:45.014+02:00",
  "PWHistory": [],
  "last_login_date": "2020-02-04T16:23:00Z"
}
```

### Add a Developer Record

| **Property** | **Description**          |
| :----------- | :----------------------- |
| Resource URL | `/api/portal/developers` |
| Method       | POST                     |
| Type         | None                     |
| Body         | Developer Object         |
| Param        | None                     |

#### Sample Request

```{.copyWrapper} theme={null}
POST /api/portal/developers HTTP/1.1
Host: localhost
Authorization:7a7b140f-2480-4d5a-4e78-24049e3ba7f8
    
{
  "email": "blip@blop.com",
  "password": "$2a$10$hlG1ujAHWUpnM37k.l1RhO6RrxkCpXki2yrGhufnDs1IBiUo4Kzqy",
  "date_created": "2015-05-15T08:56:13.257-04:00",
  "inactive": false,
  "org_id": "53ac07777cbb8c2d53000002",
  "keys": {
    "<api-key>": ["<policy-id>"]
  },
  "fields": {
    "Name": "",
    "custom1": "",
    "custom2": ""
  }
}
```

#### Sample Response

```
{
  "Status":"OK",
  "Message":"<developer-id>",
  "Meta":""
}
```

### Update a Developer Record

| **Property** | **Description**               |
| :----------- | :---------------------------- |
| Resource URL | `/api/portal/developers/{id}` |
| Method       | PUT                           |
| Type         | None                          |
| Body         | Developer Object              |
| Param        | None                          |

#### Sample Request

```{.copyWrapper} theme={null}
PUT /api/portal/developers/5555eceda8b6b60001000004 HTTP/1.1
Host: localhost
Authorization:7a7b140f-2480-4d5a-4e78-24049e3ba7f8
    
{
  "id": "5555eceda8b6b60001000004",
  "email": "blip@blop.com",
  "password": "$2a$10$hlG1ujAHWUpnM37k.l1RhO6RrxkCpXki2yrGhufnDs1IBiUo4Kzqy",
  "date_created": "2015-05-15T08:56:13.257-04:00",
  "inactive": false,
  "org_id": "53ac07777cbb8c2d53000002",
  "keys": {
    "<key-id>": ["<policy-id>"]
  },
  "fields": {
    "Name": "",
    "custom1": "",
    "custom2": ""
  }
}
```

#### Sample Response

```
{
  "Status":"OK",
  "Message":"Data updated",
  "Meta":""
}
```

### Delete a Developer

| **Property** | **Description**               |
| :----------- | :---------------------------- |
| Resource URL | `/api/portal/developers/{id}` |
| Method       | DELETE                        |
| Type         | None                          |
| Body         | None                          |
| Param        | None                          |

#### Sample Request

```{.copyWrapper} theme={null}
DELETE /api/portal/developers/554c733a30c55e4b16000002 HTTP/1.1
Host: localhost
Authorization:7a7b140f-2480-4d5a-4e78-24049e3ba7f8
```

#### Sample Response

```
{
  "Status":"OK",
  "Message":"Data deleted",
  "Meta":""
}
```

### Verify Developer Credentials

> **NOTE**: This functionality is available from v2.3.8 onwards

| **Property** | **Description**                             |
| :----------- | :------------------------------------------ |
| Resource URL | `/api/portal/developers/verify_credentials` |
| Method       | POST                                        |
| Type         | None                                        |
| Body         | None                                        |
| Param        | None                                        |

```{.copyWrapper} theme={null}
curl https://admin.cloud.tyk.io/api/portal/developers/verify_credentials \
  -X POST \
  -H "authorization: $TYK_API_KEY" \
  -d \
  '{
     "username": "<developer-email>",
     "password": "<developer-password>"
   }'
```

If the user credentials are verified, the HTTP response code will be 200 (OK), otherwise credentials do match and a 401 error (Unauthorized) will be returned.

### Reset Developer Password

> **NOTE**: This functionality is available from v2.3.8 onwards

| **Property** | **Description**                       |
| :----------- | :------------------------------------ |
| Resource URL | `/api/portal/developers/password/:Id` |
| Method       | POST                                  |
| Type         | None                                  |
| Body         | None                                  |
| Param        | None                                  |

#### Sample Request

```{.copyWrapper} theme={null}
curl https://admin.cloud.tyk.io/api/portal/developers/password/:Id \
-X POST \
-H "authorization: $TYK_API_KEY" \
-d \
'{
  "password": ""
}'
```

#### Sample Response - Password Changed

```
{
  "Message":"Password changed"
}
```

#### Sample Response - Incorrect Developer ID

```
{
  "Status": "Error", "Message":"Developer password validation failed."
}
```

### Analytics

You can get aggregate statistics for 1 key or all developer keys (need to specify a list of all keys). Also, you can group by day (hour or month), and by API (policy id).

API Endpoint: `/api/activity/keys/aggregate/#{keys}/#{from}/#{to}?p=-1&res=day`

* `keys` should be specified separated by ',' delimiter.
* `from` and `to` values must be in // format.
* resolution specified `res` attribute: 'day', 'hour' or 'month'
* `api_id` - policy id associated with developer portal API. If ommited return stats for all APIs.

#### Request

```{.copyWrapper} theme={null}
curl "https://admin.cloud.tyk.io/api/activity/keys/aggregate/add2b342,5f1d9603,/5/8/2017/13/8/2017?api_id=8e4d983609c044984ecbb286b8d25cd9&api_version=Non+Versioned&p=-1&res=day" \
-X GET \
-H "authorization: $TYK_API_KEY"
```

#### Response

```
{ "data":[
  {
    "id":{"day":9,"month":8,"year":2017,"hour":0,"code":200},
    "hits":13,
    "success":10,
    "error":3,
    "last_hit":"2017-08-09T12:31:02Z"
  },
  ...
],"pages":0}
```

In example above `add2b342,5f1d9603`, is 2 users keys. Note that this example shows [hashed key values as described here](/5.8/api-management/policies#access-key-hashing). Key hashing is turned on for the Cloud, but for Multi-Cloud and Self-Managed installations you can also turn it off. Hashed keys mean that the API administrator does not have access to real user keys, but they can still use the hashed values for showing analytics.

### Add Key To Developer

| **Property** | **Description**                        |
| :----------- | :------------------------------------- |
| Resource URL | `/portal/developers/:Id/subscriptions` |
| Method       | POST                                   |
| Type         | None                                   |
| Body         | Subscription Object                    |
| Param        | None                                   |

#### Sample Request

```{.copyWrapper} theme={null}
curl https://admin.cloud.tyk.io/api/portal/developers/:Id/keys \
-X POST \
-H "authorization: $TYK_API_KEY" \
-d \
'{
  "apply_policies": ["<pol-id>"],
  "fields": {
      "foo": "bar"
  },
  "oauth_info": {
    "redirect_uri": "..."
  }
}'
```

### Change Developer Key Policy

| **Property** | **Description**                               |
| :----------- | :-------------------------------------------- |
| Resource URL | `/portal/developers/:developerId/keys/:keyId` |
| Method       | PUT                                           |
| Type         | None                                          |
| Body         | Policy change Object                          |
| Param        | None                                          |

#### Sample Request

```{.copyWrapper} theme={null}
curl https://admin.cloud.tyk.io/api/portal/developers/:developerId/keys/:keyId \
-X PUT \
-H "authorization: $TYK_API_KEY" \
-d \
'{
  "apply_policies": ["<pol-id>"]
}'
```

### Revoke Developer Key

| **Property** | **Description**                               |
| :----------- | :-------------------------------------------- |
| Resource URL | `/portal/developers/:developerId/keys/:keyID` |
| Method       | DELETE                                        |
| Type         | None                                          |
| Body         | None                                          |
| Param        | None                                          |

### Reset Developer Key Quota

| **Property** | **Description**                                           |
| :----------- | :-------------------------------------------------------- |
| Resource URL | `/portal/developers/:developerId/keys/:keyID/reset_quota` |
| Method       | POST                                                      |
| Type         | None                                                      |
| Body         | None                                                      |
| Param        | None                                                      |

### Delete OAuth app

| **Property** | **Description**                   |
| :----------- | :-------------------------------- |
| Resource URL | `/portal/developers/oauth/:appId` |
| Method       | DELETE                            |
| Type         | None                              |
| Body         | None                              |
| Param        | None                              |

### Revoke a Single OAuth Client Token

| **Property** | **Description**                         |
| :----------- | :-------------------------------------- |
| Resource URL | `/oauth-clients/{oauthClientId}/revoke` |
| Method       | POST                                    |
| Type         | JSON                                    |
| Body         | Client Object                           |
| Param        | None                                    |

#### Sample Request

```{.json} theme={null}
POST /oauth-clients/411f0800957c4a3e81fe181141dbc22a/revoke
Host: tyk-portal:3000
Authorization: CSRF token
Body: {
  "token":"eyJvcmciOiI1ZTIwOTFjNGQ0YWVmY2U2MGMwNGZiOTIiLCJpZCI6ImZiMGFmNWQ4ZGY1MzQ3MjY4YmYxNTE5MmJjN2YzN2QyIiwiaCI6Im11cm11cjY0In0=",
  "token_type_hint":"access_token"
}
```

#### Sample Response

```{.json} theme={null}
{
  "Status": "OK",
  "Message": "token revoked successfully",
  "Meta": null
}
```

### Revoke all OAuth Client Tokens

| **Property** | **Description**                             |
| :----------- | :------------------------------------------ |
| Resource URL | `/oauth-clients/{oauthClientId}/revoke_all` |
| Method       | POST                                        |
| Type         | JSON                                        |
| Body         | Client Object                               |
| Param        | None                                        |

#### Sample Request

```{.json} theme={null}
POST /oauth-clients/411f0800957c4a3e81fe181141dbc22a/revoke_all
Host: tyk-portal:3000
Authorization: CSRF token
Body: {
  "client_secret":"MzUyNDliNzItMDhlNy00MzM3LTk1NWUtMWQyODMyMjkwZTc0"
  }
```

#### Sample Response

```{.json} theme={null}
{
  "Status": "OK",
  "Message": "tokens revoked successfully",
  "Meta": null
}
```

## Deprecated APIS

### Add Subscription To Developer

| **Property** | **Description**                        |
| :----------- | :------------------------------------- |
| Resource URL | `/portal/developers/:Id/subscriptions` |
| Method       | POST                                   |
| Type         | None                                   |
| Body         | Subscription Object                    |
| Param        | None                                   |

#### Sample Request

```{.copyWrapper} theme={null}
curl https://admin.cloud.tyk.io/api//portal/developers/:Id/subscriptions \
-X POST \
-H "authorization: $TYK_API_KEY" \
-d \
'{
  "policy_id": "<pol-id>",
  "fields": {
      "foo": "bar"
  },
  "oauth_info": {
    "redirect_uri": "..."
  }
}'
```

### Change Developer Key Policy

| **Property** | **Description**                                    |
| :----------- | :------------------------------------------------- |
| Resource URL | `/portal/developers/:developerId/:keyId/:policyId` |
| Method       | GET                                                |
| Type         | None                                               |
| Body         | None                                               |
| Param        | None                                               |

### Revoke Developer Key

| **Property** | **Description**                            |
| :----------- | :----------------------------------------- |
| Resource URL | `/portal/developers/key/:apiID/:keyID/:Id` |
| Method       | DELETE                                     |
| Type         | None                                       |
| Body         | None                                       |
| Param        | None                                       |

### Reset Developer Key Quota

| **Property** | **Description**                                        |
| :----------- | :----------------------------------------------------- |
| Resource URL | `/portal/developers/key/:apiID/:keyID/:Id/reset_quota` |
| Method       | POST                                                   |
| Type         | None                                                   |
| Body         | None                                                   |
| Param        | None                                                   |

### Delete OAuth app

| **Property** | **Description**                          |
| :----------- | :--------------------------------------- |
| Resource URL | `/portal/developers/oauth/:apiId/:appId` |
| Method       | DELETE                                   |
| Type         | None                                     |
| Body         | None                                     |
| Param        | None                                     |
