Provider policy and administration
- See which providers a repository can run
- See what a group has installed
- Check one provider
- Install a provider into a group
- Restrict which versions a pipeline may name
- Move an install to a newer version
- Turn a provider off without losing the install
- Remove an install
- Read the tier policy in force
- Decide which provider tiers your organisation accepts
- Fall back to the parent's policy
- Work the submission review queue
- Approve, reject or send back a submission
- Grant or revoke a publisher's Verified eligibility
- Feature a provider in the marketplace
- Withdraw a version from service
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:readandprovider_settings:managefor installs,provider_policy:readandprovider_policy:managefor the tier policy,provider_admin:readandprovider_admin:managefor 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.
- Is the provider installed, and at what version? One record per group and provider, resolved nearest-first up the group tree.
- 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.
- 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 allEach 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:
| Action | What it does |
|---|---|
| Disable | writes an explicit refusal at your group without removing the record — this is how a child group refuses a provider its parent installed |
| Uninstall | removes 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.
| Tier | Who wrote it | Where its image lives | Accepted by default |
|---|---|---|---|
| Platform | us | ours | always, and there is no setting to refuse it |
| Verified | a third party, reviewed by us; we copy the image into our own registry and sign it | ours | yes |
| Community | anyone with a publisher account, published without review | the author's registry | no |
| Private | your own organisation, published for your own organisation only | the author's registry | yes, 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 trigger | What it means |
|---|---|
provider_not_enabled | nothing in the group chain installs this provider |
provider_disabled | the nearest record is an explicit refusal |
provider_tier_not_accepted | the organisation's policy does not admit this provider's tier |
provider_namespace_not_verified | the policy admits Community providers only from verified publishers, and this publisher is not one |
provider_private_foreign_org | the step names a private provider belonging to another organisation |
provider_version_unspecified | the step named no version and the install pins none |
provider_version_not_allowed | the resolved version is outside the install's allow-policy |
provider_version_not_in_catalog | no such published version |
capability_not_in_version | the version exists but does not offer the step the pipeline asked for |
provider_version_sunset | the 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.
gitmoap provider-settings list-repo-providers --repo-id <id>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.
gitmoap provider-settings list-group-providers --group-id <id>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.
gitmoap provider-settings get-group-provider \ --group-id <id> \ --provider-id <id>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.
gitmoap provider-settings get-repo-provider \ --repo-id <id> \ --provider-id <id>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.
gitmoap provider-settings install-provider \ --group-id <id> \ --provider-id <id>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:
| Shape | Meaning |
|---|---|
{"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.
gitmoap provider-settings update --group-id <id> --provider-id <id>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.
gitmoap provider-settings upgrade-provider \ --group-id <id> \ --provider-id <id> \ --version <version>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.
gitmoap provider-settings disable-provider \ --group-id <id> \ --provider-id <id>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.
gitmoap provider-settings enable-provider --group-id <id> --provider-id <id>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.
gitmoap provider-settings uninstall-provider \ --group-id <id> \ --provider-id <id>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.
gitmoap provider-settings get-group-provider-policy --group-id <id>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.
gitmoap provider-settings get-repo-provider-policy --repo-id <id>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:
| Setting | Values | Default | What it governs |
|---|---|---|---|
accept_verified | on / off | on | third-party providers we reviewed, copied and signed |
accept_community | disabled / any / verified_only | disabled | unreviewed public providers; verified_only admits them only from publishers who have proved they own their namespace |
accept_own_private | on / off | on | private providers your own organisation published |
require_changelog_ack | on / off | off | whether 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.
gitmoap provider-settings set-provider-policy --group-id <id>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.
gitmoap provider-settings delete-provider-policy --group-id <id>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.
gitmoap provider-admin list-review-queuecurl -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.
gitmoap provider-admin approve-provider-submission --submission-id <id>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.
gitmoap provider-admin reject-provider-submission --submission-id <id>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.
gitmoap provider-admin request-provider-changes --submission-id <id>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.
gitmoap provider-admin verify-publisher --publisher-id <id> --verifiedcurl -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.
gitmoap provider-admin set-provider-featured --provider-id <id>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.
gitmoap provider-admin sunset-provider-version \ --provider-id <id> \ --version <id> \ --reason <reason>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
Token scope
provider_settings:read
Send
Path
- group_iduuidGroup id
Refuses
400Bad request — a path parameter is not a well-formed value of its type401403404
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/Rangelet an org curate. The version a node runs is always an exactProviderVersion; aRangeonly 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 tolatest_versionat trigger. - update_availablebooleanWhether a newer version than the install's
default_versionis published — a pure semver compare that never mutates the install (D5 K6).
- allowed_versionsobjectThe set of versions a node may declare for a provider at a scope.
GET/groups/{group_id}/providers/{provider_id}provider_settings:read
Get the setting in effect for one provider at a group
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 type401403404
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/Rangelet an org curate. The version a node runs is always an exactProviderVersion; aRangeonly 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 tolatest_versionat trigger. - update_availablebooleanWhether a newer version than the install's
default_versionis 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
Token scope
provider_settings:read
Send
Path
- repo_iduuidRepository id
Refuses
400Bad request — a path parameter is not a well-formed value of its type401403404
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/Rangelet an org curate. The version a node runs is always an exactProviderVersion; aRangeonly 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 tolatest_versionat trigger. - update_availablebooleanWhether a newer version than the install's
default_versionis published — a pure semver compare that never mutates the install (D5 K6).
- allowed_versionsobjectThe set of versions a node may declare for a provider at a scope.
GET/repositories/{repo_id}/providers/{provider_id}provider_settings:read
Get the setting in effect for one provider at a repository
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 type401403404
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/Rangelet an org curate. The version a node runs is always an exactProviderVersion; aRangeonly 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 tolatest_versionat trigger. - update_availablebooleanWhether a newer version than the install's
default_versionis 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.
Token scope
provider_settings:manage
Counts against
provider_installs_per_scope
Send
Path
- group_iduuidGroup id
- provider_idstringProvider slug
Body
- acknowledge_unverifiedbooleanoptionalMust be
trueto 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
400401403404409The provider is already installed in this group429Provider-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/Rangelet an org curate. The version a node runs is always an exactProviderVersion; aRangeonly 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 referenceToken scope
provider_settings:manage
Send
Path
- group_iduuidGroup id
- provider_idstringProvider slug
Body
- allowed_versionsobjectoptional
- track_latestobjectoptionalToggle latest-tracking. Absent ⇒ unchanged.
Refuses
400401403404409The 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/Rangelet an org curate. The version a node runs is always an exactProviderVersion; aRangeonly 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.
Token scope
provider_settings:manage
Send
Path
- group_iduuidGroup id
- provider_idstringProvider slug
Body
- changelog_acknowledgedbooleanoptionalMust be
trueto advance to a new version when the org's effectiverequire_changelog_ackpolicy is set; ignored otherwise. - versionstring
Refuses
400401403404409The 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/Rangelet an org curate. The version a node runs is always an exactProviderVersion; aRangeonly 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.
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 type401403404409The 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/Rangelet an org curate. The version a node runs is always an exactProviderVersion; aRangeonly 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
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 type401403404409The 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/Rangelet an org curate. The version a node runs is always an exactProviderVersion; aRangeonly 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.
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 type401403404409The 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.
Token scope
provider_policy:read
Send
Path
- group_iduuidGroup id
Refuses
400Bad request — a path parameter is not a well-formed value of its type401403404
Receive
- accept_communityanydisabledverified_onlyWhether an organization's pipelines may run Community-tier providers.
disabled(the default) refuses them;anyadmits any Community provider in the catalog;verified_onlyadmits 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
Token scope
provider_policy:read
Send
Path
- repo_iduuidRepository id
Refuses
400Bad request — a path parameter is not a well-formed value of its type401403404
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;anyadmits any Community provider in the catalog;verified_onlyadmits 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
Token scope
provider_policy:manage
Send
Path
- group_iduuidGroup id
Body
- accept_communityobjectoptional
- accept_own_privateobjectoptional
- accept_verifiedobjectoptional
- override_parentobjectoptional
- require_changelog_ackobjectoptional
Refuses
400401403404409The 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;anyadmits any Community provider in the catalog;verified_onlyadmits 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
Token scope
provider_policy:manage
Send
Path
- group_iduuidGroup id
Refuses
400Bad request — a path parameter is not a well-formed value of its type401403404409The 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;anyadmits any Community provider in the catalog;verified_onlyadmits 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
Token scope
provider_admin:read
Send
Query
- statusstringoptionalSubmission state (default submitted)
- limitint32optionalPage size
Refuses
401403
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 referenceToken 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 type401Unauthenticated — no credential, or an invalid one403404409422
Receive
- attest_resultobjectoptional
- auth_schemaobject
manifestobject22 fields
capabilities[]object11 fields
- cache_enabledboolean
- capability_idstring
- config_schemaobjectThe JSON Schema a step's
configmust 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_typefield of a capability ingitmoap-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.Activeis the default;Deprecatedstill runs but the trigger-time validator surfaces a warning;Sunsetruns 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 referenceToken scope
provider_admin:manage
Send
Path
- submission_iduuidSubmission id
Body
- noteobjectoptional
- reasonobjectoptional
Refuses
400401Unauthenticated — no credential, or an invalid one403404409
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
configmust 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_typefield of a capability ingitmoap-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.Activeis the default;Deprecatedstill runs but the trigger-time validator surfaces a warning;Sunsetruns 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 referenceToken scope
provider_admin:manage
Send
Path
- submission_iduuidSubmission id
Body
- noteobjectoptional
- reasonobjectoptional
Refuses
400401Unauthenticated — no credential, or an invalid one403404409
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
configmust 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_typefield of a capability ingitmoap-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.Activeis the default;Deprecatedstill runs but the trigger-time validator surfaces a warning;Sunsetruns 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
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 type401403404409The 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.Activepublishers may submit;Suspendedis a platform-admin hold. - updated_atstring
- verification_methodobjectoptional
- verification_targetobjectoptional
- verifiedboolean
- verified_atobjectoptional
PUT/admin/providers/{provider_id}/featuredprovider_admin:manage
Set or clear a provider's featured rank
Token scope
provider_admin:manage
Send
Path
- provider_idstringProvider id
Body
- featured_rankint32optionalWhere to feature the provider: lower numbers are placed higher.
nullor absent stops featuring it.
Refuses
400Provider is Private (cannot be featured)401403404409The request conflicts with the resource's current state; `reason` says how
Receive
- 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.
falsefor 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.
publicis listed for everyone;privateis listed only for members of the organisation that owns it.
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 referenceToken scope
provider_admin:manage
Send
Path
- provider_idstringProvider id
- versionstringVersion
Body
- grace_period_daysint32optional
- reasonstring
Refuses
400401Unauthenticated — no credential, or an invalid one403404409The 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
configmust 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_typefield of a capability ingitmoap-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.Activeis the default;Deprecatedstill runs but the trigger-time validator surfaces a warning;Sunsetruns 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.
| Plan | Provider installs per group |
|---|---|
| Free | 100 |
| Pro | 300 |
| Team | 1 000 |
| Enterprise | 5 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/platformpasted 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:manageor 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
404rather than403so 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
Related
- 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