Buildpipeline-components
GET/repositories/{repo_id}/pipeline-components/{component_id}/versions/{version}
Read one published version, including the body it froze
get_repo_pipeline_component_version
pipeline:read
A token needs thepipeline:readscope: View pipeline runs and definitionsGranted byread_api,read_repository,write_api,write_repository.Every operation this scope unlocks
Returns the version's lifecycle state, changelog, publisher and the exact body it published, which never changes. Name the version exactly, such as v1.2.0. Anyone who can read the pipelines here may call it.
Parameters
Path
- repo_idRepositoryId (string · uuid)The repository's id
- component_idComponentId (string · uuid)The component's id
- versionComponentVersion (string)An exact version, such as v1.2.0
Responses
200The version and the body it publishedapplication/json
bodyComponentBody
- The ComponentBody schema
component_instancesarray of NestedComponentInstanceoptionalOther components this component uses. Always empty in a published version, where they have already been expanded into steps.
- The NestedComponentInstance schema
- component_idComponentId (string · uuid)
- idNodeId (string)
- namestring
- versionComponentVersionRef (string)
- component_refstring or nulloptional
- paramsobjectoptional
- stage_mapobjectoptionalBinds every slot the referenced component declares to a slot of the containing body.
edgesarray of EdgeoptionalConnections between the component's own steps; both ends must be steps of this component.
- The Edge schema
- idEdgeId (string)
- source_node_idNodeId (string)
- target_node_idNodeId (string)
- source_portPortName (string) or nulloptionalAbsent on a dependency-only edge.
- target_portPortName (string) or nulloptionalAbsent on a dependency-only edge.
inputsarray of ComponentInputPortoptional
- The ComponentInputPort schema
- namePortName (string)
- targetsarray of PortRef
- descriptionstring or nulloptional
nodesarray of ComponentNodeoptional
- The ComponentNode schema
- nodeNode
- stage_slotStageSlot (string)Which of the component's stage slots this step is placed in.
- param_slotsComponentNodeParamsoptionalStep fields whose values come from the component's parameters rather than from the step.
outputsarray of ComponentOutputPortoptional
- The ComponentOutputPort schema
- namePortName (string)
- sourcePortRef
- descriptionstring or nulloptional
parametersarray of ComponentParameteroptional
- The ComponentParameter schema
- nameComponentParamName (string)
- param_typeComponentParamTypestringnumberbooleanobjectarrayThe JSON shape a parameter's value must have.
- allowed_valuesarray of object or nulloptionalThe only values this parameter accepts. Absent means any value of its type. On a published parameter, adding this list or removing a value from it is a major version change; adding a value is a minor one.
- defaultobjectoptional
- descriptionstring or nulloptional
- requiredbooleanoptionalWhether a pipeline using the component must supply a value. A required parameter cannot have a default.
- stage_slotsarray of StageSlot (string)optionalThe positions the component's steps occupy, in order. A pipeline using the component maps each slot to one of its own stages.
- capability_requirementsarray of CapabilityId (string)The provider capabilities the version's steps use.
- contract_digeststringA SHA-256 fingerprint, in hex, of what a pipeline using the version must satisfy: its parameters, its ports and the variables it reads. It changes only when that contract does.
- depthinteger · int320–∞How many levels of components the version spans: 1 when it uses no other component.
- expanded_node_countinteger · int320–∞How many steps the version expands into.
- lifecycle_stateComponentLifecycleStateactivedeprecatedsunsetWhere a published version sits in its retirement. A
deprecatedversion still resolves for an exact reference and still runs, but no floating reference selects it — which is what makes deprecating the safe way to retire one. Asunsetversion refuses to resolve at all, exact reference included. - published_atstring
published_byActorSummary
- The ActorSummary schema
- emailstring
- idstring
- usernamestring
- avatar_urlstring or nulloptional
- variable_requirementsarray of EnvironmentVariableName (string)The variables the version's steps read from the pipeline that uses it. Each must be declared on the environment those steps run in, or on a group or repository above the pipeline, or a run is refused when it starts.
- versionComponentVersion (string)
- changelogstring or nulloptional
200 exampleSynthesized example
{
"body": {
"component_instances": [
{
"component_id": "6fcde9c3-c459-4307-8198-e6e16f8ab34e",
"id": "id-c530",
"name": "payments-api",
"version": "version-22a2"
}
],
"edges": [
{
"id": "id-014a",
"source_node_id": "3b89a85e-152c-49d9-82a8-a863f3ffd2de",
"target_node_id": "5326513d-d910-4f47-b474-7d1520e5fbd1"
},
{
"id": "id-ff52",
"source_node_id": "88071920-b6b1-481f-9a52-9e2d3bdd2d76",
"target_node_id": "87565593-b968-4720-b487-ef1032bfd251"
}
],
"inputs": [
{
"name": "payments-api",
"targets": []
},
{
"name": "payments-api",
"targets": []
}
],
"nodes": [
{
"node": {
"capability_id": "fe3205b3-92a4-409e-975a-00f79547abb2",
"id": "id-d39b",
"name": "payments-api"
},
"stage_slot": "stage-slot-181c"
},
{
"node": {
"capability_id": "e026c996-b34a-41d3-80f6-785c016012fb",
"id": "id-7d36",
"name": "payments-api"
},
"stage_slot": "stage-slot-9a58"
}
],
"outputs": [
{
"name": "payments-api",
"source": {
"node_id": "ddd49182-cb58-45d5-96a6-30976e930718",
"port": "port-ada1"
}
},
{
"name": "payments-api",
"source": {
"node_id": "83df2dbe-92ff-4118-80a6-822fbc8fc8fe",
"port": "port-1552"
}
}
],
"parameters": [
{
"name": "payments-api",
"param_type": "string"
}
],
"stage_slots": [
"stage-slots-6d0b",
"stage-slots-f5d6"
]
},
"capability_requirements": [
"capability-requirements-8094"
],
"contract_digest": "contract-digest-f35a",
"depth": 10,
"expanded_node_count": 1,
"lifecycle_state": "active",
"published_at": "2026-10-11T17:25:39Z",
"published_by": {
"email": "mara@acme.example",
"id": "id-c709",
"username": "tomas",
"avatar_url": "https://gitmoap.example/acme/ed449c13"
},
"variable_requirements": [
"variable-requirements-1746",
"variable-requirements-8a5a"
],
"version": "version-329c",
"changelog": "changelog-7725"
}
400The version is not a well-formed version numberapplication/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-5512",
"message": "Label every synthesized example"
}
}
401Unauthenticated — no credential, or an invalid oneapplication/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-1ff7",
"message": "Stream pipeline status into the run header"
}
}
403Reporter is required to read componentsapplication/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-6292",
"message": "Label every synthesized example"
}
}
404No such component or version hereapplication/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-ba22",
"message": "Pin a page's payload to the build that rendered it"
}
}
CLI
gitmoap pipeline-components get-repo-pipeline-component-version
- --repo-ididThe repository's id (id or owner/repo path)
- --component-ididThe component's id
- --versionidAn exact version, such as v1.2.0