Oore CI

Pipelines

Pipeline configuration — build platforms, commands, triggers, concurrency. Code signing configuration — Android keystores, iOS certificates/profiles. Store publishing settings. The runner uploads from its own host after a successful build. App Store Connect API keys shared by every pipeline of the instance. Private keys are encrypted at rest and never returned. Write-only secrets scoped to the instance, a project or a pipeline. Values are encrypted at rest, referenced as ${{ secrets.NAME }} and never returned.

GET
/v1/app-store-connect-keys

Returns key names, IDs and how many pipelines use each. Private keys are never returned. Requires pipeline read access.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/app-store-connect-keys"
{  "keys": [    {      "created_at": 0,      "id": "string",      "issuer_id": "string",      "key_id": "string",      "name": "string",      "pipeline_count": 0,      "updated_at": 0    }  ]}
POST
/v1/app-store-connect-keys

Stores the .p8 private key encrypted. Requires instance settings write access.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/app-store-connect-keys" \  -H "Content-Type: application/json" \  -d '{    "issuer_id": "string",    "key_id": "string",    "name": "string",    "private_key_base64": "string"  }'
{  "key": {    "created_at": 0,    "id": "string",    "issuer_id": "string",    "key_id": "string",    "name": "string",    "pipeline_count": 0,    "updated_at": 0  }}
DELETE
/v1/app-store-connect-keys/{id}

Refused while any pipeline uses the key. Requires instance settings write access.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

id*string

Shared key ID

Response Body

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/v1/app-store-connect-keys/string"
{  "ok": true}
PUT
/v1/app-store-connect-keys/{id}

Renames or replaces the key. Pipelines using it pick up the change on their next build. Requires instance settings write access.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

id*string

Shared key ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Rename a shared key or replace it. Omitted fields keep their stored value; a new key_id requires a new private key.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/v1/app-store-connect-keys/string" \  -H "Content-Type: application/json" \  -d '{}'
{  "key": {    "created_at": 0,    "id": "string",    "issuer_id": "string",    "key_id": "string",    "name": "string",    "pipeline_count": 0,    "updated_at": 0  }}
POST
/v1/pipelines/export-yaml

Writes the pipeline's form settings as a version: 2 .oore.yaml, with on from the trigger settings and publish from the Publish settings where they map exactly. The file is planned before it is returned and runs what the settings run. Secret values and store credentials never appear in it; secret references stay as written.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

The pipeline settings to write out as a version: 2 .oore.yaml.

Response Body

application/json

curl -X POST "https://example.com/v1/pipelines/export-yaml" \  -H "Content-Type: application/json" \  -d '{    "execution_config": {      "artifact_patterns": [        "string"      ],      "commands": {        "build": [          "string"        ],        "post_build": [          "string"        ],        "pre_build": [          "string"        ]      },      "platforms": [        "android"      ]    }  }'
{  "errors": [    "string"  ],  "notes": [    "string"  ],  "valid": true,  "warnings": [    "string"  ],  "yaml": "string"}
POST
/v1/pipelines/import-yaml

Reads a version: 2 .oore.yaml back into the pipeline's form settings: the inverse of the export. The file is validated as oore pipeline validate does. Settings are returned only when the form can hold the whole file; exported again, they plan the same as the file. Everything else is listed in unsupported. Nothing is saved, and secret references stay as written.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

A version: 2 .oore.yaml to read back into the pipeline editor's form, with the settings the editor holds now.

Response Body

application/json

application/json

curl -X POST "https://example.com/v1/pipelines/import-yaml" \  -H "Content-Type: application/json" \  -d '{    "yaml": "string"  }'
{  "errors": [    "string"  ],  "execution_config": null,  "google_play": null,  "notes": [    "string"  ],  "representable": true,  "testflight_group": "string",  "trigger_config": null,  "unsupported": [    "string"  ],  "valid": true}
POST
/v1/pipelines/plan

Resolves the steps a build would run for a .oore.yaml or the pipeline's form settings, with the same validation as oore pipeline validate. Environment values are never returned and secret references stay as written.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

