Skip to content
GitmoapdocsBeta
Guide· How do I…?

Provider policy and administration

Overview

Decide which pipeline steps your organisation is willing to run at all. You install a provider into a group so every repository under it can use it, pin the version it runs at, restrict the range of versions a pipeline author may name, and set the trust posture that decides whether third-party providers are admitted alongside the ones we build. Everything here is inherited: a decision taken on a top-level group applies to every repository beneath it until a nearer group overrides it.

Behind the shared catalog sits a platform-administration surface — the submission review queue, publisher verification, editorial featuring, and withdrawing a version from service. Those need the platform-admin role, which is separate from being an Owner of your own group.

Before you start

  • A group.Installs and policy attach to a group, never to a repository. A repository reads what its groups decided; it cannot install anything of its own.
  • A provider in the catalog with at least one published version.Installing names a version, and an install with no version to pin is refused.
  • Maintainer on the group to install, upgrade, enable, disable, uninstall, or edit an install's version policy.Maintainer is the level that decides what your team runs.
  • Owner on the group to set or remove the tier-acceptance policy.Deciding that your organisation accepts unreviewed third-party code is the highest-stakes provider decision, so it sits a level above installing something the catalog already vetted.
  • Reporter to readan effective install or the policy in force. A public group answers anyone, signed in or not, and an internal one answers anyone signed in — so a pipeline author can see why a provider is unavailable without being added to the group first.
  • Platform admin for anything under the administration surface— the review queue, approvals, publisher verification, featuring and sunset. An Owner of your own organisation does not have it, and it is not something you can grant yourself.
  • A token with the right scope, if you are calling the API or the CLI: provider_settings:read and provider_settings:manage for installs, provider_policy:read and provider_policy:manage for the tier policy, provider_admin:read and provider_admin:manage for the administration surface. Scopes are chosen when you mint a token and cannot be added afterwards.

A brand-new top-level group starts with every Platform-tier provider already installed at its newest version, so a first pipeline that checks out code and builds an image works without anybody installing anything.

How it works

Three separate decisions govern whether a pipeline step is allowed to run, and they are answered in a fixed order. Knowing which of the three refused you is most of the work of fixing it.

  1. Is the provider installed, and at what version? One record per group and provider, resolved nearest-first up the group tree.
  2. Does the organisation accept the provider's trust tier? One record per group, owned by Owners rather than Maintainers, and resolved setting by setting rather than record by record — each of its four settings takes its value from the nearest group that set that one setting.
  3. Is the exact version the pipeline resolved to permitted? The install's allow-policy, plus the version's own lifecycle.

Where an install is resolved from

Repositories hold no installs. A run in a repository looks at the repository's own group first, then each ancestor group outward, and takes the first record it finds:

acme/platform/checkout repository — holds no installs, reads what its groups decided
↑
acme/platform group — a record here wins
↑
acme top-level — otherwise this one wins
— otherwise the provider is not installed at all

Each row you read back says where it came from. inherited tells you the decision was taken above you, and source_scope_id names the group that took it — so "who turned this on and where do I go to change it?" is answerable from the listing. When the deciding group is one you cannot read, the functional half of the row still comes back and the provenance is hidden; you see what applies without learning who is in a group you are not a member of.

The walk is per provider and the nearest record wins outright — a child's record is never merged with a parent's, it replaces it. That leaves two ways to change what a group gets:

ActionWhat it does
Disablewrites an explicit refusal at your group without removing the record — this is how a child group refuses a provider its parent installed
Uninstallremoves the record entirely, so the group falls back to inheriting whatever an ancestor decided

Disable and uninstall are not two words for the same thing, and picking the wrong one is the most common surprise on this page. Uninstalling in a child group where the install actually lives at the parent removes nothing and changes nothing.

An install also carries an override_parent flag. It is recorded and handed back to you, but it changes nothing about how installs resolve, because the nearest record already wins. The flag earns its keep on the trust policy below, which resolves setting by setting rather than record by record.

The four trust tiers

Every provider in the catalog carries a tier, and the tier is what your acceptance policy talks about.

TierWho wrote itWhere its image livesAccepted by default
Platformusoursalways, and there is no setting to refuse it
Verifieda third party, reviewed by us; we copy the image into our own registry and sign itoursyes
Communityanyone with a publisher account, published without reviewthe author's registryno
Privateyour own organisation, published for your own organisation onlythe author's registryyes, for your own

Community and Private providers are pinned to an exact image build that cannot be swapped after publication, but nobody at Gitmoap has read them. That is why admitting them takes two independent decisions: an Owner sets the organisation's posture on the tier, and the Maintainer who installs one specific provider acknowledges that they are taking responsibility for it. Either gate alone leaves a hole, so both are enforced — the acknowledgement is asked for even when the organisation already admits the tier. The two tiers start from opposite postures: Community is closed until an Owner opens it, while your own organisation's Private providers are open until an Owner shuts them off.

A Private provider belongs to exactly one organisation and is invisible outside it. Asking for one that belongs to somebody else answers 404, the same way a private repository does, so its existence is not leaked.

When each check runs

Installing runs the tier check and the acknowledgement check immediately, but only for a Community or Private provider — those are the two tiers with a gate at install time. A Platform or Verified provider installs with no tier check at all. That means a Verified provider your organisation has stopped accepting still installs cleanly, and then never runs — which is exactly what tier_accepted: false on its row is telling you.

The policy is checked again every time a pipeline is triggered, against the repository's own group chain — which means an install that was legal when it was made stops running the moment an Owner narrows the policy. A trigger that fails these checks is refused with 403 PROVIDER_VALIDATION_FAILED, and the response names one of these reasons for each offending step:

Reason on the refused triggerWhat it means
provider_not_enablednothing in the group chain installs this provider
provider_disabledthe nearest record is an explicit refusal
provider_tier_not_acceptedthe organisation's policy does not admit this provider's tier
provider_namespace_not_verifiedthe policy admits Community providers only from verified publishers, and this publisher is not one
provider_private_foreign_orgthe step names a private provider belonging to another organisation
provider_version_unspecifiedthe step named no version and the install pins none
provider_version_not_allowedthe resolved version is outside the install's allow-policy
provider_version_not_in_catalogno such published version
capability_not_in_versionthe version exists but does not offer the step the pipeline asked for
provider_version_sunsetthe version was withdrawn and its grace window has passed

How to

See which providers a repository can run

This is the view that answers "why will my pipeline not start?", because it resolves the whole group chain exactly the way a trigger does. Each row tells you the version that applies, whether it was inherited and from where, whether a newer version has been published, and — through tier_accepted — whether the organisation's policy will actually let it run. A provider that is installed and enabled but shows tier_accepted: false is one an Owner has to admit before any pipeline can use it.

