Upsun Repository API

The Git repository backing projects hosted on Upsun can be accessed in a **read-only** manner through the `/projects/{projectId}/git/*` family of endpoints. With these endpoints, you can retrieve objects from the Git repository in the same way that you would in a local environment.

OpenAPI Specification

upsun-repository-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Upsun.com Rest Add-ons Repository API
  version: '1.0'
  contact:
    name: Support
    url: https://upsun.com/contact-us/
  termsOfService: https://upsun.com/trust-center/legal/tos/
  description: "# Introduction\n\nUpsun, formerly Platform.sh, is a container-based Platform-as-a-Service. Our main API\nis simply Git. With a single `git push` and a couple of YAML files in\nyour repository you can deploy an arbitrarily complex cluster.\nEvery [**Project**](#tag/Project) can have multiple applications (PHP,\nNode.js, Python, Ruby, Go, etc.) and managed, automatically\nprovisioned services (databases, message queues, etc.).\n\nEach project also comes with multiple concurrent\nlive staging/development [**Environments**](#tag/Environment).\nThese ephemeral development environments\nare automatically created every time you push a new branch or create a\npull request, and each has a full copy of the data of its parent branch,\nwhich is created on-the-fly in seconds.\n\nOur Git implementation supports integrations with third party Git\nproviders such as GitHub, Bitbucket, or GitLab, allowing you to simply\nintegrate Upsun into your existing workflow.\n\n## Using the REST API\n\nIn addition to the Git API, we also offer a REST API that allows you to manage\nevery aspect of the platform, from managing projects and environments,\nto accessing accounts and subscriptions, to creating robust workflows\nand integrations with your CI systems and internal services.\n\nThese API docs are generated from a standard **OpenAPI (Swagger)** Specification document\nwhich you can find here in [YAML](openapispec-upsun.yaml) and in [JSON](openapispec-upsun.json) formats.\n\nThis RESTful API consumes and produces HAL-style JSON over HTTPS,\nand any REST library can be used to access it. On GitHub, we also host\na few API libraries that you can use to make API access easier, such as our\n[PHP API client](https://github.com/upsun/upsun-sdk-php).\n\nIn order to use the API you will first need to have an [Upsun account](https://auth.upsun.com/register/) \nand [create an API Token](https://docs.upsun.com/anchors/cli/api-token/).\n\n# Authentication\n\n## OAuth2\n\nAPI authentication is done with OAuth2 access tokens.\n\n### API tokens\n\nYou can use an API token as one way to get an OAuth2 access token. This\nis particularly useful in scripts, e.g. for CI pipelines.\n\nTo create an API token, go to the \"API Tokens\" section\nof the \"Account Settings\" tab on the [Console](https://console.upsun.com).\n\nTo exchange this API token for an access token, a `POST` request\nmust be made to `https://auth.upsun.com/oauth2/token`.\n\nThe request will look like this in cURL:\n\n<pre>\ncurl -u platform-api-user: \\\n    -d 'grant_type=api_token&amp;api_token=<em><b>API_TOKEN</b></em>' \\\n    https://auth.upsun.com/oauth2/token\n</pre>\n\nThis will return a \"Bearer\" access token that\ncan be used to authenticate further API requests, for example:\n\n<pre>\n{\n    \"access_token\": \"<em><b>abcdefghij1234567890</b></em>\",\n    \"expires_in\": 900,\n    \"token_type\": \"bearer\"\n}\n</pre>\n\n### Using the Access Token\n\nTo authenticate further API requests, include this returned bearer token\nin the `Authorization` header. For example, to retrieve a list of\n[Projects](#tag/Project)\naccessible by the current user, you can make the following request\n(substituting the dummy token for your own):\n\n<pre>\ncurl -H \"Authorization: Bearer <em><b>abcdefghij1234567890</b></em>\" \\\n    https://api.upsun.com/projects\n</pre>\n\n# HAL Links\n\nMost endpoints in the API return fields which defines a HAL\n(Hypertext Application Language) schema for the requested endpoint.\nThe particular objects returns and their contents can vary by endpoint.\nThe payload examples we give here for the requests do not show these\nelements. These links can allow you to create a fully dynamic API client\nthat does not need to hardcode any method or schema.\n\nUnless they are used for pagination we do not show the HAL links in the\npayload examples in this documentation for brevity and as their content\nis contextual (based on the permissions of the user).\n\n## _links Objects\n\nMost endpoints that respond to `GET` requests will include a `_links` object\nin their response. The `_links` object contains a key-object pair labelled `self`, which defines\ntwo further key-value pairs:\n\n* `href` - A URL string referring to the fully qualified name of the returned object. For many endpoints, this will be the direct link to the API endpoint on the region gateway, rather than on the general API gateway. This means it may reference a host of, for example, `eu-2.platform.sh` rather than `api.upsun.com`.\n* `meta` - An object defining the OpenAPI Specification (OAS) [schema object](https://swagger.io/specification/#schemaObject) of the component returned by the endpoint.\n\nThere may be zero or more other fields in the `_links` object resembling fragment identifiers\nbeginning with a hash mark, e.g. `#edit` or `#delete`. Each of these keys\nrefers to a JSON object containing two key-value pairs:\n\n* `href` - A URL string referring to the path name of endpoint which can perform the action named in the key.\n* `meta` - An object defining the OAS schema of the endpoint. This consists of a key-value pair, with the key defining an HTTP method and the value defining the [operation object](https://swagger.io/specification/#operationObject) of the endpoint.\n\nTo use one of these HAL links, you must send a new request to the URL defined\nin the `href` field which contains a body defined the schema object in the `meta` field.\n\nFor example, if you make a request such as `GET /projects/abcdefghij1234567890`, the `_links`\nobject in the returned response will include the key `#delete`. That object\nwill look something like this fragment:\n\n```\n\"#delete\": {\n    \"href\": \"/api/projects/abcdefghij1234567890\",\n    \"meta\": {\n        \"delete\": {\n            \"responses\": {\n                . . . // Response definition omitted for space\n            },\n            \"parameters\": []\n        }\n    }\n}\n```\n\nTo use this information to delete a project, you would then send a `DELETE`\nrequest to the endpoint `https://api.upsun.com/api/projects/abcdefghij1234567890`\nwith no body or parameters to delete the project that was originally requested.\n\n## _embedded Objects\n\nRequests to endpoints which create or modify objects, such as `POST`, `PATCH`, or `DELETE`\nrequests, will include an `_embedded` key in their response. The object\nrepresented by this key will contain the created or modified object. This\nobject is identical to what would be returned by a subsequent `GET` request\nfor the object referred to by the endpoint.\n"
  x-logo:
    url: https://docs.upsun.com/images/upsun-api.svg
    href: https://upsun.com/#section/Introduction
    altText: Upsun logo