What to plan: a repository file or the pipeline's form settings, never both.

Response Body

application/json

application/json

curl -X POST "https://example.com/v1/pipelines/plan" \  -H "Content-Type: application/json" \  -d '{}'
{  "available_platforms": [    "android"  ],  "errors": [    "string"  ],  "notices": [    "string"  ],  "plan": null,  "valid": true,  "version": 0,  "workflows": [    "string"  ]}
POST
/v1/pipelines/validate

Validates a pipeline configuration without persisting it.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/v1/pipelines/validate" \  -H "Content-Type: application/json" \  -d '{}'
{  "errors": [    "string"  ],  "valid": true}
GET
/v1/pipelines/{pipeline_id}

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/pipelines/string"
{  "build_count": 0,  "pipeline": {    "approval": {      "events": [        "string"      ],      "expires_after_hours": 0,      "required": true    },    "concurrency": {      "cancel_previous": true,      "max_concurrent": 0    },    "config_path": "string",    "config_path_explicit": true,    "created_at": 0,    "enabled": true,    "execution_config": {      "artifact_patterns": [        "string"      ],      "build_number_offset": 0,      "commands": {        "build": [          "string"        ],        "post_build": [          "string"        ],        "pre_build": [          "string"        ]      },      "env": [        {          "key": "string",          "value": "string"        }      ],      "flutter_version": "string",      "isolation": "host",      "platform_build_args": {        "android": [          "string"        ],        "ios": [          "string"        ],        "macos": [          "string"        ]      },      "platform_commands": {        "android": "string",        "ios": "string",        "macos": "string"      },      "platforms": [        "android"      ],      "runs_on": [        "string"      ]    },    "id": "string",    "name": "string",    "project_id": "string",    "size_budget": {      "mode": "warn",      "rules": [        {          "kind": "string",          "max_bytes": 0,          "max_increase_bytes": 0,          "max_increase_percent": 0        }      ]    },    "timeout_minutes": 0,    "trigger_config": {      "branches": [        "string"      ],      "events": [        "string"      ],      "paths": [        "string"      ],      "paths_ignore": [        "string"      ],      "schedules": [        {          "branch": "string",          "cron": "string"        }      ],      "tags": [        "string"      ]    },    "updated_at": 0,    "workflow": "string"  }}
PATCH
/v1/pipelines/{pipeline_id}

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

curl -X PATCH "https://example.com/v1/pipelines/string" \  -H "Content-Type: application/json" \  -d '{}'
{  "pipeline": {    "approval": {      "events": [        "string"      ],      "expires_after_hours": 0,      "required": true    },    "concurrency": {      "cancel_previous": true,      "max_concurrent": 0    },    "config_path": "string",    "config_path_explicit": true,    "created_at": 0,    "enabled": true,    "execution_config": {      "artifact_patterns": [        "string"      ],      "build_number_offset": 0,      "commands": {        "build": [          "string"        ],        "post_build": [          "string"        ],        "pre_build": [          "string"        ]      },      "env": [        {          "key": "string",          "value": "string"        }      ],      "flutter_version": "string",      "isolation": "host",      "platform_build_args": {        "android": [          "string"        ],        "ios": [          "string"        ],        "macos": [          "string"        ]      },      "platform_commands": {        "android": "string",        "ios": "string",        "macos": "string"      },      "platforms": [        "android"      ],      "runs_on": [        "string"      ]    },    "id": "string",    "name": "string",    "project_id": "string",    "size_budget": {      "mode": "warn",      "rules": [        {          "kind": "string",          "max_bytes": 0,          "max_increase_bytes": 0,          "max_increase_percent": 0        }      ]    },    "timeout_minutes": 0,    "trigger_config": {      "branches": [        "string"      ],      "events": [        "string"      ],      "paths": [        "string"      ],      "paths_ignore": [        "string"      ],      "schedules": [        {          "branch": "string",          "cron": "string"        }      ],      "tags": [        "string"      ]    },    "updated_at": 0,    "workflow": "string"  }}
DELETE
/v1/pipelines/{pipeline_id}

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Response Body

