# Pricing {#pricing}

Takumi Runner uses usage-based pricing based on workflow execution time. This page explains the pricing model.

## Billing Model {#billing-model}

Takumi Runner pricing is based on **execution time (per minute)**. Fractions of a minute are rounded up, and the minimum charge per job is 1 minute. Billing is monthly, and payment is made through the payment method registered with your Takumi subscription.

## Price per SKU {#price-per-sku}

The current SKU pricing is as follows:

| SKU                 | vCPU | Memory | Price (JPY/min) | Price (USD/min) |
| ------------------- | ---- | ------ | --------------- | --------------- |
| `linux-amd64-2core` | 2    | 8 GiB  | ¥1              | Contact us      |

:::info
`linux-amd64-2core` corresponds to the `runs-on: takumi-runner` label. Billing in currencies other than JPY may be available. Please contact us for details.
:::

## What Is Billed {#what-is-billed}

### Billed Time {#billed-time}

Billed execution time is measured based on timestamps from GitHub's `workflow_job` webhook. Specifically, the difference between `started_at` when the job starts (`action: in_progress`) and `completed_at` when the job completes (`action: completed`) is billed. The following diagram shows the billing interval within the job lifecycle:

```
  queued           in_progress              completed
    |                  |                        |
    +------------------+------------------------+
    |  waiting (free)  |   billed (per minute)  |
    +------------------+------------------------+
                       ^                        ^
                   started_at             completed_at
```

- **Billed**: Job step execution time (checkout, build, test, etc.)
- **Not billed**: Queue wait time, VM startup/shutdown time

Job execution time is charged to the billing month based on the `completed_at` timestamp.

### Failed and Cancelled Jobs {#failed-cancelled-jobs}

If a job fails or is cancelled partway through, the actual execution time is still billed. Jobs cancelled before being assigned to a runner are not billed.