Open the repository, choose Settings, then Providers. Each row shows the provider, the version that applies to this repository, and a label saying which group the decision came from when it was not taken here. A row greyed out with a Not accepted badge is installed but blocked by the organisation's trust policy.

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

See what a group has installed

The group view is the one to use before you change anything, because it resolves this group's own chain — what a repository directly under it sees, before any subgroup adds a record of its own.

Open the group, choose Settings, then Providers. Installs made on this group are listed in full; installs inherited from a parent are listed below them with the parent's name. Use Install provider to add one, and the menu at the end of a row to upgrade, disable or uninstall it.

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

Check one provider

When you already know which provider you are asking about, read it by its id rather than filtering the whole list. A provider that is installed nowhere in the chain answers 404 rather than an empty row, which is the difference between "somebody turned this off" and "nobody ever set it up".

Provider ids are lowercase slugs. The ones we publish are bare — git, docker, aws — and a third-party id always carries its publisher's namespace, as in acme.deploy.

Open the group, choose Settings, then Providers, and open the row. The panel shows the pinned version, the version policy, the trust tier, who installed it and when, and the group the decision came from.

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

The repository view answers for the exact chain a run evaluates, so it is the one to quote when a pipeline author says a step will not start.

Open the repository, choose Settings, then Providers, and open the row.

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

Install a provider into a group

Installing pins a version. Leave the version out and the provider's newest published version is pinned; name one and it must exist in the catalog. You can restrict the versions a pipeline may name in the same request, and you can set the install to follow the newest published version instead of a fixed pin.

Installing a provider the group already has replaces the record rather than failing, and does not consume a second install slot — but it replaces the whole record, not just the pinned version. The version, the version allow-policy, the latest-tracking setting and the enabled flag all come from the new request, so anything you leave out reverts to its default and a provider you had disabled here comes back on. When moving the version is the whole point, use the upgrade task below: it moves the pin and touches nothing else, and it honours the changelog-review setting.

Open the group, choose Settings, then Providers, then Install provider. Pick the provider, choose the version to pin — the newest is preselected — and optionally set a version range. For a Community or Private provider the dialog shows the publisher and a trust panel, and Install stays disabled until you tick the box confirming you take responsibility for running it.

Terminalbash
gitmoap provider-settings install-provider \
--group-id <id> \
--provider-id <id>
curlbash
curl -X POST https://api.gitmoap.example/groups/{group_id}/providers/{provider_id}/install \
-H "Authorization: Bearer $GITMOAP_TOKEN"

For a Community or Private provider, send acknowledge_unverified: true. Without it the install is refused with 403, even when your organisation's policy already admits the tier — the two gates are deliberately independent, and we record who acknowledged the install and when.

Restrict which versions a pipeline may name

An install's allow-policy governs which exact versions a pipeline author may declare. It comes in three shapes:

ShapeMeaning
{"kind": "any_published"}every catalogued version is fair game — the default, where the catalog is the whole trust boundary
{"kind": "list", "versions": ["v1.4.0", "v1.5.2"]}only the versions you name
{"kind": "range", "min": "v1.4.0", "max": "v1.9.9"}anything between the bounds; either bound may be left out

Range bounds are compared as version numbers, not as text, so v1.10.0 is correctly newer than v1.9.0. Whatever the policy allows, the version a run actually executes is always one exact version, baked onto the run — a range never means "float".

The same request carries the latest-tracking switch. With tracking on, a step that names no version resolves to the provider's newest published version at the moment the run is triggered, still within the allow-policy and never a withdrawn version. Each run is still reproducible because the resolved version is fixed onto that run; only the next trigger moves forward. Tracking is a per-install choice, so one group can follow the newest release while another stays pinned.

Open the group, choose Settings, then Providers, and pick Edit version policy from the row's menu. Choose Any published, Specific versions or Version range, and use the Follow the latest release toggle to let unpinned steps advance on their own. Save applies to every repository the install reaches.

Terminalbash
gitmoap provider-settings update --group-id <id> --provider-id <id>
curlbash
curl -X PATCH https://api.gitmoap.example/groups/{group_id}/providers/{provider_id}/settings \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Narrowing the policy so that it excludes the version the install is pinned to is refused with 400 rather than saved, because it would leave the install unable to run anything. Upgrade to a permitted version first, or turn on latest-tracking, which makes the pin unused.

Move an install to a newer version

Upgrading changes the pinned version and nothing else — it does not re-run the tier or trust checks, because the provider was already admitted when it was installed. Upgrading to the version already pinned is a no-op that returns the current record.

Open the group, choose Settings, then Providers. A row with a newer version available shows an Update available badge; choose Upgrade from its menu, pick the version, and confirm. When your organisation requires changelog review, the dialog shows the release's changelog and Upgrade is disabled until you have acknowledged it.

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

When the organisation's policy requires changelog review, send changelog_acknowledged: true with the request or it is refused with 403. The acknowledgement is recorded with the upgrade, so an audit of who moved a provider forward and on what basis is answerable later.

Turn a provider off without losing the install

Disabling writes an explicit refusal at your group. Where the provider was installed at a parent, that refusal is how a child group opts out without touching the parent's decision, and it survives everything the parent does afterwards. The provider must exist in the catalog; disabling an id nothing has published is refused with 404.

Open the group, choose Settings, then Providers, and pick Disable from the row's menu. An inherited row switches to Disabled here and keeps showing the group it was inherited from, so the parent's decision is still visible.

Terminalbash
gitmoap provider-settings disable-provider \
--group-id <id> \
--provider-id <id>
curlbash
curl -X POST https://api.gitmoap.example/groups/{group_id}/providers/{provider_id}/disable \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Re-enabling reverses it, leaving the version pin and the allow-policy exactly as they were — where there was an install here to begin with. Where the refusal was the only thing the group had, a child opting out of a provider installed above it, there is no pin to restore, and the record that is left still shadows the ancestor's install. Steps that name no version then fail with provider_version_unspecified. Uninstall that record instead and the group goes back to inheriting.

Open the group, choose Settings, then Providers, and pick Enable from the row's menu.

Terminalbash
gitmoap provider-settings enable-provider --group-id <id> --provider-id <id>
curlbash
curl -X POST https://api.gitmoap.example/groups/{group_id}/providers/{provider_id}/enable \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Remove an install

Warning

Uninstalling deletes the group's record for that provider, along with its pinned version, its version allow-policy, its latest-tracking setting and the trust acknowledgement that was recorded with it. None of that is recoverable — re-installing starts from defaults and, for a Community or Private provider, requires a fresh acknowledgement. The group then inherits whatever an ancestor decided, which may silently re-enable the provider at a different version rather than turn it off. When you want it off, disable it instead.

