---
title: "Get Flows encryption key status"
method: GET
path: "/v1/messaging/whatsapp/flows/encryption-key"
tags: ["WhatsApp Flows"]
---

# Get Flows encryption key status

`GET /v1/messaging/whatsapp/flows/encryption-key`

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/messaging/whatsapp/flows/encryption-key`
- Auth: HTTP bearer

Read the RSA business public key registered on the phone number for WhatsApp Flows
endpoint encryption. Only one key is active per phone number at a time. Flows that
use flow_action: data_exchange (an endpoint-backed flow) stop working at runtime
until the endpoint serves the matching private key, and Meta rejects publish with
error code 139002 ("Missing Flows Signed Public Key") when no key is registered.
`registered` reflects whether a key is present, never `signatureStatus` alone:
Meta reports an unregistered key as MISMATCH rather than a null/absent value.


**Billing:** Read (free unless it says otherwise) · **Rate limit:** 120/min

## Query parameters

- `accountId` string, required: WhatsApp account ID

## Headers

- `Idempotency-Key` string
- `X-Tag` string

## Response `200`

Completed

- object
  - `id` string: Execution id — stable across internal retries; use it with GET /v1/executions/{id}
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
  - `operation` string
  - `tag` string, nullable: Your X-Tag, if sent
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `output` object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
    - `publicKey` string, nullable: The registered RSA public key in PEM format, or null when none is registered.
    - `registered` boolean: Whether a key is currently registered. Derived from publicKey, not signatureStatus.
    - `signatureStatus` 'VALID' | 'MISMATCH', nullable: VALID (key matches Meta's records) or MISMATCH (no key registered, or the key does not match); null when unknown.
  - `error` string, nullable
  - `usage` object
    - `credits_charged` number, nullable
    - `credits_reserved` number
    - `estimated_credits` number
    - `cost_source` 'provider_reported' | 'calculated' | 'estimated' | 'null', nullable
    - `provider_usage` object, nullable: Normalised consumption, e.g. { VIDEO_SECOND: 22.4 }
  - `balance` object
    - `available` number
    - `reserved` number

## Other responses

- `400`: Invalid input
- `402`: Insufficient credits / project budget
- `404`: Resource not found (or not yours)
- `429`: Rate limited
- `503`: Service temporarily paused

---

[API](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai.md) · [All operations](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/llms.txt) · [OpenAPI document](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/revisions/a8caa42835ce?raw)
