Skip to content
GitmoapdocsBeta
Guide· How do I…?

Using providers

Overview

A provider is a step your pipeline can run — cloning a repository, building an image, pushing it to a registry, deploying it, telling a channel it worked. The marketplace is where you find one, read what it does, and see which versions it has published. A connection is how you hand it the credentials it needs to reach your own systems, stored once at the group or repository level and picked up by every pipeline underneath.

The two halves are separate on purpose. Reading the catalog tells you what a provider can do and what shape of credential it wants; creating a connection tells one group or one repository which account to use when it does it. You can browse the whole marketplace without owning anything, and you can hold a dozen named connections for the same provider — one per environment — without a pipeline ever having to guess which is which.

Quick start

Quick start3 steps

Install a provider

You’ll need Maintainer on the group you install it into.
  1. Choose Marketplace in the top navigation, and open the provider you need.

  2. Choose Install, and pick the group. It applies to that group and every repository beneath it.

  3. Its capabilities appear in the pipeline editor's palette, ready to drop onto a canvas.

Quick start3 steps

Give a provider its credentials

You’ll need Owner on the group or the repository, and the credential the provider expects.

Start at Providers in the side navigation, on the Credentials tab.

  1. Choose Add connection.

  2. Pick the provider, name the connection — aws-prod, docker-ci — and fill in its credentials or the role it federates to.

  3. Choose Create connection. Every pipeline beneath this scope can use it, and its values are never shown again.

Before you start

  • A signed-in identity.Every catalog read needs authentication. There is no anonymous browsing of the marketplace, and the resolution endpoint refuses an anonymous caller even on a public repository.
  • Reporter access to read connections, on the group or repository that holds them. Connection reads carry no public-visibility shortcut: a public group's connections are visible to its members and to nobody else, because the field names of a credential describe the shape of your infrastructure.
  • Owner access to create, rotate or delete a connection.This is a level above what most repository work needs, and it is deliberate — a connection is the credential a pipeline runs with.
  • Token scopes, if you are calling the API or the CLI rather than clicking: provider_catalog:read for everything in the marketplace, provider_connection:read to list and inspect connections, provider_connection:manage to create, rotate and delete them, and provider_publishing:write to write a marketplace listing for a provider you publish. Scopes are fixed when you mint a token and cannot be widened afterwards.
  • The credential itself.Every provider publishes the exact fields it expects. Read those before you start rather than guessing — a connection whose credentials do not match is refused at creation, not at run time.
  • A private provider needs you to be in the owning organisation.Providers published privately are filtered out of the marketplace for everyone else, and answer 404 rather than 403, so their existence stays private.
  • The provider installed on your group, before a pipeline can actually run it. A connection supplies credentials; installing decides whether the provider may run at all and which version it is pinned to. The platform's own providers are installed for you when your organisation is created; every other provider is an explicit decision. See Provider policy and administration.
  • An active publisher account owning the provider's namespace, if you are writing a marketplace listing. Only the publisher who owns a provider may edit its listing, and the platform's own providers have theirs maintained alongside the provider itself.

How it works

A provider, a version, a capability, a port

Four nested things, and a pipeline node names the innermost one.

provider aws what you connect credentials to
version v0.8.0 an immutable, published release
capability aws:ecs-deploy one runnable step, in one stage
ports task_definition_arn, deployment the typed inputs and outputs you wire

A provider is the unit you trust and connect to. A version is immutable once published — the same version always resolves to the same container image, which is what makes a run reproducible. A capability is a single runnable step, identified as provider:name, and it belongs to a stage: source, build, test, publish, deploy, notify or custom. Ports are its typed inputs and outputs; a pipeline connects one node's output port to another node's input port, and the types have to match exactly. A capability's own settings — the cluster to deploy into, the bucket to write to — are node configuration rather than ports, though a capability may mark some of those keys as bindable, and each of those also shows up as an optional input port so an upstream node can supply the value instead. The credentials port type is where the two halves of this page meet: a credentials input with nothing wired into it is filled from the connection resolved for that node, and only a capability that deliberately emits credentials as an output can feed one over an edge you draw.

Capability reads default to the provider's latest version. Pass version to read the capabilities of an older one, which is what you want when a pipeline is pinned and you are reading the manifest it actually runs.

Some capabilities declare input groups — a set of optional input ports where exactly one, at most one, or at least one may be wired. A capability that deploys from a zip or a container image says so this way, and the editor refuses the impossible combination while you are drawing the pipeline rather than after a run has started.

Where a connection lives, and which one a node gets

A connection is attached to one group or one repository, and it carries a name you choose: aws-prod, aws-staging, docker-ci. A name is unique within a scope across every provider: a group can hold aws-prod and aws-staging side by side, but not two called aws-prod — and not a prod for one provider alongside a prod for another. Naming a connection after the provider it belongs to is what keeps you out of that collision. Resolution then matches on the provider and the name together, so a repository's aws-prod shadows the group's aws-prod and nothing else.

When a pipeline in a repository triggers, connections are gathered from the repository first, then from its parent group, then that group's parent, and so on outwards. The first (provider, name) seen wins:

repository aws / prod ← used
parent group aws / prod shadowed by the repository's own
grandparent group aws / staging ← used (a different name)

That is the whole override model: define a connection once high up, and shadow it lower down by defining the same provider and name closer to the repository.

A pipeline node picks its connection by name. If a node names one, that exact (provider, name) must resolve or the run fails to start. If a node names none, the connection auto-resolves when exactly one connection for that provider is in scope — and refuses when there are two, because guessing between production and staging is the wrong kind of convenience. Having no connection for a provider is not an error: most capabilities need no credential at all, and a run only fails if a step actually tries to use one.

Which connection each node uses is decided once, when the run is created, and does not change for the life of that run. The credential values behind it are read again as each step starts, so a rotation reaches every step that has not started yet, and deleting a connection makes a step that has not started yet fail when it reaches for it. Neither disturbs a step that is already running.

How a connection authenticates

Two modes, chosen at creation and fixed for the life of the connection.

ModeWhat you storeWhen to use it
static_credentialsThe provider's credential fields — an access key, a registry token, a webhook URLAnything without a federation story, and the default
oidc_federationNo secret at all: the cloud, the role to assume, and optionally an audience and regionAn AWS account where you can create a role that trusts an external identity provider

A static connection's values are encrypted when written and are never returned by any endpoint. What comes back is the names of the fields the connection holds, so you can see that a credential is present and which fields it covers without the value ever leaving storage again. A federation connection stores no secret whatsoever — the pipeline exchanges a short-lived token for a role at run time. AWS is the cloud a federation target names, and the role is a full IAM role ARN. Federation is only offered by providers that advertise it, and asking for it from one that does not is refused at creation.

Because the mode is fixed, switching a connection from stored keys to federation means creating the new one and deleting the old.

What is recorded

Creating, rotating and deleting a connection are recorded in the audit log as changes, and so is writing a marketplace listing. Reading a single connection, and resolving a repository's connections, are recorded as sensitive reads — listing them is not, and no catalog read is recorded at all. If you are auditing who looked at your credential configuration, those sensitive reads are the entries to look for.

How to

Browse the marketplace

The browse list is the provider grid: name, one-line description, categories, the trust tier, whether the publisher's namespace is verified, and how many organisations have installed it. Narrow it with q for free text over names, descriptions and keywords; with category, tier and verified_only for facets; and with featured for the editorially curated shortlist. owning_group narrows the list to one organisation's private providers, and answers nothing at all to somebody outside that organisation. Sort by relevance, installs, name or recently_updated.