Uninstalling frees an install slot against the group's cap. A second uninstall of the same provider answers 404, because there is no longer a record to remove.

Open the group, choose Settings, then Providers, and pick Uninstall from the row's menu. The confirmation names the provider, the pinned version and what the group falls back to inheriting; Uninstall is immediate.

Terminalbash
gitmoap provider-settings uninstall-provider \
--group-id <id> \
--provider-id <id>
curlbash
curl -X DELETE https://api.gitmoap.example/groups/{group_id}/providers/{provider_id} \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Read the tier policy in force

The policy read resolves the whole chain and applies defaults, so it always answers even when nobody has ever set one. inherited and source_scope_id tell you whether the answer was decided here or above; accepted_tiers is the short version of the answer.

Open the group, choose Settings, then Providers, then the Trust policy tab. Each tier shows its setting and, where the value came from a parent, the name of the group that set it.

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

The repository view answers the same question for the exact chain a trigger evaluates, which makes it the one to check when a run was refused for a tier reason.

Open the repository, choose Settings, then Providers, then the Trust policy tab.

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

Decide which provider tiers your organisation accepts

Four decisions live in the policy:

SettingValuesDefaultWhat it governs
accept_verifiedon / offonthird-party providers we reviewed, copied and signed
accept_communitydisabled / any / verified_onlydisabledunreviewed public providers; verified_only admits them only from publishers who have proved they own their namespace
accept_own_privateon / offonprivate providers your own organisation published
require_changelog_ackon / offoffwhether moving an install to a new version requires acknowledging that release's changelog

Platform providers are always accepted and have no setting. verified_only is the useful middle ground for an organisation that wants community velocity without anonymous authors.

Latest-tracking is the one route past require_changelog_ack. An install that follows the newest release advances without an upgrade, and the acknowledgement is asked for on upgrades. Turn tracking off on the installs you want a human to look at.

Note

Setting the policy replaces the whole record. A field you leave out is stored as "inherit from the parent", not as "leave what was there" — so sending only accept_community will drop a previous require_changelog_ack back to whatever an ancestor says. Read the effective policy first and send every field you intend to keep.

Setting override_parent stops the walk at your group, so an ancestor's policy is ignored for every setting rather than merged setting by setting. What you leave out then falls to the defaults in the table above — not to the value the parent had.

Open the group, choose Settings, then Providers, then the Trust policy tab, and Edit. Set each tier, choose whether upgrades require changelog review, and use Do not inherit from parent groups to make this group's policy final. Save applies to every repository beneath, and takes effect on the next pipeline trigger.

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

Narrowing the policy does not touch existing installs — the records stay exactly where they are, and start being refused at trigger time. Check the group's provider list afterwards: any row showing tier_accepted: false is an install that no longer runs.

Fall back to the parent's policy

Warning

Removing the policy deletes this group's settings outright and hands the decision back to whichever ancestor sets one, or to the defaults when none does. The values are not archived and cannot be restored except by typing them again. Where the group was the only thing admitting Community providers, every pipeline that uses one stops running at its next trigger.

The removal answers with the policy that applies afterwards, so you can see immediately what the group fell back to. It only works where the group has a policy of its own: a group that was already inheriting has nothing to remove and answers 404. Read the effective policy first — when it comes back inherited, the group to change is the one named as its source.

Open the group, choose Settings, then Providers, then the Trust policy tab, and choose Reset to inherited. The confirmation shows the policy that will apply once this group's own settings are gone.

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

Work the submission review queue

Everything from here on is platform administration, and needs the platform-admin role.

Submissions for the Verified tier wait in a review queue. The queue answers with the newest first and defaults to submissions that have been sent in and are waiting for a reviewer; ask for another state to see what was approved, rejected, sent back or withdrawn. Page sizes are clamped between 1 and 100.

Open Administration, then Provider submissions. The queue opens on submissions awaiting review; use the state filter to see approved, rejected or changes-requested submissions. Each row opens the full submitted manifest, its capabilities, and the publisher behind it.

Terminalbash
gitmoap provider-admin list-review-queue
curlbash
curl -X GET https://api.gitmoap.example/admin/provider-submissions \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Community and Private submissions are not reviewed. They are self-service: we confirm that the exact image build the submission names resolves in the author's registry, then publish it with no reviewer in the loop. The trust decision for those tiers belongs to the organisations that install them, which is what the trust policy is for.

Approve, reject or send back a submission

Approving is what starts publication. The submission is marked approved and we then copy its image into our own registry and sign it; the catalog gains the version only when that finishes, so an approval is not itself a publication. Watch the submission's state to see it through.

Open Administration, then Provider submissions, and open the submission. Review the manifest, the capabilities and their declared ports, then choose Approve. Add a note if it helps — it is kept on the submission, where the publisher can read it. The submission moves to Approved and then through the publication steps on its own.

Terminalbash
gitmoap provider-admin approve-provider-submission --submission-id <id>
curlbash
curl -X POST https://api.gitmoap.example/admin/provider-submissions/{submission_id}/approve \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Rejecting is terminal. The publisher cannot revive a rejected submission and has to send a corrected one. A reason is required, and it is what the publisher sees.

Open the submission and choose Reject. The reason box is mandatory — write what has to change, because it is the only thing the publisher gets back.

Terminalbash
gitmoap provider-admin reject-provider-submission --submission-id <id>
curlbash
curl -X POST https://api.gitmoap.example/admin/provider-submissions/{submission_id}/reject \
-H "Authorization: Bearer $GITMOAP_TOKEN"

Requesting changes is the softer version: the submission stops being reviewable and the publisher sends a corrected one afresh, with no rejection on the record. A reason is required here too. All three decisions release the slot the submission was holding against the publisher's limit on submissions awaiting review, so a publisher is never left blocked by a queue you have already worked.

Open the submission and choose Request changes, then write what needs fixing. The submission moves to Changes requested and leaves the review queue.

Terminalbash
gitmoap provider-admin request-provider-changes --submission-id <id>
curlbash
curl -X POST https://api.gitmoap.example/admin/provider-submissions/{submission_id}/request-changes \
-H "Authorization: Bearer $GITMOAP_TOKEN"

All three refuse with 409 on a submission that is in any other state, which is what a second reviewer acting on a stale queue sees. Approving refuses with 422 when the publisher's Verified eligibility was withdrawn between submission and approval — a deliberate re-check, because eligibility is what earns the reviewed tier in the first place.

Grant or revoke a publisher's Verified eligibility

Verified eligibility is what lets a publisher submit to the reviewed tier, and it lights the verified-namespace badge on everything else they have published. Publishers can also earn it themselves by proving they control the domain or organisation their namespace is named for; this action is the manual path, for support and for revocation.

