01 — Connect

Two credentials, two test calls. Nothing is written anywhere until stage 05.

Request routing

Why the relay exists api.swaggerhub.com does not send CORS headers, so a browser cannot call it directly — requests fail before they leave the page. When this console is hosted on Cloudflare Pages the relay is already running at this same address. Running locally, start it with node portage-proxy.mjs. Direct mode works only for GitLab instances that you have configured to allow this origin.

SwaggerHub

Not connected

GitLab

Projects are created inside this group. You need Owner or Maintainer on it to add members.
Not connected

Keeping these credentials

02 — Choose what crosses

0 selected

Every API in the owner's registry, with its versions. Pick the versions worth carrying — old drafts rarely are.

Spec options

APIVersions to carryVisibilityRepository path
No APIs loaded yet.

03 — Carry the access list

0 people

SwaggerHub roles do not exist in GitLab, so each one has to land somewhere. Set the rule once, then correct the individual rows that need it.

Where each role lands

GitLab levels: Guest 10 · Reporter 20 · Developer 30 · Maintainer 40 · Owner 50. Reporter is the lowest level that can read a private Pages site.

Who can see the published docs

Read this before choosing public A public GitLab project with public Pages puts the spec on the open internet with no sign-in. SwaggerHub "public" only meant public within SwaggerHub for many organisations. Internal is the default here for that reason.

Pull the people in

SwaggerHub exposes organisation members through /orgs/{org}/members. Per-API collaborator lists are not in the public Registry API on every plan — if that call comes back empty or forbidden, export the list from the SwaggerHub UI and paste it here.
SwaggerHubRoleGitLab accountLevelMatch
Nobody loaded yet.

04 — The plan

No plan

Every call the run will make, in order. Amber rows change something in GitLab. Read it before you sign it off.

How the docs get built

#EffectOperationTarget
Nothing planned yet.

05 — Run the crossing

Idle

Specs are fetched first, then repositories, then commits, then access. A failed operation stops its own repository and leaves the rest alone.

ready.

06 — Confirm it landed

Not checked

Reads back what GitLab actually holds now: pipeline result, published URL, and the real member list on each project.

RepositoryPipelinePagesMembersPublished at
Run a crossing first.

What this tool does not do

Left behind on purpose SwaggerHub comments, version history, and the standardisation rules do not have a GitLab Pages equivalent and are not carried across. Nothing in SwaggerHub is deleted or changed by this tool — the source stays exactly as it is until you retire it yourself.