Page size is clamped to 1–100 rather than refused, so a limit outside that range quietly gives you the nearest legal page. The next_token you get back is tied to the filters and the sort that produced it: change either while paging and the token is refused, so re-run the search from the first page after every filter change.

Install counts are omitted for the platform's own providers — they ship with every organisation, so a count would say nothing useful. Their signal is the tier badge instead.

Choose Marketplace in the top navigation. The search box filters as you type; the left rail carries the category, tier and verified filters, and the sort control sits above the grid. Each card shows the provider's badge row — tier, verified namespace, signed image — and its install count. Scroll to load the next page.

Terminalbash
gitmoap provider-catalog list-providers
curlbash
curl -X GET https://api.gitmoap.example/providers \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Filter the marketplace by category

Categories are a fixed, curated list — source-control, build, test, quality, security, release, deploy, infrastructure, notify and other — and each comes back with a live count of the providers you can see. A private provider counts only for members of the organisation that owns it, so two people can legitimately see different numbers.

The category rail on the left of the marketplace is this list. Each entry shows its provider count beside the label; choosing one applies it as a filter to the grid.

Terminalbash
gitmoap provider-catalog list-marketplace-categories
curlbash
curl -X GET https://api.gitmoap.example/marketplace/categories \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Read a provider's marketplace page

Before you connect anything to a provider, read its page. It carries the long-form README, the worked examples its publisher wrote, the publisher badge, and the full version history with a changelog and a lifecycle state per version.

Three things on that page are worth reading properly:

  • The tier. platform providers are built and run by us. verified providers are third-party but reviewed and re-published by us. community providers are published directly by their author from the author's own registry. private providers belong to one organisation and are invisible outside it.
  • The lifecycle state of the version you intend to pin. active is normal. deprecated still runs, with a warning. sunset runs only inside its grace window, after which a pipeline referencing it fails to start.
  • The examples. Each names the capabilities it exercises, so an example is also a shortcut to the capability you want.

Choose any card in the marketplace to open the provider page. The README renders in the main column; the version list, publisher badge and links sit in the right rail, and each version expands to show its changelog.

Terminalbash
gitmoap provider-catalog get-provider-listing --provider-id <id>
curlbash
curl -X GET https://api.gitmoap.example/providers/{provider_id}/listing \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Check a provider's credential shape

The provider record carries the schema for its credentials — the exact field names and types a connection must supply — and the authentication modes it supports. Read this before creating a connection, because credentials are validated against it and a mismatch is refused outright.

The Authentication section of the provider page lists the credential fields the provider expects, which are required, and whether it supports federation as well as stored keys.

Terminalbash
gitmoap provider-catalog get-provider --provider-id <id>
curlbash
curl -X GET https://api.gitmoap.example/providers/{provider_id} \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Compare a provider's published versions

Versions come back newest-first, each with when it was published, who published it, whether its image is signed, and its lifecycle state. A sunset version also carries the moment it was sunset and the moment its grace window closes — the deadline for moving anything pinned to it. Versions are strict semantic versions with a leading v, like v1.4.0 — there is no floating range and no latest tag to pin to, because a pipeline that silently changes what it runs is not reproducible.

The provider page's right rail lists every published version, newest first, with its lifecycle badge. Choosing one expands its changelog.

Terminalbash
gitmoap provider-catalog list-provider-versions --provider-id <id>
curlbash
curl -X GET https://api.gitmoap.example/providers/{provider_id}/versions \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Read one published version in full

A single version read returns the whole manifest: every capability at that version, with its ports, its configuration schema, its default timeout, and the exact image build the version resolves to. This is the definitive answer to "what does my pinned version actually run".

On the provider page, choose a version in the right rail and then View manifest to open its full capability list.

Terminalbash
gitmoap provider-catalog get-provider-version \
--provider-id <id> \
--version <id>
curlbash
curl -X GET https://api.gitmoap.example/providers/{provider_id}/versions/{version} \
-H "Authorization: Bearer $GITMOAP_TOKEN"

See what a provider can do

The capability list for a provider, at its latest version unless you pin one. Filter by stage_type when you know which part of the pipeline you are filling — asking a provider for its deploy capabilities is usually faster than reading all of them.

The Capabilities tab of the provider page groups them by stage. The version selector above the list controls which version's capabilities you are looking at.

Terminalbash
gitmoap provider-catalog list-capabilities --provider-id <id>
curlbash
curl -X GET https://api.gitmoap.example/providers/{provider_id}/capabilities \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Read a capability's ports before you wire it

A capability read is what you consult while drawing a pipeline. It gives you the ports — each with a name, a type, whether it is required, whether it takes one source or several at once, and a description written by the provider's author saying what to connect to it and what happens if you do not — plus the configuration schema for the node, which configuration keys accept a value produced by another node, and any input groups constraining which optional ports may be used together.

Port types match exactly; there is no coercion. A port named source always carries a git reference, artifact always carries an artifact, and so on across the whole catalog, so two ports that share a name always carry the same type. A port can also name the exact shape it carries — s3.object/v1 on an artifact port, aws.ecs.task-definition-arn/v1 on a custom one, which is how a provider describes a payload the built-in types have no name for. Two ports connect only when both the type and the named shape agree; a port that names no shape takes any payload of its type.

Choose a capability on the provider page to open its detail panel: inputs on the left, outputs on the right, configuration below, with each port's description beside it. The same panel opens from the node inspector while you are editing a pipeline.

Terminalbash
gitmoap provider-catalog get-capability --capability-id <id>
curlbash
curl -X GET https://api.gitmoap.example/capabilities/{capability_id} \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Connect a provider once for a whole group

This is the usual place to put a connection. A connection on a group is available to every repository and every nested group beneath it, so one aws-prod at the top of your organisation serves everything under it.

Give it a provider_id, a name and the credential fields the provider's schema requires. The name is lowercase letters, digits and hyphens, one to sixty-four characters, no leading or trailing hyphen — aws-prod, docker-ci, registry-eu. Pick the name you want pipeline authors to type, because that is exactly what they will type.

For a connection that stores no secret, set auth_mode to oidc_federation and supply federation_target — the cloud (aws), the IAM role ARN to assume, and optionally the audience and region — with no credentials block at all. The provider has to advertise federation for this to be accepted.

Open the group, choose Settings, then Provider connections, then New connection. Pick the provider, give the connection a name, and choose how it authenticates. Choosing stored credentials renders one field per entry in the provider's credential schema, with required fields marked; choosing federation asks for the role instead. Create saves it and returns you to the list, where the new connection shows its field names but never their values.

Terminalbash
gitmoap provider-connections create-group-connection \
--group-id <id> \
--name <name> \
--provider-id <provider id>
curlbash
curl -X POST https://api.gitmoap.example/groups/{group_id}/provider-connections \
-H "Authorization: Bearer $GITMOAP_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "<string>", "provider_id": "<string>" }'

Note

The name has to be free within the scope — across every provider, not only this one — and a duplicate is refused rather than overwritten, so you cannot replace somebody's production credential by re-creating it under the same name.

Override a group's connection for one repository

A connection created on a repository shadows any connection with the same provider and name inherited from above. Use it when one repository deploys somewhere the rest of the group does not, or when you want to narrow a single repository's blast radius to a credential of its own.