Revoking blocks future approvals and clears the badge. It does not unpublish anything already in the catalog. It does have one run-time consequence: an organisation whose Community setting is verified only stops accepting that publisher's providers from the next trigger onwards, refusing those steps with provider_namespace_not_verified. Withdraw a specific version if taking something out of service for everyone is what you need.

Open Administration, then Publishers, and open the publisher. Use Grant Verified eligibility or Revoke. The badge appears on every provider the publisher owns.

Terminalbash
gitmoap provider-admin verify-publisher --publisher-id <id> --verified
curlbash
curl -X POST https://api.gitmoap.example/admin/publishers/{publisher_id}/verify \
-H "Authorization: Bearer $GITMOAP_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "verified": "<boolean>" }'

Feature a provider in the marketplace

Featuring is editorial placement: a rank that decides the "start here" ordering in the marketplace and lifts the provider in the default relevance sort. Lower ranks place higher, and clearing the rank removes the provider from the featured set without touching anything else about it.

Open Administration, then Providers, open the provider, and set Featured rank. Leave it empty to remove the provider from the featured list.

Terminalbash
gitmoap provider-admin set-provider-featured --provider-id <id>
curlbash
curl -X PUT https://api.gitmoap.example/admin/providers/{provider_id}/featured \
-H "Authorization: Bearer $GITMOAP_TOKEN"

A Private provider cannot be featured and the request is refused with 400. Featuring is a global act on a global list, and a provider only its owning organisation can see has no place on one.

Withdraw a version from service

Warning

Sunsetting is permanent. There is no un-sunset: the version is out of service for everyone, the provider's newest-version pointer is recomputed to skip it, and once the grace window closes every pipeline that names that version fails at trigger. Set a grace period long enough for consumers to move; leave it out and you get 30 days. Deprecating a version instead leaves it runnable and only warns, and its publisher can undo that themselves.

During the grace window, runs that name the version still work and carry a warning, so the people affected find out before anything breaks. After it, the version is refused. A reason is required and is the explanation consumers are given.

Open Administration, then Providers, open the provider, and pick Sunset on the version. Give the reason and the grace period in days, then confirm. The version is marked sunset immediately and stops running when the grace period ends.

Terminalbash
gitmoap provider-admin sunset-provider-version \
--provider-id <id> \
--version <id> \
--reason <reason>
curlbash
curl -X POST https://api.gitmoap.example/admin/providers/{provider_id}/versions/{version}/sunset \
-H "Authorization: Bearer $GITMOAP_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "reason": "<string>" }'

Reference

Reading what applies

4 endpoints

GET/groups/{group_id}/providersprovider_settings:read

List the providers in effect at a group

list_group_providersGET /groups/{group_id}/providersOpen in the API reference

Token scope

provider_settings:read

Send

Path
  • group_iduuidGroup id

Refuses

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

Receive

  • items[]object18 fields
    • allowed_versionsobjectThe set of versions a node may declare for a provider at a scope. AnyPublished (the default when unset) permits every catalogued version — the trust boundary is the catalog. List/Range let an org curate. The version a node runs is always an exact ProviderVersion; a Range only governs which exact versions are declarable, so reproducibility holds (no floating run-time versions).
    • default_versionobjectoptional
    • enabledboolean
    • inheritedboolean
    • installed_atobjectoptional
    • installed_byobjectoptional
    • latest_lifecycle_stateobjectoptional
    • latest_versionobjectoptional
    • override_parentboolean
    • owning_group_idobjectoptional
    • provider_idstring
    • provider_tiercommunityplatformprivateverifiedHow a pipeline provider is distributed and how much it is vouched for.
    • publisher_verifiedbooleanWhether the owning publisher's namespace is verified.
    • source_scope_idstring
    • source_scope_typegrouprepository
    • tier_acceptedbooleanWhether the provider's tier is accepted by the resolved per-org policy.
    • track_latestbooleanWhether this install tracks the provider's latest published version. When true, an unpinned node resolves to latest_version at trigger.
    • update_availablebooleanWhether a newer version than the install's default_version is published — a pure semver compare that never mutates the install (D5 K6).
GET/groups/{group_id}/providers/{provider_id}provider_settings:read

Get the setting in effect for one provider at a group

get_group_providerGET /groups/{group_id}/providers/{provider_id}Open in the API reference

Token scope

provider_settings:read

Send

Path
  • group_iduuidGroup id
  • provider_idstringProvider slug

Refuses

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

Receive

  • allowed_versionsobjectThe set of versions a node may declare for a provider at a scope. AnyPublished (the default when unset) permits every catalogued version — the trust boundary is the catalog. List/Range let an org curate. The version a node runs is always an exact ProviderVersion; a Range only governs which exact versions are declarable, so reproducibility holds (no floating run-time versions).
  • default_versionobjectoptional
  • enabledboolean
  • inheritedboolean
  • installed_atobjectoptional
  • installed_byobjectoptional
  • latest_lifecycle_stateobjectoptional
  • latest_versionobjectoptional
  • override_parentboolean
  • owning_group_idobjectoptional
  • provider_idstring
  • provider_tiercommunityplatformprivateverifiedHow a pipeline provider is distributed and how much it is vouched for.
  • publisher_verifiedbooleanWhether the owning publisher's namespace is verified.
  • source_scope_idstring
  • source_scope_typegrouprepository
  • tier_acceptedbooleanWhether the provider's tier is accepted by the resolved per-org policy.
  • track_latestbooleanWhether this install tracks the provider's latest published version. When true, an unpinned node resolves to latest_version at trigger.
  • update_availablebooleanWhether a newer version than the install's default_version is published — a pure semver compare that never mutates the install (D5 K6).
GET/repositories/{repo_id}/providersprovider_settings:read

List the providers in effect for a repository

list_repo_providersGET /repositories/{repo_id}/providersOpen in the API reference

Token scope

provider_settings: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

The same shape list_group_providers returns — 1 field. Go to it

Show it here
  • items[]object18 fields
    • allowed_versionsobjectThe set of versions a node may declare for a provider at a scope. AnyPublished (the default when unset) permits every catalogued version — the trust boundary is the catalog. List/Range let an org curate. The version a node runs is always an exact ProviderVersion; a Range only governs which exact versions are declarable, so reproducibility holds (no floating run-time versions).
    • default_versionobjectoptional
    • enabledboolean
    • inheritedboolean
    • installed_atobjectoptional
    • installed_byobjectoptional
    • latest_lifecycle_stateobjectoptional
    • latest_versionobjectoptional
    • override_parentboolean
    • owning_group_idobjectoptional
    • provider_idstring
    • provider_tiercommunityplatformprivateverifiedHow a pipeline provider is distributed and how much it is vouched for.
    • publisher_verifiedbooleanWhether the owning publisher's namespace is verified.
    • source_scope_idstring
    • source_scope_typegrouprepository
    • tier_acceptedbooleanWhether the provider's tier is accepted by the resolved per-org policy.
    • track_latestbooleanWhether this install tracks the provider's latest published version. When true, an unpinned node resolves to latest_version at trigger.
    • update_availablebooleanWhether a newer version than the install's default_version is published — a pure semver compare that never mutates the install (D5 K6).
