$ provenance-docs — api reference

create asset

POST /api/v1/assets/{planet}

Create asset

Create a new asset in a specified planet. A certificate number is auto-generated.

Request

POST /api/v1/assets/{planet}

Path parameters

ParameterTypeDescription
planetstringPlanet ID

Headers

HeaderValue
AuthorizationBearer pk_prov_...
Content-Typeapplication/json

Body

FieldTypeRequiredDescription
titlestringYesAsset title
(other fields)variesNoPlanet-specific metadata

Additional fields are passed through to the planet's database table (e.g. medium, dimensions, year for artworks).

Example

curl -X POST https://api.provenance.guru/api/v1/assets/artworks \
  -H "Authorization: Bearer pk_prov_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Untitled (Blue Series No. 7)",
    "medium": "Oil on canvas",
    "dimensions": "48 x 36 in",
    "year": 2024
  }'

Response

Returns 201 Created with the full asset record:

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "title": "Untitled (Blue Series No. 7)",
  "account_id": "your-account-uuid",
  "certificate_number": "PROV-2026-001234",
  "certificate_status": "pending",
  "status": "draft",
  "medium": "Oil on canvas",
  "dimensions": "48 x 36 in",
  "year": 2024,
  "created_by": "your-account-uuid",
  "created_at": "2026-06-15T12:00:00.000Z"
}

Auto-generated fields

The API automatically sets:

FieldValue
account_idAuthenticated account
certificate_numberGenerated via generate_certificate_number RPC
certificate_statuspending
statusdraft
created_by / updated_byAuthenticated account

Side effects

A CREATED event is inserted into asset_events:

{
  "event_type": "CREATED",
  "payload": { "source": "api", "api_key_id": "key-uuid" }
}

Errors

StatusCause
400Invalid planet or missing title
400Planet scope mismatch on API key
401Invalid or missing API key
500Database insert failure