Everything else — the request shape, the name rules, the two authentication modes — is identical to the group case.

Open the repository, choose Settings, then Provider connections, then New connection. The form is the group form: pick the provider, name the connection, and choose how it authenticates. Giving it the same provider and name as one inherited from above replaces that one for this repository only.

Terminalbash
gitmoap provider-connections create-repo-connection \
--repo-id <id> \
--name <name> \
--provider-id <provider id>
curlbash
curl -X POST https://api.gitmoap.example/repositories/{repo_id}/provider-connections \
-H "Authorization: Bearer $GITMOAP_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "<string>", "provider_id": "<string>" }'

List the connections defined on a group or repository

Both listings show what is defined directly on that scope, newest first, with nothing inherited folded in. That is the view you want when you are auditing what one group owns, and the wrong view when you are asking what a pipeline will actually get — for that, resolve.

Settings → Provider connections on the group. Each row shows the provider, the connection name, the credential field names it holds, who created it and when it was last rotated.

Terminalbash
gitmoap provider-connections list-group-connections --group-id <id>
curlbash
curl -X GET https://api.gitmoap.example/groups/{group_id}/provider-connections \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Settings → Provider connections on the repository. This tab holds the connections defined on the repository itself; the Effective tab beside it is where anything inherited from above appears.

Terminalbash
gitmoap provider-connections list-repo-connections --repo-id <id>
curlbash
curl -X GET https://api.gitmoap.example/repositories/{repo_id}/provider-connections \
-H "Authorization: Bearer $GITMOAP_TOKEN"

See which connections a repository actually resolves

This is the one to reach for when a pipeline cannot find its credentials. It walks the repository and every group above it and returns the merged result — one entry per (provider, name), each marked as inherited or not, and each naming the scope it came from.

Two things it will tell you that a plain listing cannot: whether the connection a node names is reachable from this repository at all, and whether two connections for the same provider exist in scope, which is what turns an unnamed node into an ambiguity error.

An entry inherited from a group you cannot read comes back with its details blanked — the provider and the name survive, because you need to know the connection applies, but the field names, the creator and the source group do not. A row that looks half-empty is that, not a broken connection.

Open the repository, choose Settings, then Provider connections, then Effective. The table shows every connection a pipeline here can use, where each came from, and flags any provider with more than one connection in scope as needing an explicit name in the node.

Terminalbash
gitmoap provider-connections resolve-repo-connections --repo-id <id>
curlbash
curl -X GET https://api.gitmoap.example/repositories/{repo_id}/resolved-provider-connections \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Inspect one connection

A single-connection read returns the same shape as a listing row, for one connection. Credential values are not part of that shape at any scope — there is no endpoint, flag or role that returns them.

Single reads are recorded in the audit log as sensitive reads.

Choose a row in the group's Provider connections list to open its detail panel.

Terminalbash
gitmoap provider-connections get-group-connection \
--group-id <id> \
--connection-id <id>
curlbash
curl -X GET https://api.gitmoap.example/groups/{group_id}/provider-connections/{connection_id} \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Choose a row in the repository's Provider connections list to open its detail panel.

Terminalbash
gitmoap provider-connections get-repo-connection \
--repo-id <id> \
--connection-id <id>
curlbash
curl -X GET https://api.gitmoap.example/repositories/{repo_id}/provider-connections/{connection_id} \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Rotate a connection's credentials

Rotating means sending a fresh, complete credentials object. Fields you send are written over the old values; fields you leave out are removed from the connection. Send the whole set every time, not just the one that changed, or the connection ends up missing the fields you omitted and every pipeline using it starts failing.

The new credentials are validated against the provider's schema first, so a rotation with the wrong field names is refused before anything is overwritten. A successful rotation stamps the connection's last-rotated time. That stamp is empty until the first rotation, so a connection showing nothing there is still running on the credential it was created with — which is what to look for when you are auditing credential age.

You can also update config_overrides without touching credentials — send it alone and the stored secret is untouched.

The authentication mode cannot be changed. Sending credentials to a federation connection, or a federation target to a static one, is refused; create a new connection and delete the old instead. What a federation connection can change is where it points: send a new federation target to move it to a different role, audience or region.

Open the connection from the group's Provider connections list and choose Rotate credentials. The form is pre-populated with the field names the connection holds but never their values, so you re-enter every field. Save replaces them and updates the last-rotated timestamp shown in the list.

Terminalbash
gitmoap provider-connections update-group-connection \
--group-id <id> \
--connection-id <id>
curlbash
curl -X PUT https://api.gitmoap.example/groups/{group_id}/provider-connections/{connection_id} \
-H "Authorization: Bearer $GITMOAP_TOKEN"

The same Rotate credentials action on a connection defined on the repository. An inherited connection has no rotate action here — rotate it on the group that owns it.

Terminalbash
gitmoap provider-connections update-repo-connection \
--repo-id <id> \
--connection-id <id>
curlbash
curl -X PUT https://api.gitmoap.example/repositories/{repo_id}/provider-connections/{connection_id} \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Delete a connection

Warning

Deleting a connection destroys the stored credential values immediately and permanently. They cannot be read back before deletion and cannot be recovered after it — if a value was only ever typed into Gitmoap, it is gone, and you will have to mint a new one at the provider. Pipelines are not deleted with it and nothing warns them: the definition stays exactly as saved, and nothing re-checks it until something triggers it — at which point the run fails to start, naming the node and the connection it cannot find. Check the resolved view for the repositories underneath before you delete a connection on a group.

Deleting a repository-level connection that was shadowing an inherited one un-shadows it: the group's connection with the same provider and name starts resolving again on the next trigger. That is usually what you want when you created an override by mistake, and worth checking when you did not.

Deleting is not idempotent — the second delete of the same connection answers 404.

Deleting the group or repository a connection lives on takes its connections with it, credentials included. That is one more thing to weigh before deleting a scope that other people's pipelines run under.

Open the connection from the group's Provider connections list and choose Delete. The confirmation names the provider and the connection it is about to destroy. Nothing below the group is checked on your behalf, so open the Effective view on the repositories that matter first.

Terminalbash
gitmoap provider-connections delete-group-connection \
--group-id <id> \
--connection-id <id>
curlbash
curl -X DELETE https://api.gitmoap.example/groups/{group_id}/provider-connections/{connection_id} \
-H "Authorization: Bearer $GITMOAP_TOKEN"

The same Delete action on a connection defined on the repository. Afterwards the Effective view is where you see whether an inherited connection of the same name has taken its place.

Terminalbash
gitmoap provider-connections delete-repo-connection \
--repo-id <id> \
--connection-id <id>
curlbash
curl -X DELETE https://api.gitmoap.example/repositories/{repo_id}/provider-connections/{connection_id} \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Write the marketplace listing for a provider you publish

If you publish a provider, its listing is the page everyone else reads — the README, the categories it appears under, the search keywords, the homepage and repository links, and the worked examples. It is editable independently of your versions, so fixing a typo in the README does not mean publishing a release.

The enforced shape: one to three categories, at most ten keywords, and at most ten examples, each with a title of at most 120 characters, a description of at most 500, and a snippet of at most 8 KB. A keyword is 1 to 31 characters of lowercase letters, digits and hyphens, and cannot open with a hyphen. The README is at most 128 KB, and the homepage and repository links have to be https://. Every capability an example names has to exist in one of your published versions, which is checked when you save.

Fields you leave out are unchanged; sending an explicit null clears one. You have to own the provider's namespace as an active publisher; the platform's own providers have their listings maintained with the provider itself and refuse this call.