GET/repositories/{repo_id}/providers/{provider_id}provider_settings:read

Get the setting in effect for one provider at a repository

get_repo_providerGET /repositories/{repo_id}/providers/{provider_id}Open in the API reference

Token scope

provider_settings:read

Send

Path
  • repo_iduuidRepository id
  • provider_idstringProvider slug

Refuses

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

Receive

The same shape get_group_provider returns — 18 fields. Go to it

Show it here
  • allowed_versionsobjectThe set of versions a node may declare for a provider at a scope. AnyPublished (the default when unset) permits every catalogued version — the trust boundary is the catalog. List/Range let an org curate. The version a node runs is always an exact ProviderVersion; a Range only governs which exact versions are declarable, so reproducibility holds (no floating run-time versions).
  • default_versionobjectoptional
  • enabledboolean
  • inheritedboolean
  • installed_atobjectoptional
  • installed_byobjectoptional
  • latest_lifecycle_stateobjectoptional
  • latest_versionobjectoptional
  • override_parentboolean
  • owning_group_idobjectoptional
  • provider_idstring
  • provider_tiercommunityplatformprivateverifiedHow a pipeline provider is distributed and how much it is vouched for.
  • publisher_verifiedbooleanWhether the owning publisher's namespace is verified.
  • source_scope_idstring
  • source_scope_typegrouprepository
  • tier_acceptedbooleanWhether the provider's tier is accepted by the resolved per-org policy.
  • track_latestbooleanWhether this install tracks the provider's latest published version. When true, an unpinned node resolves to latest_version at trigger.
  • update_availablebooleanWhether a newer version than the install's default_version is published — a pure semver compare that never mutates the install (D5 K6).

Managing installs

6 endpoints

POST/groups/{group_id}/providers/{provider_id}/installprovider_settings:manage

Install a provider into a group at a pinned version.

install_providerPOST /groups/{group_id}/providers/{provider_id}/installOpen in the API reference

Token scope

provider_settings:manage

Counts against

provider_installs_per_scope

Send

Path
  • group_iduuidGroup id
  • provider_idstringProvider slug
Body
  • acknowledge_unverifiedbooleanoptionalMust be true to install a Community/Private (unverified) provider — the per-install trust acknowledgement. Ignored for Platform/Verified.
  • allowed_versionsobjectoptional
  • override_parentobjectoptional
  • track_latestobjectoptionalOpt this install into tracking the provider's latest published version (unpinned nodes auto-advance). Absent ⇒ pin the resolved version.
  • versionobjectoptional

Refuses

  • 400
  • 401
  • 403
  • 404
  • 409The provider is already installed in this group
  • 429Provider-install limit reached for this group

Receive

  • allowed_versionsobjectThe set of versions a node may declare for a provider at a scope. AnyPublished (the default when unset) permits every catalogued version — the trust boundary is the catalog. List/Range let an org curate. The version a node runs is always an exact ProviderVersion; a Range only governs which exact versions are declarable, so reproducibility holds (no floating run-time versions).
  • default_versionobjectoptional
  • enabledboolean
  • group_iduuid
  • installed_atobjectoptional
  • installed_byobjectoptional
  • override_parentboolean
  • provider_idstring
  • track_latestbooleanWhether this install tracks the provider's latest published version.
  • trust_acknowledged_atobjectoptional
  • trust_acknowledged_byobjectoptional
  • updated_atstring
PATCH/groups/{group_id}/providers/{provider_id}/settingsprovider_settings:manage

Edit an installed provider's version policy and latest-tracking.

update_provider_settingsPATCH /groups/{group_id}/providers/{provider_id}/settingsOpen in the API reference

Token scope

provider_settings:manage

Send

Path
  • group_iduuidGroup id
  • provider_idstringProvider slug
Body
  • allowed_versionsobjectoptional
  • track_latestobjectoptionalToggle latest-tracking. Absent ⇒ unchanged.

Refuses

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

Receive

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

Show it here
  • allowed_versionsobjectThe set of versions a node may declare for a provider at a scope. AnyPublished (the default when unset) permits every catalogued version — the trust boundary is the catalog. List/Range let an org curate. The version a node runs is always an exact ProviderVersion; a Range only governs which exact versions are declarable, so reproducibility holds (no floating run-time versions).
  • default_versionobjectoptional
  • enabledboolean
  • group_iduuid
  • installed_atobjectoptional
  • installed_byobjectoptional
  • override_parentboolean
  • provider_idstring
  • track_latestbooleanWhether this install tracks the provider's latest published version.
  • trust_acknowledged_atobjectoptional
  • trust_acknowledged_byobjectoptional
  • updated_atstring
POST/groups/{group_id}/providers/{provider_id}/upgradeprovider_settings:manage

Upgrade the pinned version for an installed provider.

upgrade_providerPOST /groups/{group_id}/providers/{provider_id}/upgradeOpen in the API reference

Token scope

provider_settings:manage

Send

Path
  • group_iduuidGroup id
  • provider_idstringProvider slug
Body
  • changelog_acknowledgedbooleanoptionalMust be true to advance to a new version when the org's effective require_changelog_ack policy is set; ignored otherwise.
  • versionstring

Refuses

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

Receive

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

Show it here
  • allowed_versionsobjectThe set of versions a node may declare for a provider at a scope. AnyPublished (the default when unset) permits every catalogued version — the trust boundary is the catalog. List/Range let an org curate. The version a node runs is always an exact ProviderVersion; a Range only governs which exact versions are declarable, so reproducibility holds (no floating run-time versions).
  • default_versionobjectoptional
  • enabledboolean
  • group_iduuid
  • installed_atobjectoptional
  • installed_byobjectoptional
  • override_parentboolean
  • provider_idstring
  • track_latestbooleanWhether this install tracks the provider's latest published version.
  • trust_acknowledged_atobjectoptional
  • trust_acknowledged_byobjectoptional
  • updated_atstring
POST/groups/{group_id}/providers/{provider_id}/disableprovider_settings:manage

Turn a provider off at a group.

disable_providerPOST /groups/{group_id}/providers/{provider_id}/disableOpen in the API reference