application/json

application/json

application/json

curl -X DELETE "https://example.com/v1/pipelines/string"
{  "ok": true}
GET
/v1/pipelines/{pipeline_id}/android-signing

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Response Body

application/json

curl -X GET "https://example.com/v1/pipelines/string/android-signing"
{  "debug": {    "build_type": "debug",    "enabled": true,    "has_key_password": true,    "has_keystore": true,    "has_store_password": true,    "key_alias": "string",    "keystore_checksum": "string",    "keystore_filename": "string",    "updated_at": 0  },  "pipeline_id": "string",  "release": {    "build_type": "debug",    "enabled": true,    "has_key_password": true,    "has_keystore": true,    "has_store_password": true,    "key_alias": "string",    "keystore_checksum": "string",    "keystore_filename": "string",    "updated_at": 0  }}
PUT
/v1/pipelines/{pipeline_id}/android-signing

Upload keystores and configure debug/release signing profiles.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X PUT "https://example.com/v1/pipelines/string/android-signing" \  -H "Content-Type: application/json" \  -d '{}'
{  "debug": {    "build_type": "debug",    "enabled": true,    "has_key_password": true,    "has_keystore": true,    "has_store_password": true,    "key_alias": "string",    "keystore_checksum": "string",    "keystore_filename": "string",    "updated_at": 0  },  "pipeline_id": "string",  "release": {    "build_type": "debug",    "enabled": true,    "has_key_password": true,    "has_keystore": true,    "has_store_password": true,    "key_alias": "string",    "keystore_checksum": "string",    "keystore_filename": "string",    "updated_at": 0  }}
GET
/v1/pipelines/{pipeline_id}/ios-signing

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Response Body

application/json

curl -X GET "https://example.com/v1/pipelines/string/ios-signing"
{  "api_issuer_id": "string",  "api_key_id": "string",  "bundle_ids": [    "string"  ],  "enabled": true,  "export_method": "ad_hoc",  "has_api_key": true,  "has_p12": true,  "has_p12_password": true,  "mode": "manual",  "p12_expires_at": 0,  "p12_filename": "string",  "p12_fingerprint": "string",  "pipeline_id": "string",  "provisioning_profiles": [    {      "bundle_id": "string",      "checksum": "string",      "expires_at": 0,      "has_profile": true,      "profile_filename": "string",      "profile_name": "string",      "profile_uuid": "string",      "team_id": "string"    }  ],  "shared_api_key": null,  "team_id": "string",  "updated_at": 0}
PUT
/v1/pipelines/{pipeline_id}/ios-signing

Upload certificates, provisioning profiles, and API credentials. Request body limit: 10 MiB.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X PUT "https://example.com/v1/pipelines/string/ios-signing" \  -H "Content-Type: application/json" \  -d '{    "mode": "manual"  }'
{  "api_issuer_id": "string",  "api_key_id": "string",  "bundle_ids": [    "string"  ],  "enabled": true,  "export_method": "ad_hoc",  "has_api_key": true,  "has_p12": true,  "has_p12_password": true,  "mode": "manual",  "p12_expires_at": 0,  "p12_filename": "string",  "p12_fingerprint": "string",  "pipeline_id": "string",  "provisioning_profiles": [    {      "bundle_id": "string",      "checksum": "string",      "expires_at": 0,      "has_profile": true,      "profile_filename": "string",      "profile_name": "string",      "profile_uuid": "string",      "team_id": "string"    }  ],  "shared_api_key": null,  "team_id": "string",  "updated_at": 0}
GET
/v1/pipelines/{pipeline_id}/ios-signing/devices

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Response Body

application/json

curl -X GET "https://example.com/v1/pipelines/string/ios-signing/devices"
{  "devices": [    {      "added_at": 0,      "device_id": "string",      "id": "string",      "last_synced_at": 0,      "name": "string",      "platform": "string",      "status": "string",      "udid": "string"    }  ],  "pipeline_id": "string"}
POST
/v1/pipelines/{pipeline_id}/ios-signing/devices/register

