---
title: "space.build-publish@1 · OpenVibe.Services"
canonical: "https://openvibe.services/docs/contracts/space.build-publish"
updated: null
---

# space.build-publish@1 · OpenVibe.Services

HTML: [space.build-publish@1 · OpenVibe.Services](https://openvibe.services/docs/contracts/space.build-publish)

# SpaceBuildPublish `space.build-publish@1`

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).

- Version: 1.0.0
- Owner: space
- Visibility: first-party
- Status: active
- Compatibility: backward
- Schema: [`https://openvibe.network/contracts/space/build-publish.v1.json`](/docs/contracts/space.build-publish.json)

space.build-publish@1: what happened when a person's agent asked to publish one of their spaces (OpenVibe.Space's builder API; plan 2026-10-22 §Z stage Z1). POST /api/v1/spaces/:id/publish asks to publish and answers { state: 'pending' } with the approval the person answers in the Dock; it never publishes without that answer. When the person approves, Space publishes and the step is { state: 'published', url }; when they decline, { state: 'declined' }.

## Fields

| Field | Type | Required | Description | Constraints |
| --- | --- | --- | --- | --- |
| `state` | enum | yes | pending: the person must answer first. published: it is live at url. declined: the person said no. | - `one of "pending", "published", "declined"` |
| `url` | string \| null |  | Where it lives once it is published. | - `format uri` |
| `approval_id` | string \| null |  | The request the person answers in the Dock (its id). | - `maxLength 80` |
| `reason` | string \| null |  | Why it was refused, in one line a person can act on. | - `maxLength 240` |

## Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

 Valid: pending

~~~~
{
  "state": "pending",
  "url": null,
  "approval_id": "apr_01JAD2C3D4E5F6G7H8J9K0MNPQ",
  "reason": null
}
~~~~

Rejected: unknown-state

~~~~
{
  "state": "maybe"
}
~~~~

## Validate

~~~~
const contracts = require('openvibe-contracts');
contracts.validate('space.build-publish@1', value);   // { valid, errors: [{ path, message }] }
~~~~