Open your provider from Publishing → My providers and choose Edit listing. The README editor previews as you type; categories, keywords and links sit beside it, and examples are added one at a time with a capability picker that only offers capabilities you have actually published. Publish listing takes effect immediately — no version is created.

Terminalbash
gitmoap provider-catalog set-provider-listing --provider-id <id>
curlbash
curl -X PUT https://api.gitmoap.example/providers/{provider_id}/listing \
-H "Authorization: Bearer $GITMOAP_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "examples[].description": "<string>", "examples[].snippet": "<string>", "examples[].title": "<string>" }'

Reference

The marketplace and catalog reads:

9 endpoints

GET/providersprovider_catalog:read

Browse the provider marketplace.

list_providersGET /providersOpen in the API reference

Token scope

provider_catalog:read

Send

Query
  • qstringoptionalFree-text match over name/description/keywords
  • categorybuilddeployinfrastructurenotifyotherqualityreleasesecuritysource-controltestoptionalFilter to providers declaring this category
  • tiercommunityplatformprivateverifiedoptionalFilter by tier
  • verified_onlybooleanoptionalOnly providers whose publisher namespace is verified
  • featuredbooleanoptionalOnly editorially-featured providers, ordered by rank
  • owning_groupuuidoptionalList one org's private providers (members only)
  • sortinstallsnamerecently_updatedrelevanceoptionalrelevance | installs | name | recently_updated
  • limitint32optionalPage size (1-100, default 20)
  • next_tokenstringoptionalOpaque pagination cursor

Refuses

  • 400Invalid filter / sort / pagination params
  • 401
  • 403Forbidden — the caller's access level or token scope is insufficient

Receive

  • items[]object14 fields
    • created_atstring
    • descriptionstring
    • featured_rankint32optionalWhere gitmoap features the provider: lower numbers are placed higher. Absent when it is not featured.
    • idstring
    • install_countint64optionalHow many organizations have installed the provider. Absent for providers gitmoap builds itself.
    • latest_versionobjectoptional
    • lifecycle_stateobjectoptional
    • namestring
    • namespace_verifiedbooleanWhether the provider's publisher has verified its namespace. false for providers gitmoap builds itself, which have no publisher.
    • publisher_idobjectoptional
    • signedbooleanWhether the latest version's images are signed by gitmoap, as platform and verified providers' are.
    • tiercommunityplatformprivateverifiedHow a pipeline provider is distributed and how much it is vouched for.
    • updated_atstring
    • visibilityobjectWho can see a provider in the catalog. public is listed for everyone; private is listed only for members of the organisation that owns it.
  • next_tokenobjectoptional
GET/marketplace/categoriesprovider_catalog:read

List the marketplace category taxonomy with live provider counts.

list_marketplace_categoriesGET /marketplace/categoriesOpen in the API reference

Token scope

provider_catalog:read

Send

Nothing — the address is the whole request.

Refuses

  • 401
  • 403Forbidden — the caller's access level or token scope is insufficient

Receive

  • items[]object3 fields
    • categorybuilddeployinfrastructurenotifyotherqualityreleasesecuritysource-controltestA marketplace discovery category a provider is listed under. A provider declares one to three, and they describe where it appears when browsing, not what its capabilities do — a provider in infrastructure may still offer build and deploy capabilities.
    • labelstring
    • provider_countint64
GET/providers/{provider_id}provider_catalog:read

Get one provider's metadata.

get_providerGET /providers/{provider_id}Open in the API reference

Token scope

provider_catalog:read

Send

Path
  • provider_idstringProvider slug

Refuses

  • 400
  • 401
  • 403Forbidden — the caller's access level or token scope is insufficient
  • 404

Receive

  • auth_schemaobjectThe JSON Schema a connection's credentials must satisfy, exactly as the provider's gitmoap-provider.yaml declares it.
  • created_atstring
  • descriptionstring
  • featured_rankint32optionalWhere gitmoap features the provider: lower numbers are placed higher. Absent when it is not featured.
  • idstring
  • install_countint64optionalHow many organizations have installed the provider. Providers installed by default are not counted.
  • latest_versionobjectoptional
  • namestring
  • publisher_idobjectoptional
  • tiercommunityplatformprivateverifiedHow a pipeline provider is distributed and how much it is vouched for.
  • updated_atstring
  • visibilityobjectoptionalWho can see a provider in the catalog. public is listed for everyone; private is listed only for members of the organisation that owns it.
GET/providers/{provider_id}/listingprovider_catalog:read

A provider's marketplace page.

get_provider_listingGET /providers/{provider_id}/listingOpen in the API reference

Token scope

provider_catalog:read

Send

Path
  • provider_idstringProvider slug

Refuses

  • 400
  • 401
  • 403Forbidden — the caller's access level or token scope is insufficient
  • 404

Receive

  • examples[]object3 fields
    • descriptionstringOne- or two-sentence summary (<= 500 chars).
    • snippetstringA pipeline YAML/JSON fragment (<= 8 KB).
    • titlestringShort heading (<= 120 chars).
  • homepage_urlobjectoptional
  • install_countint64optional
  • namespace_verifiedboolean
  • providerobject14 fields
    • created_atstring
    • descriptionstring
    • featured_rankint32optionalWhere gitmoap features the provider: lower numbers are placed higher. Absent when it is not featured.
    • idstring
    • install_countint64optionalHow many organizations have installed the provider. Absent for providers gitmoap builds itself.
    • latest_versionobjectoptional
    • lifecycle_stateobjectoptional
    • namestring
    • namespace_verifiedbooleanWhether the provider's publisher has verified its namespace. false for providers gitmoap builds itself, which have no publisher.
    • publisher_idobjectoptional
    • signedbooleanWhether the latest version's images are signed by gitmoap, as platform and verified providers' are.
    • tiercommunityplatformprivateverifiedHow a pipeline provider is distributed and how much it is vouched for.
    • updated_atstring
    • visibilityobjectWho can see a provider in the catalog. public is listed for everyone; private is listed only for members of the organisation that owns it.
  • publisherobjectoptional
  • readmeobjectoptional
  • repository_urlobjectoptional
  • versions[]object1 field
    • changelogobjectoptional
PUT/providers/{provider_id}/listingprovider_publishing:write

Set the marketplace listing for a provider you own

set_provider_listingPUT /providers/{provider_id}/listingOpen in the API reference

Token scope

provider_publishing:write

Send

Path
  • provider_idstringProvider slug
Body
  • examples[]object3 fields
    • descriptionstringOne- or two-sentence summary (<= 500 chars).
    • snippetstringA pipeline YAML/JSON fragment (<= 8 KB).
    • titlestringShort heading (<= 120 chars).
  • homepage_urlobjectoptional
  • readmeobjectoptional
  • repository_urlobjectoptional

Refuses

  • 400
  • 401
  • 403
  • 404
  • 409The request conflicts with the resource's current state; `reason` says how

Receive

The same shape get_provider_listing returns — 9 fields. Go to it