Registers a device UDID and optionally triggers a provisioning profile sync.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/v1/pipelines/string/ios-signing/devices/register" \  -H "Content-Type: application/json" \  -d '{    "name": "string",    "udid": "string"  }'
{  "device": {    "added_at": 0,    "device_id": "string",    "id": "string",    "last_synced_at": 0,    "name": "string",    "platform": "string",    "status": "string",    "udid": "string"  },  "pipeline_id": "string",  "profile_sync_triggered": true}
POST
/v1/pipelines/{pipeline_id}/ios-signing/sync

Re-downloads provisioning profiles from Apple via App Store Connect API.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Response Body

application/json

curl -X POST "https://example.com/v1/pipelines/string/ios-signing/sync"
{  "ok": true,  "pipeline_id": "string",  "synced_bundle_ids": [    "string"  ],  "updated_profiles": 0,  "warnings": [    "string"  ]}
GET
/v1/pipelines/{pipeline_id}/publish/app-store

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/pipelines/string/publish/app-store"
{  "app_store_export": true,  "config": {    "destination": "testflight",    "enabled": true,    "phased_release": true,    "release_notes": [      {        "locale": "string",        "whats_new": "string"      }    ],    "submit_for_review": true,    "testflight_groups": [      "string"    ],    "uses_non_exempt_encryption": true  },  "has_api_key": true,  "pipeline_id": "string",  "updated_at": 0}
PUT
/v1/pipelines/{pipeline_id}/publish/app-store

Publishing uploads the pipeline's App Store IPA to App Store Connect with the API key from iOS signing, then sends it to TestFlight groups or an App Store version. Enabling it requires iOS signing with the app_store export method and an App Store Connect API key.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

App Store publishing settings for a pipeline, stored as the app_store publish target. Uploads use the App Store Connect API key from the pipeline's iOS signing settings and require the app_store export method.

Response Body

application/json

application/json

application/json

curl -X PUT "https://example.com/v1/pipelines/string/publish/app-store" \  -H "Content-Type: application/json" \  -d '{    "enabled": true,    "release_notes": [      {        "locale": "string",        "whats_new": "string"      }    ],    "testflight_groups": [      "string"    ]  }'
{  "app_store_export": true,  "config": {    "destination": "testflight",    "enabled": true,    "phased_release": true,    "release_notes": [      {        "locale": "string",        "whats_new": "string"      }    ],    "submit_for_review": true,    "testflight_groups": [      "string"    ],    "uses_non_exempt_encryption": true  },  "has_api_key": true,  "pipeline_id": "string",  "updated_at": 0}
GET
/v1/pipelines/{pipeline_id}/publish/google-play

Requires project read access. Also reports whether the referenced service account secret exists in a visible scope.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/pipelines/string/publish/google-play"
{  "config": null,  "last_credentials_check": null,  "pipeline_id": "string",  "service_account_secret_present": true,  "updated_at": 0}
PUT
/v1/pipelines/{pipeline_id}/publish/google-play

Requires the manage pipelines project permission. The service account JSON is stored separately as a secret and referenced by name.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Per-pipeline Google Play upload settings. Credentials are referenced by secret name and never stored here.

Response Body

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/v1/pipelines/string/publish/google-play" \  -H "Content-Type: application/json" \  -d '{    "service_account_secret": "string",    "track": "string"  }'
{  "config": null,  "last_credentials_check": null,  "pipeline_id": "string",  "service_account_secret_present": true,  "updated_at": 0}
POST
/v1/pipelines/{pipeline_id}/publish/google-play/test-credentials

