---
title: "Reserve a Reach & Frequency prediction"
method: POST
path: "/v1/ads/rf-predictions/{predictionId}/reserve"
tags: ["Reach and Frequency"]
---

# Reserve a Reach & Frequency prediction

`POST /v1/ads/rf-predictions/{predictionId}/reserve`

Locks the quoted price + inventory until the returned `expiresAt` and mints a NEW
prediction id — pass that RESERVED id (not the original) as `rfPredictionId` on
POST /v1/ads/create. Release an unused reservation via DELETE.

## Path parameters

- `predictionId` string, required

## Request body

- object
  - `accountId` string, required
  - `adAccountId` string, required

## Response `201`

Reserved; `prediction.predictionId` is the new RESERVED id

- object
  - `adAccountId` string
  - `prediction` RfPrediction — A Meta Reach & Frequency prediction. Money values in whole units of the ad account currency.
    - `predictionId` string
    - `status` string — ready | pending | failed:<meta code>
    - `budget` number, nullable — Quoted (or provided) lifetime budget for the window.
    - `reach` integer, nullable — Predicted (or requested) unique reach.
    - `impressions` integer, nullable
    - `minBudget` number, nullable — Meta's allowed lower bound for this spec.
    - `maxBudget` number, nullable
    - `minReach` integer, nullable
    - `maxReach` integer, nullable
    - `frequencyCap` integer, nullable
    - `startTime` integer, nullable — Unix seconds; the reserved window the R&F ad set will run on.
    - `stopTime` integer, nullable
    - `expiresAt` string, nullable — When the reservation's locked price expires (set after reserving).

## Other responses

- `400` — Invalid input, or Meta rejected the reserve
- `401` — Unauthorized
- `501` — Only supported on Meta (facebook/instagram)

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/revisions/e0cd92070858/schema)