Token scope

provider_settings:manage

Send

Path
  • group_iduuidGroup id
  • provider_idstringProvider slug

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

Receive

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

Show it here
  • allowed_versionsobjectThe set of versions a node may declare for a provider at a scope. AnyPublished (the default when unset) permits every catalogued version — the trust boundary is the catalog. List/Range let an org curate. The version a node runs is always an exact ProviderVersion; a Range only governs which exact versions are declarable, so reproducibility holds (no floating run-time versions).
  • default_versionobjectoptional
  • enabledboolean
  • group_iduuid
  • installed_atobjectoptional
  • installed_byobjectoptional
  • override_parentboolean
  • provider_idstring
  • track_latestbooleanWhether this install tracks the provider's latest published version.
  • trust_acknowledged_atobjectoptional
  • trust_acknowledged_byobjectoptional
  • updated_atstring
POST/groups/{group_id}/providers/{provider_id}/enableprovider_settings:manage

Turn a provider back on at a group

enable_providerPOST /groups/{group_id}/providers/{provider_id}/enableOpen in the API reference

Token scope

provider_settings:manage

Send

Path
  • group_iduuidGroup id
  • provider_idstringProvider slug

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

Receive

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

Show it here
  • allowed_versionsobjectThe set of versions a node may declare for a provider at a scope. AnyPublished (the default when unset) permits every catalogued version — the trust boundary is the catalog. List/Range let an org curate. The version a node runs is always an exact ProviderVersion; a Range only governs which exact versions are declarable, so reproducibility holds (no floating run-time versions).
  • default_versionobjectoptional
  • enabledboolean
  • group_iduuid
  • installed_atobjectoptional
  • installed_byobjectoptional
  • override_parentboolean
  • provider_idstring
  • track_latestbooleanWhether this install tracks the provider's latest published version.
  • trust_acknowledged_atobjectoptional
  • trust_acknowledged_byobjectoptional
  • updated_atstring
DELETE/groups/{group_id}/providers/{provider_id}provider_settings:manage

Uninstall a provider from a group.

uninstall_providerDELETE /groups/{group_id}/providers/{provider_id}Open in the API reference

Token scope

provider_settings:manage

Send

Path
  • group_iduuidGroup id
  • provider_idstringProvider slug

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

Receive

No body.

The trust policy

4 endpoints

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

Get the effective provider policy for a group.

get_group_provider_policyGET /groups/{group_id}/provider-policyOpen in the API reference

Token scope

provider_policy:read

Send

Path
  • group_iduuidGroup id

Refuses

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

Receive

  • accept_communityanydisabledverified_onlyWhether an organization's pipelines may run Community-tier providers. disabled (the default) refuses them; any admits any Community provider in the catalog; verified_only admits only those whose publisher namespace is verified.
  • accept_own_privateboolean
  • accept_verifiedboolean
  • inheritedboolean
  • override_parentboolean
  • require_changelog_ackbooleanWhen set, moving to a newer provider version requires acknowledging its changelog first. Off by default.
  • scope_idstringThe id of the group or repository asked about.
  • source_scope_idobjectoptionalThe id of the group or repository whose policy supplied these values — possibly a group above the one asked about. Absent when no policy is set anywhere and the defaults apply.
  • updated_byobjectoptional
GET/repositories/{repo_id}/provider-policyprovider_policy:read

Get the provider tier policy in effect for a repository

get_repo_provider_policyGET /repositories/{repo_id}/provider-policyOpen in the API reference

Token scope

provider_policy: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

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

Show it here
  • accept_communityanydisabledverified_onlyWhether an organization's pipelines may run Community-tier providers. disabled (the default) refuses them; any admits any Community provider in the catalog; verified_only admits only those whose publisher namespace is verified.
  • accept_own_privateboolean
  • accept_verifiedboolean
  • inheritedboolean
  • override_parentboolean
  • require_changelog_ackbooleanWhen set, moving to a newer provider version requires acknowledging its changelog first. Off by default.
  • scope_idstringThe id of the group or repository asked about.
  • source_scope_idobjectoptionalThe id of the group or repository whose policy supplied these values — possibly a group above the one asked about. Absent when no policy is set anywhere and the defaults apply.
  • updated_byobjectoptional
PUT/groups/{group_id}/provider-policyprovider_policy:manage

Set a group's provider tier policy

set_provider_policyPUT /groups/{group_id}/provider-policyOpen in the API reference

Token scope

provider_policy:manage

Send

Path
  • group_iduuidGroup id
Body
  • accept_communityobjectoptional
  • accept_own_privateobjectoptional
  • accept_verifiedobjectoptional
  • override_parentobjectoptional
  • require_changelog_ackobjectoptional

Refuses

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

Receive

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

Show it here
  • accept_communityanydisabledverified_onlyWhether an organization's pipelines may run Community-tier providers. disabled (the default) refuses them; any admits any Community provider in the catalog; verified_only admits only those whose publisher namespace is verified.
  • accept_own_privateboolean
  • accept_verifiedboolean
  • inheritedboolean
  • override_parentboolean
  • require_changelog_ackbooleanWhen set, moving to a newer provider version requires acknowledging its changelog first. Off by default.
  • scope_idstringThe id of the group or repository asked about.
  • source_scope_idobjectoptionalThe id of the group or repository whose policy supplied these values — possibly a group above the one asked about. Absent when no policy is set anywhere and the defaults apply.
  • updated_byobjectoptional
DELETE/groups/{group_id}/provider-policyprovider_policy:manage

Remove a group's provider tier policy

delete_provider_policyDELETE /groups/{group_id}/provider-policyOpen in the API reference

Token scope

provider_policy:manage

Send

Path
  • group_iduuidGroup 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

Receive

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

Show it here
  • accept_communityanydisabledverified_onlyWhether an organization's pipelines may run Community-tier providers. disabled (the default) refuses them; any admits any Community provider in the catalog; verified_only admits only those whose publisher namespace is verified.
  • accept_own_privateboolean
  • accept_verifiedboolean
  • inheritedboolean
  • override_parentboolean
  • require_changelog_ackbooleanWhen set, moving to a newer provider version requires acknowledging its changelog first. Off by default.
  • scope_idstringThe id of the group or repository asked about.
  • source_scope_idobjectoptionalThe id of the group or repository whose policy supplied these values — possibly a group above the one asked about. Absent when no policy is set anywhere and the defaults apply.
  • updated_byobjectoptional

Platform administration

7 endpoints

GET/admin/provider-submissionsprovider_admin:read

List the provider submission review queue

list_review_queueGET /admin/provider-submissionsOpen in the API reference

Token scope

provider_admin:read