Requires the manage pipelines project permission. Exchanges the named service account key for a token, then opens and discards a Play edit for the app, so nothing changes in Play Console. A rejected key or missing Play Console access is reported with ok: false.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Which service account key to check against Google Play. The values come from the form, so a key can be checked before the settings are saved.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/pipelines/string/publish/google-play/test-credentials" \  -H "Content-Type: application/json" \  -d '{    "service_account_secret": "string"  }'
{  "checked_at": 0,  "message": "string",  "ok": true,  "package_name": "string",  "service_account_email": "string",  "service_account_secret": "string"}
GET
/v1/pipelines/{pipeline_id}/secrets

Returns secret names and timestamps. Values are never returned. Requires project read access.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/pipelines/string/secrets"
{  "secrets": [    {      "created_at": 0,      "name": "string",      "pipeline_id": "string",      "project_id": "string",      "scope": "instance",      "updated_at": 0    }  ]}
POST
/v1/pipelines/{pipeline_id}/secrets

Stores an encrypted value. The response never contains it. Requires the manage pipelines project permission.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/pipelines/string/secrets" \  -H "Content-Type: application/json" \  -d '{    "name": "string",    "value": "string"  }'
{  "secret": {    "created_at": 0,    "name": "string",    "pipeline_id": "string",    "project_id": "string",    "scope": "instance",    "updated_at": 0  }}
DELETE
/v1/pipelines/{pipeline_id}/secrets/{name}

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

name*string

Secret name

Query Parameters

force?boolean

Delete even when Google Play publishing uses the secret

Response Body

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/v1/pipelines/string/secrets/string"
{  "ok": true}
PUT
/v1/pipelines/{pipeline_id}/secrets/{name}

Replaces the stored value. Requires the manage pipelines project permission.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

pipeline_id*string

Pipeline ID

name*string

Secret name

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Replace a secret's value (rotation).

Response Body

application/json

application/json

application/json

curl -X PUT "https://example.com/v1/pipelines/string/secrets/string" \  -H "Content-Type: application/json" \  -d '{    "value": "string"  }'
{  "secret": {    "created_at": 0,    "name": "string",    "pipeline_id": "string",    "project_id": "string",    "scope": "instance",    "updated_at": 0  }}
GET
/v1/projects/{project_id}/pipelines

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

project_id*string

Project ID

Query Parameters

search?string

Case-insensitive pipeline name search

sort?string

Sort by created_at or name

direction?string

Sort direction: asc or desc

limit?integer

Page size

Formatint64
offset?integer

Page offset

Formatint64

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/projects/string/pipelines"
{  "pipelines": [    {      "approval": {        "events": [          "string"        ],        "expires_after_hours": 0,        "required": true      },      "concurrency": {        "cancel_previous": true,        "max_concurrent": 0      },      "config_path": "string",      "config_path_explicit": true,      "created_at": 0,      "enabled": true,      "execution_config": {        "artifact_patterns": [          "string"        ],        "build_number_offset": 0,        "commands": {          "build": [            "string"          ],          "post_build": [            "string"          ],          "pre_build": [            "string"          ]        },        "env": [          {            "key": "string",            "value": "string"          }        ],        "flutter_version": "string",        "isolation": "host",        "platform_build_args": {          "android": [            "string"          ],          "ios": [            "string"          ],          "macos": [            "string"          ]        },        "platform_commands": {          "android": "string",          "ios": "string",          "macos": "string"        },        "platforms": [          "android"        ],        "runs_on": [          "string"        ]      },      "id": "string",      "name": "string",      "project_id": "string",      "size_budget": {        "mode": "warn",        "rules": [          {            "kind": "string",            "max_bytes": 0,            "max_increase_bytes": 0,            "max_increase_percent": 0          }        ]      },      "timeout_minutes": 0,      "trigger_config": {        "branches": [          "string"        ],        "events": [          "string"        ],        "paths": [          "string"        ],        "paths_ignore": [          "string"        ],        "schedules": [          {            "branch": "string",            "cron": "string"          }        ],        "tags": [          "string"        ]      },      "updated_at": 0,      "workflow": "string"    }  ],  "total": 0}
POST
/v1/projects/{project_id}/pipelines

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

project_id*string

Project ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

