---
title: "Get a project"
method: GET
path: "/projects/{id}"
tags: ["Projects"]
---

# Get a project

`GET /projects/{id}`

## Request

- Base URL: `https://api.propertypixel.app/v1`
- URL: `https://api.propertypixel.app/v1/projects/{id}`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://llflgtovnkrsjqydycyu.supabase.co/auth/v1/oauth/authorize`, token URL `https://llflgtovnkrsjqydycyu.supabase.co/auth/v1/oauth/token`)

Get one project with all its photos (IDs, room types, signed preview URLs) and the status of its most recent upload link (waiting, receiving, done or expired). Use the photo IDs with enhance_photos, stage_photos or create_video. To see finished edits, call show_results instead.

Works with view-only access.

## Path parameters

- `id` string, uuid, required: Project ID.

## Response `200`

Get a project

- ProjectDetail
  - `object` 'project', required
  - `id` string, uuid, required
  - `name` string, required
  - `address` string, nullable, required
  - `property_type` string, nullable, required
  - `photo_count` integer, required
  - `completed_job_count` integer, required
  - `cover` MediaUrl, required
    - `url` string, uri, required
    - `expires_at` string, date-time, required: Signed URL expiry (about 1 hour). Re-fetch for a fresh URL.
  - `studio_url` string, uri, required: Open this project in the PropertyPixel Studio.
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, nullable, required
  - `photos` Photo[], required
    - `object` 'photo', required
    - `id` string, uuid, required
    - `project_id` string, uuid, nullable, required
    - `filename` string, nullable, required
    - `room_type` string, nullable, required
    - `width` integer, nullable, required
    - `height` integer, nullable, required
    - `original` MediaUrl, required
      - `url` string, uri, required
      - `expires_at` string, date-time, required: Signed URL expiry (about 1 hour). Re-fetch for a fresh URL.
    - `thumbnail` MediaUrl, required
      - `url` string, uri, required
      - `expires_at` string, date-time, required: Signed URL expiry (about 1 hour). Re-fetch for a fresh URL.
    - `created_at` string, date-time, required
  - `upload_link` object, nullable, required: The most recent upload link for this project, if any. The URL is only returned when the link is created.
    - `id` string, uuid, required
    - `status` 'waiting' | 'receiving' | 'done' | 'expired', required
    - `photos_received` integer, required
    - `expires_at` string, date-time, required

## Other responses

- `400`: The request is invalid. Codes: `validation_failed`.
- `401`: Missing, invalid or revoked credential. Codes: `unauthorized`.
- `403`: The credential can't do this. View-only connections get forbidden_scope on writes. Codes: `forbidden_scope`, `forbidden`.
- `404`: The resource doesn't exist in this workspace. Codes: `not_found`.
- `429`: Too many requests for this connection. Codes: `rate_limited`.
- `500`: Something failed on our side. Retry later. Codes: `internal`.

---

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