# GitLab API
> Read GitLab.com in real time — no token, no OAuth. Look up any public project by numeric id or "group/name" path for its full detail (stars, forks, open issues, default branch, visibility, license, topics, timestamps) and pull its commits, branches, tags, releases, issues, merge requests, language breakdown, members and decoded README. Look up any user, list a user's public projects, inspect any group and its projects, and search public projects by keyword with sort + order. Pass project as a numeric id, a "group/name" path or a gitlab.com URL. Every call is live (no cache) and returns the upstream GitLab REST v4 shape, paginated with page + per_page (max 100). 16 endpoints. Calls are routed through a rotating residential proxy so per-IP rate limits never bite. Built for dev dashboards, OSS analytics, CI/CD tooling and repo monitoring across the GitLab ecosystem — the sibling of our GitHub API. No upstream token, no cache.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/gitlab-api/..."
```

## Pricing
- **Free** (Free) — 1,900 calls/Mo, 2 req/s
- **Starter** ($10/Mo) — 53,000 calls/Mo, 8 req/s
- **Pro** ($29/Mo) — 265,000 calls/Mo, 20 req/s
- **Mega** ($67/Mo) — 1,280,000 calls/Mo, 50 req/s

## Endpoints

### Project

#### `GET /v1/project` — Project detail

**Parameters:**
- `project` (query, required, string) — Project id or group/name path (or gitlab.com URL) Example: `gitlab-org/gitlab`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/project?project=gitlab-org%2Fgitlab"
```

**Response:**
```json
{
    "data": {
        "id": 278964,
        "name": "GitLab",
        "path": "gitlab",
        "topics": [
            "hacktoberfest",
            "javascript",
            "ruby",
            "vue.js"
        ],
        "license": {
            "key": "mit",
            "name": "MIT License",
            "html_url": "https://opensource.org/licenses/MIT",
            "nickname": null,
            "source_url": null
        },
        "web_url": "https://gitlab.com/gitlab-org/gitlab",
        "tag_list": [
            "hacktoberfest",
            "javascript",
            "ruby",
            "vue.js"
        ],
        "namespace": {
            "id": 9970,
            "kind": "group",
            "name": "GitLab.org",
            "path": "gitlab-org",
            "web_url": "https://gitlab.com/groups/gitlab-org",
            "full_path": "gitlab-org",
            "parent_id": null,
            "avatar_url": "/uploads/-/system/group/avatar/9970/project_avatar.png"
        },
        "avatar_url": "https://gitlab.com/uploads/-/system/project/avatar/278964/project_avatar.png",
        "created_at": "2015-05-20T10:47:11.949Z",
        "readme_url": "https://gitlab.com/gitlab-org/gitlab/-/blob/master/README.md",
        "star_count": 6031,
        "visibility": "public",
        "description": "GitLab is an open source end-to-end software development platform with built-in version control, issue tracking, code review, CI/CD, and more. Self-host GitLab on your own servers, in a
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/project/branches` — Branches

