FastoMeta (1.0)

Download OpenAPI specification:

Metadata helper for gofastocloud_backend (wsfastocloud editor) + landing

Single-tenant metadata helper: one instance per customer. It assists content entry with per-vertical labels, entity dictionaries (autocomplete), a filter catalog, and optional content autofill (TMDB when a tmdb_key is configured, otherwise a local SQLite source). It never owns the customer's content — the customer fills that in themselves.

Two surfaces:

  • /api/* — admin/write, gated by the X-Api-Key header (the instance's configured api_key).

  • /public/* — key-less reads consumed by gofastocloud_backend (the editor) and the landing. Single-tenant, so no tenant selector is needed.

All responses use the shared envelope: success is { "data": ... }, failure is { "error": { "code": int, "message": string } }.

config

Vertical template (labels, profile schema, custom fields)

Vertical config (public)

The vertical template the editor + landing need: the vertical wire enum, field relabelings, entity types, profile schema, and custom fields.

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Vertical config (admin)

Same payload as /public/config, behind the admin key.

Authorizations:
ApiKey

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

entities

Entity dictionaries (fighters, coaches, teachers…) for autocomplete

List/search entities (public)

List all entities of a type, or search them for autocomplete when q is set. The search branch matches q as a case-insensitive substring of name, requires type (a non-empty q without type always returns []) and caps the result at 20 rows; without q there is no cap and an empty type returns every entity of every type.

query Parameters
type
string

Entity type filter (e.g. fighter, coach, teacher).

q
string

Search term. When empty on entities, all of the type are returned.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

List/search entities (admin)

List all entities of a type, or search them when q is set. Same semantics as the public route: the search branch requires type and is capped at 20 rows.

Authorizations:
ApiKey
query Parameters
type
string

Entity type filter (e.g. fighter, coach, teacher).

q
string

Search term. When empty on entities, all of the type are returned.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Create an entity

Add a dictionary entity (e.g. a fighter or coach).

Authorizations:
ApiKey
Request Body schema: application/json
required
type
required
string
name
required
string
photo
string
bio
string
object
sort_order
integer
Default: 0

Position within the entity's type. Equal values fall back to alphabetical by name, so an instance nobody has ordered behaves as before.

Responses

Request samples

Content type
application/json
{
  • "type": "string",
  • "name": "string",
  • "photo": "string",
  • "bio": "string",
  • "meta": {
    },
  • "sort_order": 0
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Update an entity

Replace an existing entity by id.

Authorizations:
ApiKey
path Parameters
id
required
integer <int64>
Request Body schema: application/json
required
type
required
string
name
required
string
photo
string
bio
string
object
sort_order
integer
Default: 0

Position within the entity's type. Equal values fall back to alphabetical by name, so an instance nobody has ordered behaves as before.

Responses

Request samples

Content type
application/json
{
  • "type": "string",
  • "name": "string",
  • "photo": "string",
  • "bio": "string",
  • "meta": {
    },
  • "sort_order": 0
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Delete an entity

Remove an entity by id.

Authorizations:
ApiKey
path Parameters
id
required
integer <int64>

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

catalog

Custom filter fields beyond the built-in ones

List custom filter fields

The catalog of custom filter fields beyond the built-in ones.

Authorizations:
ApiKey

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Create or update a custom filter field

Upsert a custom filter field by key.

Authorizations:
ApiKey
Request Body schema: application/json
required
key
required
string
type
required
string
Enum: "string" "number" "bool"
options
Array of strings

Stored and returned in the operator's order. Clients must not sort it: alphabetical turns an ordinal scale inside out, rendering intensity as "Exerting, Gentle, Medium".

sort_order
integer
Default: 0

Position among the other keys. Equal values fall back to alphabetical, so an instance nobody has ordered behaves as before.

label
string
Default: ""

Caption a client shows instead of the raw key. Empty means the client decides.

Responses

Request samples

Content type
application/json
{
  • "key": "string",
  • "type": "string",
  • "options": [
    ],
  • "sort_order": 0,
  • "label": ""
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Delete a custom filter field

Remove a custom filter field by key.

Authorizations:
ApiKey
path Parameters
key
required
string

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

content

Movie/series autofill routed to the configured source (TMDB or SQLite)

Search movies

Search the configured source for movies matching q.

query Parameters
q
string

Search term. When empty on entities, all of the type are returned.

lang
string

Optional language override; falls back to the source's default.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get movie details

Full movie metadata for autofill (cast, directors, genres…).

path Parameters
id
required
string

Source-specific content id (e.g. a TMDB id).

query Parameters
lang
string

Optional language override; falls back to the source's default.

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Search series

Search the configured source for series matching q.

query Parameters
q
string

Search term. When empty on entities, all of the type are returned.

lang
string

Optional language override; falls back to the source's default.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get series details

Full series metadata for autofill.

path Parameters
id
required
string

Source-specific content id (e.g. a TMDB id).

query Parameters
lang
string

Optional language override; falls back to the source's default.

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get season details

Season metadata for the given series.

path Parameters
id
required
string

Source-specific content id (e.g. a TMDB id).

season
required
integer
query Parameters
lang
string

Optional language override; falls back to the source's default.

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get episode details

Episode metadata for the given series/season.

path Parameters
id
required
string

Source-specific content id (e.g. a TMDB id).

season
required
integer
episode
required
integer
query Parameters
lang
string

Optional language override; falls back to the source's default.

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

uploads

Profile photos

Upload a profile photo

Stores a multipart/form-data file (jpg/jpeg/png/webp/gif) and returns its relative URL (/uploads/<name>), host-agnostic so the landing can prefix it with the instance base URL.

Authorizations:
ApiKey
Request Body schema: multipart/form-data
required
file
required
string <binary>

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Serve an uploaded photo

Key-less static file service for photos stored by POST /api/upload. Entity.photo and photo-typed meta values hold these relative /uploads/<name> paths; cross-origin clients prefix them with the instance base URL.

path Parameters
file
required
string

Responses