Show it here
  • examples[]object3 fields
    • descriptionstringOne- or two-sentence summary (<= 500 chars).
    • snippetstringA pipeline YAML/JSON fragment (<= 8 KB).
    • titlestringShort heading (<= 120 chars).
  • homepage_urlobjectoptional
  • install_countint64optional
  • namespace_verifiedboolean
  • providerobject14 fields
    • created_atstring
    • descriptionstring
    • featured_rankint32optionalWhere gitmoap features the provider: lower numbers are placed higher. Absent when it is not featured.
    • idstring
    • install_countint64optionalHow many organizations have installed the provider. Absent for providers gitmoap builds itself.
    • latest_versionobjectoptional
    • lifecycle_stateobjectoptional
    • namestring
    • namespace_verifiedbooleanWhether the provider's publisher has verified its namespace. false for providers gitmoap builds itself, which have no publisher.
    • publisher_idobjectoptional
    • signedbooleanWhether the latest version's images are signed by gitmoap, as platform and verified providers' are.
    • tiercommunityplatformprivateverifiedHow a pipeline provider is distributed and how much it is vouched for.
    • updated_atstring
    • visibilityobjectWho can see a provider in the catalog. public is listed for everyone; private is listed only for members of the organisation that owns it.
  • publisherobjectoptional
  • readmeobjectoptional
  • repository_urlobjectoptional
  • versions[]object1 field
    • changelogobjectoptional
GET/providers/{provider_id}/versionsprovider_catalog:read

List all published versions of a provider, newest-first.

list_provider_versionsGET /providers/{provider_id}/versionsOpen in the API reference

Token scope

provider_catalog:read

Send

Path
  • provider_idstringProvider slug
Query
  • limitint32optionalPage size (1-100, default 20)
  • next_tokenstringoptionalOpaque pagination cursor

Refuses

  • 400
  • 401
  • 403Forbidden — the caller's access level or token scope is insufficient
  • 404

Receive

  • items[]object12 fields
    • changelogobjectoptional
    • contract_versionint32
    • cosign_signature_refobjectoptionalWhere the cosign signature is stored in the registry, when the images are signed.
    • lifecycle_stateactivedeprecatedsunsetoptionalLifecycle state of a published ProviderVersionManifest. Active is the default; Deprecated still runs but the trigger-time validator surfaces a warning; Sunset runs only inside its grace window, after which a trigger referencing it fails validation.
    • manifest_digeststringThe SHA-256 digest of the version's gitmoap-provider.yaml. May be empty.
    • provider_idstring
    • published_atstring
    • published_bystring"platform" for platform-authored providers; a publisher id otherwise.
    • signedbooleanoptionalWhether the version's images are signed with gitmoap's cosign key, as verified and platform providers' are.
    • sunset_atobjectoptionalWhen the version was sunset. Set only for a sunset version.
    • sunset_enforced_atobjectoptionalWhen the sunset's grace period ends. After it, a run that uses the version fails to start.
    • versionstring
  • next_tokenobjectoptional
GET/providers/{provider_id}/versions/{version}provider_catalog:read

Get one version manifest (provider + all capabilities at that version).

get_provider_versionGET /providers/{provider_id}/versions/{version}Open in the API reference

Token scope

provider_catalog:read

Send

Path
  • provider_idstringProvider slug
  • versionstringSemVer (vX.Y.Z)

Refuses

  • 400
  • 401
  • 403Forbidden — the caller's access level or token scope is insufficient
  • 404

Receive

  • capabilities[]object11 fields
    • cache_enabledboolean
    • capability_idstring
    • config_schemaobjectThe JSON Schema a step's config must satisfy to use this capability.
    • default_timeout_secondsint32
    • descriptionstring
    • image_digestobjectoptionalThe exact build of the capability's container image, when the catalog records one. Pinned so a run cannot pick up a different build behind the same tag.
    • image_uristringThe container image that runs the capability, with an immutable version tag.
    • namestring
    • requires_dockerboolean
    • source_image_refobjectoptionalFor a verified provider, the image's location in its publisher's registry before gitmoap copied it. Absent for providers gitmoap builds itself.
    • stage_typebuildcustomdeploynotifypublishsourcetestThe pipeline stage a capability belongs to. Maps verbatim to the stage_type field of a capability in gitmoap-provider.yaml.
  • changelogobjectoptional
  • contract_versionint32
  • cosign_signature_refobjectoptionalWhere the cosign signature is stored in the registry, when the images are signed.
  • lifecycle_stateactivedeprecatedsunsetoptionalLifecycle state of a published ProviderVersionManifest. Active is the default; Deprecated still runs but the trigger-time validator surfaces a warning; Sunset runs only inside its grace window, after which a trigger referencing it fails validation.
  • manifest_digeststringThe SHA-256 digest of the version's gitmoap-provider.yaml. May be empty.
  • provider_idstring
  • published_atstring
  • published_bystring"platform" for platform-authored providers; a publisher id otherwise.
  • signedbooleanoptionalWhether the version's images are signed with gitmoap's cosign key, as verified and platform providers' are.
  • sunset_atobjectoptionalWhen the version was sunset. Set only for a sunset version.
  • sunset_enforced_atobjectoptionalWhen the sunset's grace period ends. After it, a run that uses the version fails to start.
  • versionstring
GET/providers/{provider_id}/capabilitiesprovider_catalog:read

List capabilities offered by a provider at its latest (or pinned) version.

list_capabilitiesGET /providers/{provider_id}/capabilitiesOpen in the API reference

Token scope

provider_catalog:read

Send

Path
  • provider_idstringProvider slug
Query
  • stage_typebuildcustomdeploynotifypublishsourcetestoptionalFilter by stage type
  • versionstringoptionalPin to a version (default: latest)

Refuses

  • 400
  • 401
  • 403Forbidden — the caller's access level or token scope is insufficient
  • 404

Receive

  • items[]object11 fields
    • cache_enabledboolean
    • capability_idstring
    • config_schemaobjectThe JSON Schema a step's config must satisfy to use this capability.
    • default_timeout_secondsint32
    • descriptionstring
    • image_digestobjectoptionalThe exact build of the capability's container image, when the catalog records one. Pinned so a run cannot pick up a different build behind the same tag.
    • image_uristringThe container image that runs the capability, with an immutable version tag.
    • namestring
    • requires_dockerboolean
    • source_image_refobjectoptionalFor a verified provider, the image's location in its publisher's registry before gitmoap copied it. Absent for providers gitmoap builds itself.
    • stage_typebuildcustomdeploynotifypublishsourcetestThe pipeline stage a capability belongs to. Maps verbatim to the stage_type field of a capability in gitmoap-provider.yaml.
  • versionstring
GET/capabilities/{capability_id}provider_catalog:read

Get a single capability's metadata at the provider's latest (or pinned) version.

get_capabilityGET /capabilities/{capability_id}Open in the API reference

Token scope

provider_catalog:read

Send

Path
  • capability_idstringCapability id (provider:name)
Query
  • versionstringoptionalPin to a version (default: latest)

Refuses

  • 400
  • 401
  • 403Forbidden — the caller's access level or token scope is insufficient
  • 404

Receive

No body.

Connections on a group:

5 endpoints

GET/groups/{group_id}/provider-connectionsprovider_connection:read

List a group's provider connections

list_group_connectionsGET /groups/{group_id}/provider-connectionsOpen in the API reference

Token scope

provider_connection:read

Send

Path
  • group_iduuidGroup id
Query
  • limitint32optionalPage size (1-100, default 20)
  • next_tokenstringoptionalOpaque pagination cursor

Refuses

  • 400Bad request — a path parameter is not a well-formed value of its type
  • 401
  • 403
  • 404

