---
title: "Read the schedule for one product"
method: GET
path: "/v1/products/{productId}/schedule"
tags: ["Product objects"]
---

# Read the schedule for one product

`GET /v1/products/{productId}/schedule`

## Request

- Base URL: `https://hyperscale0.ai`
- URL: `https://hyperscale0.ai/v1/products/{productId}/schedule`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Lists dated actions: automatic ones upcoming, due, completed or refused, and dated human actions upcoming or due, each with who acts, who pays when the action moves money, and the effective product time. An automatic action whose due time has passed but which needs a record in another state, such as a schedule piece before the payer activates the schedule, is waiting and runs once that record changes. A repeating automatic action, such as a late fee's charge, lists each past piece as completed with the amount it took beside the next one. One whose record can never reach that state never runs: it is waived when someone waived that record, such as a waived late fee, cancelled when someone cancelled or stopped it, such as a piece of a stopped schedule, and ended when the record finished another way, such as completed or expired. A waived or cancelled piece is not work. A refused automatic action carries its reason and whether it retries. An unfunded charge retries: the maintenance sweep retries it about once a minute, and in sandbox the next clock advance and an action on its record retry it too. Any other refusal is lasting and does not retry on its own; it shows as work for the team, and an action on its record or a write to it retries it.

## Path parameters

- `productId` string, required: Hyperscale product ID

## Query parameters

- `cursor` string
- `limit` integer: Maximum items to return (1-100). Defaults to 50 when omitted.
- `objectId` string

## Headers

- `X-Hyperscale-Environment` 'sandbox' | 'live'

## Response `200`

Success

- ProductScheduleListOutput
  - `effectiveAt` string, date-time, required
  - `nextCursor` string
  - `items` object[], required
    - `object` object, required
      - `kind` string, required
      - `objectId` string, required
    - `agreement` object, required
      - `instanceId` string, required
    - `action` string, required
    - `title` string, required
    - `status` 'upcoming' | 'waiting' | 'due' | 'completed' | 'refused' | 'waived' | 'cancelled' | 'ended', required
    - `dueAt` string, date-time, required
    - `responsibleRole` string, required
    - `payer` object
      - `name` string, required
      - `customerId` string
      - `collection` 'automatic' | 'on_action', required: automatic: the clock collects at dueAt. on_action: collected when the responsible party runs the action.
    - `amount` object
      - `value` string, required: Non-negative minor-unit integer amount serialized as a string (at most 18 digits)
      - `currency` 'SAR', required
    - `refusedAt` string, date-time
    - `retries` boolean
    - `reason` string, required

## Other responses

- `default`: ErrorResponse. See x-error-codes and x-errors for codes, HTTP statuses and retry guidance.

---

[API](https://skmtc.dev/hyperscale0/apis/hyperscale-product-api.md) · [All operations](https://skmtc.dev/hyperscale0/apis/hyperscale-product-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hyperscale0/apis/hyperscale-product-api/revisions/e9e8faa044d5?raw)
