Integrateprovider-publishing
GET/provider-submissions/{submission_id}
Get a provider submission
get_provider_submission
provider_publishing:read
A token needs theprovider_publishing:readscope: View provider submissionsGranted byread_api,write_api.Every operation this scope unlocks
The submission's state, its manifest, who submitted it and when, the outcome of the checks on its images, and the reviewer's decision and notes once it has been reviewed. Only the publisher that made it and platform administrators may read it.
Parameters
Path
- submission_idProviderSubmissionId (string · uuid)Submission id
Responses
200application/json
- auth_schemaobject
manifestProviderVersionManifestThe provider version as submitted. Image locations and digests, signing and lifecycle are filled in by the platform when the version is published.
- The ProviderVersionManifest schema
capabilitiesarray of CapabilityDescriptor
- The CapabilityDescriptor schema
- cache_enabledboolean
- capability_idCapabilityId (string)
- config_schemaobjectThe JSON Schema a step's
configmust satisfy to use this capability. - default_timeout_secondsinteger · int320–∞
- descriptionstring
- image_uristringThe container image that runs the capability, with an immutable version tag.
- inputsarray of PortDescriptor
- namestring
- outputsarray of PortDescriptor
- requires_dockerboolean
- 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 has an optional
valueinput port of the same name: connect it and read it with{"$from": "<key>"}, or leave it unconnected and write the value yourself. - image_digeststring or nulloptionalThe 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.
- input_groupsarray of PortGroupoptionalRules about which inputs are alternatives to each other. Empty for most capabilities.
- source_image_refstring or nulloptionalFor a verified provider, the image's location in its publisher's registry before gitmoap copied it. Absent for providers gitmoap builds itself.
- contract_versioninteger · int320–∞
- manifest_digeststringThe SHA-256 digest of the version's
gitmoap-provider.yaml. May be empty. - provider_idProviderId (string)
- published_atstring
- published_bystring
"platform"for platform-authored providers; a publisher id otherwise. - versionProviderVersion (string)
- changelogMarkdownDoc (string) or nulloptionalThe version's release notes, in Markdown, up to 64 KB. They cannot be changed once published. Absent when the version has none.
- cosign_signature_refstring or nulloptionalWhere the cosign signature is stored in the registry, when the images are signed.
- lifecycle_stateVersionLifecycleactivedeprecatedsunsetoptionalWhere the version is in its life:
active,deprecatedorsunset. Checked whenever a run starts. - signedbooleanoptionalWhether the version's images are signed with gitmoap's cosign key, as verified and platform providers' are.
- sunset_atstring or nulloptionalWhen the version was sunset. Set only for a sunset version.
- sunset_enforced_atstring or nulloptionalWhen the sunset's grace period ends. After it, a run that uses the version fails to start.
- manifest_digeststring
- provider_descriptionstring
- provider_idProviderId (string)
- provider_namestringThe provider's name, as the catalog shows it.
- publisher_idPublisherId (string · uuid)
- source_image_refsobjectEach capability's image in your registry, by capability id.
- stateSubmissionStatesubmittedin_reviewchanges_requestedapprovedmirroringsigningpublishedrejectedmirror_failedwithdrawnverifyingverification_failedWhere a provider submission stands, from review through to publication or refusal.
- submission_idProviderSubmissionId (string · uuid)
- submitted_atstring
submitted_byActorSummaryWho submitted the version.
- The ActorSummary schema
- emailstring
- idstring
- usernamestring
- avatar_urlstring or nulloptional
- target_tierProviderTierplatformverifiedcommunityprivateThe tier the version was submitted for:
verifiedgoes to review by gitmoap;communityandprivateare checked automatically, without review. - versionProviderVersion (string)
attest_resultAttestResult or nulloptionalThe result of checking a community or private provider's images.
- The AttestResult schema
- attested_atstring
- capabilitiesobject
mirror_resultMirrorResult or nulloptional
- The MirrorResult schema
- capabilitiesobject
- mirrored_atstring
- sbom_refstring or nulloptional
- owning_group_idGroupId (string · uuid) or nulloptionalThe organization the provider is private to. Set only when
target_tierisprivate. - published_atstring or nulloptional
- registry_pull_secret_refSsmParameterPath (string) or nulloptionalA reference to the stored credential for pulling images from a private registry, for a private provider that uses one. Never the credential itself.
- review_notesstring or nulloptional
- reviewed_atstring or nulloptional
reviewerActorSummary or nulloptionalThe gitmoap administrator who reviewed the submission, once reviewed.
- The ActorSummary schema
- emailstring
- idstring
- usernamestring
- avatar_urlstring or nulloptional
200 exampleSynthesized example
{
"auth_schema": {},
"manifest": {
"capabilities": [
{
"cache_enabled": false,
"capability_id": "c681d60f-447f-41a7-9653-840a4efaa272",
"config_schema": {},
"default_timeout_seconds": 81,
"description": "Renders each region as density contours of its operations.",
"image_uri": "https://gitmoap.example/acme/ff3885e3",
"inputs": [],
"name": "payments-api",
"outputs": [],
"requires_docker": false,
"stage_type": "source"
}
],
"contract_version": 4,
"manifest_digest": "manifest-digest-6c06",
"provider_id": "3cbbc487-aa29-464c-9ad6-c917709211d0",
"published_at": "2026-10-17T08:19:24Z",
"published_by": "b7e2d1c0-9f8e-4d7c-a6b5-c4d3e2f1a0b9",
"version": "version-ceb3",
"changelog": "changelog-35a0",
"cosign_signature_ref": "cosign-signature-ref-70c4",
"lifecycle_state": "active",
"signed": false,
"sunset_at": "2026-10-16T16:18:22Z",
"sunset_enforced_at": "2026-10-10T08:41:04Z"
},
"manifest_digest": "manifest-digest-e822",
"provider_description": "provider-description-cbaa",
"provider_id": "ac180a5f-6a56-41f8-ad9a-ce0d4c422dba",
"provider_name": "payments-api",
"publisher_id": "b4aa3a3a-f8b0-46de-bc39-0df8694812cd",
"source_image_refs": {
"source_image_refs": {
"image_digest": "image-digest-e68f",
"image_ref": "image-ref-53c3"
}
},
"state": "submitted",
"submission_id": "9a3f9daa-d1d5-47da-9a51-47ad7d7690f1",
"submitted_at": "2026-10-16T01:15:05Z",
"submitted_by": {
"email": "mara@acme.example",
"id": "id-a0b2",
"username": "lin",
"avatar_url": "https://gitmoap.example/acme/4a42740f"
},
"target_tier": "platform",
"version": "version-0de2",
"attest_result": {
"attested_at": "2026-10-13T00:02:01Z",
"capabilities": {
"capabilities": {
"image_digest": "image-digest-253b",
"image_uri": "https://gitmoap.example/acme/cae3b4c8"
}
}
},
"mirror_result": {
"capabilities": {
"capabilities": {
"gitmoap_image_uri": "https://gitmoap.example/acme/9b924a1f",
"image_digest": "image-digest-4ff6"
}
},
"mirrored_at": "2026-10-10T13:36:52Z",
"sbom_ref": "sbom-ref-8b2d"
},
"owning_group_id": "4c1d8e2f-6a3b-4f90-b7c5-1e2d3c4b5a69",
"published_at": "2026-10-12T18:56:18Z",
"registry_pull_secret_ref": "registry-pull-secret-ref-1191",
"review_notes": "review-notes-0b04",
"reviewed_at": "2026-10-11T21:41:02Z",
"reviewer": {
"email": "lin@acme.example",
"id": "id-7b3e",
"username": "lin",
"avatar_url": "https://gitmoap.example/acme/3f407b16"
}
}
400Bad request — a path parameter is not a well-formed value of its typeapplication/json
Error codes
- 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.
400 exampleSynthesized example
{
"error": {
"code": "code-4c63",
"message": "Stream pipeline status into the run header"
}
}
401application/json
Error codes
- 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.
401 exampleSynthesized example
{
"error": {
"code": "code-796e",
"message": "Pin a page's payload to the build that rendered it"
}
}
403application/json
Error codes
- 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.
403 exampleSynthesized example
{
"error": {
"code": "code-41b8",
"message": "Draw the region map from operation density"
}
}
404application/json
Error codes
- NOT_FOUNDThe resource does not exist — or exists and you cannot see it: a private resource you have no access to answers exactly as an absent one does
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.
404 exampleSynthesized example
{
"error": {
"code": "code-b188",
"message": "Draw the region map from operation density"
}
}
CLI
gitmoap provider-publishing get
- --submission-ididSubmission id