---
title: "Register a new release artifact and obtain an upload URL."
method: POST
path: "/apps/{appId}/releases/{releaseId}/artifacts"
tags: ["releases"]
---

# Register a new release artifact and obtain an upload URL.

`POST /apps/{appId}/releases/{releaseId}/artifacts`

## Request

- Base URL: `https://api.shorebird.dev/api/v1`
- URL: `https://api.shorebird.dev/api/v1/apps/{appId}/releases/{releaseId}/artifacts`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

The server returns a record for the artifact plus a signed upload
URL; clients then `POST` the artifact bytes to that URL.

## Request body

- CreateReleaseArtifactRequest: Metadata for a new release artifact. POST to /apps/{appId}/releases/{releaseId}/artifacts and use the returned signed upload URL to upload the artifact bytes separately.
  - `arch` string, required: The arch of the artifact.
  - `platform` 'android' | 'ios' | 'linux' | 'macos' | 'windows', required: A platform to which a Shorebird release can be deployed.
  - `hash` string, required: The hash of the artifact.
  - `filename` string, required: The name of the file.
  - `can_sideload` boolean: Whether the artifact can installed and run on a device/emulator as-is.
  - `size` integer, required: The size of the artifact in bytes.
  - `podfile_lock_hash` string: The hash of the Podfile.lock file used to create this artifact (iOS only).
  - `signing` ArtifactSigningRequest: How the CLI signed a release artifact's binary. A managed binary names the key GET /apps/{appId}/signing-key returned (key_id). A customer-signed or unsigned binary sends only its mode.
    - `mode` 'managed' | 'customer' | 'unsigned', required: How a release artifact's binary is signed for patch signing.
    - `key_id` integer: The managed key the binary embeds. Required when mode is managed, and refused otherwise.

## Response `200`

The newly-registered release artifact.

- CreateReleaseArtifactResponse: The response body for registering a release artifact.
  - `id` integer, required: The ID of the artifact.
  - `release_id` integer, required: The ID of the release.
  - `arch` string, required: The arch of the artifact.
  - `platform` 'android' | 'ios' | 'linux' | 'macos' | 'windows', required: A platform to which a Shorebird release can be deployed.
  - `hash` string, required: The hash of the artifact.
  - `size` integer, required: The size of the artifact in bytes.
  - `url` string, required: The upload URL for the artifact.
  - `upload_method` 'multipart' | 'resumable': How a client should upload an artifact's bytes to storage.

## Other responses

- `default`: Standard error response. Emitted for any non-2xx status where a body can be decoded into an [ErrorResponse].

## Changes

- **2026-11-05** `941da8871d10`: 3 info
  - added the new optional request property `signing` (media type: application/json)
  - added the new optional request property `signing` (media type: multipart/form-data)
  - added the optional property `documentation_url` to the response with the `default` status

[Operation history](https://skmtc.dev/shorebird/apis/shorebird-codepush-api/changes/apps/:appId/releases/:releaseId/artifacts/post.md)

---

[API](https://skmtc.dev/shorebird/apis/shorebird-codepush-api.md) - [All operations](https://skmtc.dev/shorebird/apis/shorebird-codepush-api/llms.txt) - [OpenAPI document](https://skmtc.dev/shorebird/apis/shorebird-codepush-api/revisions/941da8871d10?raw)