Send

Query
  • statusstringoptionalSubmission state (default submitted)
  • limitint32optionalPage size

Refuses

  • 401
  • 403

Receive

  • items[]object6 fields
    • provider_idstring
    • publisher_iduuid
    • stateapprovedchanges_requestedin_reviewmirror_failedmirroringpublishedrejectedsigningsubmittedverification_failedverifyingwithdrawnWhere a provider submission stands, from review through to publication or refusal.
    • submission_iduuid
    • submitted_atstring
    • versionstring
POST/admin/provider-submissions/{submission_id}/approveprovider_admin:manage

Approve a provider submission

approve_provider_submissionPOST /admin/provider-submissions/{submission_id}/approveOpen in the API reference

Token scope

provider_admin:manage

Send

Path
  • submission_iduuidSubmission id
Body
  • noteobjectoptional
  • reasonobjectoptional

Refuses

  • 400Bad request — a path parameter is not a well-formed value of its type
  • 401Unauthenticated — no credential, or an invalid one
  • 403
  • 404
  • 409
  • 422

Receive

  • attest_resultobjectoptional
  • auth_schemaobject
  • manifestobject22 fields
    • 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.
POST/admin/provider-submissions/{submission_id}/rejectprovider_admin:manage

Reject a provider submission

reject_provider_submissionPOST /admin/provider-submissions/{submission_id}/rejectOpen in the API reference

Token scope

provider_admin:manage

Send

Path
  • submission_iduuidSubmission id
Body
  • noteobjectoptional
  • reasonobjectoptional

Refuses

  • 400
  • 401Unauthenticated — no credential, or an invalid one
  • 403
  • 404
  • 409

Receive

The same shape approve_provider_submission returns — 3 fields. Go to it

Show it here
  • attest_resultobjectoptional
  • auth_schemaobject
  • manifestobject22 fields
    • 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.
POST/admin/provider-submissions/{submission_id}/request-changesprovider_admin:manage

Request changes on a provider submission

request_provider_changesPOST /admin/provider-submissions/{submission_id}/request-changesOpen in the API reference

Token scope

provider_admin:manage

Send

Path
  • submission_iduuidSubmission id
Body
  • noteobjectoptional
  • reasonobjectoptional

Refuses

  • 400
  • 401Unauthenticated — no credential, or an invalid one
  • 403
  • 404
  • 409

Receive

The same shape approve_provider_submission returns — 3 fields. Go to it

Show it here
  • attest_resultobjectoptional
  • auth_schemaobject
  • manifestobject22 fields
    • 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.
POST/admin/publishers/{publisher_id}/verifyprovider_admin:manage

Grant or revoke a publisher's verification

verify_publisherPOST /admin/publishers/{publisher_id}/verifyOpen in the API reference

Token scope

provider_admin:manage

Send

Path
  • publisher_iduuidPublisher id
Body
  • noteobjectoptional
  • verifiedboolean

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

Receive

  • contact_emailstring
  • created_atstring
  • display_namestring
  • namespacestring
  • ownerobjectoptional
  • public_keyobjectoptional
  • publisher_iduuid
  • statusactivesuspendedAccount status of a Publisher. Active publishers may submit; Suspended is a platform-admin hold.
  • updated_atstring
  • verification_methodobjectoptional
  • verification_targetobjectoptional
  • verifiedboolean
  • verified_atobjectoptional
POST/admin/providers/{provider_id}/versions/{version}/sunsetprovider_admin:manage

Sunset a published version after a grace period

sunset_provider_versionPOST /admin/providers/{provider_id}/versions/{version}/sunsetOpen in the API reference

Token scope

provider_admin:manage

Send

Path
  • provider_idstringProvider id
  • versionstringVersion
Body
  • grace_period_daysint32optional
  • reasonstring

Refuses

  • 400
  • 401Unauthenticated — no credential, or an invalid one
  • 403
  • 404
  • 409The request conflicts with the resource's current state; `reason` says how

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

Limits

A group holds a limited number of provider installs. The limit is per group, not per organisation, so each group in a tree has its own budget.

PlanProvider installs per group
Free100
Pro300
Team1 000
Enterprise5 000

Reaching the limit refuses the install with 429 TOO_MANY_REQUESTS, and nothing is written — no partial record, no half-counted slot, and the providers you already had are untouched. Only a new install counts: re-installing a provider the group already has replaces the record and consumes nothing further, and upgrading, disabling, enabling and editing an install's version policy are all free. Uninstalling returns the slot immediately.

A new top-level group is created with every Platform-tier provider already installed, so it starts with those records counted against its budget rather than at zero.

Two ways to get more room. Uninstall providers the group no longer uses — a group that inherits most of what it needs from its parent rarely needs many records of its own. Or raise the limit: moving to a higher plan raises it as shown above, and Owners can request an increase beyond the plan default, which we can raise as far as 50 000 for one group.

The group's limits view counts the installs the group holds against its limit, read from the same counter the refusal uses, so the number you see is the number you will hit. The shorter usage view does not carry it — it covers storage and pipeline consumption for the whole organisation.

Troubleshooting

