Submit the first version of a new provider for review.
provider_publishing:write
A token needs theprovider_publishing:writescope: Submit and manage provider versionsGranted bywrite_api.Every operation this scope unlocksAudited · mutation
x-gitmoap-audit: {"kind":"audited","arg":"mutation"}
Quota · provider submissions per publisher
x-gitmoap-quota: {"kind":"enforced","arg":"provider_submissions_per_publisher"}
The provider's id must sit in your publisher namespace, as {namespace}.{name}, and the
manifest declares its capabilities, each with a container image pinned by its sha256 digest. The
tier decides what happens next: a verified submission needs a verified publisher and is
reviewed by the platform, while community and private submissions are checked automatically
rather than reviewed, and a private provider names the top-level group, where you are a
Maintainer or above, that alone may use it. Answers 202 with the submission; read it to follow
its progress. Refused when the provider already exists or that version already has an open
submission, and a publisher may have at most 20 submissions awaiting a decision. Open to any
account that owns an active publisher.
Request body
application/jsoncapabilitiesarray of SubmissionCapabilityInput
- The SubmissionCapabilityInput schema
- capability_idCapabilityId (string)
- descriptionstring
- image_digeststring
- image_refstring
- namestring
- stage_typeStageTypesourcebuildtestpublishdeploynotifycustomThe pipeline stage a capability belongs to. Maps verbatim to the
stage_typefield of a capability ingitmoap-provider.yaml. - bindablearray of PortName (string)optionalConfig keys that can take their value from an earlier step. Each becomes an optional
valueinput port of the same name when the version is published. - cache_enabledbooleanoptional
- config_schemaobjectoptional
- default_timeout_secondsinteger · int32optional0–∞
input_groupsarray of PortGroupoptionalRules over which of the capability's optional inputs may be connected together.
- The PortGroup schema
- kindPortGroupKindexactly_one_ofat_most_one_ofat_least_one_ofHow many of a group's ports may be connected.
- portsarray of PortName (string)The member input ports, in the order the author should read them.
- descriptionstring or nulloptionalWhy these ports constrain each other, in the provider's own words. Rendered beside the group, and repeated in the validation error when the group is unsatisfied — which is the point: the sentence explaining the rule reaches the person who broke it.
inputsarray of PortDescriptoroptional
- The PortDescriptor schema
- namePortName (string)
- port_typePortTypegit_refartifactcontainer_imagetest_reportdeployment_refcredentialsevidencevaluecustomSemantic type of the data this port carries. Drives edge type-compatibility in the pipeline builder and validation/routing in the engine.
- requiredboolean
- cardinalityPortCardinalityonemanyoptionalHow many sources this input accepts.
oneby default;manytakes several at once. - descriptionstring or nulloptionalWhat this port is for, in the provider's own words. Absent on a few older providers.
- schema_idPortSchemaId (string) or nulloptionalFor a
customport, the id of the schema it carries (e.g.aws.ecs.task-definition/v1). Twocustomports connect only when their schema ids agree, or when either leaves this unset.
outputsarray of PortDescriptoroptional
- The PortDescriptor schema
- namePortName (string)
- port_typePortTypegit_refartifactcontainer_imagetest_reportdeployment_refcredentialsevidencevaluecustomSemantic type of the data this port carries. Drives edge type-compatibility in the pipeline builder and validation/routing in the engine.
- requiredboolean
- cardinalityPortCardinalityonemanyoptionalHow many sources this input accepts.
oneby default;manytakes several at once. - descriptionstring or nulloptionalWhat this port is for, in the provider's own words. Absent on a few older providers.
- schema_idPortSchemaId (string) or nulloptionalFor a
customport, the id of the schema it carries (e.g.aws.ecs.task-definition/v1). Twocustomports connect only when their schema ids agree, or when either leaves this unset.
- requires_dockerbooleanoptional
- contract_versioninteger · int320–∞
providerSubmissionProviderInput
- The SubmissionProviderInput schema
- auth_schemaobject
- descriptionstring
- idProviderId (string)
- namestring
- versionProviderVersion (string)
- changelogMarkdownDoc (string) or nulloptionalOptional release notes for this version, in Markdown, up to 64 KB. They cannot be changed once the version is published.
- owning_group_idGroupId (string · uuid) or nulloptionalRequired when
target_tierisprivate: the organization (a top-level group) the provider is private to. You must be at least a Maintainer there. registry_pull_secretRegistryPullSecretInput or nulloptionalOptional registry pull credential (Private only); rejected for other tiers.
- The RegistryPullSecretInput schema
- registrystring
- secretstring · passwordThe password or access token for the registry. Never returned or logged.
- usernamestring
- target_tierProviderTierplatformverifiedcommunityprivateoptional
verified(default) /community/private.platformis rejected.
Responses
- provider_idProviderId (string)
- stateSubmissionStatesubmittedin_reviewchanges_requestedapprovedmirroringsigningpublishedrejectedmirror_failedwithdrawnverifyingverification_failedWhere a provider submission stands, from review through to publication or refusal.
- submission_idProviderSubmissionId (string · uuid)
- submitted_atstring
- versionProviderVersion (string)
- BAD_REQUESTThe request is malformed: a parameter or a body field is not a well-formed value of its type
errorErrorBody
- The ErrorBody schema
- codestringThe coarse category, tied to the status:
NOT_FOUND,CONFLICT,INSUFFICIENT_SCOPE. Every error has one; the API reference's error catalogue lists them all. - messagestringWhat went wrong, for a person. Written to be read, not parsed: match on
reasonorcode. - fieldstring or nulloptionalOn a
400that refused one field's value, the field, as its JSON path:email,items[0].name. Put the message under that input. Absent on every other error. - reasonstring or nulloptionalThe specific code, when the error has one:
LAST_ORGANIZATION_OWNER,BRANCH_PROTECTED. The message starts with it too. Match on this when it is present, and oncodeotherwise. - required_scopestring or nulloptionalThe scope the access token was missing, on
INSUFFICIENT_SCOPE. - violationsanyoptionalPresent on the structured-validation errors (
PROVIDER_VALIDATION_FAILEDper-node,PIPELINE_VALIDATION_FAILEDDAG): a JSON array of the offending elements, so a caller can fix every one in a single round-trip. Absent (omitted) on every other error.
- UNAUTHORIZEDNo credential was sent, or the one sent is invalid, expired or revoked
errorErrorBody
- The ErrorBody schema
- codestringThe coarse category, tied to the status:
NOT_FOUND,CONFLICT,INSUFFICIENT_SCOPE. Every error has one; the API reference's error catalogue lists them all. - messagestringWhat went wrong, for a person. Written to be read, not parsed: match on
reasonorcode. - fieldstring or nulloptionalOn a
400that refused one field's value, the field, as its JSON path:email,items[0].name. Put the message under that input. Absent on every other error. - reasonstring or nulloptionalThe specific code, when the error has one:
LAST_ORGANIZATION_OWNER,BRANCH_PROTECTED. The message starts with it too. Match on this when it is present, and oncodeotherwise. - required_scopestring or nulloptionalThe scope the access token was missing, on
INSUFFICIENT_SCOPE. - violationsanyoptionalPresent on the structured-validation errors (
PROVIDER_VALIDATION_FAILEDper-node,PIPELINE_VALIDATION_FAILEDDAG): a JSON array of the offending elements, so a caller can fix every one in a single round-trip. Absent (omitted) on every other error.
- FORBIDDENYou are signed in but may not do this here;
reasonnames the permission or the rule that refused it - INSUFFICIENT_SCOPEThe access token lacks the scope this operation needs;
required_scopenames it - PERMISSION_REQUIREDYou need a permission you do not hold here; the message names it
errorErrorBody
- The ErrorBody schema
- codestringThe coarse category, tied to the status:
NOT_FOUND,CONFLICT,INSUFFICIENT_SCOPE. Every error has one; the API reference's error catalogue lists them all. - messagestringWhat went wrong, for a person. Written to be read, not parsed: match on
reasonorcode. - fieldstring or nulloptionalOn a
400that refused one field's value, the field, as its JSON path:email,items[0].name. Put the message under that input. Absent on every other error. - reasonstring or nulloptionalThe specific code, when the error has one:
LAST_ORGANIZATION_OWNER,BRANCH_PROTECTED. The message starts with it too. Match on this when it is present, and oncodeotherwise. - required_scopestring or nulloptionalThe scope the access token was missing, on
INSUFFICIENT_SCOPE. - violationsanyoptionalPresent on the structured-validation errors (
PROVIDER_VALIDATION_FAILEDper-node,PIPELINE_VALIDATION_FAILEDDAG): a JSON array of the offending elements, so a caller can fix every one in a single round-trip. Absent (omitted) on every other error.
- CONFLICTThe request conflicts with the resource's current state;
reasonsays how - LEGAL_ACCEPTANCE_REQUIREDAccept the current Terms of Service before changing anything; reading stays open
errorErrorBody
- The ErrorBody schema
- codestringThe coarse category, tied to the status:
NOT_FOUND,CONFLICT,INSUFFICIENT_SCOPE. Every error has one; the API reference's error catalogue lists them all. - messagestringWhat went wrong, for a person. Written to be read, not parsed: match on
reasonorcode. - fieldstring or nulloptionalOn a
400that refused one field's value, the field, as its JSON path:email,items[0].name. Put the message under that input. Absent on every other error. - reasonstring or nulloptionalThe specific code, when the error has one:
LAST_ORGANIZATION_OWNER,BRANCH_PROTECTED. The message starts with it too. Match on this when it is present, and oncodeotherwise. - required_scopestring or nulloptionalThe scope the access token was missing, on
INSUFFICIENT_SCOPE. - violationsanyoptionalPresent on the structured-validation errors (
PROVIDER_VALIDATION_FAILEDper-node,PIPELINE_VALIDATION_FAILEDDAG): a JSON array of the offending elements, so a caller can fix every one in a single round-trip. Absent (omitted) on every other error.
- TOO_MANY_REQUESTSRetryableA quota, a rate limit or a transfer budget is spent. When the response carries
Retry-After, retry after that many seconds
errorErrorBody
- The ErrorBody schema
- codestringThe coarse category, tied to the status:
NOT_FOUND,CONFLICT,INSUFFICIENT_SCOPE. Every error has one; the API reference's error catalogue lists them all. - messagestringWhat went wrong, for a person. Written to be read, not parsed: match on
reasonorcode. - fieldstring or nulloptionalOn a
400that refused one field's value, the field, as its JSON path:email,items[0].name. Put the message under that input. Absent on every other error. - reasonstring or nulloptionalThe specific code, when the error has one:
LAST_ORGANIZATION_OWNER,BRANCH_PROTECTED. The message starts with it too. Match on this when it is present, and oncodeotherwise. - required_scopestring or nulloptionalThe scope the access token was missing, on
INSUFFICIENT_SCOPE. - violationsanyoptionalPresent on the structured-validation errors (
PROVIDER_VALIDATION_FAILEDper-node,PIPELINE_VALIDATION_FAILEDDAG): a JSON array of the offending elements, so a caller can fix every one in a single round-trip. Absent (omitted) on every other error.
CLI
gitmoap provider-publishing submit-provider
- --capabilitiesjson
- --changelogstringoptional
- --contract-versionnumber
- --owning-group-idstringoptional
- --providerjson
- --registry-pull-secretjsonoptional
- --target-tierplatform | verified | community | privateoptional`verified` (default) / `community` / `private`. `platform` is rejected.
- --versionstring