Receive

  • items[]object15 fields
    • auth_modeoidc_federationstatic_credentialsHow a connection authenticates to its provider's cloud: static_credentials (stored credentials, the default) or oidc_federation (nothing stored; each run assumes a cloud role with a short-lived identity token gitmoap issues).
    • config_overridesobjectoptional
    • created_atstring
    • created_byobject4 fields
      • avatar_urlobjectoptional
      • emailstring
      • idstring
      • usernamestring
    • federation_targetobjectoptional
    • iduuid
    • last_rotated_atobjectoptional
    • namestring
    • provider_idstring
    • scope_idstring
    • scope_typegrouprepository
    • secret_refsobjectThe names of the stored credential fields, each with a reference to where it is stored. Never the values. Empty for an oidc_federation connection.
  • next_tokenobjectoptional
POST/groups/{group_id}/provider-connectionsprovider_connection:manage

Create a provider connection for a group

create_group_connectionPOST /groups/{group_id}/provider-connectionsOpen in the API reference

Token scope

provider_connection:manage

Counts against

provider_connections_per_scope

Send

Path
  • group_iduuidGroup id
Body
  • auth_modeoidc_federationstatic_credentialsoptionalHow a connection authenticates to its provider's cloud: static_credentials (stored credentials, the default) or oidc_federation (nothing stored; each run assumes a cloud role with a short-lived identity token gitmoap issues).
  • config_overridesobjectoptional
  • credentialsobjectoptionalThe provider's credentials, in the shape its auth_schema describes. Required for static_credentials; refused for oidc_federation.
  • federation_targetobjectoptional
  • namestring
  • provider_idstring

Refuses

  • 400
  • 401
  • 403
  • 404
  • 409
  • 422Credentials supplied for an OIDC-federation connection
  • 429Provider-connection limit reached for this group
  • 501Provider connections are not configured on this deployment

Receive

  • auth_modeoidc_federationstatic_credentialsHow a connection authenticates to its provider's cloud: static_credentials (stored credentials, the default) or oidc_federation (nothing stored; each run assumes a cloud role with a short-lived identity token gitmoap issues).
  • config_overridesobjectoptional
  • created_atstring
  • created_byobject4 fields
    • avatar_urlobjectoptional
    • emailstring
    • idstring
    • usernamestring
  • federation_targetobjectoptional
  • iduuid
  • last_rotated_atobjectoptional
  • namestring
  • provider_idstring
  • scope_idstring
  • scope_typegrouprepository
  • secret_refsobjectThe names of the stored credential fields, each with a reference to where it is stored. Never the values. Empty for an oidc_federation connection.
GET/groups/{group_id}/provider-connections/{connection_id}provider_connection:read

Get one of a group's provider connections

get_group_connectionGET /groups/{group_id}/provider-connections/{connection_id}Open in the API reference

Token scope

provider_connection:read

Send

Path
  • group_iduuidGroup id
  • connection_iduuidConnection id

Refuses

  • 400Bad request — a path parameter is not a well-formed value of its type
  • 401
  • 403
  • 404

Receive

The same shape create_group_connection returns — 12 fields. Go to it

Show it here
  • auth_modeoidc_federationstatic_credentialsHow a connection authenticates to its provider's cloud: static_credentials (stored credentials, the default) or oidc_federation (nothing stored; each run assumes a cloud role with a short-lived identity token gitmoap issues).
  • config_overridesobjectoptional
  • created_atstring
  • created_byobject4 fields
    • avatar_urlobjectoptional
    • emailstring
    • idstring
    • usernamestring
  • federation_targetobjectoptional
  • iduuid
  • last_rotated_atobjectoptional
  • namestring
  • provider_idstring
  • scope_idstring
  • scope_typegrouprepository
  • secret_refsobjectThe names of the stored credential fields, each with a reference to where it is stored. Never the values. Empty for an oidc_federation connection.
PUT/groups/{group_id}/provider-connections/{connection_id}provider_connection:manage

Update a group's provider connection

update_group_connectionPUT /groups/{group_id}/provider-connections/{connection_id}Open in the API reference

Token scope

provider_connection:manage

Send

Path
  • group_iduuidGroup id
  • connection_iduuidConnection id
Body
  • config_overridesobjectoptional
  • credentialsobjectoptional
  • federation_targetobjectoptional

Refuses

  • 400
  • 401
  • 403
  • 404
  • 409The request conflicts with the resource's current state; `reason` says how
  • 422Credentials on an OIDC-federation connection, or a federation target on a static-credentials one
  • 501Provider connections are not configured on this deployment

Receive

The same shape create_group_connection returns — 12 fields. Go to it

Show it here
  • auth_modeoidc_federationstatic_credentialsHow a connection authenticates to its provider's cloud: static_credentials (stored credentials, the default) or oidc_federation (nothing stored; each run assumes a cloud role with a short-lived identity token gitmoap issues).
  • config_overridesobjectoptional
  • created_atstring
  • created_byobject4 fields
    • avatar_urlobjectoptional
    • emailstring
    • idstring
    • usernamestring
  • federation_targetobjectoptional
  • iduuid
  • last_rotated_atobjectoptional
  • namestring
  • provider_idstring
  • scope_idstring
  • scope_typegrouprepository
  • secret_refsobjectThe names of the stored credential fields, each with a reference to where it is stored. Never the values. Empty for an oidc_federation connection.
DELETE/groups/{group_id}/provider-connections/{connection_id}provider_connection:manage

Delete a group's provider connection

delete_group_connectionDELETE /groups/{group_id}/provider-connections/{connection_id}Open in the API reference

Token scope

provider_connection:manage

Send

Path
  • group_iduuidGroup id
  • connection_iduuidConnection id

Refuses

  • 400Bad request — a path parameter is not a well-formed value of its type
  • 401
  • 403
  • 404
  • 409The request conflicts with the resource's current state; `reason` says how
  • 501Provider connections are not configured on this deployment

Receive

No body.

Connections on a repository, and the resolved view:

6 endpoints

GET/repositories/{repo_id}/provider-connectionsprovider_connection:read

List a repository's provider connections

list_repo_connectionsGET /repositories/{repo_id}/provider-connectionsOpen in the API reference

Token scope

provider_connection:read

Send

Path
  • repo_iduuidRepository id
Query
  • limitint32optionalPage size (1-100, default 20)
  • next_tokenstringoptionalOpaque pagination cursor

Refuses

  • 400Bad request — a path parameter is not a well-formed value of its type
  • 401
  • 403
  • 404

Receive

The same shape list_group_connections returns — 2 fields. Go to it

Show it here
  • items[]object15 fields
    • auth_modeoidc_federationstatic_credentialsHow a connection authenticates to its provider's cloud: static_credentials (stored credentials, the default) or oidc_federation (nothing stored; each run assumes a cloud role with a short-lived identity token gitmoap issues).
    • config_overridesobjectoptional
    • created_atstring
    • created_byobject4 fields
      • avatar_urlobjectoptional
      • emailstring
      • idstring
      • usernamestring
    • federation_targetobjectoptional
    • iduuid
    • last_rotated_atobjectoptional
    • namestring
    • provider_idstring
    • scope_idstring
    • scope_typegrouprepository
    • secret_refsobjectThe names of the stored credential fields, each with a reference to where it is stored. Never the values. Empty for an oidc_federation connection.
  • next_tokenobjectoptional
POST/repositories/{repo_id}/provider-connectionsprovider_connection:manage

Create a provider connection for a repository

create_repo_connectionPOST /repositories/{repo_id}/provider-connectionsOpen in the API reference