servers:
- url: '{schemes}://api.upsun.com'
  description: The Upsun.com API gateway
  variables:
    schemes:
      default: https
security:
- OAuth2: []
tags:
- name: Repository
  description: 'The Git repository backing projects hosted on Upsun can be

    accessed in a **read-only** manner through the `/projects/{projectId}/git/*`

    family of endpoints. With these endpoints, you can retrieve objects from

    the Git repository in the same way that you would in a local environment.

    '
paths:
  /projects/{projectId}/git/blobs/{repositoryBlobId}:
    get:
      parameters:
      - in: path
        required: true
        schema:
          type: string
        name: projectId
      - in: path
        required: true
        schema:
          type: string
        name: repositoryBlobId
      operationId: get-projects-git-blobs
      responses:
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Blob'
      tags:
      - Repository
      summary: Get a blob object
      description: 'Retrieve, by hash, an object representing a blob in the repository

        backing a project. This endpoint allows direct read-only access

        to the contents of files in a repo. It returns the file in the

        `content` field of the response object, encoded according to the

        format in the `encoding` field, e.g. `base64`.

        '
  /projects/{projectId}/git/commits/{repositoryCommitId}:
    get:
      parameters:
      - in: path
        required: true
        schema:
          type: string
        name: projectId
      - in: path
        required: true
        schema:
          type: string
        name: repositoryCommitId
      operationId: get-projects-git-commits
      responses:
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Commit'
      tags:
      - Repository
      summary: Get a commit object
      description: 'Retrieve, by hash, an object representing a commit in the repository backing

        a project. This endpoint functions similarly to `git cat-file -p <commit-id>`.

        The returned object contains the hash of the Git tree that it

        belongs to, as well as the ID of parent commits.


        The commit represented by a parent ID can be retrieved using this

        endpoint, while the tree state represented by this commit can

        be retrieved using the

        [Get a tree object](#tag/Git-Repo%2Fpaths%2F~1projects~1%7BprojectId%7D~1git~1trees~1%7BrepositoryTreeId%7D%2Fget)

        endpoint.

        '
  /projects/{projectId}/git/refs:
    get:
      parameters:
      - in: path
        required: true
        schema:
          type: string
        name: projectId
      operationId: list-projects-git-refs
      responses:
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RefCollection'
      tags:
      - Repository
      summary: Get list of repository refs
      description: 'Retrieve a list of `refs/*` in the repository backing a project.

        This endpoint functions similarly to `git show-ref`, with each

        returned object containing a `ref` field with the ref''s name,

        and an object containing the associated commit ID.


        The returned commit ID can be used with the

        [Get a commit object](#tag/Git-Repo%2Fpaths%2F~1projects~1%7BprojectId%7D~1git~1commits~1%7BrepositoryCommitId%7D%2Fget)

        endpoint to retrieve information about that specific commit.

        '
  /projects/{projectId}/git/refs/{repositoryRefId}:
    get:
      parameters:
      - in: path
        required: true
        schema:
          type: string
        name: projectId
      - in: path
        required: true
        schema:
          type: string
        name: repositoryRefId
      operationId: get-projects-git-refs
      responses:
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ref'
      tags:
      - Repository
      summary: Get a ref object
      description: 'Retrieve the details of a single `refs` object in the repository

        backing a project. This endpoint functions similarly to

        `git show-ref <pattern>`, although the pattern must be a full ref `id`,

        rather than a matching pattern.


        *NOTE: The `{repositoryRefId}` must be properly escaped.*

        That is, the ref `refs/heads/master` is accessible via

        `/projects/{projectId}/git/refs/heads%2Fmaster`.

        '
  /projects/{projectId}/git/trees/{repositoryTreeId}:
    get:
      parameters:
      - in: path
        required: true
        schema:
          type: string
        name: projectId
      - in: path
        required: true
        schema:
          type: string
        name: repositoryTreeId
      operationId: get-projects-git-trees
      responses:
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tree'
      tags:
      - Repository
      summary: Get a tree object
      description: 'Retrieve, by hash, the tree state represented by a commit.

        The returned object''s `tree` field contains a list of files and

        directories present in the tree.


        Directories in the tree can be recursively retrieved by this endpoint

        through their hashes. Files in the tree can be retrieved by the

        [Get a blob object](#tag/Git-Repo%2Fpaths%2F~1projects~1%7BprojectId%7D~1git~1blobs~1%7BrepositoryBlobId%7D%2Fget)

        endpoint.

        '
components:
  schemas:
    Commit:
      type: object
      properties:
        id:
          type: string
          title: Commit Identifier
          description: The identifier of Commit
        sha:
          type: string
          title: SHA
          description: The identifier of the commit
        author:
          type: object
          properties:
            date:
              type: string
              format: date-time
              title: Date
              description: The time of the author or committer
            name:
              type: string
              title: Name
              description: The name of the author or committer
            email:
              type: string
              title: Email
              description: The email of the author or committer
          required:
          - date
          - name
          - email
          additionalProperties: false
          title: Author
          description: The information about the author
        committer:
          type: object
          properties:
            date:
              type: string
              format: date-time
              title: Date
              description: The time of the author or committer
            name:
              type: string
              title: Name
              description: The name of the author or committer
            email:
              type: string
              title: Email
              description: The email of the author or committer
          required:
          - date
          - name
          - email
          additionalProperties: false
          title: Committer
          description: The information about the committer
        message:
          type: string
          title: Message
          description: The commit message
        tree:
          type: string
          title: Tree identifier
          description: The identifier of the tree
        parents:
          type: array
          items:
            type: string
          title: Parent identifiers
          description: The identifiers of the parents of the commit
      required:
      - id
      - sha
      - author
      - committer
      - message
      - tree
      - parents
      additionalProperties: false
    Tree:
      type: object
      properties:
        id:
          type: string
          title: Tree Identifier
          description: The identifier of Tree
        sha:
          type: string
          title: SHA
          description: The identifier of the tree
        tree:
          type: array
          items:
            type: object
            properties:
              path:
                type: string
                title: Item path
                description: The path of the item
              mode:
                type: string
                enum:
                - '040000'
                - '100644'
                - '100755'
                - '120000'
                - '160000'
                title: Item mode
                description: The mode of the item
              type:
                type: string
                title: Item type
                description: The type of the item (blob or tree)
              sha:
                type: string
                nullable: true
                title: Item SHA
                description: The sha of the item
            required:
            - path
            - mode
            - type
            - sha
            additionalProperties: false
          title: Tree items
          description: The tree items
      required:
      - id
      - sha
      - tree
      additionalProperties: false
    Blob:
      type: object
      properties:
        id:
          type: string
          title: Blob Identifier
          description: The identifier of Blob
        sha:
          type: string
          title: SHA
          description: The identifier of the tag
        size:
          type: integer
          title: Size
          description: The size of the blob
        encoding:
          type: string
          enum:
          - base64
          - utf-8
          title: Encoding
          description: The encoding of the contents
        content:
          type: string
          title: Content
          description: The contents
      required:
      - id
      - sha
      - size
      - encoding
      - content
      additionalProperties: false
    RefCollection:
      type: array
      items:
        $ref: '#/components/schemas/Ref'
    Ref:
      type: object
      properties:
        id:
          type: string
          title: Ref Identifier
          description: The identifier of Ref
        ref:
          type: string
          title: Name
          description: The name of the reference
        object:
          type: object
          properties:
            type:
              type: string
              title: Type
              description: The type of object pointed to
            sha:
              type: string
              title: The SHA of the object pointed to
              description: ''
          required:
          - type
          - sha
          additionalProperties: false
          title: Object
          description: The object the reference points to
        sha:
          type: string
          title: SHA
          description: The commit sha of the ref
      required:
      - id
      - ref
      - object
      - sha
      additionalProperties: false
  securitySchemes:
    OAuth2:
      type: oauth2
      flows:
        authorizationCode:
          tokenUrl: https://auth.api.platform.sh/oauth2/token
          refreshUrl: https://auth.api.platform.sh/oauth2/token
          scopes: {}
          authorizationUrl: https://auth.api.platform.sh/oauth2/authorize
      description: ''
    OAuth2Admin:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://auth.api.platform.sh/oauth2/token
          refreshUrl: ''
          scopes:
            admin: administrative operations
      description: ''
x-tagGroups:
- name: Organization Administration
  tags:
  - Organizations
  - Organization Members
  - Organization Invitations
  - Organization Projects
  - Add-ons
- name: Project Administration
  tags:
  - Project
  - Domain Management
  - Cert Management
  - Certificate Provisioner
  - Project Variables
  - Repository
  - Third-Party Integrations
  - Support
- name: Environments
  tags:
  - Environment
  - Environment Backups
  - Environment Type
  - Environment Variables
  - Routing
  - Source Operations
  - Runtime Operations
  - Deployment
  - Autoscaling
- name: User Activity
  tags:
  - Project Activity
  - Environment Activity
- name: Project Access
  tags:
  - Project Invitations
  - Teams
  - Team Access
  - User Access
- name: Account Management
  tags:
  - API Tokens
  - Connections
  - MFA
  - Users
  - User Profiles
  - SSH Keys
  - Plans
- name: Billing
  tags:
  - Organization Management
  - Subscriptions
  - Orders
  - Invoices
  - Discounts
  - Vouchers
  - Records
  - Profiles
- name: Global Info
  tags:
  - Project Discovery
  - References
  - Regions
- name: Internal APIs
  tags:
  - Project Settings
  - Environment Settings
  - Deployment Target
  - System Information
  - Container Profile