**Parameters:**
- `project` (query, required, string) — Project id or group/name path (or gitlab.com URL) Example: `gitlab-org/gitlab`
- `per_page` (query, optional, string) — Page size (max 100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/project/branches?project=gitlab-org%2Fgitlab"
```

**Response:**
```json
{
    "data": [
        {
            "name": "#1404-scawood-duomerge-links",
            "commit": {
                "id": "1f23260d6e25274aa012107fe003d4ba0c65e116",
                "title": "Remove repeated links to Claude LLM",
                "message": "Remove repeated links to Claude LLM",
                "web_url": "https://gitlab.com/gitlab-org/gitlab/-/commit/1f23260d6e25274aa012107fe003d4ba0c65e116",
                "short_id": "1f23260d",
                "trailers": [],
                "created_at": "2025-09-02T10:52:43.000-07:00",
                "parent_ids": [
                    "19986ff62116c4d6ca7f380170d8cdc397f7442a"
                ],
                "author_name": "Steve Cawood",
                "author_email": "scawood@gitlab.com",
                "authored_date": "2025-09-02T10:52:43.000-07:00",
                "committed_date": "2025-09-02T10:52:43.000-07:00",
                "committer_name": "GitLab",
                "committer_email": "noreply@gitlab.com",
                "extended_trailers": []
            },
            "merged": false,
            "default": false,
            "web_url": "https://gitlab.com/gitlab-org/gitlab/-/tree/%231404-scawood-duomerge-links",
            "can_push": false,
            "protected": false,
            "developers_can_push": false,
            "developers_can_merge": false
        },
        {
            "name": "#17126-saved-views-backend-poc",
            "commit": {
                "id": "c4b259215634320c1
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/project/commits` — Commits

**Parameters:**
- `project` (query, required, string) — Project id or group/name path (or gitlab.com URL) Example: `gitlab-org/gitlab`
- `per_page` (query, optional, string) — Page size (max 100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/project/commits?project=gitlab-org%2Fgitlab"
```

**Response:**
```json
{
    "data": [
        {
            "id": "8f7e4c4732493fae169a9deb6d5e2e270a79d647",
            "title": "Merge branch 'eg/optimise-mr-policy-specs' into 'master' ",
            "message": "Merge branch 'eg/optimise-mr-policy-specs' into 'master' \n\nOptimize factory usage in ee/spec/policies/merge_request_policy_spec.rb\n\nSee merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/237459\n\nMerged-by: Alex Buijs <abuijs@gitlab.com>\nApproved-by: Alex Buijs <abuijs@gitlab.com>\nCo-authored-by: egrieff <egrieff@gitlab.com>",
            "web_url": "https://gitlab.com/gitlab-org/gitlab/-/commit/8f7e4c4732493fae169a9deb6d5e2e270a79d647",
            "short_id": "8f7e4c47",
            "trailers": [],
            "created_at": "2026-06-02T18:48:43.000+02:00",
            "parent_ids": [
                "52142899b9b894fe123a32cca55dd2610670e51d",
                "8b21781d88821cd1b5ab827f56a4933e874f450a"
            ],
            "author_name": "Alex Buijs",
            "author_email": "abuijs@gitlab.com",
            "authored_date": "2026-06-02T18:48:43.000+02:00",
            "committed_date": "2026-06-02T18:48:43.000+02:00",
            "committer_name": "GitLab",
            "committer_email": "noreply@gitlab.com",
            "extended_trailers": []
        },
        {
            "id": "52142899b9b894fe123a32cca55dd2610670e51d",
            "title": "Merge branch 'renovate-gems/bootsnap' into 'master' ",
            "message": "Merge branch 'renovate-gems
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/project/issues` — Issues

**Parameters:**
- `project` (query, required, string) — Project id or group/name path (or gitlab.com URL) Example: `gitlab-org/gitlab`
- `state` (query, optional, string) — opened|closed|all
- `per_page` (query, optional, string) — Page size (max 100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/project/issues?project=gitlab-org%2Fgitlab"
```

**Response:**
```json
{
    "data": [
        {
            "id": 191603917,
            "iid": 601852,
            "epic": {
                "id": 3852880,
                "iid": 19972,
                "url": "/groups/gitlab-org/-/epics/19972",
                "title": "OAuth for Protocells - Production",
                "group_id": 9970
            },
            "type": "ISSUE",
            "state": "opened",
            "title": "Sandbox: Run basic E2E tests for IAM auth flows using gitlab-qa",
            "_links": {
                "self": "https://gitlab.com/api/v4/projects/278964/issues/601852",
                "notes": "https://gitlab.com/api/v4/projects/278964/issues/601852/notes",
                "project": "https://gitlab.com/api/v4/projects/278964",
                "award_emoji": "https://gitlab.com/api/v4/projects/278964/issues/601852/award_emoji",
                "closed_as_duplicate_of": null
            },
            "author": {
                "id": 28243218,
                "name": "Daniele Bracciani",
                "state": "active",
                "locked": false,
                "web_url": "https://gitlab.com/daniele-gitlab",
                "username": "daniele-gitlab",
                "avatar_url": "https://gitlab.com/uploads/-/system/user/avatar/28243218/avatar.png",
                "public_email": ""
            },
            "labels": [
                "Deliverable",
                "devops::software supply chain security",
                "group::authentication",
 
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/project/languages` — Language breakdown

**Parameters:**
- `project` (query, required, string) — Project id or group/name path (or gitlab.com URL) Example: `gitlab-org/gitlab`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/project/languages?project=gitlab-org%2Fgitlab"
```

**Response:**
```json
{
    "data": {
        "Vue": 7.63,
        "Haml": 1,
        "Ruby": 68.59,
        "PLpgSQL": 2.16,
        "JavaScript": 19.3
    },
    "meta": {
        "timestamp": "2026-06-02T16:52:28.159Z",
        "request_id": "5f1c1864-9257-4e88-b91c-a0ae2dd69b9d"
    },
    "status": "ok",
    "message": "Project languages",
    "success": true
}
```

#### `GET /v1/project/merge-requests` — Merge requests

**Parameters:**
- `project` (query, required, string) — Project id or group/name path (or gitlab.com URL) Example: `gitlab-org/gitlab`
- `state` (query, optional, string) — opened|closed|merged|all
- `per_page` (query, optional, string) — Page size (max 100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/project/merge-requests?project=gitlab-org%2Fgitlab"
```

**Response:**
```json
{
    "data": [
        {
            "id": 491535799,
            "iid": 238953,
            "sha": "2bf6216f7a96f1c67256a89efb6d22aae8d8795b",
            "draft": true,
            "state": "opened",
            "title": "Draft: Update `index_vuln_namespace_statistics_btree_traversal_ids`  unique index to add sharding key",
            "author": {
                "id": 7825316,
                "name": "Subashis  Chakraborty",
                "state": "active",
                "locked": false,
                "web_url": "https://gitlab.com/subashis",
                "username": "subashis",
                "avatar_url": "https://gitlab.com/uploads/-/system/user/avatar/7825316/avatar.png",
                "public_email": ""
            },
            "labels": [
                "Category:Vulnerability Management",
                "Data Warehouse::Impact Check",
                "automation:ml",
                "database",
                "database::review pending",
                "devops::security risk management",
                "group::security infrastructure",
                "maintenance::scalability",
                "missed:19.0",
                "pipeline::tier-1",
                "section::sec",
                "type::maintenance",
                "workflow::in dev"
            ],
            "squash": true,
            "upvotes": 0,
            "web_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/238953",
            "assignee": {
                "id": 
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/project/readme` — Decoded README

**Parameters:**
- `project` (query, required, string) — Project id or group/name path (or gitlab.com URL) Example: `gitlab-org/gitlab`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/project/readme?project=gitlab-org%2Fgitlab"
```

**Response:**
```json
{
    "data": {
        "ref": "master",
        "size": 5869,
        "content": "# GitLab\n\n## Canonical source\n\nThe canonical source of GitLab where all development takes place is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab).\n\nIf you wish to clone a copy of GitLab without proprietary code, you can use the read-only mirror of GitLab located at https://gitlab.com/gitlab-org/gitlab-foss/. However, please do not submit any issues and/or merge requests to that project.\n\n## Free trial\n\nYou can request a free trial of GitLab Ultimate [on our website](https://about.gitlab.com/free-trial/).\n\n## Open source software to collaborate on code\n\nTo see how GitLab looks please see the [features page on our website](https://about.gitlab.com/features/).\n\n- Manage Git repositories with fine grained access controls that keep your code secure\n- Perform code reviews and enhance collaboration with merge requests\n- Complete continuous integration (CI) and continuous deployment/delivery (CD) pipelines to build, test, and deploy your applications\n- Each project can also have an issue tracker, issue board, and a wiki\n- Used by more than 100,000 organizations, GitLab is the most popular solution to manage Git repositories on-premises\n- Open-core, most of the code is MIT with the files in `/ee` being proprietary but source available and open for contributions.\n\n## Editions\n\nThere are three editions of GitLab:\n\n- GitLab Community Edition (CE) is available freely
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/project/releases` — Releases

**Parameters:**
- `project` (query, required, string) — Project id or group/name path (or gitlab.com URL) Example: `gitlab-org/gitlab`
- `per_page` (query, optional, string) — Page size (max 100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/project/releases?project=gitlab-org%2Fgitlab"
```

**Response:**
```json
{
    "data": [
        {
            "name": "GitLab 18.11",
            "_links": {
                "self": "https://gitlab.com/gitlab-org/gitlab/-/releases/v18.11.0-ee",
                "closed_issues_url": "https://gitlab.com/gitlab-org/gitlab/-/issues?release_tag=v18.11.0-ee&scope=all&state=closed",
                "opened_issues_url": "https://gitlab.com/gitlab-org/gitlab/-/issues?release_tag=v18.11.0-ee&scope=all&state=opened",
                "closed_merge_requests_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests?release_tag=v18.11.0-ee&scope=all&state=closed",
                "merged_merge_requests_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests?release_tag=v18.11.0-ee&scope=all&state=merged",
                "opened_merge_requests_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests?release_tag=v18.11.0-ee&scope=all&state=opened"
            },
            "assets": {
                "count": 5,
                "links": [
                    {
                        "id": 11291544,
                        "url": "https://about.gitlab.com/releases/2026/04/16/gitlab-18-11-released/",
                        "name": "GitLab 18.11 release post",
                        "link_type": "other",
                        "direct_asset_url": "https://about.gitlab.com/releases/2026/04/16/gitlab-18-11-released/"
                    }
                ],
                "sources": [
                    {
                        "url": "https://gitl
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/project/tags` — Tags

**Parameters:**
- `project` (query, required, string) — Project id or group/name path (or gitlab.com URL) Example: `gitlab-org/gitlab`
- `per_page` (query, optional, string) — Page size (max 100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/project/tags?project=gitlab-org%2Fgitlab"
```

**Response:**
```json
{
    "data": [
        {
            "name": "v18.10.7-ee",
            "commit": {
                "id": "0dafa5577c4a4eea262a393392b75b43f2ea80f1",
                "title": "Update VERSION files",
                "message": "Update VERSION files\n\n[merge-train skip]",
                "web_url": "https://gitlab.com/gitlab-org/gitlab/-/commit/0dafa5577c4a4eea262a393392b75b43f2ea80f1",
                "short_id": "0dafa557",
                "trailers": [],
                "created_at": "2026-05-26T23:26:31.000+00:00",
                "parent_ids": [
                    "108bca764cc5f02e7020869631c3e99cc1f2c8b1"
                ],
                "author_name": "GitLab Release Tools Bot",
                "author_email": "delivery-team+release-tools@gitlab.com",
                "authored_date": "2026-05-26T23:26:31.000+00:00",
                "committed_date": "2026-05-26T23:26:31.000+00:00",
                "committer_name": "GitLab",
                "committer_email": "noreply@gitlab.com",
                "extended_trailers": []
            },
            "target": "955b7b912d0fd21d54c2c7479c82bca9c31d3888",
            "message": "Version v18.10.7-ee",
            "release": null,
            "protected": true,
            "created_at": "2026-05-26T23:31:41.000Z"
        },
        {
            "name": "v18.11.4-ee",
            "commit": {
                "id": "78d6b913cb59e2ae115c4d7ddf4f065e654bbdd4",
                "title": "Update VERSION files",
                "me
…(truncated, see openapi.json for full schema)
```

### Users

#### `GET /v1/user` — User lookup

**Parameters:**
- `user` (query, required, string) — Username Example: `gitlab-org`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/user?user=gitlab-org"
```

**Response:**
```json
{
    "data": [],
    "meta": {
        "timestamp": "2026-06-02T16:52:34.565Z",
        "request_id": "8d03bffe-b222-4c49-9fc0-516d4ed846a6"
    },
    "status": "ok",
    "message": "User lookup",
    "success": true
}
```

#### `GET /v1/user/projects` — User projects

**Parameters:**
- `user` (query, required, string) — Username Example: `gitlab-org`
- `per_page` (query, optional, string) — Page size (max 100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/user/projects?user=gitlab-org"
```

**Response:**
```json
{
    "data": {
        "note": "User not found.",
        "projects": []
    },
    "meta": {
        "timestamp": "2026-06-02T16:52:35.121Z",
        "request_id": "361f477f-0f18-47e4-bec4-712145710e62"
    },
    "status": "ok",
    "message": "User projects",
    "success": true
}
```

### Groups

#### `GET /v1/group` — Group detail

**Parameters:**
- `group` (query, required, string) — Group id or path Example: `gitlab-org`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/group?group=gitlab-org"
```

**Response:**
```json
{
    "data": {
        "id": 9970,
        "name": "GitLab.org",
        "path": "gitlab-org",
        "ldap_cn": null,
        "web_url": "https://gitlab.com/groups/gitlab-org",
        "archived": false,
        "projects": [
            {
                "id": 82347088,
                "name": "Theseus",
                "path": "theseus",
                "_links": {
                    "self": "https://gitlab.com/api/v4/projects/82347088",
                    "events": "https://gitlab.com/api/v4/projects/82347088/events",
                    "issues": "https://gitlab.com/api/v4/projects/82347088/issues",
                    "labels": "https://gitlab.com/api/v4/projects/82347088/labels",
                    "members": "https://gitlab.com/api/v4/projects/82347088/members",
                    "repo_branches": "https://gitlab.com/api/v4/projects/82347088/repository/branches",
                    "cluster_agents": "https://gitlab.com/api/v4/projects/82347088/cluster_agents",
                    "merge_requests": "https://gitlab.com/api/v4/projects/82347088/merge_requests"
                },
                "mirror": false,
                "topics": [],
                "web_url": "https://gitlab.com/gitlab-org/theseus",
                "archived": false,
                "tag_list": [],
                "namespace": {
                    "id": 9970,
                    "kind": "group",
                    "name": "GitLab.org",
                    "path": "gitlab-org",
          
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/group/projects` — Group projects

**Parameters:**
- `group` (query, required, string) — Group id or path Example: `gitlab-org`
- `per_page` (query, optional, string) — Page size (max 100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/group/projects?group=gitlab-org"
```

**Response:**
```json
{
    "data": [
        {
            "id": 62039593,
            "name": "Duo UI",
            "path": "duo-ui",
            "_links": {
                "self": "https://gitlab.com/api/v4/projects/62039593",
                "events": "https://gitlab.com/api/v4/projects/62039593/events",
                "issues": "https://gitlab.com/api/v4/projects/62039593/issues",
                "labels": "https://gitlab.com/api/v4/projects/62039593/labels",
                "members": "https://gitlab.com/api/v4/projects/62039593/members",
                "repo_branches": "https://gitlab.com/api/v4/projects/62039593/repository/branches",
                "cluster_agents": "https://gitlab.com/api/v4/projects/62039593/cluster_agents",
                "merge_requests": "https://gitlab.com/api/v4/projects/62039593/merge_requests"
            },
            "mirror": false,
            "topics": [],
            "web_url": "https://gitlab.com/gitlab-org/duo-ui",
            "archived": false,
            "tag_list": [],
            "namespace": {
                "id": 9970,
                "kind": "group",
                "name": "GitLab.org",
                "path": "gitlab-org",
                "web_url": "https://gitlab.com/groups/gitlab-org",
                "full_path": "gitlab-org",
                "parent_id": null,
                "avatar_url": "/uploads/-/system/group/avatar/9970/project_avatar.png"
            },
            "avatar_url": "https://gitlab.com/uploads/-/system/project/avat
…(truncated, see openapi.json for full schema)
```

### Search

#### `GET /v1/search/projects` — Search projects

**Parameters:**
- `q` (query, required, string) — Query Example: `gitlab`
- `per_page` (query, optional, string) — Page size (max 100)

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/search/projects?q=gitlab"
```

**Response:**
```json
{
    "data": [
        {
            "id": 13083,
            "name": "GitLab FOSS",
            "path": "gitlab-foss",
            "topics": [
                "Canonical",
                "hacktoberfest",
                "infra-mgmt Managed"
            ],
            "web_url": "https://gitlab.com/gitlab-org/gitlab-foss",
            "tag_list": [
                "Canonical",
                "hacktoberfest",
                "infra-mgmt Managed"
            ],
            "namespace": {
                "id": 9970,
                "kind": "group",
                "name": "GitLab.org",
                "path": "gitlab-org",
                "web_url": "https://gitlab.com/groups/gitlab-org",
                "full_path": "gitlab-org",
                "parent_id": null,
                "avatar_url": "/uploads/-/system/group/avatar/9970/project_avatar.png"
            },
            "avatar_url": "https://gitlab.com/uploads/-/system/project/avatar/13083/project_avatar.png",
            "created_at": "2013-09-26T06:02:36.000Z",
            "readme_url": "https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/README.md",
            "star_count": 7157,
            "visibility": "public",
            "description": "GitLab FOSS is a read-only mirror of GitLab, with all proprietary code removed.\n\nThis project was previously used to host GitLab Community Edition, but all development has now moved to https://gitlab.com/gitlab-org/gitlab.\n",
            "forks_count": 8273,
          
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Spec

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/gitlab-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "auth": "none upstream (no token); this gateway requires x-api-key",
        "name": "GitLab API",
        "note": "Projects (detail, commits, branches, tags, releases, issues, merge requests, languages, README), users, groups and project search. Pass project as a numeric id or 'group/name' path (or a gitlab.com URL). Live, no cache; paginated with page + per_page (max 100). (Member lists require authentication on GitLab and are not exposed.)",
        "source": "GitLab.com REST API v4 (api/v4), unauthenticated public read — via rotating proxy",
        "endpoints": 15
    },
    "meta": {
        "timestamp": "2026-06-02T16:52:53.300Z",
        "request_id": "266ad027-83bf-4d66-ac31-55d124b21431"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/gitlab-api
OpenAPI spec: https://www.oanor.com/api/gitlab-api/openapi.json