Token scope

provider_connection:manage

Counts against

provider_connections_per_scope

Send

Path
  • repo_iduuidRepository id
Body
  • auth_modeoidc_federationstatic_credentialsoptionalHow a connection authenticates to its provider's cloud: static_credentials (stored credentials, the default) or oidc_federation (nothing stored; each run assumes a cloud role with a short-lived identity token gitmoap issues).
  • config_overridesobjectoptional
  • credentialsobjectoptionalThe provider's credentials, in the shape its auth_schema describes. Required for static_credentials; refused for oidc_federation.
  • federation_targetobjectoptional
  • namestring
  • provider_idstring

Refuses

  • 400
  • 401
  • 403
  • 404
  • 409
  • 422Credentials supplied for an OIDC-federation connection
  • 429Provider-connection limit reached for this repository
  • 501Provider connections are not configured on this deployment

Receive

The same shape create_group_connection returns — 12 fields. Go to it

Show it here
  • auth_modeoidc_federationstatic_credentialsHow a connection authenticates to its provider's cloud: static_credentials (stored credentials, the default) or oidc_federation (nothing stored; each run assumes a cloud role with a short-lived identity token gitmoap issues).
  • config_overridesobjectoptional
  • created_atstring
  • created_byobject4 fields
    • avatar_urlobjectoptional
    • emailstring
    • idstring
    • usernamestring
  • federation_targetobjectoptional
  • iduuid
  • last_rotated_atobjectoptional
  • namestring
  • provider_idstring
  • scope_idstring
  • scope_typegrouprepository
  • secret_refsobjectThe names of the stored credential fields, each with a reference to where it is stored. Never the values. Empty for an oidc_federation connection.
GET/repositories/{repo_id}/provider-connections/{connection_id}provider_connection:read

Get one of a repository's provider connections

get_repo_connectionGET /repositories/{repo_id}/provider-connections/{connection_id}Open in the API reference

Token scope

provider_connection:read

Send

Path
  • repo_iduuidRepository id
  • connection_iduuidConnection id

Refuses

  • 400Bad request — a path parameter is not a well-formed value of its type
  • 401
  • 403
  • 404

Receive

The same shape create_group_connection returns — 12 fields. Go to it

Show it here
  • auth_modeoidc_federationstatic_credentialsHow a connection authenticates to its provider's cloud: static_credentials (stored credentials, the default) or oidc_federation (nothing stored; each run assumes a cloud role with a short-lived identity token gitmoap issues).
  • config_overridesobjectoptional
  • created_atstring
  • created_byobject4 fields
    • avatar_urlobjectoptional
    • emailstring
    • idstring
    • usernamestring
  • federation_targetobjectoptional
  • iduuid
  • last_rotated_atobjectoptional
  • namestring
  • provider_idstring
  • scope_idstring
  • scope_typegrouprepository
  • secret_refsobjectThe names of the stored credential fields, each with a reference to where it is stored. Never the values. Empty for an oidc_federation connection.
PUT/repositories/{repo_id}/provider-connections/{connection_id}provider_connection:manage

Update a repository's provider connection

update_repo_connectionPUT /repositories/{repo_id}/provider-connections/{connection_id}Open in the API reference

Token scope

provider_connection:manage

Send

Path
  • repo_iduuidRepository id
  • connection_iduuidConnection id
Body
  • config_overridesobjectoptional
  • credentialsobjectoptional
  • federation_targetobjectoptional

Refuses

  • 400
  • 401
  • 403
  • 404
  • 409The request conflicts with the resource's current state; `reason` says how
  • 422Credentials on an OIDC-federation connection, or a federation target on a static-credentials one
  • 501Provider connections are not configured on this deployment

Receive

The same shape create_group_connection returns — 12 fields. Go to it

Show it here
  • auth_modeoidc_federationstatic_credentialsHow a connection authenticates to its provider's cloud: static_credentials (stored credentials, the default) or oidc_federation (nothing stored; each run assumes a cloud role with a short-lived identity token gitmoap issues).
  • config_overridesobjectoptional
  • created_atstring
  • created_byobject4 fields
    • avatar_urlobjectoptional
    • emailstring
    • idstring
    • usernamestring
  • federation_targetobjectoptional
  • iduuid
  • last_rotated_atobjectoptional
  • namestring
  • provider_idstring
  • scope_idstring
  • scope_typegrouprepository
  • secret_refsobjectThe names of the stored credential fields, each with a reference to where it is stored. Never the values. Empty for an oidc_federation connection.
DELETE/repositories/{repo_id}/provider-connections/{connection_id}provider_connection:manage

Delete a repository's provider connection

delete_repo_connectionDELETE /repositories/{repo_id}/provider-connections/{connection_id}Open in the API reference

Token scope

provider_connection:manage

Send

Path
  • repo_iduuidRepository id
  • connection_iduuidConnection id

Refuses

  • 400Bad request — a path parameter is not a well-formed value of its type
  • 401
  • 403
  • 404
  • 409The request conflicts with the resource's current state; `reason` says how
  • 501Provider connections are not configured on this deployment

Receive

No body.

GET/repositories/{repo_id}/resolved-provider-connectionsprovider_connection:read

List the provider connections a repository's pipelines can use

resolve_repo_connectionsGET /repositories/{repo_id}/resolved-provider-connectionsOpen in the API reference

Token scope

provider_connection:read

Send

Path
  • repo_iduuidRepository id

Refuses

  • 400Bad request — a path parameter is not a well-formed value of its type
  • 401
  • 403
  • 404

Receive

No body.

Limits

Connections are capped per scope, and a group and a repository each get their own allowance — a group at its cap does not stop a repository underneath it from holding its own.

PlanConnections per group or repository
Free25
Pro100
Team300
Enterprise1 000

At the cap, creating another connection is refused with 429 TOO_MANY_REQUESTS. Nothing half-exists afterwards: no connection appears in the list, the credentials you sent are not kept, and the connections you already have are untouched. Deleting a connection frees a slot immediately.

Reading the marketplace is not capped, and neither is rotating a connection you already hold — only creating a new one counts against the number.

If you need more, an Owner can request a limit increase for the namespace, which raises this single number without changing your plan. Increases are granted up to a ceiling of 10 000 connections per scope. The group's limits view shows the effective number and how many of them you have used, which is the same number enforcement checks, so the two can never disagree.

Troubleshooting

