---
title: "billing.vibes.charge · OpenVibe.Services"
canonical: "https://openvibe.services/docs/capabilities/billing.vibes.charge"
updated: null
---

# billing.vibes.charge · OpenVibe.Services

HTML: [billing.vibes.charge · OpenVibe.Services](https://openvibe.services/docs/capabilities/billing.vibes.charge)

# `billing.vibes.charge`

Generated at 2026-11-13 06:25:48 UTC from [`openvibe-contracts v0.419.0`](https://github.com/OpenVibers/OpenVibe.Contracts/tree/v0.419.0) and [`openvibe-sdk v0.161.0`](https://github.com/OpenVibers/OpenVibe.SDK/tree/v0.161.0).

Grantable to apps: request it for an app on its project page. Network approves it only inside the project's allowance.

Sell something for Vibes as a developer app (Vibes Pay, D12). POST /api/v1/vibes/charges creates a charge from the app's token (billing.vibes-charge-create-request@1; idempotent on the app's reference) and answers billing.vibes-charge@1 with a pay\_url; GET /api/v1/vibes/charges/:id reads it; POST /api/v1/vibes/charges/:id/refund returns the Vibes from the project's Vibes wallet to the person (billing.vibes-charge-refund-request@1). The person pays on OpenVibe's pay sheet; Billing moves the Vibes atomically and once to the app's project Vibes wallet, then POSTs a signed webhook (HMAC-SHA256 with the app's webhook secret, retried with backoff) whose body is billing.vibes.charge.paid@1 or billing.vibes.charge.refunded@1 — no person id or email, only an opaque payer\_ref stable per app. A sandbox app charges sandbox Vibes only (test grants, worth nothing). The owner's billing.vibes settings cap the amount, the daily per-person spend and whether Vibes Pay is on.

- Owner: billing (token audience `openvibe.billing`)
- Version: 1.0
- Status: active
- Visibility: public
- Resource constraints: project
- Quota class: billing-vibes-write
- Permissions: billing:vibes:charge
- Input: [billing.vibes-charge-create-request@1](/docs/contracts/billing.vibes-charge-create-request)
- Output: billing.vibes-charge@1
- Events: billing.vibes.charge.paid, billing.vibes.charge.refunded
- Implemented by: - `POST /api/v1/vibes/charges`
- `GET /api/v1/vibes/charges/:id`
- `POST /api/v1/vibes/charges/:id/refund`

[These routes in the API explorer](/docs/api/billing#cap-billing.vibes.charge)
