---
title: "Publish project metadata"
method: POST
path: "/publish/{sid}/{catalog_connection_id}"
tags: ["Publish projects"]
---

# Publish project metadata

`POST /publish/{sid}/{catalog_connection_id}`

Publishes project metadata to a NADA catalog. The server loads the exported project JSON (generated for the project), then **merges** each property from the request body into that object as top-level keys. The combined JSON is sent to the catalog as `POST {catalog_url}/index.php/api/datasets/create/{type}` with header `x-api-key`, where `{type}` is derived from the project (e.g. `survey`, `timeseries`, `timeseries-db`). Typical merge fields from the Metadata Editor UI are `overwrite`, `published`, `access_policy`, `data_remote_url`, and `repositoryid` (see schema). Omit the body or send `{}` to publish without overriding those fields.

## Path parameters

- `sid` string, required
- `catalog_connection_id` integer, required

## Request body

- PublishOptions — Fields merged into the exported project JSON before POST to NADA. Names and values follow the Metadata Editor publish UI and NADA dataset-create expectations. Any additional JSON properties are also merged if supplied.
  - `overwrite` 'yes' | 'no' — If `yes`, allows replacing an existing study in the catalog with the same IDNO. Merged as top-level `overwrite` on the dataset JSON sent to NADA.
  - `published` 0 | 1 — Catalog visibility — `0` draft, `1` published (merged as `published`).
  - `access_policy` 'data_na' | 'direct' | 'public' | 'licensed' | 'remote' | 'enclave' | 'open' | '' — Data access / access policy code merged as `access_policy` on the payload. Allowed values match the Metadata Editor publish form; NADA may validate against codes returned by `GET .../index.php/api/catalog/data_access_codes` on the catalog.
  - `data_remote_url` string — URL for remote / external data access; merged as `data_remote_url`. Used when `access_policy` is `remote` or `enclave` (per catalog configuration).
  - `repositoryid` string — Target collection (repository) code in NADA; merged as `repositoryid`. Options are typically populated from `GET .../index.php/api/collections` on the catalog (see `/publish/catalog_info/...`).

## Response `200`

Project metadata published successfully (response shape follows NADA API)

## Other responses

- `400` — Bad request - project not found, catalog connection not found, or publishing failed

## Changes

- **2026-04-20** `9d1903944c59` — 2 breaking, 3 info
  - removed the enum value `data_enclave` of the request property `access_policy`
  - the `published` request property format changed from no format to `int32`
  - the `access_policy` request property default value `data_na` was added
  - added the new `` enum value to the request property `access_policy`
  - …1 more
- **2026-02-23** `5bfc4d9dc1c8` — 2 breaking, 3 info
  - removed the enum value `` of the request property `access_policy`
  - removed the enum value `enclave` of the request property `access_policy`
  - the `access_policy` request property default value `data_na` was removed
  - added the new `data_enclave` enum value to the request property `access_policy`
  - …1 more

[Change history](https://skmtc.dev/worldbank/apis/metadata-editor-api/changes/publish/:sid/:catalog_connection_id/post.md)

---

[API](https://skmtc.dev/worldbank/apis/metadata-editor-api.md) · [All operations](https://skmtc.dev/worldbank/apis/metadata-editor-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/worldbank/metadata-editor-api/revisions/f4c8258bab5a/schema)