400 BAD_REQUESTmentioning a provider or capability id
Cause
The id is not well formed — a provider is lowercase letters, digits and hyphens, with one optional . before the name for a third-party provider (acme.deploy), and a capability id is a provider id, a colon, then the capability name (aws:ecs-deploy)
What to do
Copy the id from the provider page rather than typing it. A capability id always contains exactly one colon, and the part before it is the provider's own id
400 BAD_REQUESTmentioning a version
Cause
The version is not a strict semantic version with a leading v
What to do
Use the exact form v1.4.0. Ranges, latest, and a missing v are all rejected — pin an exact version from the version list
400 BAD_REQUESTon browse, mentioning a filter or sort
Cause
A category, tier or sort value outside the fixed set, or an owning_group that is not a well-formed id
What to do
Take category values from the category list and sort from relevance, installs, name, recently_updated. Page size is clamped rather than refused, so it is never the cause
400 BAD_REQUESTon browse, about the next_token
Cause
The cursor was minted under different filters or a different sort from the ones on this request
What to do
Start again from the first page whenever you change a filter or the sort. A cursor is only valid for the search that produced it
400 BAD_REQUESTon create or rotate, listing credential fields
Cause
The credentials do not match the provider's declared schema — a missing required field, a misspelled name, or an extra field the provider does not accept
What to do
Read the provider's credential fields, then send exactly those. The message names the offending field path
400 BAD_REQUESTsaying credentials are required
Cause
The create request left out the credentials block. Stored credentials are the default mode, so omitting the mode does not make the credentials optional
What to do
Send the credential fields the provider declares, or set the authentication mode to federation if the provider supports it
400 BAD_REQUESTsaying the provider does not support federation
Cause
The provider only accepts stored credentials
What to do
Create the connection with stored credentials instead. The provider record lists the modes it accepts
400 BAD_REQUESTsaying a federation target is required
Cause
Federation was requested with no target, or with a target that names no cloud or no role
What to do
Supply the target with aws as the cloud and the full IAM role ARN. Cloud authentication from a pipeline has the role and trust policy to create first
400 BAD_REQUESTon a listing, about categories, keywords, links or examples
Cause
Zero or more than three categories; more than ten keywords, or one carrying anything but lowercase letters, digits and hyphens; a link that is not https://; a README over 128 KB; more than ten examples, an over-long title, description or snippet, or an example naming a capability that is not in any published version
What to do
Trim to the shape above; for the example, name only capability ids that appear in a version you have already published
401 UNAUTHORIZEDon a marketplace read
Cause
There is no valid credential on the request. The catalog has no anonymous access, and neither does connection resolution, even on a public repository
What to do
Sign in, or attach a token. If you are calling from a script, check the token has not expired
403 FORBIDDENon create, rotate or delete of a connection
Cause
You have access to the group or repository but not Owner. Managing credentials is the highest bar in the model
What to do
Ask an Owner to make the change, or to raise your access level. Reading connections needs only Reporter
403 FORBIDDENon a connection listing where the marketplace works
Cause
Connection reads need real membership at Reporter or above; a public or internal group does not grant them to non-members
What to do
Ask to be added to the group or repository. The marketplace being readable is not evidence that its connections are
403 INSUFFICIENT_SCOPE
Cause
The token is valid but was minted without the scope this call needs
What to do
Mint a new token carrying provider_catalog:read, provider_connection:read, provider_connection:manage or provider_publishing:write as appropriate. Scopes cannot be added to a token after it exists
403 FORBIDDENon a listing write
Cause
You are not a registered publisher, your publisher account is suspended, you do not own this provider, or it is one of the platform's own — those carry no publisher and their listings are maintained alongside the provider
What to do
Register as a publisher and publish under a namespace you own; see Publishing a provider. A platform provider's listing is not yours to edit
404 NOT_FOUNDon a provider you can see in a search engine
Cause
The provider is published privately to another organisation, or the slug is wrong
What to do
Private providers answer 404 to non-members so their existence stays private. Check the spelling; if a colleague can see it and you cannot, ask to be added to the owning organisation
404 NOT_FOUNDon a version or capability
Cause
The version is not published, or the capability does not exist at the version you pinned
What to do
List the versions and read the one you pinned. A capability can be added in a later version and be genuinely absent from an earlier one
404 NOT_FOUNDon a connection you just created
Cause
The connection id belongs to a different scope — a repository connection addressed through its group, or the other way round
What to do
Address a connection through the scope that owns it. The resolved view names the scope for each one
404 NOT_FOUNDlisting the connections of a group or repository you know exists
Cause
The group or repository is private and you are not a member; a private resource answers 404 rather than 403 so that its existence stays private
What to do
Ask an Owner to add you at Reporter or above. If you are already a member, check the id — a path pasted where an id belongs fails the same way
409 CONFLICTon create
Cause
A connection with that name already exists at this scope. Names are unique per scope across every provider, so an existing prod belonging to a different provider collides too
What to do
Pick another name — prefixing it with the provider, as in aws-prod or docker-ci, keeps it clear of the others — or rotate the existing connection if replacing its credentials is what you meant. The existing connection is left exactly as it was
422 UNPROCESSABLE_ENTITYmentioning credentials and federation
Cause
On a create, a credential block was sent alongside federation, which stores no secret. On a rotation, credentials were sent to a federation connection or a federation target to one that stores credentials — the authentication mode is fixed at creation
What to do
On a create, drop the credential fields and send the federation target alone. On a rotation, create a connection in the mode you want and delete the old one; nothing about the existing connection was changed
429 TOO_MANY_REQUESTSon create
Cause
The scope is at its connection cap
What to do
Delete a connection you no longer use, or ask an Owner to request a limit increase. Nothing was created and the values you sent were discarded
501 NOT_IMPLEMENTEDon create, rotate or delete
Cause
Credential storage is unavailable on Gitmoap's side. Reads still work; every connection write is refused
What to do
Contact support@gitmoap.com. Providers that need no credentials still run in the meantime
A run fails to start saying the connection is ambiguous
Cause
Two connections for the same provider resolve for this repository and the node names neither
What to do
Name the connection on the node, or delete the one you do not want in scope. The resolved view shows both and where each comes from
A run fails to start saying a connection is missing
Cause
The node names a connection that no longer resolves — deleted, renamed, or defined on a scope this repository is not under
What to do
Check the resolved view for this repository. Recreate the connection with the exact name the node uses, or edit the node to name one that resolves
A rotation silently dropped a credential field
Cause
Rotation replaces the whole credential set: fields left out of the request are removed
What to do
Send every field the provider requires on every rotation, not only the one that changed. Rotate again with the complete set to repair it
A connection in the resolved view has no field names, creator or source
Cause
It is inherited from a group you cannot read, so its details are withheld while the connection itself still applies here
What to do
Nothing is broken. If you need the detail, ask for membership of the group that owns it
A run in progress kept using the old credential
Cause
That step had already started. A step reads the credential as it starts, so only steps that have not started yet pick up a rotation
What to do
Cancel the run if the old credential has to stop being used now, then trigger again. In a run whose connection you deleted, the steps that have not started yet fail rather than run with the old value
A pipeline pinned to a version starts warning, then fails
Cause
The version was deprecated, then sunset past its grace window
What to do
Read the changelog on the provider page, then move the pin to an active version
A provider you installed does not appear for one repository
Cause
A provider is installed on a group, and an install is a separate thing from a connection — the org's policy on which tiers it accepts is a third
What to do
Check the install and the tier policy on the group as well as the connection, in Provider policy and administration

FAQ

Can I read a credential back?

No. Values are write-only at every level — no endpoint returns them, and no role grants it. What you can read is the set of field names a connection holds, so you can confirm a credential is present and complete. Store the value where you minted it.

How many connections should one provider have?

One per distinct account or environment. Two named aws-prod and aws-staging are clearer than one that changes meaning by repository, and naming them explicitly on the node is what makes a deploy pipeline readable.

Should the connection go on the group or the repository?

The group, unless one repository genuinely needs different credentials. A group connection is defined once and inherited everywhere below it; a repository connection is an override, and overrides are easiest to reason about when there are few of them.

What happens to pipelines when I delete a provider's connection?

Nothing immediately — the definitions are untouched and stay exactly as saved. The next trigger is what finds out: a node that named the connection by name fails the run before it starts, with a message naming the node and the connection.

Does browsing the marketplace tell anyone anything?

Catalog reads are not written to your audit log. Reading a single connection, and resolving a repository's connections, are.