---
title: "Download portable project archive bytes"
method: GET
path: "/projects/v1/{project_id}/archives/{archive_id}/download"
tags: ["Project Archives"]
---

# Download portable project archive bytes

`GET /projects/v1/{project_id}/archives/{archive_id}/download`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/projects/v1/{project_id}/archives/{archive_id}/download`
- Auth: one of:
  - API key in header `SIGN-IN-WITH-X`
  - HTTP bearer
  - HTTP bearer

Download the ready `.r402ar` tar archive. Authorization is checked on every call; v1 does not issue shareable signed URLs. Expired archives return `ARCHIVE_EXPIRED`; non-ready archives return an invalid-state conflict. Verify the archive locally before importing into Run402 Core.

## Path parameters

- `project_id` string, required: Run402 project ID. Public IDs are not UUIDs.
- `archive_id` string, required

## Response `200`

Archive tar bytes.

## Other responses

- `403`: Error envelope
- `404`: Error envelope
- `409`: Error envelope
- `410`: ARCHIVE_EXPIRED

---

[API](https://skmtc.dev/run402/apis/run402-api.md) · [All operations](https://skmtc.dev/run402/apis/run402-api/llms.txt) · [OpenAPI document](https://skmtc.dev/run402/apis/run402-api/revisions/893607557f50?raw)