400 BAD_REQUESTnaming a group, repository or provider id
Cause
The id in the URL is not a well-formed value — usually a path like acme/platform pasted where an id belongs
What to do
Use the id. Provider ids are slugs like acme.deploy; group and repository ids are not paths
400 BAD_REQUESTon install, naming the version and the allow-policy
Cause
The version you pinned falls outside the allow-policy sent in the same request
What to do
Widen the policy or pin a version inside it. Nothing was written, so re-send the corrected request
400 BAD_REQUESTon editing an install, naming the pinned default version
Cause
The new allow-policy excludes the version the install is pinned to, which would leave it unable to run
What to do
Upgrade the install to a version the new policy permits first, or turn on latest-tracking, which makes the pin unused
400 BAD_REQUESTon reject or request changes, naming the reason
Cause
Both decisions need a reason, because it is the only thing the publisher is shown
What to do
Re-send with a reason saying what has to change. Approving is the one decision where the note is optional
400 BAD_REQUESTon the review queue, naming the status
Cause
The state filter was given a value that is not a submission state
What to do
Drop the filter to get the submissions awaiting review, or pick one of the states the queue's own filter offers
400 BAD_REQUESTon featuring, naming a private provider
Cause
Featuring is a global editorial list, and a private provider is visible only inside its own organisation
What to do
Nothing to feature. A published provider's tier is fixed, so making it publicly discoverable means publishing it as a Community provider under its own id
403 PROVIDER_VALIDATION_FAILEDwhen triggering a run
Cause
The run was refused by one of the governance checks — the response names the reason and the steps it applies to
What to do
Match the reason against the table in How it works, then fix the install, the policy or the version the step names. The pipeline surface will also run the same checks without starting a run, so you can confirm a fix before you push
401 UNAUTHORIZED
Cause
No credential was sent, or the one sent has expired or is invalid
What to do
Sign in again, or check the token is being sent and has not been revoked
403 FORBIDDENon install, upgrade, uninstall, enable, disable or editing an install
Cause
These need Maintainer on the group, and you have read access only
What to do
Ask an Owner or Maintainer of the group to raise your access level, or to make the change for you
403 FORBIDDENon setting or removing the trust policy, where installing works
Cause
The policy needs Owner, one level above installing
What to do
Ask an Owner. Deciding which tiers the organisation admits is deliberately not a Maintainer power
403 FORBIDDENon install, naming the provider's tier
Cause
Your organisation's policy does not admit that tier. Only Community and Private are gated at install time: Community is refused unless an Owner opens it, and Private is refused where an Owner has switched off your organisation's own private providers
What to do
Read the policy in force to see which group set it, then ask that group's Owner to admit the tier. Installing cannot override it
403 FORBIDDENon install, mentioning the acknowledgement
Cause
You are installing a Community or Private provider without confirming you take responsibility for it
What to do
Re-send with acknowledge_unverified: true, or tick the confirmation in the install dialog. The organisation's policy admitting the tier is not a substitute
403 FORBIDDENon upgrade, mentioning the changelog
Cause
Your organisation requires changelog review before an install moves version
What to do
Read the release's changelog, then re-send with changelog_acknowledged: true. An Owner can turn the requirement off in the trust policy
403 FORBIDDENon anything under the administration surface
Cause
The review queue, publisher verification, featuring and sunset need the platform-admin role, which being an Owner of your own organisation does not grant
What to do
Use the publisher-side actions instead: a publisher can deprecate their own version and withdraw their own submission
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_settings:manage, provider_policy:manage or the administration scopes. Scopes are fixed at mint time and cannot be added to an existing token
404 NOT_FOUNDon a group or repository you are sure exists
Cause
It is private and you are not a member — a private resource answers 404 rather than 403 so its existence stays private
What to do
Check you are a member of the group, then check the id
404 NOT_FOUNDon install, naming the provider
Cause
The provider slug is wrong, or the provider is private to a different organisation and therefore invisible to you
What to do
Check the slug in the marketplace. A private provider belongs to exactly one organisation and cannot be installed anywhere else
404 NOT_FOUNDnaming a version
Cause
The version is not in the catalog, or the provider has no published version at all
What to do
List the provider's versions and pin one that exists. Omit the version to take the newest
404 NOT_FOUNDon upgrade, uninstall or editing an install, saying it is not installed
Cause
The group has no record of its own — it is inheriting the install from an ancestor, and inheriting is not the same as holding
What to do
Make the change on the group named as the source in the listing, or install at this group first to take a local record
404 NOT_FOUNDon disable, naming the provider
Cause
Disabling writes a record, so it refuses an id nothing has ever published
What to do
Check the provider slug. Disabling only works for providers the catalog actually has
404 NOT_FOUNDon removing the trust policy
Cause
The group has no policy of its own — it is inheriting one, and inheriting is not the same as holding
What to do
Read the effective policy and make the change on the group named as its source. Nothing was removed here
409 CONFLICTon approve, reject or request changes
Cause
The submission has already been reviewed, withdrawn or published — a second reviewer acting on a stale queue sees this
What to do
Reload the queue. The decision already recorded stands, and the state on the submission says who made it
422 UNPROCESSABLE_ENTITYon approve
Cause
The publisher's Verified eligibility was withdrawn after they submitted, and eligibility is re-checked at approval
What to do
Restore eligibility if the withdrawal was wrong, then approve again. Otherwise reject the submission with the reason
429 TOO_MANY_REQUESTSon install
Cause
The group is at its provider-install limit
What to do
Uninstall providers the group no longer uses, or raise the limit — see Limits. Nothing was written, so nothing needs cleaning up
A provider is listed but shows tier_accepted: false
Cause
The install is fine; the organisation's trust policy no longer admits its tier, which narrowing a policy does without touching installs
What to do
Ask an Owner to admit the tier, or uninstall the provider and move the pipeline to one the policy accepts
A row shows no source group and no installer
Cause
The decision was inherited from an ancestor group you cannot read, so its provenance is hidden while the setting itself still applies
What to do
Ask somebody with access to that part of the group tree. What applies to you is shown in full; only who set it is withheld
A provider that used to run now fails with provider_version_unspecified, and nobody changed the install
Cause
Somebody disabled or enabled the provider at a group that had no install of its own. That writes a record with no version pinned, and it shadows the ancestor's install
What to do
Uninstall that record so the ancestor's install applies again, or install the provider at this group at the version you want
A version pin, version policy or latest-tracking setting reverted after somebody installed the provider again
Cause
Installing over an existing install replaces the whole record, not just the pinned version — anything left out of the request goes back to its default
What to do
Set the record up again with every field you want, and use upgrade rather than install when moving the version is all you meant to do
Uninstalling in a child group changed nothing
Cause
The child had no record of its own — the install lives at an ancestor, and uninstalling removed nothing
What to do
Disable the provider at the child group instead. That writes an explicit refusal that survives whatever the parent does
A setting you did not touch reverted after saving the trust policy
Cause
Saving replaces the whole policy record; a field you omit is stored as "inherit", not as "leave unchanged"
What to do
Read the effective policy, then save it back with every field you intend to keep
An install stopped running after somebody edited the policy, with no change to the install
Cause
The tier check runs on every trigger, not only at install time
What to do
Read the repository's trust policy to see which group set the refusing value, and take it up with that group's Owner
A pipeline advanced to a new provider version without anybody upgrading
Cause
That install has latest-tracking on, so steps that name no version follow the newest published release
What to do
Turn latest-tracking off and pin a version, or narrow the allow-policy to a range you are happy to advance inside
A version disappeared from the provider's newest-version pointer
Cause
The version was withdrawn from service, and the newest-version pointer skips withdrawn versions
What to do
Move the install to a supported version. Runs naming the withdrawn version work until its grace window ends, then fail
  • Using providersbrowsing the marketplace, reading what a provider's steps take and produce, and connecting credentials to one
  • Publishing a providerregistering as a publisher, submitting a version, and what the review looks at from the other side
  • Pipelineswhere a provider actually runs, and how a step names the provider and version it wants
  • Groupsthe hierarchy every decision on this page is inherited through, and how access levels are granted on it
  • Billing and planswhat each plan includes, and how to ask for a limit above its default
  • Audit logevery install, upgrade, policy change and administrative decision on this page, with who made it and when