curl -X POST "https://example.com/v1/projects/string/pipelines" \  -H "Content-Type: application/json" \  -d '{    "name": "string"  }'
{  "pipeline": {    "approval": {      "events": [        "string"      ],      "expires_after_hours": 0,      "required": true    },    "concurrency": {      "cancel_previous": true,      "max_concurrent": 0    },    "config_path": "string",    "config_path_explicit": true,    "created_at": 0,    "enabled": true,    "execution_config": {      "artifact_patterns": [        "string"      ],      "build_number_offset": 0,      "commands": {        "build": [          "string"        ],        "post_build": [          "string"        ],        "pre_build": [          "string"        ]      },      "env": [        {          "key": "string",          "value": "string"        }      ],      "flutter_version": "string",      "isolation": "host",      "platform_build_args": {        "android": [          "string"        ],        "ios": [          "string"        ],        "macos": [          "string"        ]      },      "platform_commands": {        "android": "string",        "ios": "string",        "macos": "string"      },      "platforms": [        "android"      ],      "runs_on": [        "string"      ]    },    "id": "string",    "name": "string",    "project_id": "string",    "size_budget": {      "mode": "warn",      "rules": [        {          "kind": "string",          "max_bytes": 0,          "max_increase_bytes": 0,          "max_increase_percent": 0        }      ]    },    "timeout_minutes": 0,    "trigger_config": {      "branches": [        "string"      ],      "events": [        "string"      ],      "paths": [        "string"      ],      "paths_ignore": [        "string"      ],      "schedules": [        {          "branch": "string",          "cron": "string"        }      ],      "tags": [        "string"      ]    },    "updated_at": 0,    "workflow": "string"  }}
GET
/v1/projects/{project_id}/repository-workflows

Reads supported Oore workflow files from the linked repository without modifying it. The response contains validated behavior but never raw YAML, environment values, or source credentials.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

project_id*string

Project ID

Query Parameters

ref?string

Branch, tag, or commit; defaults to the project branch

path?string

Additional explicit repository-relative config path

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/projects/string/repository-workflows"
{  "project_id": "string",  "provider": "github",  "reference": "string",  "truncated": true,  "workflows": [    {      "errors": [        "string"      ],      "execution": null,      "path": "string",      "valid": true,      "workflows": [        "string"      ]    }  ]}
GET
/v1/projects/{project_id}/secrets

Returns secret names and timestamps. Values are never returned. Requires project read access.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

project_id*string

Project ID

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/projects/string/secrets"
{  "secrets": [    {      "created_at": 0,      "name": "string",      "pipeline_id": "string",      "project_id": "string",      "scope": "instance",      "updated_at": 0    }  ]}
POST
/v1/projects/{project_id}/secrets

Stores an encrypted value. The response never contains it. Requires the manage pipelines project permission.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

project_id*string

Project ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/projects/string/secrets" \  -H "Content-Type: application/json" \  -d '{    "name": "string",    "value": "string"  }'
{  "secret": {    "created_at": 0,    "name": "string",    "pipeline_id": "string",    "project_id": "string",    "scope": "instance",    "updated_at": 0  }}
DELETE
/v1/projects/{project_id}/secrets/{name}

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

project_id*string

Project ID

name*string

Secret name

Query Parameters

force?boolean

Delete even when Google Play publishing uses the secret

Response Body

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/v1/projects/string/secrets/string"
{  "ok": true}
PUT
/v1/projects/{project_id}/secrets/{name}

Replaces the stored value. Requires the manage pipelines project permission.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

project_id*string

Project ID

name*string

Secret name

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Replace a secret's value (rotation).

Response Body

application/json

application/json

application/json

curl -X PUT "https://example.com/v1/projects/string/secrets/string" \  -H "Content-Type: application/json" \  -d '{    "value": "string"  }'
{  "secret": {    "created_at": 0,    "name": "string",    "pipeline_id": "string",    "project_id": "string",    "scope": "instance",    "updated_at": 0  }}
GET
/v1/runners/{runner_id}/jobs/{job_id}/android-signing

Returns Android signing profiles only to the assigned runner while the job is active. Both the runner bearer token and job-scoped signing grant are required.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

runner_id*string

Runner ID

job_id*string

Build/Job ID

Header Parameters

x-oore-signing-token*string

Job-scoped signing grant

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/runners/string/jobs/string/android-signing" \  -H "x-oore-signing-token: string"
{  "debug": null,  "release": null}
GET
/v1/runners/{runner_id}/jobs/{job_id}/ios-signing

Returns the iOS signing bundle only to the assigned runner while the job is active. Both the runner bearer token and job-scoped signing grant are required.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

runner_id*string

Runner ID

job_id*string

Build/Job ID

Header Parameters

x-oore-signing-token*string

Job-scoped signing grant

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/runners/string/jobs/string/ios-signing" \  -H "x-oore-signing-token: string"
{  "bundle": null}
GET
/v1/runners/{runner_id}/jobs/{job_id}/publish

Returns enabled store publish settings and the build changelog to the assigned runner while the job is active.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

runner_id*string

Runner ID

job_id*string

Build/Job ID

Header Parameters

x-oore-signing-token*string

Job-scoped signing grant

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/runners/string/jobs/string/publish" \  -H "x-oore-signing-token: string"
{  "app_store": null,  "changelog": "string",  "google_play": null}
POST
/v1/runners/{runner_id}/jobs/{job_id}/publish-results

Records a completed store upload for an active job.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

runner_id*string

Runner ID

job_id*string

Build/Job ID

Header Parameters

x-oore-signing-token*string

Job-scoped signing grant

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Outcome of a store upload, reported by the runner.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/runners/string/jobs/string/publish-results" \  -H "x-oore-signing-token: string" \  -H "Content-Type: application/json" \  -d '{    "package_name": "string",    "status": "string",    "store": "google_play",    "track": "string",    "version_code": 0  }'
{  "ok": true}
GET
/v1/runners/{runner_id}/jobs/{job_id}/secrets

Returns resolved instance, project and pipeline secrets (narrowest scope wins) only to the assigned runner while the job is active. Both the runner bearer token and job-scoped signing grant are required.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

runner_id*string

Runner ID

job_id*string

Build/Job ID

Header Parameters

x-oore-signing-token*string

Job-scoped signing grant

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/runners/string/jobs/string/secrets" \  -H "x-oore-signing-token: string"
{  "secrets": [    {      "name": "string",      "scope": "instance",      "value": "string"    }  ]}
GET
/v1/secrets

Returns secret names and timestamps. Values are never returned. Requires instance settings read access.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/secrets"
{  "secrets": [    {      "created_at": 0,      "name": "string",      "pipeline_id": "string",      "project_id": "string",      "scope": "instance",      "updated_at": 0    }  ]}
POST
/v1/secrets

Stores an encrypted value. The response never contains it. Requires instance settings write access.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/secrets" \  -H "Content-Type: application/json" \  -d '{    "name": "string",    "value": "string"  }'
{  "secret": {    "created_at": 0,    "name": "string",    "pipeline_id": "string",    "project_id": "string",    "scope": "instance",    "updated_at": 0  }}
DELETE
/v1/secrets/{name}

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

name*string

Secret name

Query Parameters

force?boolean

Delete even when Google Play publishing uses the secret

Response Body

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/v1/secrets/string"
{  "ok": true}
PUT
/v1/secrets/{name}

Replaces the stored value. Requires instance settings write access.

Authorization

bearer_auth
AuthorizationBearer <token>

In: header

Path Parameters

name*string

Secret name

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Replace a secret's value (rotation).

Response Body

application/json

application/json

application/json

curl -X PUT "https://example.com/v1/secrets/string" \  -H "Content-Type: application/json" \  -d '{    "value": "string"  }'
{  "secret": {    "created_at": 0,    "name": "string",    "pipeline_id": "string",    "project_id": "string",    "scope": "instance",    "updated_at": 0  }}